调用typesafe-ai/jev返回400错误的主因是请求体json结构非法:questions字段缺失或非object类型、state类型不符(仅接受string/object/array)、question的type值拼写错误(仅支持小写noul/choice/score)。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

响应格式错误的典型现象
调用 typesafe-ai/jev 时返回 400 Bad Request 或解析失败,常见于:请求体 JSON 结构不合法、questions 字段缺失或类型错配、state 不是字符串/对象/数组、某个 question 的 type 拼写错误(比如写成 "noul" 但实际应为 "noul"——注意大小写和拼写,官方只认 "noul"、"choice"、"score" 这三种小写原语)。
必须严格遵守的字段结构
state 和 questions 是顶层必填字段,且类型不可替换:
-
state必须是string、object或array;不能是null、number、boolean或undefined -
questions必须是 object,key 为自定义问题名(如"is_refund_request"),value 必须含type字段,且值只能是"noul"、"choice"或"score" - 若使用
"choice",必须提供options数组(字符串列表);若用"score",必须提供scores数组(字符串列表,按顺序排列)
示例正确结构:
{
"state": "用户说'我要退货,昨天刚收到货,包装还没拆'",
"questions": {
"is_refund_request": { "type": "noul", "instructions": "用户是否明确提出了退款请求?" },
"refund_reason": {
"type": "choice",
"options": ["包装破损", "发错货", "不想要了", "其他"],
"instructions": "用户提出的退货原因是什么?"
}
}
}
容易被忽略的参数兼容性细节
不同 SDK 或网关对字段容忍度不同。Vercel AI Gateway 默认会校验更严格,而直连 TypeSafe API 可能允许部分可选字段省略。关键差异点:
-
instructions字段不是必须的,但强烈建议保留——省略后 Jev 仍能工作,但判断依据变模糊,置信度可能下降 -
confidence、probabilities等字段是响应里的输出字段,**绝不能**出现在请求中;加了会直接 400 - Vercel AI SDK(如
@vercel/aiv2.1+)会自动包裹请求,但如果你手写 fetch,必须确保Content-Type: application/json且 body 是合法 UTF-8 JSON 字符串(无 trailing comma、无注释)
调试时优先检查这三处
遇到格式报错,别急着改逻辑,先确认:
- 用
JSON.stringify()序列化前,打印原始 JS 对象,看是否有undefined或NaN值混入state或questions - 用
curl -v或 Postman 发一次最小可行请求,排除 SDK 封装层干扰 - 检查响应头中的
X-Jev-Error-Code(如有),TypeSafe 有时会在 header 里返回具体字段名,比如X-Jev-Error-Code: invalid-question-type
最常被踩的坑是把 questions 写成数组而非对象,或者在 choice 里漏掉 options——这两者都会导致 400,且错误信息极简,几乎不提示具体哪一行出错。











