eino-component
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseEino Component Guide
Eino组件指南
Component Selection Guide
组件选择指南
ChatModel -- LLM inference
ChatModel -- LLM推理
| Provider | Package | Notes |
|---|---|---|
| OpenAI | | Also supports Azure via |
| Claude | | Also supports AWS Bedrock via |
| Gemini | | Requires |
| Ark (Volcengine) | | Doubao models |
| Ollama | | Local models |
| DeepSeek | | Reasoning support |
| Qwen | | Alibaba DashScope API |
| Qianfan | | Baidu ERNIE models |
| OpenRouter | | Multi-provider routing |
| 提供商 | 包名 | 说明 |
|---|---|---|
| OpenAI | | 也支持Azure,只需设置 |
| Claude | | 也支持AWS Bedrock,只需设置 |
| Gemini | | 需要 |
| 方舟(火山引擎) | | 豆包模型 |
| Ollama | | 本地模型 |
| DeepSeek | | 支持推理 |
| 通义千问 | | 阿里云DashScope API |
| 千帆 | | 百度ERNIE模型 |
| OpenRouter | | 多提供商路由 |
Embedding -- text to vector
Embedding -- 文本转向量
| Provider | Package | Notes |
|---|---|---|
| OpenAI | | text-embedding-3-small/large, ada-002 |
| Ark | | Volcengine embedding models |
| Gemini | | Google embedding models |
| DashScope | | Alibaba embedding |
| Ollama | | Local embedding models |
| Qianfan | | Baidu embedding |
| 提供商 | 包名 | 说明 |
|---|---|---|
| OpenAI | | 支持text-embedding-3-small/large、ada-002模型 |
| 方舟 | | 火山引擎Embedding模型 |
| Gemini | | Google Embedding模型 |
| DashScope | | 阿里云Embedding |
| Ollama | | 本地Embedding模型 |
| 千帆 | | 百度Embedding |
Retriever -- vector/keyword search
Retriever -- 向量/关键词搜索
| Backend | Package | Notes |
|---|---|---|
| Redis | | KNN and range vector search |
| Milvus 2.x | | Dense + sparse hybrid, BM25 |
| Elasticsearch 8 | | Approximate vector search |
| Qdrant | | Vector similarity search |
| 后端 | 包名 | 说明 |
|---|---|---|
| Redis | | 支持KNN和范围向量搜索 |
| Milvus 2.x | | 稠密+稀疏混合检索、BM25 |
| Elasticsearch 8 | | 近似向量搜索 |
| Qdrant | | 向量相似度搜索 |
Indexer -- store documents with vectors
Indexer -- 存储带向量的文档
| Backend | Package |
|---|---|
| Redis | |
| Milvus 2.x | |
| Elasticsearch 8 | |
| Qdrant | |
| 后端 | 包名 |
|---|---|
| Redis | |
| Milvus 2.x | |
| Elasticsearch 8 | |
| Qdrant | |
Tools -- model-callable functions
Tools -- 模型可调用函数
| Tool | Package | Notes |
|---|---|---|
| MCP | | Model Context Protocol tools |
| Google Search | | Custom Search JSON API |
| DuckDuckGo | | Web search (use v2) |
| Bing Search | | Bing Web Search API |
| HTTP Request | | Generic HTTP calls |
| Command Line | | Shell command execution |
| Browser Use | | Browser automation |
| 工具 | 包名 | 说明 |
|---|---|---|
| MCP | | Model Context Protocol工具 |
| Google搜索 | | 自定义搜索JSON API |
| DuckDuckGo | | 网页搜索(请使用v2版本) |
| 必应搜索 | | 必应网页搜索API |
| HTTP请求 | | 通用HTTP调用 |
| 命令行 | | Shell命令执行 |
| 浏览器操作 | | 浏览器自动化 |
Interface Quick Reference
接口快速参考
go
// ChatModel
type BaseChatModel 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)
}
type ToolCallingChatModel interface {
BaseChatModel
WithTools(tools []*schema.ToolInfo) (ToolCallingChatModel, error)
}
// Embedding
type Embedder interface {
EmbedStrings(ctx context.Context, texts []string, opts ...Option) ([][]float64, error)
}
// Retriever
type Retriever interface {
Retrieve(ctx context.Context, query string, opts ...Option) ([]*schema.Document, error)
}
// Indexer
type Indexer interface {
Store(ctx context.Context, docs []*schema.Document, opts ...Option) (ids []string, err error)
}
// Document
type Loader interface {
Load(ctx context.Context, src Source, opts ...LoaderOption) ([]*schema.Document, error)
}
type Transformer interface {
Transform(ctx context.Context, src []*schema.Document, opts ...TransformerOption) ([]*schema.Document, error)
}
// Tool
type InvokableTool interface {
Info(ctx context.Context) (*schema.ToolInfo, error)
InvokableRun(ctx context.Context, argumentsInJSON string, opts ...Option) (string, error)
}
// Prompt
type ChatTemplate interface {
Format(ctx context.Context, vs map[string]any, opts ...Option) ([]*schema.Message, error)
}go
// ChatModel
type BaseChatModel 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)
}
type ToolCallingChatModel interface {
BaseChatModel
WithTools(tools []*schema.ToolInfo) (ToolCallingChatModel, error)
}
// Embedding
type Embedder interface {
EmbedStrings(ctx context.Context, texts []string, opts ...Option) ([][]float64, error)
}
// Retriever
type Retriever interface {
Retrieve(ctx context.Context, query string, opts ...Option) ([]*schema.Document, error)
}
// Indexer
type Indexer interface {
Store(ctx context.Context, docs []*schema.Document, opts ...Option) (ids []string, err error)
}
// Document
type Loader interface {
Load(ctx context.Context, src Source, opts ...LoaderOption) ([]*schema.Document, error)
}
type Transformer interface {
Transform(ctx context.Context, src []*schema.Document, opts ...TransformerOption) ([]*schema.Document, error)
}
// Tool
type InvokableTool interface {
Info(ctx context.Context) (*schema.ToolInfo, error)
InvokableRun(ctx context.Context, argumentsInJSON string, opts ...Option) (string, error)
}
// Prompt
type ChatTemplate interface {
Format(ctx context.Context, vs map[string]any, opts ...Option) ([]*schema.Message, error)
}Installation
安装
bash
go get github.com/cloudwego/eino-ext/components/{type}/{impl}@latestbash
go get github.com/cloudwego/eino-ext/components/{type}/{impl}@latestExamples:
Examples:
go get github.com/cloudwego/eino-ext/components/model/openai@latest
go get github.com/cloudwego/eino-ext/components/retriever/milvus2@latest
go get github.com/cloudwego/eino-ext/components/tool/mcp@latest
undefinedgo get github.com/cloudwego/eino-ext/components/model/openai@latest
go get github.com/cloudwego/eino-ext/components/retriever/milvus2@latest
go get github.com/cloudwego/eino-ext/components/tool/mcp@latest
undefinedChatModel Usage
ChatModel使用
Generate
生成
go
resp, err := chatModel.Generate(ctx, []*schema.Message{
{Role: schema.User, Content: "Hello"},
})
fmt.Println(resp.Content)go
resp, err := chatModel.Generate(ctx, []*schema.Message{
{Role: schema.User, Content: "Hello"},
})
fmt.Println(resp.Content)Stream
流式输出
go
reader, err := chatModel.Stream(ctx, messages)
defer reader.Close()
for {
chunk, err := reader.Recv()
if errors.Is(err, io.EOF) { break }
if err != nil { return err }
fmt.Print(chunk.Content)
}go
reader, err := chatModel.Stream(ctx, messages)
defer reader.Close()
for {
chunk, err := reader.Recv()
if errors.Is(err, io.EOF) { break }
if err != nil { return err }
fmt.Print(chunk.Content)
}Tool Calling
工具调用
go
withTools, err := chatModel.WithTools([]*schema.ToolInfo{toolInfo})
resp, err := withTools.Generate(ctx, messages)
// resp.ToolCalls contains model's tool invocationsgo
withTools, err := chatModel.WithTools([]*schema.ToolInfo{toolInfo})
resp, err := withTools.Generate(ctx, messages)
// resp.ToolCalls contains model's tool invocationsRAG Components
RAG组件
Embedding + Indexer + Retriever form the RAG pipeline:
go
// 1. Embed and store documents
indexer, _ := redisIndexer.NewIndexer(ctx, &redisIndexer.IndexerConfig{
Client: redisClient, KeyPrefix: "doc:", Embedding: embedder,
})
ids, _ := indexer.Store(ctx, docs)
// 2. Retrieve relevant documents
retriever, _ := redisRetriever.NewRetriever(ctx, &redisRetriever.RetrieverConfig{
Client: redisClient, Index: "my_index", Embedding: embedder,
})
docs, _ := retriever.Retrieve(ctx, "user query", retriever.WithTopK(5))Embedding + Indexer + Retriever共同构成RAG流水线:
go
// 1. 嵌入并存储文档
indexer, _ := redisIndexer.NewIndexer(ctx, &redisIndexer.IndexerConfig{
Client: redisClient, KeyPrefix: "doc:", Embedding: embedder,
})
ids, _ := indexer.Store(ctx, docs)
// 2. 检索相关文档
retriever, _ := redisRetriever.NewRetriever(ctx, &redisRetriever.RetrieverConfig{
Client: redisClient, Index: "my_index", Embedding: embedder,
})
docs, _ := retriever.Retrieve(ctx, "user query", retriever.WithTopK(5))Tool Usage
工具使用
MCP Tools
MCP工具
go
import mcpp "github.com/cloudwego/eino-ext/components/tool/mcp"
tools, err := mcpp.GetTools(ctx, &mcpp.Config{Cli: mcpClient})go
import mcpp "github.com/cloudwego/eino-ext/components/tool/mcp"
tools, err := mcpp.GetTools(ctx, &mcpp.Config{Cli: mcpClient})Custom InvokableTool
自定义InvokableTool
Implement and to create a custom tool.
Info()InvokableRun()实现和方法即可创建自定义工具。
Info()InvokableRun()Instructions to Agent
给Agent的开发说明
- Constructor signatures and Config struct names vary across implementations. Always read the provider's reference file in before generating initialization code.
reference/{type}/{impl}.md - Use (not deprecated
ToolCallingChatModel) for tool binding.ChatModel - For RAG, ensure the same Embedder model is used for both indexing and retrieval.
- See reference files for detailed per-component documentation.
- 不同实现的构造函数签名和Config结构体名称各不相同。生成初始化代码前,请务必阅读路径下对应提供商的参考文档。
reference/{type}/{impl}.md - 工具绑定时请使用(而非已废弃的
ToolCallingChatModel)。ChatModel - 实现RAG功能时,请确保索引和检索阶段使用同一个Embedder模型。
- 各组件的详细文档请参阅参考文件。
Reference Files
参考文件
Read files on-demand for detailed API, config, and examples. Each directory contains an (interfaces + common patterns) and per-implementation files:
{type}/overview.md- -- ChatModel interfaces, tool binding, streaming, and per-provider config (openai, claude, gemini, ark, ollama, deepseek, qwen, qianfan, openrouter)
reference/model/*.md - -- Embedder interface and per-provider config (openai, ark, ollama, etc.)
reference/embedding/*.md - -- Retriever interface, RAG example, and per-backend config (redis, milvus2, es8)
reference/retriever/*.md - -- Indexer interface, indexing pipeline, and per-backend config (redis, milvus2, es8, qdrant)
reference/indexer/*.md - -- Tool interfaces, custom tool creation, MCP integration, search tools, utility tools
reference/tool/*.md - -- Loader, Parser, Transformer interfaces and full pipeline example
reference/document/pipeline.md - -- ChatTemplate, FString/GoTemplate/Jinja2 formats, message helpers
reference/prompt.md - -- Callback handler interface, registration patterns, and per-provider config (cozeloop, apmplus, langfuse, langsmith)
reference/callback/*.md
按需阅读对应文件即可获取详细API、配置说明和使用示例。每个目录都包含(接口定义+通用使用模式)和各实现对应的独立文档:
{type}/overview.md- -- ChatModel接口、工具绑定、流式处理、各提供商配置(openai、claude、gemini、ark、ollama、deepseek、qwen、qianfan、openrouter)
reference/model/*.md - -- Embedder接口和各提供商配置(openai、ark、ollama等)
reference/embedding/*.md - -- Retriever接口、RAG示例、各后端配置(redis、milvus2、es8)
reference/retriever/*.md - -- Indexer接口、索引流水线、各后端配置(redis、milvus2、es8、qdrant)
reference/indexer/*.md - -- Tool接口、自定义工具创建、MCP集成、搜索工具、实用工具
reference/tool/*.md - -- Loader、Parser、Transformer接口和完整流水线示例
reference/document/pipeline.md - -- ChatTemplate、FString/GoTemplate/Jinja2格式、消息辅助工具
reference/prompt.md - -- 回调处理器接口、注册模式、各提供商配置(cozeloop、apmplus、langfuse、langsmith)
reference/callback/*.md