本文介绍了如何使用Eino组件体系构建AI Agent。核心组件包括ChatModel(大脑)、Tool(手)、Retriever(知识库)、ChatTemplate(格式化)、Embedding(向量化)和Document Loader(文档加载)。重点讲解了ChatModel、Tool、Chain和Graph的编排方式,以及流式处理和Callbacks功能。通过Eino,开发者可以轻松构建具备查资料、调接口、执行命令等能力的AI Agent。
昨天跑通了 ChatModel,30 行 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 负责格式化——把用户问题 + 角色设定 + 历史对话拼成一组标准 Message:
template := 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:简单线性链路
代码就是逐行 Append:
chain := 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 跑起来之后怎么看它内部发生了什么?用 Callbacks:
handler := 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%免费】