解决ChatGPT回复中途截断问题(排除CURL原因)
问题解决:OpenAI API回复被截断
原因分析
你的问题出在text-davinci-002模型的默认参数限制上——该模型调用createCompletion时,默认max_tokens值为16,这个参数控制模型生成内容的最大token数量,16个token仅能输出极短的内容,直接导致回复中途截断。
解决方案
调用createCompletion时,显式设置max_tokens参数为合适数值(比如200、500,注意text-davinci-002最大支持4097个token),即可让模型生成更长的完整回复。可选搭配temperature参数调整回复随机性。
修改后的核心代码片段:
// Generate a response with ChatGPT const completion = await openai.createCompletion({ model: "text-davinci-002", prompt: prompt, max_tokens: 200, // 调整此值控制回复长度 temperature: 0.7 // 可选,0为严谨风格,1为随机风格 });
完整修改代码
const express = require("express"); const cors = require("cors"); const bodyParser = require("body-parser"); const { Configuration, OpenAIApi } = require("openai"); const configuration = new Configuration({ apiKey: "my-api-key", }); const openai = new OpenAIApi(configuration); // Set up the server const app = express(); app.use(bodyParser.json()); app.use(cors()) // Set up the ChatGPT endpoint app.post("/chat", async (req, res) => { // Get the prompt from the request const { prompt } = req.body; // Generate a response with ChatGPT const completion = await openai.createCompletion({ model: "text-davinci-002", prompt: prompt, max_tokens: 200, // 新增参数,控制最大生成token数 temperature: 0.7 }); console.log(completion.data.choices[0].text) res.send(completion.data.choices[0].text); }); // Start the server const port = 8080; app.listen(port, () => { console.log(`Server listening on port ${port}`); });
验证测试
重启服务后,使用原CURL命令测试:
curl -X POST -H "Content-Type: application/json" -d '{"prompt":"Hello, how are you doing today?"}' http://localhost:8080/chat
此时模型将生成完整的长回复,不会再出现截断问题。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

