eino-component

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Eino Component Guide

Eino组件指南

Component Selection Guide

组件选择指南

ChatModel -- LLM inference

ChatModel -- LLM推理

ProviderPackageNotes
OpenAI
model/openai
Also supports Azure via
ByAzure: true
Claude
model/claude
Also supports AWS Bedrock via
ByBedrock: true
Gemini
model/gemini
Requires
genai.Client
Ark (Volcengine)
model/ark
Doubao models
Ollama
model/ollama
Local models
DeepSeek
model/deepseek
Reasoning support
Qwen
model/qwen
Alibaba DashScope API
Qianfan
model/qianfan
Baidu ERNIE models
OpenRouter
model/openrouter
Multi-provider routing
提供商包名说明
OpenAI
model/openai
也支持Azure,只需设置
ByAzure: true
Claude
model/claude
也支持AWS Bedrock,只需设置
ByBedrock: true
Gemini
model/gemini
需要
genai.Client
方舟(火山引擎)
model/ark
豆包模型
Ollama
model/ollama
本地模型
DeepSeek
model/deepseek
支持推理
通义千问
model/qwen
阿里云DashScope API
千帆
model/qianfan
百度ERNIE模型
OpenRouter
model/openrouter
多提供商路由

Embedding -- text to vector

Embedding -- 文本转向量

ProviderPackageNotes
OpenAI
embedding/openai
text-embedding-3-small/large, ada-002
Ark
embedding/ark
Volcengine embedding models
Gemini
embedding/gemini
Google embedding models
DashScope
embedding/dashscope
Alibaba embedding
Ollama
embedding/ollama
Local embedding models
Qianfan
embedding/qianfan
Baidu embedding
提供商包名说明
OpenAI
embedding/openai
支持text-embedding-3-small/large、ada-002模型
方舟
embedding/ark
火山引擎Embedding模型
Gemini
embedding/gemini
Google Embedding模型
DashScope
embedding/dashscope
阿里云Embedding
Ollama
embedding/ollama
本地Embedding模型
千帆
embedding/qianfan
百度Embedding

Retriever -- vector/keyword search

Retriever -- 向量/关键词搜索

BackendPackageNotes
Redis
retriever/redis
KNN and range vector search
Milvus 2.x
retriever/milvus2
Dense + sparse hybrid, BM25
Elasticsearch 8
retriever/es8
Approximate vector search
Qdrant
retriever/qdrant
Vector similarity search
后端包名说明
Redis
retriever/redis
支持KNN和范围向量搜索
Milvus 2.x
retriever/milvus2
稠密+稀疏混合检索、BM25
Elasticsearch 8
retriever/es8
近似向量搜索
Qdrant
retriever/qdrant
向量相似度搜索

Indexer -- store documents with vectors

Indexer -- 存储带向量的文档

BackendPackage
Redis
indexer/redis
Milvus 2.x
indexer/milvus2
Elasticsearch 8
indexer/es8
Qdrant
indexer/qdrant
后端包名
Redis
indexer/redis
Milvus 2.x
indexer/milvus2
Elasticsearch 8
indexer/es8
Qdrant
indexer/qdrant

Tools -- model-callable functions

Tools -- 模型可调用函数

ToolPackageNotes
MCP
tool/mcp
Model Context Protocol tools
Google Search
tool/googlesearch
Custom Search JSON API
DuckDuckGo
tool/duckduckgo
Web search (use v2)
Bing Search
tool/bingsearch
Bing Web Search API
HTTP Request
tool/httprequest
Generic HTTP calls
Command Line
tool/commandline
Shell command execution
Browser Use
tool/browseruse
Browser automation
工具包名说明
MCP
tool/mcp
Model Context Protocol工具
Google搜索
tool/googlesearch
自定义搜索JSON API
DuckDuckGo
tool/duckduckgo
网页搜索(请使用v2版本)
必应搜索
tool/bingsearch
必应网页搜索API
HTTP请求
tool/httprequest
通用HTTP调用
命令行
tool/commandline
Shell命令执行
浏览器操作
tool/browseruse
浏览器自动化

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}@latest
bash
go get github.com/cloudwego/eino-ext/components/{type}/{impl}@latest

Examples:

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
undefined
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
undefined

ChatModel 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 invocations
go
withTools, err := chatModel.WithTools([]*schema.ToolInfo{toolInfo})
resp, err := withTools.Generate(ctx, messages)
// resp.ToolCalls contains model's tool invocations

RAG 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
Info()
and
InvokableRun()
to create a custom tool.
实现
Info()
InvokableRun()
方法即可创建自定义工具。

Instructions to Agent

给Agent的开发说明

  • Constructor signatures and Config struct names vary across implementations. Always read the provider's reference file in
    reference/{type}/{impl}.md
    before generating initialization code.
  • Use
    ToolCallingChatModel
    (not deprecated
    ChatModel
    ) for tool binding.
  • 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
{type}/
directory contains an
overview.md
(interfaces + common patterns) and per-implementation files:
  • reference/model/*.md
    -- ChatModel interfaces, tool binding, streaming, and per-provider config (openai, claude, gemini, ark, ollama, deepseek, qwen, qianfan, openrouter)
  • reference/embedding/*.md
    -- Embedder interface and per-provider config (openai, ark, ollama, etc.)
  • reference/retriever/*.md
    -- Retriever interface, RAG example, and per-backend config (redis, milvus2, es8)
  • reference/indexer/*.md
    -- Indexer interface, indexing pipeline, and per-backend config (redis, milvus2, es8, qdrant)
  • reference/tool/*.md
    -- Tool interfaces, custom tool creation, MCP integration, search tools, utility tools
  • reference/document/pipeline.md
    -- Loader, Parser, Transformer interfaces and full pipeline example
  • reference/prompt.md
    -- ChatTemplate, FString/GoTemplate/Jinja2 formats, message helpers
  • reference/callback/*.md
    -- Callback handler interface, registration patterns, and per-provider config (cozeloop, apmplus, langfuse, langsmith)
按需阅读对应文件即可获取详细API、配置说明和使用示例。每个
{type}/
目录都包含
overview.md
(接口定义+通用使用模式)和各实现对应的独立文档:
  • reference/model/*.md
    -- ChatModel接口、工具绑定、流式处理、各提供商配置(openai、claude、gemini、ark、ollama、deepseek、qwen、qianfan、openrouter)
  • reference/embedding/*.md
    -- Embedder接口和各提供商配置(openai、ark、ollama等)
  • reference/retriever/*.md
    -- Retriever接口、RAG示例、各后端配置(redis、milvus2、es8)
  • reference/indexer/*.md
    -- Indexer接口、索引流水线、各后端配置(redis、milvus2、es8、qdrant)
  • reference/tool/*.md
    -- Tool接口、自定义工具创建、MCP集成、搜索工具、实用工具
  • reference/document/pipeline.md
    -- Loader、Parser、Transformer接口和完整流水线示例
  • reference/prompt.md
    -- ChatTemplate、FString/GoTemplate/Jinja2格式、消息辅助工具
  • reference/callback/*.md
    -- 回调处理器接口、注册模式、各提供商配置(cozeloop、apmplus、langfuse、langsmith)