
组件开箱即用Eino中ChatModel、Tool与Retriever核心组件速览【免费下载链接】einoGo 语言编写的终极大型语言模型LLM应用开发框架强调简洁性、可扩展性、可靠性与有效性。项目地址: https://gitcode.com/CloudWeGo/einoEino是一个用 Go 语言编写的 LLM大语言模型应用开发框架以简洁性、可扩展性、可靠性与有效性为核心设计理念。其中ChatModel、Tool与Retriever是最常用的三大核心组件全部基于极简接口定义、开箱即用一个负责接入大模型对话一个负责让模型长出双手调用工具一个负责为 RAG检索增强生成应用检索知识文档。本文将带你快速了解这三个组件的设计与用法。一、为什么 Eino 组件开箱即用Eino 将 LLM 应用开发中反复出现的模式沉淀为组件抽象开发者拿到现成接口和实现即可使用无需重复造轮子。整个组件体系的设计有三个共同特点接口极简ChatModel 只有 3 个方法、Retriever 只有 1 个方法几乎零学习成本统一数据类型所有组件共享 schema 包中的标准类型如Message、Document组件之间天然互通统一选项机制调用方法均支持opts ...Option变长参数各实现可自行扩展选项框架内置的组件类型共 8 种在 components/types.go 中统一定义组件所在目录核心方法一句话理解 ChatModelcomponents/model/Generate/Stream/BindTools大模型对话大脑 Toolcomponents/tool/Info/InvokableRun/StreamableRun模型可调用的手脚 Retrievercomponents/retriever/RetrieveRAG 知识文档检索此外还有 ChatTemplate提示词模板、Embedding向量化、Indexer索引等组件下文三大组件是构建 Agent 和 RAG 应用的地基。二、ChatModel 组件速览一个接口搞定对话与流式输出ChatModel 是接入大模型的统一抽象完整定义见 components/model/interface.gotype ChatModel interface { // Generate 获取完整输出 Generate(ctx context.Context, input []*schema.Message, opts ...Option) (*schema.Message, error) // Stream 获取流式输出 Stream(ctx context.Context, input []*schema.Message, opts ...Option) (*schema.StreamReader[*schema.Message], error) // BindTools 将工具绑定给模型一般在请求前调用 BindTools(tools []*schema.ToolInfo) error }三个方法各司其职Generate一次性拿到模型的完整回复适合对时延不敏感的简单场景Stream返回StreamReader逐块读取模型的流式回复是打造打字机效果对话体验的关键BindTools把 Tool 组件的能力注册给模型让模型在对话中自主决定何时调用工具——这是 Agent 应用的灵魂所在各厂商如 OpenAI 兼容接口都提供了该接口的实现切换模型供应商时业务代码几乎不用改。三、Tool 组件速览任何 Go 函数都能变成模型工具Tool 让大模型从只会说变成会做事。接口定义在 components/tool/interface.go分为三层BaseTool只有Info()方法返回工具的说明书名称、描述、参数结构供模型做意图识别InvokableTool在BaseTool基础上增加InvokableRun()接收 JSON 格式的入参并返回字符串结果StreamableTool支持流式返回结果的版本适合耗时较长的工具最优雅的部分是官方提供的工具函数库 components/tool/utils/。其中InferTool可以直接把一个普通 Go 函数推断成工具输入参数的 JSON Schema 会从 Go 结构体自动推导// 定义一个普通函数 getWeather : func(ctx context.Context, input WeatherQuery) (string, error) { ... } // 两行代码变成模型可调用的工具 tool, err : utils.InferTool(get_weather, 查询指定城市的天气, getWeather)详见 components/tool/utils/invokable_func.go。这意味着你在业务代码中已经写好的函数——查天气、查数据库、下单——都能以极低的成本接入 LLM 生态。四、Retriever 组件速览一个方法检索知识库Retriever 是 RAG 应用的知识入口接口只有一个方法定义见 components/retriever/interface.gotype Retriever interface { Retrieve(ctx context.Context, query string, opts ...Option) ([]*schema.Document, error) }传入查询语句返回一组 schema.Document。Document包含三部分ID唯一标识、Content正文内容、MetaData元数据可携带相关性分数、来源等额外信息。检索行为可通过标准选项灵活调整定义在 components/retriever/option.go常用的有WithTopK(n)只取相关度前 n 篇文档WithScoreThreshold(x)按分数阈值过滤剔除低相关度结果WithIndex(...)/WithSubIndex(...)指定检索的索引由于 Eino 同时提供了 Embedding 组件把文本转向量Retriever 实现可以直接挂上 Embedder 完成查询向量化 → 向量检索 → 返回文档的完整链路。五、组合三大组件从开箱到成应用单个组件开箱即用而 Eino 的compose 编排框架compose/能把它们粘合成完整应用并帮你处理好流式拼接、类型检查、并发与回调注入等繁琐细节Chain链式最简单的线性流程例如ChatTemplate → ChatModel见 compose/chain.goGraph图式支持分支与循环例如ChatModel 决定调用工具 → ToolsNode 执行 → 结果回流给模型的工具调用闭环ReAct Agent框架在 flow/agent/react/ 直接内置了完整的 ReAct 智能体实现——ChatModel 绑定 Tool 后自主决定调用工具还是直接作答开箱即得六、速查清单三大组件源码地图组件接口定义关键工具/类型 ChatModelcomponents/model/interface.goschema/message.go Toolcomponents/tool/interface.gocomponents/tool/utils/invokable_func.go Retrievercomponents/retriever/interface.goschema/document.go、components/retriever/option.go小结Eino 用极简接口 统一 schema 统一选项三大设计让 ChatModel、Tool、Retriever 成为真正开箱即用的积木——组件直接调用是起点配合 Chain/Graph 编排则能搭出从简单对话到 ReAct Agent、RAG 问答的完整 LLM 应用。建议读者直接阅读 components/ 目录下的接口定义五分钟即可完成组件体系的整体速览。【免费下载链接】einoGo 语言编写的终极大型语言模型LLM应用开发框架强调简洁性、可扩展性、可靠性与有效性。项目地址: https://gitcode.com/CloudWeGo/eino创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考