Skip to content

MiniMax Anthropic 格式 streaming 响应转换错误,导致重复回复 #2406

@ysongyang

Description

@ysongyang

例行检查

  • [ x ] 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我已完整查看过项目 README,尤其是常见问题部分
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

问题描述
使用 MiniMax 的 Anthropic 格式(https://api.minimaxi.com/v1/messages with anthropic-version: 2023-06-01)时,streaming 响应的最后一个 chunk 同时包含 delta 和 message 字段:
{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"帮助你的吗?"}}
{"type":"message","role":"assistant","content":[{"type":"text","text":"你好!有什么我可以帮助你的吗?"}]}
OneAPI 在将 Anthropic 格式转换为 OpenAI 格式时,没有正确处理最终 message 字段,直接透传了 choices[0].message.content,导致:
delta 阶段:客户端收到 "帮助你的吗?"
最终 message 阶段:客户端再次收到 "你好!有什么我可以帮助你的吗?"

影响
OpenClaw 等客户端的 feishu channel 会把两个 content 都当作有效回复发送,用户收到两条重复消息
使用 streaming 的应用如果同时处理 delta 和最终 message,会看到重复内容

复现步骤
配置 MiniMax channel,模型格式选择 Anthropic
在 OpenClaw 或其他兼容客户端使用该模型
发送任意消息
观察到同一条回复出现两次
环境
MiniMax API (api.minimaxi.com)
模型:MiniMax-M2.7-highspeed
OneAPI 版本:latest
临时解决方案
将 MiniMax 配置为 OpenAI 兼容格式(直接调用 https://api.minimaxi.com/v1/chat/completions),绕过了 Anthropic 格式转换,问题消失。
建议修复
在 anthropic.go 的 streaming 响应处理中,过滤掉最终的 message 类型的 chunk,只保留 content_block_delta 阶段的数据。参考 Anthropic 官方文档:streaming 响应中 message 类型的 chunk 是最终汇总,不应再作为增量发送。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions