ChatTemplate - MCP
基本介绍
Model Context Protocol(MCP)是 Anthropic 推出的供模型访问的资源的标准化开放协议,Eino 提供了相关封装,使用这些封装可以直接访问已有 MCP Server 上的资源。
本节介绍 MCPPrompt 的封装,封装实现了 Eino ChatTemplate 接口(Eino: ChatTemplate 使用说明)。
其他封装参见:
使用方式
首先创建 mcp client,Eino 利用了开源 sdk mark3labs/mcp-go:
import "github.com/mark3labs/mcp-go/client"
// stdio client
cli, err := client.NewStdioMCPClient(myCommand, myEnvs, myArgs...)
// sse client
cli, err := client.NewSSEMCPClient(myBaseURL)
// sse client needs to manually start asynchronous communication
// while stdio does not require it.
err = cli.Start(ctx)
考虑到 client 的复用,封装假设 client 已经完成和 Server 的 Initialize,用户需要自行完成 client 初始化:
import "github.com/mark3labs/mcp-go/mcp"
initRequest := mcp.InitializeRequest{}
initRequest.Params.ProtocolVersion = mcp.LATEST_PROTOCOL_VERSION
initRequest.Params.ClientInfo = mcp.Implementation{
Name: "example-client",
Version: "1.0.0",
}
_, err = cli.Initialize(ctx, initRequest)
之后使用 Client 创建 Eino ChatTemplate:
import "github.com/cloudwego/eino-ext/components/tool/mcp"
tpl, err := mcp.NewPromptTemplate(ctx, &mcp.Config{
Cli: cli,
Name: "your prompt name",
})
template 可以直接调用:
result, err := tpl.Format(ctx, map[string]interface{}{/* input k-v */})
也可以在任意 Eino Agent 中使用,以最简单的一个 llm chain 为例:
import (
"github.com/cloudwego/eino/compose"
"github.com/cloudwego/eino-ext/components/prompt/mcp"
)
llm, err := /*create a chat model*/
tpl, err := mcp.NewPromptTemplate(ctx, &mcp.Config{
Cli: cli,
Name: "your prompt name",
})
runner, err := compose.NewChain[map[string]any, *schema.Message]().
AppendChatTemplate(tpl).
AppendChatModel(llm).
Compile(ctx)
更多信息
实践例子可以参考:https://github.com/cloudwego/eino-ext/blob/main/components/prompt/mcp/examples/mcp.go
最后修改
March 13, 2025
: doc(Eino): update eino install guide title to h2 (#1278) (8143376)