从一次诡异的 Agent 死循环说起上周调一个多步骤工具调用 Agent,GPT-4o 在第三步突然开始反复调用同一个天气查询 API,参数一模一样,连续调了 17 次才超时退出。日志里 token 消耗直接炸了,账单多出 3 美元。我盯着那串重复的get_weather(lat=39.9, lon=116.4)看了十分钟,最后发现是 prompt 里少写了一句“如果已经获取过该数据,直接使用缓存结果”。这个坑让我意识到:LLM 作为 Agent 大脑时,模型本身的“性格”差异会被放大到离谱的程度。今天不聊理论,直接拿 GPT-4o、Claude 3.5 Sonnet、Gemini 1.5 Pro 三个模型,在同一个 Agent 框架下跑同样的任务,把它们的“脑回路”扒开看看。工具调用:谁更像个“靠谱的实习生”Agent 最核心的能力是调用外部工具。我设计了一个测试:给三个模型同样的函数定义(查询数据库、发送邮件、计算器),然后说“帮我查一下昨天销售额,如果超过 10000 就发邮件通知团队”。GPT-4o的表现最像人类直觉:先调query_sales("yesterday"),拿到结果 12800,然后调send_email("team@company.com", "昨日销售额 12800,达标")。干净利落,参数格式完全匹配 JSON Schema。但有个隐藏问题——它偶尔会在工具调用之间插入一段自言自语式的推理,比如“嗯,让我先查一下数据……好的,数据拿到了,现在发邮件”。这段推理会消耗 token,而且如果 prompt 里没限制,它可能把推理内容也塞进工具参数里。Claude 3.5 Sonnet的调用风格更“谨慎”。它会在第一次调用前先问一句:“我需要先查询数据库,确认数据后再决定是否发邮件。”然后才执行。这种“先思考再行动”的模式在复杂任务里其实是优点,但如果你追求低延迟