如何在子agent里面对接mcp服务?
- 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
Assessment
This issue has not been assessed yet.