Tutorial 3: 组件系统
组件概述
Eino 的 Pillar 1 是组件抽象层:每种组件都有清晰的 接口(Input / Output / Option)、执行方式(如 Generate/Invoke、Stream)以及可选的 回调 支持。实现可替换,调用方只依赖接口。
主要组件类型
ChatModel / ToolCallingChatModel
ChatModel:与 LLM 交互,输入消息列表,输出回复(或流)。
ToolCallingChatModel:在对话之外支持 工具调用(function calling),用于 ReAct 等 Agent。
实现通常来自 eino-ext,例如:
OpenAI、Claude、Gemini、DeepSeek、Qwen、Ollama、Qianfan 等
AgenticModel(如 ARK)用于更复杂的 Agent 能力
文档:Eino: ChatModel Guide、Ecosystem 中的 ChatModel 集成。
ChatTemplate
将「用户输入 + 可选的系统提示、历史等」格式化为 LLM 所需的消息列表(如 system/user/assistant)。
保证与各模型的消息格式(如 OpenAI、Claude)一致。
BaseTool、ToolsNode
BaseTool:单个工具的抽象,包含名称、描述、参数定义;支持
InvokableTool(同步)或StreamableTool(流式)。ToolsNode:在 Graph 中执行一组工具的节点,根据模型输出的 tool_calls 调用对应 Tool,并把结果填回消息。
创建自定义工具见 How to Create a Tool,配置与执行见 ToolsNode & Tool Guide。
Eino-ext 提供多种现成 Tool:DuckDuckGo/Bing/Google 搜索、Wikipedia、HTTP、MCP、Commandline、Browseruse 等。
Retriever
给定查询,返回一组相关文档或片段(通常带分数或元数据)。
用于 RAG:先检索再拼进 Prompt 或上下文。
eino-ext 提供多种 Retriever:Elasticsearch 7/8/9、Milvus v1/v2、OpenSearch、Redis、Volc VikingDB、Dify、Volc Knowledge 等。
文档:Eino: Retriever Guide.
Embedder / Indexer
Embedder:文本 → 向量。
Indexer:写入/查询向量索引(如 Milvus、Elasticsearch、Redis、VikingDB)。
用于 RAG 的「建库」与「检索」链路。
文档:Eino: Indexer Guide、Eino: Embedding Guide。
Ecosystem 中有 ARK、OpenAI、DashScope、Ollama、Qianfan、TencentCloud 等 Embedding 集成。
DocumentLoader / DocumentTransformer
DocumentLoader:从本地文件、S3、URL 等加载原始文档。
DocumentTransformer:对文档做切分、过滤等(如 RecursiveSplitter、SemanticSplitter、MarkdownSplitter)。
Document Parser:解析 HTML、PDF 等格式。
文档:Eino: Document Loader Guide、Document Parser、Document Transformer。
Lambda
在编排图中插入 自定义函数 节点:输入 → 业务逻辑 → 输出。
用于简单变换、过滤、聚合等,无需单独实现某类组件接口。
组件在编排中的使用
Chain:按顺序连接若干组件(如 Template → Model → Lambda 解析)。
Graph:将组件作为节点,用边和状态连接;例如 Model 节点 + ToolsNode + Lambda。
Workflow:无环 DAG + 字段级映射,适合「多输入多输出」的数据流。
下一节将介绍 Chain、Graph、Workflow 的编排能力与统一运行时。
小结
Eino 组件包括:ChatModel、ChatTemplate、BaseTool/ToolsNode、Retriever、Embedder/Indexer、DocumentLoader/Transformer、Lambda。
实现集中在 eino-ext,通过接口可替换。
组件通过 Chain/Graph/Workflow 编排,形成完整应用。