Llama Stack Agent在Docker环境中未调用已注册MCP服务器且tool_choice设置未生效的问题排查
Llama Stack Agent在Docker环境中未调用已注册MCP服务器且tool_choice设置未生效的问题排查
嘿,我看你遇到了Llama Stack和MCP服务器集成的两个棘手问题:注册的工具组没被Agent用上,而且你设置的tool_choice: required也没生效。结合你给的日志和已做的排查,我整理了几个针对性的解决思路,你可以一步步试:
1. 核心问题定位:Agent未关联已注册的MCP工具组
从你提供的Llama Stack服务器日志能看到,turn请求的payload里toolgroups: null、client_tools: []——这说明Agent根本没把你注册的aws_mcp::server工具组关联上,自然不会触发MCP调用。这大概率是创建Agent时的参数用错了:
- 检查工具组关联参数:你代码里用了
tools=["aws_mcp::server"],但Llama Stack里tools参数通常用来指定单个工具,而关联整个工具组需要用toolgroups参数。修改Agent创建代码试试:agent = Agent( client, model="ollama/llama3.2:1b-instruct-fp16", instructions="""你是一个有AWS工具权限的助手...""", toolgroups=["aws_mcp::server"], # 把tools改成toolgroups tool_config=ToolConfig( tool_choice="required", system_message_behavior="append" ) ) - 验证工具组注册状态:先通过API确认工具组确实注册成功,在宿主机执行:
确保返回结果里有curl http://localhost:5001/v1/toolgroupsaws_mcp::server,且provider_id和mcp_endpoint都和你注册时一致。
2. 修复tool_choice被覆盖的问题
你设置的tool_choice: required在服务器端变成了auto,可能是这几个原因:
- 参数传递优先级问题:Llama Stack的服务器端可能存在默认配置覆盖客户端参数的情况。你可以尝试在创建Agent后,通过API手动更新Agent配置,强制设置tool_choice:
curl -X PUT http://localhost:5001/v1/agents/<你的agent_id> \ -H "Content-Type: application/json" \ -d '{ "tool_config": { "tool_choice": "required", "system_message_behavior": "append" }, "toolgroups": ["aws_mcp::server"] }' - 版本兼容性bug:如果你用的是较旧的Llama Stack版本,可能存在ToolConfig参数不生效的已知问题。建议升级到最新的稳定版镜像(
llamastack/distribution-starter)试试。
3. 验证MCP端点的实际可用性
虽然你能ping通MCP服务器,但还需要确认Llama Stack能正常和MCP的SSE端点通信:
- 在Llama Stack容器内部执行:
正常情况下应该返回200 OK并保持连接,如果返回404或连接失败,说明MCP服务器的SSE端点配置错误,需要调整MCP服务器的启动参数,确保服务在curl http://aws-mcp-server:8000/sse/sse路径监听。 - 查看MCP服务器的日志,确认是否有来自Llama Stack的请求记录。如果完全没有请求,说明问题还是出在Agent和工具组的关联上,回到第一步排查。
4. 直接测试工具组的调用能力
如果前面的步骤都没解决,你可以跳过Agent,直接调用MCP工具组的API,验证工具组本身是否正常工作:
curl -X POST http://localhost:5001/v1/toolgroups/aws_mcp::server/tools/s3/invoke \ -H "Content-Type: application/json" \ -d '{ "parameters": {"command": "list buckets"} }'
如果这个调用能成功返回S3桶列表,说明工具组本身没问题,问题出在Agent的工具触发逻辑上——可能是你的模型提示词不够明确,或者模型没有正确理解要调用工具。可以尝试优化instructions,比如明确要求“必须调用aws_mcp::server下的s3工具来获取桶列表”。
按这个顺序排查,应该能找到问题所在。如果还有疑问,可以补充Llama Stack的版本号、MCP服务器的具体配置,我再帮你细化分析!




