jev响应体为空主因是请求未正确发送或服务端未收到有效payload;需严格检查content-type头、state字段完整性与类型、questions schema合规性,且jev默认静默失败而非报错。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

Jev 的响应体为空,基本不是模型问题,而是请求没发对、或服务端没收到有效 payload。
为什么 response.body 是空字符串或 null
和 Spring Boot 中 MockMvc 返回空 JSON、WordPress AJAX 返回空响应一样,Jev API 空响应的根因通常是「服务端根本没解析到你传的 state 和 questions」。它不像通用大模型会容忍格式松散——Jev 要求结构严格、字段完整、类型明确,缺一不可。
- 常见错误现象:
HTTP 200但响应体是{}或空字符串;curl -v显示Content-Length: 0;日志里看不到任何 Jev 的处理痕迹 - 最常漏掉的是
Content-Type: application/json请求头,没这个头,TypeSafe 的网关可能直接拒绝解析 body,返回空响应而非报错 - 如果用
fetch发送,忘记设body: JSON.stringify({...}),或者忘了JSON.parse()后再传给fetch,也会导致 body 实际为空 - Jev 不接受
application/x-www-form-urlencoded或表单数据,只认标准 JSON,传错类型等于没传
state 字段缺失或类型不匹配
Jev 的 state 必须是明确的 JSON 值:字符串、对象、数组三选一,不能是 null、undefined 或未序列化的 JS 对象(比如一个还没 JSON.stringify() 的 {text: "..."})。
- 前端常见坑:把
state写成state: { text: input.value },没转 JSON,后端收不到有效字段 - 后端常见坑:从数据库读出的字段含不可见控制字符(如
\u2028),JSON 序列化失败,导致整个 request body 解析中断 - 如果
state是数组,必须是非空且元素类型一致(例如全为字符串),混合类型(["a", 123, null])可能导致静默截断 - Vercel AI Gateway 在免费额度内会对非法 payload 做快速丢弃,不返回
4xx,而是空响应 +200,这是为了防探测攻击
Questions 定义不符合 schema 规则
Jev 要求每个 question 必须带 type("choice" / "score" / "noul"),且对应字段存在且合法。少一个字段,整个 questions 数组会被跳过,最终 response 里 results 为空数组,body 就只剩 {"results":[]} —— 看似有内容,实则无判断结果。
-
choice类型必须提供options数组,且至少两个非空字符串;写成options: [""]或options: []会静默失败 -
score类型的levels必须是字符串数组,不能是数字或对象;["0", "1", "2"]可以,[0, 1, 2]不行 -
noul类型不接受额外字段,加了threshold或description会导致该 question 被忽略 - 所有
question.id必须唯一,重复 ID 会导致后续 question 被覆盖,容易误判为“只返回了一个结果”
空响应最容易被忽略的点
它不报错,不代表它工作了。Jev 的设计哲学是「宁可沉默,也不幻觉」——当输入无法解析、字段缺失、类型冲突时,它倾向返回空 results 而非抛异常或伪造结果。这意味着你得主动检查响应体是否含有效 results 数组,而不是只看 HTTP 状态码。
- 不要只断言
response.status === 200,要验证response.results?.length > 0 - Vercel AI Gateway 日志里查不到空响应的 trace,因为它在网关层就终止了,真正调用 Jev 的日志只出现在 TypeSafe 的后端,普通用户不可见
- 本地用
curl测试时,务必加-H "Content-Type: application/json"和-d @payload.json,避免 shell 解析干扰 - 如果你用 LangChain 封装调用,确认它没自动加 wrapper 字段(比如把
state包进input),Jev 不识别这种嵌套











