例行检查
问题描述
使用 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 是最终汇总,不应再作为增量发送。
例行检查
问题描述
使用 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 是最终汇总,不应再作为增量发送。