You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExpressJS调用OpenAI GPT-3 API报循环结构转JSON错误排查

问题原因及解决方案

这个错误是因为你直接把OpenAI返回的完整response对象传给了res.send(),而该对象包含循环引用的属性(比如请求实例、socket连接等),无法被正常序列化为JSON。

修复步骤

  1. 只提取OpenAI响应中的有效数据部分,也就是response.data,这才是包含AI生成内容的核心结构。
  2. 若只需要AI生成的文本结果,可以进一步从response.data.choices中提取具体内容。

修改后的核心代码:

app.get('/api/v1', async (req, res) => {
    
  let body = {
      model: "text-davinci-003",        
      prompt: "How are you?",
      temperature: 1,
      max_tokens: 2086,
      top_p: 1,
      frequency_penalty: 0,
      presence_penalty: 0,
  };

  
  const response = await openai.createCompletion(body);
  // 返回有效数据部分
  res.send(response.data);
  // 若仅需AI回答文本,可改为:
  // res.send({ answer: response.data.choices[0].text.trim() });
});

额外优化建议

  • 增加错误捕获:给异步请求添加try/catch,避免请求失败导致服务器崩溃:
app.get('/api/v1', async (req, res) => {
  try {
    let body = {
        model: "text-davinci-003",        
        prompt: "How are you?",
        temperature: 1,
        max_tokens: 2086,
        top_p: 1,
        frequency_penalty: 0,
        presence_penalty: 0,
    };

    const response = await openai.createCompletion(body);
    res.send(response.data);
  } catch (error) {
    res.status(500).send({ error: error.response?.data || error.message });
  }
});
  • 模型替换:text-davinci-003已被OpenAI弃用,建议改用gpt-3.5-turbo-instruct,参数结构完全兼容。

内容的提问来源于stack exchange,提问作者Chenille 'Shay' Pottle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:45:21