ChatModel 30行Go代码搞定大模型,Eino组件体系带你构建AI Agent(收藏版)

📅 2026/6/19 6:24:48
ChatModel 30行Go代码搞定大模型,Eino组件体系带你构建AI Agent(收藏版)
本文介绍了如何使用Eino组件体系构建AI Agent。核心组件包括ChatModel大脑、Tool手、Retriever知识库、ChatTemplate格式化、Embedding向量化和Document Loader文档加载。重点讲解了ChatModel、Tool、Chain和Graph的编排方式以及流式处理和Callbacks功能。通过Eino开发者可以轻松构建具备查资料、调接口、执行命令等能力的AI Agent。昨天跑通了 ChatModel30 行 Go 代码就让大模型说话了。但光会聊天不算 Agent——真正的 Agent 要能查资料、调接口、执行命令。今天把 Eino 的组件体系和编排能力掰开讲清楚。这部分是 AI Agent 的骨架。先看组件全景Eino 里有几类核心组件每个都对应 AI Agent 的一项基础能力六类核心组件协作关系六类组件各司其职组件一句话解释典型场景ChatModel大模型的大脑负责理解生成对话、摘要、翻译Tool能动手干活的手查天气、调API、搜网页Retriever从知识库找资料企业文档问答ChatTemplate把输入格式化成Prompt系统提示用户问题拼接Embedding把文字转成向量语义搜索前置Document Loader加载各种格式文档读取PDF/Markdown核心组件逐个看ChatModel所有 AI Agent 的大脑ChatModel 的核心接口type ChatModel interface { Generate(ctx context.Context, input []*schema.Message, opts ...Option) (*schema.Message, error) Stream(ctx context.Context, input []*schema.Message, opts ...Option) (*schema.StreamReader[*schema.Message], error) BindTools(tools []*schema.ToolInfo) error }别被三个方法吓到搞清楚每个的用途就行Generate非流式一次性拿到完整结果Stream流式逐字输出做聊天界面用这个BindTools告诉模型你可以用这些工具模型答不上来的时候会主动说要调哪个工具关键理解BindTools 不是让模型执行工具只是让模型知道有这些工具。真正执行在 ToolsNode 里。ChatTemplate把杂乱的输入转成标准 Prompt用户输入千奇百怪ChatTemplate 负责格式化——把用户问题 角色设定 历史对话拼成一组标准 Messagetemplate : prompt.FromMessages(schema.FString, schema.SystemMessage(你是一个{{.role}}请用{{.style}}的风格回答。), schema.UserMessage({{.question}}), ) msgs, _ : template.Format(ctx, map[string]any{ role: Go语言专家, style: 简洁, question: goroutine 和线程有什么区别, })输出自动变成了SystemMessage: 你是一个Go语言专家请用简洁的风格回答。 UserMessage: goroutine 和线程有什么区别Tool给 Agent 装上一双能干活的手Tool 是 Agent动手的能力。模型说我需要查天气Tool 就去调天气 API。定义一个 Tool 只需要实现两个方法type WeatherTool struct{} // Info 告诉模型我是什么、需要什么参数 func (t *WeatherTool) Info(ctx context.Context) (*schema.ToolInfo, error) { return schema.ToolInfo{ Name: get_weather, Desc: 获取指定城市的天气信息, ParamsOneOf: schema.NewParamsOneOfByParams(map[string]*schema.ParameterInfo{ city: {Type: string, Desc: 城市名称, Required: true}, }), nil } // InvokableRun 模型决定调用时真正执行的逻辑 func (t *WeatherTool) InvokableRun(ctx context.Context, args string, opts ...tool.Option) (string, error) { // 实际调天气 API return 北京今天晴22-30°C, nil }Info 里的参数定义会被转换成 JSON Schema模型看到后自己决定什么时候调、传什么参数。整个过程用时序图看更清楚Tool 调用时序关键点ChatModel 不执行工具它只负责决定调哪个工具。真正的执行发生在 Tool 里。 这个分离让模型和工具各司其职互不干扰。Retriever让 Agent 能查资料ChatModel 的知识截止到训练日期。Retriever 负责从外部知识库检索相关内容拼到 Prompt 里RAG 检索流程使用 Retriever 之前需要先建好索引这部分 Day 3 会完整演示。Chain 和 Graph两种编排方式怎么选组件有了问题变成怎么让它们按正确顺序串起来Eino 给了两种编排方式。选型的判断标准是这样的编排方式怎么选Chain简单线性场景组件一个接一个数据单向流动Chain简单线性链路代码就是逐行 Appendchain : NewChain[map[string]any, *schema.Message](). AppendChatTemplate(template). // 第1步拼 Prompt AppendChatModel(model). // 第2步调模型 Compile(ctx) resp, _ : chain.Invoke(ctx, map[string]any{ question: 解释一下 goroutine, })Chain 自动处理了 template.Format() → model.Generate() 的完整流程。Graph处理分支和循环真实 Agent 不可能是直线。模型调了工具结果要传回来再分析——这是循环。Graph分支与循环这就是 ReAct Agent 的核心循环。代码上用 Graph 来表示graph : NewGraph[map[string]any, *schema.Message]() // 添加节点 graph.AddChatTemplateNode(template, chatTpl) graph.AddChatModelNode(model, chatModel) graph.AddToolsNode(tools, toolsNode) graph.AddLambdaNode(converter, lambdaFunc) // 连接节点 graph.AddEdge(START, template) graph.AddEdge(template, model) // 关键条件分支——模型输出后走哪条路 graph.AddBranch(model, func(ctx context.Context, msg *schema.Message) (string, error) { if len(msg.ToolCalls) 0 { return tools, nil// 模型要调工具 } return END, nil// 模型直接输出答案 }) graph.AddEdge(tools, converter) graph.AddEdge(converter, template) // 回到起点循环 compiledGraph, _ : graph.Compile(ctx) result, _ : compiledGraph.Invoke(ctx, input)选型结论做 AI Agent 基本都要用 Graph因为 Tool Call 天然需要循环。Chain 适合不需要判断、一路走到底的简单场景。流式处理不用等打字机效果Graph 编译产物同时支持 Invoke 和 Stream无需额外代码// 非流式等全部结果 result, _ : compiledGraph.Invoke(ctx, input) // 流式逐字输出 streamReader, _ : compiledGraph.Stream(ctx, input) for { chunk, err : streamReader.Recv() if errors.Is(err, io.EOF) { break } fmt.Print(chunk.Content) }Eino 还能自动处理流和非流之间的转换流与非流自动转换不用写任何转换逻辑Compile 时自动搞定。Callbacks看清 Agent 每一步Agent 跑起来之后怎么看它内部发生了什么用 Callbackshandler : compose.NewHandlerBuilder(). OnStartFn(func(ctx context.Context, info *compose.RunInfo, input compose.CallbackInput) context.Context { log.Printf([%s] 开始输入%v, info.Name, input) return ctx }). OnEndFn(func(ctx context.Context, info *compose.RunInfo, output compose.CallbackOutput) context.Context { log.Printf([%s] 结束输出%v, info.Name, output) return ctx }). Build() compiledGraph.Invoke(ctx, input, compose.WithCallbacks(handler))每个组件执行前后都能拿到输入输出。Eino 内置了 Langfuse 和 APMPlus 的 Callback 实现接上就能在 Web 看完整 Trace。第二天小结今天讲了五件事第一Eino 六类核心组件——ChatModel大脑、Tool手、Retriever知识库、ChatTemplate格式化、Embedding向量化、Document Loader文档加载。第二ChatModel 除了 Generate 和 Stream最关键的是 BindTools——让模型知道自己有什么工具。第三Chain 适合直线流程Graph 适合有分支和循环的复杂场景。做 Agent 基本都要用 Graph。第四Graph 编译产物同时支持 Invoke 和 Stream流与非流之间自动转换。第五Callbacks 能追踪 Agent 每一步的执行过程。明天是重点用 Graph 编排一个完整的 RAG ReAct Agent会查知识库、会调工具Go 代码全程可运行。最后如果说程序员已经是高薪职业那么干AI的程序员就是高薪中的高薪。现在的市场已经用数据给程序员指明了方向学AI大模型就是冲刺高薪的最优解看着身边越来越多的同行转型大模型、拿到高薪offer很多人心里都动了心但真正的难题来了零基础小白不知道从哪入门有基础的程序员找不到系统学习路径实战项目练手无门面试不知道考什么别慌今天就给大家整理了一份【2026年最新版】AI大模型免费学习资源包覆盖从入门到实战、从理论到面试、从基础到进阶的全流程所有资料均已整理归档无冗余、无套路免费分享给每一位想抓住AI风口的程序员和小白扫码免费领取全部内容1、大模型系统化学习路线2、大模型学习书籍文档3、AI大模型最新行业报告4、大模型项目实战配套源码5、大模型大厂面试真题四阶段精细化学习规划附时间节点可直接照做结合上述资源给大家整理了一份可直接落地的四阶段学习规划总时长约2个月小白可循序渐进程序员可根据自身基础调整节奏高效掌握大模型核心能力快速实现从“入门”到“能落地、能面试”的跨越。第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…扫码免费领取全部内容6、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】