问题出现得很突然,日志倒是留得挺全。AutoGen 0.4 写了两个 agent,一个查库存一个下单,给 AssistantAgent 注册了 get_stock 工具,跑起来只回「我需要查询库存」这段文本,tool_calls 始终为空;换成 0.2 的 register_function 写法才正常,模型是 gpt-4o-mini。
刚开始盯着「模型不支持 function calling,AutoGen 降级成纯文本」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。工具挂在 model_client 上而不是 agent 的 tools 参数里。另一种情况是0.4 要求传 FunctionTool 包装,裸函数被静默忽略。
不容易想到的是,system_message 里写了不要调用外部工具,指令压过了工具。
第一件事是打印 agent 实际拿到的工具列表
python -c "from autogen_agentchat.agents import AssistantAgent;print(AssistantAgent.__init__.__doc__)"
再往下用 FunctionTool 显式包一层再注册
python -c "from autogen_core.tools import FunctionTool;from tools import get_stock;print(FunctionTool(get_stock,description='查库存'))"
随后开日志确认请求里有没有 tools 字段
python run_agent.py --debug --model gpt-4o-mini 2>&1 | grep -i tool_calls
末了换支持工具调用的模型做对照
python run_agent.py --model gpt-4o --debug
怎么算真的好了,看的是同一批现象。运行日志里出现 tool_calls,get_stock 被调用一次并带回库存数,最终回答里包含具体数量而不是一句「我需要查询」。
补一句。0.4 把工具注册从函数装饰器改成了显式对象,旧教程里的写法不会报错但也不生效;排查时先看请求体里有没有 tools,比读源码快。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
