#2511·LangBot

[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,commit f5d6a3b34
  • 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_choiceauto
  • 将“成员查询成功、欢迎消息发送成功”的完整历史直接提交到 LangBot Models 的 /chat/completions,绕开 LangBot 的事件调度和 Agent loop,仍能复现。对 claude-opus-4-8claude-sonnet-4-6 各做 2 次请求,4 次都再次返回 event_get_actor
  • 使用等价的 /messages 请求也复现了重复调用。

欢迎消息工具成功后,下一次 API 响应的关键字段仍是:

json
{
  "message": {
    "role": "assistant",
    "content": "收到新成员加入事件,先获取成员信息。",
    "tool_calls": [
      {
        "type": "function",
        "function": {
          "name": "event_get_actor",
          "arguments": "{\"_call\":\"获取新加入成员信息\"}"
        }
      }
    ]
  },
  "finish_reason": "tool_calls"
}

期望在完成当前任务后,模型返回不含 tool call 的最终响应,Agent loop 随之结束。需要多步工具操作时,仍应允许正常继续执行。

复现步骤

  1. 创建使用内置 Agent 的处理器,选择 LangBot Models 的 claude-opus-4-8
  2. 提示词设置为:当用户加入群聊时,发送一条欢迎消息,你生成一句俏皮话,然后带上他的名称
  3. 在事件调试中选择 group.member_joined,事件描述填写 A new member joined the group.,启用成员查询和回复工具。
  4. 点击一次运行测试。平台工具使用 Mock,模型调用仍走真实模型接口。
  5. 观察成员查询、欢迎消息工具成功后,模型仍继续发起新的工具调用。

启用的插件

本次复现使用 langbot-team/LocalAgent v0.1.2。

后续处理

暂时切换 GPT 可绕开此问题,后续排查和优化 LangBot Models 的 Claude 调用链。保留“模型本轮不返回 tool call 时结束”的正常机制;之前尝试的额外事件提示词和欢迎消息工具强制终止均已撤回。