Node.js调用GPT-3.5-Turbo接口仅返回success:true无数据问题
问题解决:调用GPT-3.5-Turbo接口未返回预期症状清单数据
问题原因
你代码中读取GPT响应内容的字段错误。GPT-3.5-Turbo的createChatCompletion接口返回的对话内容,存储在choices[0].message.content字段中,而你当前代码用的choices[0].text是旧版文本补全接口(如text-davinci-003)的字段,因此会获取到undefined,最终返回的JSON里data字段缺失,表现为仅返回{"success":true}。
修正后的代码
const express = require("express"); require("dotenv").config(); const { Configuration, OpenAIApi } = require("openai"); const app = express(); app.use(express.json()); const configuration = new Configuration({ apiKey: process.env.OPEN_AI_KEY, }); const openai = new OpenAIApi(configuration); app.post("/try", async (req, res) => { try { const { prompt } = req.body; const response = await openai.createChatCompletion({ model: "gpt-3.5-turbo", messages: [ { role: "system", content: "你是一个症状清单提供者,请返回清晰的症状检查清单,建议用分点形式呈现", }, { role: "user", content: `请列出关于${prompt}需要检查的症状`, }, ], max_tokens: 1000, temperature: 0, top_p: 1.0, frequency_penalty: 0.0, presence_penalty: 0.0, }); // 修正字段获取逻辑,同时增加空值判断 const content = response.data.choices[0]?.message?.content || "未获取到症状数据"; return res.status(200).json({ success: true, data: content, }); } catch (error) { return res.status(400).json({ success: false, error: error.response ? error.response.data : "服务器出现问题 :(", }); } }); const port = process.env.PORT || 3001; app.listen(port, () => console.log("server running"));
额外优化建议
如果需要让GPT返回JSON格式的响应(方便后续解析处理),可以修改prompt明确要求:
- 将system prompt改为:
"你是一个症状清单提供者,请严格以JSON数组格式返回需要检查的症状,每个元素为字符串类型的症状描述" - user prompt保持不变,这样返回的
data就是标准JSON格式,前端可以直接解析使用。
内容的提问来源于stack exchange,提问作者ealtugk
相关产品推荐
相关产品推荐

