Eino Component Guide
Component Selection Guide
ChatModel -- LLM inference (classic Message path)
| Provider |
Package |
Notes |
| 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 |
AgenticModel -- LLM inference (AgenticMessage path)
AgenticModel operates on *schema.AgenticMessage with block-based content (reasoning, text, images, audio, video, tool calls/results). Tools are always passed at call time via model.WithTools option (no WithTools method).
| Provider |
Package |
Notes |
| OpenAI |
model/agenticopenai |
GPT-4o, o1, o3 series |
| Gemini |
model/agenticgemini |
Gemini 2.x models |
| DeepSeek |
model/agenticdeepseek |
DeepSeek-R1 with reasoning |
| Ark (Volcengine) |
model/agenticark |
Doubao models (agentic path) |
| Qwen |
model/agenticqwen |
Qwen series via DashScope |
Detailed configuration references:
reference/model/agenticopenai.md
reference/model/agenticgemini.md
reference/model/agenticdeepseek.md
reference/model/agenticark.md
reference/model/agenticqwen.md
Embedding -- text to vector
| Provider |
Package |
Notes |
| 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 |
Retriever -- vector/keyword search
| Backend |
Package |
Notes |
| 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 |
Indexer -- store documents with vectors
| Backend |
Package |
| Redis |
indexer/redis |
| Milvus 2.x |
indexer/milvus2 |
| Elasticsearch 8 |
indexer/es8 |
| Qdrant |
indexer/qdrant |
Tools -- model-callable functions
| Tool |
Package |
Notes |
| 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 |
Interface Quick Reference
// BaseModel (generic)
type BaseModel[M any] interface {
Generate(ctx context.Context, input []M, opts ...Option) (M, error)
Stream(ctx context.Context, input []M, opts ...Option) (*schema.StreamReader[M], error)
}
// Type aliases
type BaseChatModel = BaseModel[*schema.Message] // classic path
type AgenticModel = BaseModel[*schema.AgenticMessage] // agentic path
// ToolCallingChatModel (classic path, adds WithTools)
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 BaseTool interface {
Info(ctx context.Context) (*schema.ToolInfo, error)
}
type InvokableTool interface {
BaseTool
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
go get github.com/cloudwego/eino-ext/components/{type}/{impl}@latest
# Examples:
go get github.com/cloudwego/eino-ext/components/model/openai@latest
go get github.com/cloudwego/eino-ext/components/model/agenticopenai@latest
go get github.com/cloudwego/eino-ext/components/retriever/milvus2@latest
go get github.com/cloudwego/eino-ext/components/tool/mcp@latest
ChatModel Usage (Classic Path)
Generate
resp, err := chatModel.Generate(ctx, []*schema.Message{
{Role: schema.User, Content: "Hello"},
})
fmt.Println(resp.Content)
Stream
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
withTools, err := chatModel.WithTools([]*schema.ToolInfo{toolInfo})
resp, err := withTools.Generate(ctx, messages)
// resp.ToolCalls contains model's tool invocations
AgenticModel Usage
import (
"github.com/cloudwego/eino-ext/components/model/agenticopenai"
"github.com/cloudwego/eino/components/model"
"github.com/cloudwego/eino/schema"
)
// Create agentic model
am, _ := agenticopenai.New(ctx, &agenticopenai.Config{
Model: "gpt-4o",
APIKey: "your-key",
})
// Tools passed at call time via option for AgenticModel-interface code
resp, err := am.Generate(ctx,
[]*schema.AgenticMessage{schema.UserAgenticMessage("Search for Go tutorials")},
model.WithTools(toolInfos),
)
// Response contains typed ContentBlocks
for _, block := range resp.ContentBlocks {
switch block.Type {
case schema.ContentBlockTypeAssistantGenText:
fmt.Println(block.AssistantGenText.Text)
case schema.ContentBlockTypeFunctionToolCall:
fmt.Printf("Tool call: %s(%s)\n", block.FunctionToolCall.Name, block.FunctionToolCall.Arguments)
case schema.ContentBlockTypeReasoning:
fmt.Printf("Reasoning: %s\n", block.Reasoning.Text)
}
}
RAG Components
Embedding + Indexer + Retriever form the RAG pipeline:
// 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))
Tool Usage
MCP Tools
import mcpp "github.com/cloudwego/eino-ext/components/tool/mcp"
tools, err := mcpp.GetTools(ctx, &mcpp.Config{Cli: mcpClient})
Custom InvokableTool
Implement Info() and InvokableRun() to create a custom tool.
Instructions to 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
BaseChatModel (classic path) or AgenticModel (agentic path) based on the user's needs.
model.AgenticModel does not add a WithTools method to the interface. Prefer model.WithTools(...) at call time for interface-oriented code.
- For ADK agents, the
ChatModelAgentConfig.Model field accepts model.BaseModel[M] -- both paths work seamlessly.
- For RAG, ensure the same Embedder model is used for both indexing and retrieval.
- See reference files for detailed per-component documentation.
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 and AgenticModel 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)
1---2name: eino-component3description: Eino component selection, configuration, and usage. Use when a user needs to choose or configure a ChatModel, AgenticModel, Embedding, Retriever, Indexer, Tool, Document loader/parser/transformer, Prompt template, or Callback handler. Covers all component interfaces and their implementations in eino-ext including OpenAI, Claude, Gemini, Ark, Ollama, Milvus, Elasticsearch, Redis, MCP tools, and more.4---56# Eino Component Guide78## Component Selection Guide910### ChatModel -- LLM inference (classic Message path)1112| Provider | Package | Notes |13|----------|---------|-------|14| OpenAI | `model/openai` | Also supports Azure via `ByAzure: true` |15| Claude | `model/claude` | Also supports AWS Bedrock via `ByBedrock: true` |16| Gemini | `model/gemini` | Requires `genai.Client` |17| Ark (Volcengine) | `model/ark` | Doubao models |18| Ollama | `model/ollama` | Local models |19| DeepSeek | `model/deepseek` | Reasoning support |20| Qwen | `model/qwen` | Alibaba DashScope API |21| Qianfan | `model/qianfan` | Baidu ERNIE models |22| OpenRouter | `model/openrouter` | Multi-provider routing |2324### AgenticModel -- LLM inference (AgenticMessage path)2526AgenticModel operates on `*schema.AgenticMessage` with block-based content (reasoning, text, images, audio, video, tool calls/results). Tools are always passed at call time via `model.WithTools` option (no `WithTools` method).2728| Provider | Package | Notes |29|----------|---------|-------|30| OpenAI | `model/agenticopenai` | GPT-4o, o1, o3 series |31| Gemini | `model/agenticgemini` | Gemini 2.x models |32| DeepSeek | `model/agenticdeepseek` | DeepSeek-R1 with reasoning |33| Ark (Volcengine) | `model/agenticark` | Doubao models (agentic path) |34| Qwen | `model/agenticqwen` | Qwen series via DashScope |3536Detailed configuration references:37- `reference/model/agenticopenai.md`38- `reference/model/agenticgemini.md`39- `reference/model/agenticdeepseek.md`40- `reference/model/agenticark.md`41- `reference/model/agenticqwen.md`4243### Embedding -- text to vector4445| Provider | Package | Notes |46|----------|---------|-------|47| OpenAI | `embedding/openai` | text-embedding-3-small/large, ada-002 |48| Ark | `embedding/ark` | Volcengine embedding models |49| Gemini | `embedding/gemini` | Google embedding models |50| DashScope | `embedding/dashscope` | Alibaba embedding |51| Ollama | `embedding/ollama` | Local embedding models |52| Qianfan | `embedding/qianfan` | Baidu embedding |5354### Retriever -- vector/keyword search5556| Backend | Package | Notes |57|---------|---------|-------|58| Redis | `retriever/redis` | KNN and range vector search |59| Milvus 2.x | `retriever/milvus2` | Dense + sparse hybrid, BM25 |60| Elasticsearch 8 | `retriever/es8` | Approximate vector search |61| Qdrant | `retriever/qdrant` | Vector similarity search |6263### Indexer -- store documents with vectors6465| Backend | Package |66|---------|---------|67| Redis | `indexer/redis` |68| Milvus 2.x | `indexer/milvus2` |69| Elasticsearch 8 | `indexer/es8` |70| Qdrant | `indexer/qdrant` |7172### Tools -- model-callable functions7374| Tool | Package | Notes |75|------|---------|-------|76| MCP | `tool/mcp` | Model Context Protocol tools |77| Google Search | `tool/googlesearch` | Custom Search JSON API |78| DuckDuckGo | `tool/duckduckgo` | Web search (use v2) |79| Bing Search | `tool/bingsearch` | Bing Web Search API |80| HTTP Request | `tool/httprequest` | Generic HTTP calls |81| Command Line | `tool/commandline` | Shell command execution |82| Browser Use | `tool/browseruse` | Browser automation |8384## Interface Quick Reference8586```go87// BaseModel (generic)88type BaseModel[M any] interface {89 Generate(ctx context.Context, input []M, opts ...Option) (M, error)90 Stream(ctx context.Context, input []M, opts ...Option) (*schema.StreamReader[M], error)91}9293// Type aliases94type BaseChatModel = BaseModel[*schema.Message] // classic path95type AgenticModel = BaseModel[*schema.AgenticMessage] // agentic path9697// ToolCallingChatModel (classic path, adds WithTools)98type ToolCallingChatModel interface {99 BaseChatModel100 WithTools(tools []*schema.ToolInfo) (ToolCallingChatModel, error)101}102103// Embedding104type Embedder interface {105 EmbedStrings(ctx context.Context, texts []string, opts ...Option) ([][]float64, error)106}107108// Retriever109type Retriever interface {110 Retrieve(ctx context.Context, query string, opts ...Option) ([]*schema.Document, error)111}112113// Indexer114type Indexer interface {115 Store(ctx context.Context, docs []*schema.Document, opts ...Option) (ids []string, err error)116}117118// Document119type Loader interface {120 Load(ctx context.Context, src Source, opts ...LoaderOption) ([]*schema.Document, error)121}122type Transformer interface {123 Transform(ctx context.Context, src []*schema.Document, opts ...TransformerOption) ([]*schema.Document, error)124}125126// Tool127type BaseTool interface {128 Info(ctx context.Context) (*schema.ToolInfo, error)129}130131type InvokableTool interface {132 BaseTool133 InvokableRun(ctx context.Context, argumentsInJSON string, opts ...Option) (string, error)134}135136// Prompt137type ChatTemplate interface {138 Format(ctx context.Context, vs map[string]any, opts ...Option) ([]*schema.Message, error)139}140```141142## Installation143144```bash145go get github.com/cloudwego/eino-ext/components/{type}/{impl}@latest146# Examples:147go get github.com/cloudwego/eino-ext/components/model/openai@latest148go get github.com/cloudwego/eino-ext/components/model/agenticopenai@latest149go get github.com/cloudwego/eino-ext/components/retriever/milvus2@latest150go get github.com/cloudwego/eino-ext/components/tool/mcp@latest151```152153## ChatModel Usage (Classic Path)154155### Generate156157```go158resp, err := chatModel.Generate(ctx, []*schema.Message{159 {Role: schema.User, Content: "Hello"},160})161fmt.Println(resp.Content)162```163164### Stream165166```go167reader, err := chatModel.Stream(ctx, messages)168defer reader.Close()169for {170 chunk, err := reader.Recv()171 if errors.Is(err, io.EOF) { break }172 if err != nil { return err }173 fmt.Print(chunk.Content)174}175```176177### Tool Calling178179```go180withTools, err := chatModel.WithTools([]*schema.ToolInfo{toolInfo})181resp, err := withTools.Generate(ctx, messages)182// resp.ToolCalls contains model's tool invocations183```184185## AgenticModel Usage186187```go188import (189 "github.com/cloudwego/eino-ext/components/model/agenticopenai"190 "github.com/cloudwego/eino/components/model"191 "github.com/cloudwego/eino/schema"192)193194// Create agentic model195am, _ := agenticopenai.New(ctx, &agenticopenai.Config{196 Model: "gpt-4o",197 APIKey: "your-key",198})199200// Tools passed at call time via option for AgenticModel-interface code201resp, err := am.Generate(ctx,202 []*schema.AgenticMessage{schema.UserAgenticMessage("Search for Go tutorials")},203 model.WithTools(toolInfos),204)205206// Response contains typed ContentBlocks207for _, block := range resp.ContentBlocks {208 switch block.Type {209 case schema.ContentBlockTypeAssistantGenText:210 fmt.Println(block.AssistantGenText.Text)211 case schema.ContentBlockTypeFunctionToolCall:212 fmt.Printf("Tool call: %s(%s)\n", block.FunctionToolCall.Name, block.FunctionToolCall.Arguments)213 case schema.ContentBlockTypeReasoning:214 fmt.Printf("Reasoning: %s\n", block.Reasoning.Text)215 }216}217```218219## RAG Components220221Embedding + Indexer + Retriever form the RAG pipeline:222223```go224// 1. Embed and store documents225indexer, _ := redisIndexer.NewIndexer(ctx, &redisIndexer.IndexerConfig{226 Client: redisClient, KeyPrefix: "doc:", Embedding: embedder,227})228ids, _ := indexer.Store(ctx, docs)229230// 2. Retrieve relevant documents231retriever, _ := redisRetriever.NewRetriever(ctx, &redisRetriever.RetrieverConfig{232 Client: redisClient, Index: "my_index", Embedding: embedder,233})234docs, _ := retriever.Retrieve(ctx, "user query", retriever.WithTopK(5))235```236237## Tool Usage238239### MCP Tools240241```go242import mcpp "github.com/cloudwego/eino-ext/components/tool/mcp"243244tools, err := mcpp.GetTools(ctx, &mcpp.Config{Cli: mcpClient})245```246247### Custom InvokableTool248249Implement `Info()` and `InvokableRun()` to create a custom tool.250251## Instructions to Agent252253- 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.254- Use `BaseChatModel` (classic path) or `AgenticModel` (agentic path) based on the user's needs.255- `model.AgenticModel` does not add a `WithTools` method to the interface. Prefer `model.WithTools(...)` at call time for interface-oriented code.256- For ADK agents, the `ChatModelAgentConfig.Model` field accepts `model.BaseModel[M]` -- both paths work seamlessly.257- For RAG, ensure the same Embedder model is used for both indexing and retrieval.258- See reference files for detailed per-component documentation.259260## Reference Files261262Read files on-demand for detailed API, config, and examples. Each `{type}/` directory contains an `overview.md` (interfaces + common patterns) and per-implementation files:263264- `reference/model/*.md` -- ChatModel and AgenticModel interfaces, tool binding, streaming, and per-provider config (openai, claude, gemini, ark, ollama, deepseek, qwen, qianfan, openrouter)265- `reference/embedding/*.md` -- Embedder interface and per-provider config (openai, ark, ollama, etc.)266- `reference/retriever/*.md` -- Retriever interface, RAG example, and per-backend config (redis, milvus2, es8)267- `reference/indexer/*.md` -- Indexer interface, indexing pipeline, and per-backend config (redis, milvus2, es8, qdrant)268- `reference/tool/*.md` -- Tool interfaces, custom tool creation, MCP integration, search tools, utility tools269- `reference/document/pipeline.md` -- Loader, Parser, Transformer interfaces and full pipeline example270- `reference/prompt.md` -- ChatTemplate, FString/GoTemplate/Jinja2 formats, message helpers271- `reference/callback/*.md` -- Callback handler interface, registration patterns, and per-provider config (cozeloop, apmplus, langfuse, langsmith)