调用腾讯混元api时messages必须以user或tool结尾,禁止assistant结尾;需用json.dumps整体序列化,禁用手动拼接;工具调用需严格遵循user→assistant→tool→assistant→user序列;anthropic模式下messages格式及system参数位置完全不同。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

调用腾讯混元API时,messages参数组织错误会导致400 Bad Request,尤其在工具调用、流式响应或与AI编程工具(如Roo Code)集成时极易失败。
基础结构:必须以user或tool角色结尾
混元严格校验messages数组的末尾角色:若最后一条消息是assistant,请求直接被拒绝。
第一步:构建消息列表时,确保最后一条消息的role字段为"user"或"tool"。
第二步:如果上一轮模型返回了assistant消息,下一次请求前必须追加一条新的user消息(哪怕内容为空字符串),否则会报错“messages以assistant结尾”。
第三步:不要照搬OpenAI风格的对话收尾逻辑——混元不接受assistant结尾,这点和OpenAI、Anthropic都不同。
处理换行符与双引号:必须用json.dumps整体序列化
原始文本含\n、\r、"等字符时,手动拼接JSON字符串极易出错,引发400错误。
方法一:先构造Python字典,再一次性json.dumps
把每条消息构造成{"role": "user", "content": raw_text}字典,全部放入messages列表;然后对{"messages": messages}整体调用json.dumps(ensure_ascii=False)。这一步【必须整体序列化,不能只对content单独转义】,否则换行符仍会破坏JSON结构。
方法二:禁用手动字符串拼接
绝对不要用f-string或+号拼接JSON字符串,哪怕你已用.replace("\n", "\n")处理过——这种局部替换无法覆盖所有JSON非法字符(如未转义的双引号、制表符、Unicode控制字符)。
工具调用场景:tool后必须接assistant再接user
当启用函数调用(tool calls)时,混元要求严格的消息序列:user → assistant → tool → assistant → user。
方法1:标准三段式补全
若上一轮收到tool消息,下一轮请求不能直接跟user;必须先插入一条assistant消息(role="assistant", content=""即可),再放新的user消息。否则触发“tool后缺少assistant过渡”校验失败。
方法2:过滤非法字段
删除OpenAI特有字段如parallel_tool_calls、reasoning_effort、function.strict——这些字段混元服务器会直接拒绝解析,无需尝试兼容。
Anthropic兼容模式下的特殊写法
使用Anthropic协议调用混元(base_url指向/api.hunyuan.cloud.tencent.com/anthropic)时,messages结构完全不同。
此时不能传[{ "role": "user", "content": "xxx" }],而必须按Anthropic Messages API格式组织:
content字段必须是数组,每项带type字段,例如[{"type": "text", "text": "Hi"}];system提示词需单独作为system参数传入,不放进messages。
注意:【同一应用不可混用OpenAI和Anthropic两种messages格式】,切换协议时必须同步调整整个请求体结构,否则400错误无法避免。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











