eino-component について
eino-component は、モデル推論、埋め込み、検索、インデックス作成、ツールを扱う Eino Go コンポーネントのガイドです。開発者が実装を選び、個別の設定資料を確認する際に役立ちます。
主な機能
- 01ChatModel と AgenticModel のプロバイダー
- 02埋め込み・インデクサー・リトリーバーの選択肢
- 03検索・ブラウザー・コマンドラインツール
- 04Go インターフェースと使用例
- 05プロバイダー別リファレンスの案内
活用シーン
- 01Eino のモデルコンポーネント選定
- 02ベクトル検索を使う RAG ワークフローの構築
- 03アプリケーションへの MCP ツール追加
MCP 対応
MCP クライアントから `GetTools` でツールを取得する `tool/mcp` コンポーネントを解説しています。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ cloudwego/ eino-ext --skill eino-componentインストール後、Claude Code で/eino-componentを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
reference/callback/apmplus.mdcozeloop.mdlangfuse.mdlangsmith.mdoverview.mdreference/document/pipeline.mdreference/embedding/ark.mdollama.mdopenai.mdoverview.mdreference/indexer/es8.mdmilvus2.mdoverview.mdqdrant.mdredis.mdreference/model/agenticark.mdagenticdeepseek.mdagenticgemini.mdagenticopenai.mdagenticqwen.mdark.mdclaude.mddeepseek.mdgemini.mdollama.mdopenai.mdopenrouter.mdoverview.mdqianfan.mdqwen.md詳細
Eino コンポーネントガイド
コンポーネント選択ガイド
ChatModel — LLM 推論(従来の Message パス)
| プロバイダー | パッケージ | 備考 |
|---|---|---|
| OpenAI | model/openai | ByAzure: true で Azure にも対応 |
| Claude | model/claude | ByBedrock: true で AWS Bedrock にも対応 |
| Gemini | model/gemini | genai.Client が必要 |
| Ark(Volcengine) | model/ark | Doubao モデル |
| Ollama | model/ollama | ローカルモデル |
| DeepSeek | model/deepseek | 推論に対応 |
| Qwen | model/qwen | Alibaba DashScope API |
| Qianfan | model/qianfan | Baidu ERNIE モデル |
| OpenRouter | model/openrouter | マルチプロバイダーのルーティング |
AgenticModel — LLM 推論(AgenticMessage パス)
AgenticModel は、ブロックベースのコンテンツ(推論、テキスト、画像、音声、動画、ツール呼び出し/結果)を持つ *schema.AgenticMessage を使用します。ツールは呼び出し時に model.WithTools オプション経由で常に渡します(WithTools メソッドはありません)。
| プロバイダー | パッケージ | 備考 |
|---|---|---|
| OpenAI | model/agenticopenai | GPT-4o、o1、o3 シリーズ |
| Gemini | model/agenticgemini | Gemini 2.x モデル |
| DeepSeek | model/agenticdeepseek | 推論機能を備えた DeepSeek-R1 |
| Ark(Volcengine) | model/agenticark | Doubao モデル(エージェント向けパス) |
| Qwen | model/agenticqwen | DashScope 経由の Qwen シリーズ |
詳細な設定リファレンス:
reference/model/agenticopenai.mdreference/model/agenticgemini.mdreference/model/agenticdeepseek.mdreference/model/agenticark.mdreference/model/agenticqwen.md
Embedding — テキストからベクトルへの変換
| プロバイダー | パッケージ | 備考 |
|---|---|---|
| OpenAI | embedding/openai | text-embedding-3-small/large、ada-002 |
| Ark | embedding/ark | Volcengine の埋め込みモデル |
| Gemini | embedding/gemini | Google の埋め込みモデル |
| DashScope | embedding/dashscope | Alibaba の埋め込み |
| Ollama | embedding/ollama | ローカルの埋め込みモデル |
| Qianfan | embedding/qianfan | Baidu の埋め込み |
Retriever — ベクトル/キーワード検索
| バックエンド | パッケージ | 備考 |
|---|---|---|
| Redis | retriever/redis | KNN および範囲ベクトル検索 |
| Milvus 2.x | retriever/milvus2 | 密ベクトル+疎ベクトルのハイブリッド、BM25 |
| Elasticsearch 8 | retriever/es8 | 近似ベクトル検索 |
| Qdrant | retriever/qdrant | ベクトル類似検索 |
Indexer — ベクトル付きドキュメントの保存
| バックエンド | パッケージ |
|---|---|
| Redis | indexer/redis |
| Milvus 2.x | indexer/milvus2 |
| Elasticsearch 8 | indexer/es8 |
| Qdrant | indexer/qdrant |
Tools — モデルから呼び出し可能な関数
| ツール | パッケージ | 備考 |
|---|---|---|
| MCP | tool/mcp | Model Context Protocol ツール |
| Google Search | tool/googlesearch | Custom Search JSON API |
| DuckDuckGo | tool/duckduckgo | ウェブ検索(v2 を使用) |
| Bing Search | tool/bingsearch | Bing Web Search API |
| HTTP Request | tool/httprequest | 汎用 HTTP 呼び出し |
| コマンドライン | tool/commandline | シェルコマンドの実行 |
| Browser Use | tool/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() を実装して、カスタムツールを作成します。
エージェントへの指示
- コンストラクターのシグネチャと Config 構造体の名前は、実装によって異なります。初期化コードを生成する前に、必ず
reference/{type}/{impl}.mdにあるプロバイダーのリファレンスファイルを読んでください。 - ユーザーのニーズに応じて、
BaseChatModel(従来のパス)またはAgenticModel(エージェント型のパス)を使用してください。 model.AgenticModelは、インターフェースにWithToolsメソッドを追加しません。インターフェースを重視するコードでは、呼び出し時にmodel.WithTools(...)を使用してください。- ADK エージェントでは、
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-- コールバックハンドラーのインターフェース、登録パターン、プロバイダーごとの設定(cozeloop、apmplus、langfuse、langsmith)
コメント
Markdown 対応