mcpField
E
eino-component

eino-component

github.com/cloudwego开发828318 次安装1 周前更新
代码仓库

关于 eino-component

eino-component 是 Eino Go 组件指南,涵盖模型推理、嵌入、检索、索引和工具,帮助开发者选择实现并查阅各组件配置参考。

主要功能

  1. 01ChatModel 与 AgenticModel 提供方
  2. 02嵌入、索引器和检索器选项
  3. 03搜索、浏览器和命令行工具
  4. 04Go 接口与用法示例
  5. 05提供方专属参考文件指引

适用场景

  1. 01选择 Eino 模型组件
  2. 02构建向量 RAG 工作流
  3. 03在应用中接入 MCP 工具

MCP 相关

指南介绍了 `tool/mcp` 组件,可通过 MCP 客户端使用 `GetTools` 获取工具。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cloudwego/eino-ext --skill eino-component

安装后在 Claude Code 中输入/eino-component确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

reference/callback/
apmplus.md
cozeloop.md
langfuse.md
langsmith.md
overview.md
reference/document/
pipeline.md
reference/embedding/
ark.md
ollama.md
openai.md
overview.md
reference/indexer/
es8.md
milvus2.md
overview.md
qdrant.md
redis.md
reference/model/
agenticark.md
agenticdeepseek.md
agenticgemini.md
agenticopenai.md
agenticqwen.md
ark.md
claude.md
deepseek.md
gemini.md
ollama.md
openai.md
openrouter.md
overview.md
qianfan.md
qwen.md

详细介绍

Eino 组件指南

组件选择指南

ChatModel——LLM 推理(经典 Message 路径)
提供商包备注
OpenAImodel/openai也支持 Azure,设置 ByAzure: true 即可
Claudemodel/claude也支持 AWS Bedrock,设置 ByBedrock: true 即可
Geminimodel/gemini需要 genai.Client
Ark (Volcengine)model/arkDoubao 模型
Ollamamodel/ollama本地模型
DeepSeekmodel/deepseek支持推理
Qwenmodel/qwen阿里云 DashScope API
Qianfanmodel/qianfan百度 ERNIE 模型
OpenRoutermodel/openrouter多提供商路由
AgenticModel——LLM 推理(AgenticMessage 路径)

AgenticModel 处理 *schema.AgenticMessage,其内容采用基于块的结构(推理、文本、图像、音频、视频、工具调用/结果)。工具始终通过 model.WithTools 选项在调用时传入(没有 WithTools 方法)。

提供商包备注
OpenAImodel/agenticopenaiGPT-4o、o1、o3 系列
Geminimodel/agenticgeminiGemini 2.x 模型
DeepSeekmodel/agenticdeepseek支持推理的 DeepSeek-R1
Ark (Volcengine)model/agenticarkDoubao 模型(Agentic 路径)
Qwenmodel/agenticqwen通过 DashScope 使用 Qwen 系列

详细配置参考:

  • reference/model/agenticopenai.md
  • reference/model/agenticgemini.md
  • reference/model/agenticdeepseek.md
  • reference/model/agenticark.md
  • reference/model/agenticqwen.md
Embedding——文本转向量
提供商包备注
OpenAIembedding/openaitext-embedding-3-small/large、ada-002
Arkembedding/arkVolcengine 嵌入模型
Geminiembedding/geminiGoogle 嵌入模型
DashScopeembedding/dashscope阿里云嵌入模型
Ollamaembedding/ollama本地嵌入模型
Qianfanembedding/qianfan百度嵌入模型
Retriever——向量/关键词搜索
后端包备注
Redisretriever/redisKNN 和范围向量搜索
Milvus 2.xretriever/milvus2稠密 + 稀疏混合、BM25
Elasticsearch 8retriever/es8近似向量搜索
Qdrantretriever/qdrant向量相似度搜索
Indexer——存储带向量的文档
后端包
Redisindexer/redis
Milvus 2.xindexer/milvus2
Elasticsearch 8indexer/es8
Qdrantindexer/qdrant
Tools——模型可调用的函数
工具包备注
MCPtool/mcpModel Context Protocol 工具
Google Searchtool/googlesearchCustom Search JSON API
DuckDuckGotool/duckduckgo网络搜索(使用 v2)
Bing Searchtool/bingsearchBing Web Search API
HTTP Requesttool/httprequest通用 HTTP 调用
Command Linetool/commandlineShell 命令执行
Browser Usetool/browseruse浏览器自动化

接口速查

// 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)
}

安装

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 用法(经典路径)

生成
resp, err := chatModel.Generate(ctx, []*schema.Message{
    {Role: schema.User, Content: "Hello"},
})
fmt.Println(resp.Content)
流式传输
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)
}
工具调用
withTools, err := chatModel.WithTools([]*schema.ToolInfo{toolInfo})
resp, err := withTools.Generate(ctx, messages)
// resp.ToolCalls contains model's tool invocations

AgenticModel 用法

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 组件

Embedding + Indexer + Retriever 构成 RAG 工作流:

// 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))

工具用法

MCP 工具
import mcpp "github.com/cloudwego/eino-ext/components/tool/mcp"

tools, err := mcpp.GetTools(ctx, &mcpp.Config{Cli: mcpClient})
自定义 InvokableTool

实现 Info() 和 InvokableRun(),即可创建自定义工具。

给 Agent 的说明

  • 各实现的构造函数签名和 Config 结构体名称各不相同。生成初始化代码前,请务必先阅读 reference/{type}/{impl}.md 中对应提供方的参考文件。
  • 根据用户需求,使用 BaseChatModel(经典路径)或 AgenticModel(Agentic 路径)。
  • model.AgenticModel 接口不会新增 WithTools 方法。对于面向接口的代码,建议在调用时使用 model.WithTools(...)。
  • 对于 ADK Agent,ChatModelAgentConfig.Model 字段接受 model.BaseModel[M]——两种路径都可以无缝使用。
  • 对于 RAG,请确保索引和检索使用相同的 Embedder 模型。
  • 各组件的详细文档请参阅参考文件。

参考文件

需要详细了解 API、配置和示例时,按需阅读文件。每个 {type}/ 目录都包含一个 overview.md(接口和常见模式)以及各实现对应的文件:

  • reference/model/*.md -- ChatModel 和 AgenticModel 接口、工具绑定、流式处理,以及各提供方的配置(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 -- 工具接口、自定义工具创建、MCP 集成、搜索工具、实用工具
  • reference/document/pipeline.md -- Loader、Parser、Transformer 接口及完整的管线示例
  • reference/prompt.md -- ChatTemplate、FString/GoTemplate/Jinja2 格式、消息辅助工具
  • reference/callback/*.md -- Callback 处理程序接口、注册模式,以及各提供方的配置(cozeloop、apmplus、langfuse、langsmith)

评论

支持 Markdown