422错误源于语义校验失败,需先通过devtools区分是fitten code前置校验(返回code 1214)还是下游模型校验(返回detail数组),再按角色顺序补全messages、统一字段命名、字符串化非字符串字段。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当你在使用 Fitten Code 调用 AI 接口时收到 422 Unprocessable Entity 错误,说明请求体(JSON)结构或字段值已通过网络传输和语法解析,但被后端模型服务判定为语义无效——比如角色字段写成"assistant"却漏传content,或message数组里混入了非标准role值,这类问题不会在发送瞬间失败,而是在服务端校验环节被精准拦截。
确认报错来源是 Fitten Code 还是下游模型
打开浏览器 DevTools → Network 标签页 → 找到对应请求 → 查看 Response 内容。若返回体含 {"error": {"code": "1214", "message": "messages[0].role must be user or system"}},则错误来自 Fitten Code 自身的前置校验层;若返回体是 {"detail": [{"loc": ["body", "messages"], "msg": "..."}]},则是 FastAPI + Pydantic 框架拦截,说明请求已穿透 Fitten Code 代理,问题出在你构造的 message 结构不符合下游模型(如 GLM-5.2)的输入契约。
这一步必须做,因为修复路径完全不同:前者改客户端 JSON 字段名,后者要同步检查模型文档中 role 取值范围、content 是否允许为空、system 消息是否必须置顶等硬性规则。
修复 message 数组结构错误(最常见场景)
方法一:严格按角色顺序与必填项补全
- 确保 messages 是非空数组,且首条消息的
role必须为 system 或 user; - 每条消息必须包含
role和content字段,content值不能为null或空字符串; - 若使用
tool_calls,需确保其父级消息role为 assistant,且该消息自身content可为空字符串(但不能省略); - 禁止出现
role: "assistant"后紧接role: "assistant"的连续两条消息——必须穿插user或tool回调消息。
方法二:用 curl 快速验证最小合法结构
复制以下命令到终端执行,替换 YOUR_API_KEY:
curl -X POST "https://api.fitten.code/v1/chat/completions" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"model":"glm-5.2","messages":[{"role":"user","content":"你好"}]}'
如果这个最简请求仍报 422,说明你的 API KEY 权限未开通 glm-5.2 模型访问,或服务端灰度策略限制了调用频次——此时需联系 Fitten Code 运维提供 trace_id 定位。
规范化输入字段类型与命名
方法1:强制转为字符串再提交
Fitten Code 1.0.3是一款由清华博士团队打造的AI编程助手,基于国产计图(Jittor)深度学习框架开发。它支持VS Code、JetBrains系列等主流IDE及80多种编程语言。核心功能包括智能代码补全、注释生成、代码解释、Bug检测、单元测试生成等,旨在全方位提升开发效率。该工具对个人用户免费开放。
当后端报错 "type": "int_parsing" 或 "type": "bool_parsing",说明你传了数字/布尔字面量,但接口要求字符串。例如 "temperature": 0.7 应改为 "temperature": "0.7" ——这不是精度问题,而是 Pydantic 模型字段定义为 str 类型导致的硬性校验失败。
方法2:统一字段命名风格
Fitten Code 接口严格区分下划线与驼峰。若模型文档写的是 max_tokens,你就不能传 maxTokens;若文档写 tool_choice,传 toolChoice 会直接触发 {"loc": ["body", "toolChoice"], "msg": "Field not found"}。遇到不确定时,优先以 OpenAI 兼容接口文档中的字段名为准,Fitten Code 的 OpenAI 兼容层对字段名大小写和分隔符零容忍。
【关键前提】所有非字符串字段(如 temperature、top_p、n)若未在文档中明确标注类型,默认按字符串接收——这是 Fitten Code 为兼容多模型做的特殊约定,与标准 OpenAI API 不同。
绕过字段级校验的临时调试法
在开发环境临时禁用 Pydantic 强校验,直接查看原始请求体:
修改 FastAPI 路由函数签名,将原 data: ChatRequest 改为 request: Request;
然后用 body = await request.json() 获取原始 JSON;
打印 body 并逐字段比对是否有多余字段、嵌套层级错位、空数组误作 null 等问题。
注意:此法仅用于本地调试,上线前必须切回 Pydantic 模型校验,否则会丢失字段类型安全与业务约束。










