cloudwego / cloudwego/eino

如何在子agent里面对接mcp服务?

Open
#633 6 comments 0 reactions 0 assignees View on GitHub
C-question D-adk
Dominant language
Go
Stars
13k
Forks
1.1k
Avg merge
4h 6m
Merged PRs (30d)
41

Description

发现一个问题。

现在有几个agent,A是master,B、C、D都是子agent,想在B C D都添加了mcp tool,

- A如下
```go
agt, err := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: openaiCli,
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: todoTools,
},
},
MaxIterations: 50,
Name: "main-agent",
Description: "master agent",
Instruction: `xxx`,
})
if err != nil {
return nil, err
}
```

- BCD如下
```go
mcpCli, err := cli.MCP(ctx)
if err != nil {
return nil, fmt.Errorf("create mcp client failed: %w", err)
}

tools, err := mcp.GetTools(ctx, &mcp.Config{
Cli: mcpCli,
})
if err != nil {
return nil, fmt.Errorf("get mcp tools failed: %w", err)
}

var agentTool []tool.BaseTool
for _, tl := range tools {
agentTool = append(agentTool, NewTool(mcpCli, tl))
}

agt, err := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Name: fmt.Sprintf("local-agent-env[%d]", env.ID),
Model: openaiCli,
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: agentTool,
},
},
MaxIterations: 50,
Description: "xxx",
Instruction: `xxx`,
})
```
- 通过下面这个方法把子agent加入到主agent下
```go
m.agent.OnSetSubAgents(ctx, agts)
```
- 流传输的时候,使用下面的方法运行

```go
func (m *MainAgent) Stream(ctx context.Context, input []*schema.Message) *adk.AsyncIterator[*adk.AgentEvent] {
return m.agent.Run(ctx, &adk.AgentInput{
Messages: input,
EnableStreaming: true,
})
}
```

现在发现,transfer到子agent之后,就结束了,没有走子agent里面的调用逻辑,这个可能是啥原因呢?文档的mcp这块,没看到有跟agent结合的完整例子。
```json
{"level":"info","msg":"agent ran finished","name":"main-agent","type":"","component":"Chain","output":"tool: successfully transferred to agent [local-agent-env[367]]\ntool_call_id: call_5a99ff8c-2c59-4f26-a185-57d19f6bebd3_0\ntool_call_name: transfer_to_agent"}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.