[Bug]: LangBot Models 的 Claude 模型在工具执行成功后重复发起 tool call
Author: RockChinQCreated Sep 5, 2026Updated Sep 7, 2026
Labelsbug?m: Providerm: Tools
运行环境
- LangBot v4.11.0,
dev/4.11.x,commitf5d6a3b34 - macOS 14.8.5 / arm64 / Python 3.12.14
- 本地开发模式,Plugin Runtime 和 Box 使用 standalone 模式
- 模型服务:LangBot Models,
https://api.langbot.cloud/v1 - UI 复现模型:
claude-opus-4-8
部署版本
社区版
异常情况
使用 LangBot Models 的 Claude 模型调试成员入群事件时,Agent 已经获取成员信息并成功执行欢迎消息工具,但下一轮模型响应仍会再次调用工具,反复查询成员、发送欢迎消息,无法正常收尾。
用户在同一场景换成 GPT 后测试正常。先按 LangBot Models 的 Claude 调用链问题跟踪,具体是网关协议转换、通道配置还是上游服务行为,还需要后续排查。
已确认的情况:
- 检查了 12 次调试事件,每个事件都只有 1 个 run;重复的工具调用发生在同一个 Agent loop 内。
- 后续模型请求中保留了之前的 assistant tool calls 和对应的 tool results,欢迎消息成功的结果也已写入历史;
tool_choice为auto。 - 将“成员查询成功、欢迎消息发送成功”的完整历史直接提交到 LangBot Models 的
/chat/completions,绕开 LangBot 的事件调度和 Agent loop,仍能复现。对claude-opus-4-8和claude-sonnet-4-6各做 2 次请求,4 次都再次返回event_get_actor。 - 使用等价的
/messages请求也复现了重复调用。
欢迎消息工具成功后,下一次 API 响应的关键字段仍是:
{
"message": {
"role": "assistant",
"content": "收到新成员加入事件,先获取成员信息。",
"tool_calls": [
{
"type": "function",
"function": {
"name": "event_get_actor",
"arguments": "{\"_call\":\"获取新加入成员信息\"}"
}
}
]
},
"finish_reason": "tool_calls"
}期望在完成当前任务后,模型返回不含 tool call 的最终响应,Agent loop 随之结束。需要多步工具操作时,仍应允许正常继续执行。
复现步骤
- 创建使用内置 Agent 的处理器,选择 LangBot Models 的
claude-opus-4-8。 - 提示词设置为:
当用户加入群聊时,发送一条欢迎消息,你生成一句俏皮话,然后带上他的名称。 - 在事件调试中选择
group.member_joined,事件描述填写A new member joined the group.,启用成员查询和回复工具。 - 点击一次运行测试。平台工具使用 Mock,模型调用仍走真实模型接口。
- 观察成员查询、欢迎消息工具成功后,模型仍继续发起新的工具调用。
启用的插件
本次复现使用 langbot-team/LocalAgent v0.1.2。
后续处理
暂时切换 GPT 可绕开此问题,后续排查和优化 LangBot Models 的 Claude 调用链。保留“模型本轮不返回 tool call 时结束”的正常机制;之前尝试的额外事件提示词和欢迎消息工具强制终止均已撤回。
Source: langbot-app/LangBot