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. 01Eino のモデルコンポーネント選定
  2. 02ベクトル検索を使う RAG ワークフローの構築
  3. 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.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/openaiByAzure: true で Azure にも対応
Claudemodel/claudeByBedrock: true で AWS Bedrock にも対応
Geminimodel/geminigenai.Client が必要
Ark(Volcengine)model/arkDoubao モデル
Ollamamodel/ollamaローカルモデル
DeepSeekmodel/deepseek推論に対応
Qwenmodel/qwenAlibaba DashScope API
Qianfanmodel/qianfanBaidu 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 モデル(エージェント向けパス)
Qwenmodel/agenticqwenDashScope 経由の 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/dashscopeAlibaba の埋め込み
Ollamaembedding/ollamaローカルの埋め込みモデル
Qianfanembedding/qianfanBaidu の埋め込み
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 呼び出し
コマンドラインtool/commandlineシェルコマンドの実行
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() を実装して、カスタムツールを作成します。

エージェントへの指示

  • コンストラクターのシグネチャと 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)

コメント