调用xAI API的/v1/chat/completions端点时遇Unprocessable Entity错误求助
排查xAI API 422 Unprocessable Entity错误的方案
错误原因分析
422错误表示请求格式合法但参数不符合API要求,结合你的代码和请求内容,可能的触发原因包括:
- API密钥无效或无目标模型访问权限
- 请求参数缺失/格式不符合xAI API规范
- 自定义
cleanBOM函数破坏了消息内容格式 - 未获取API返回的详细错误信息,无法定位具体问题
解决方案步骤
1. 先获取API返回的详细错误详情
当前代码仅捕获了状态文本,无法得知具体参数问题,修改错误处理逻辑,打印API返回的完整错误信息:
if (!response.ok) { // 读取API返回的错误详情 const errorDetails = await response.json(); throw new Error(`API request failed: ${response.statusText} - ${JSON.stringify(errorDetails)}`); }
运行后查看控制台输出,这是定位问题最直接的方式。
2. 验证API密钥与模型权限
- 确认
process.env.XAI_API_KEY已正确配置,密钥无拼写错误、未过期 - 检查xAI账号权限:
grok-beta模型目前需要X Premium+订阅,且可能处于限量测试阶段,未满足条件会返回权限类422错误
3. 排查消息处理逻辑
临时注释cleanBOM函数调用,测试请求是否正常:
const messages = rawMessages.map((msg: any) => ({ ...msg, // 临时禁用cleanBOM,排查是否为内容处理导致的问题 content: msg.content }));
若请求恢复正常,说明cleanBOM函数可能修改了消息内容格式(如引入不可见字符、截断内容等),需修复该函数。
4. 核对请求参数规范
根据xAI API要求,/v1/chat/completions必填参数为model和messages,需注意:
messages数组中每个对象的role只能是user、assistant或system,你的请求中role: "user"合法- 确认
model名称正确,当前可用模型为grok-beta(需权限),拼写错误会触发参数类422错误
测试建议
先用Postman或curl直接调用API,排除代码逻辑干扰:
curl https://api.x.ai/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "model": "grok-beta", "messages": [{"role": "user", "content": "Hello"}] }'
若curl请求也返回422,说明问题出在API密钥或权限上;若curl请求正常,再回到代码中排查参数处理逻辑。
内容的提问来源于stack exchange,提问作者Code on the Rocks
相关产品推荐
相关产品推荐

