如何在OpenAI API的completions端点实现Chat界面的续问等效功能?
如何通过OpenAI API实现类似Chat界面的上下文续问功能
核心结论
completions 端点不会自动维护对话上下文,user 字段仅用于用户身份标识(风控用途),和上下文传递无关——这是你之前尝试失败的原因。要实现续问功能,有两种可行方案:
方案1:手动拼接历史对话到completions的Prompt中
你需要自己把每一轮的用户提问和AI回复拼接成新的Prompt,让模型基于完整对话历史生成内容。
示例流程:
- 第一次请求(初始提问):
curl https://api.openai.com/v1/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "model": "text-davinci-003", "prompt": "解释一下什么是机器学习", "max_tokens": 200 }'
- 得到AI回复后,第二次续问时,把历史对话拼入Prompt:
curl https://api.openai.com/v1/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "model": "text-davinci-003", "prompt": "用户:解释一下什么是机器学习\nAI:机器学习是人工智能的一个分支,通过数据训练模型来完成特定任务...\n用户:那它和深度学习的区别是什么?", "max_tokens": 200 }'
- 多次续问时,重复上述逻辑,每次都追加最新的对话内容。如果遇到token上限,可截断早期非关键对话,或对历史对话做摘要压缩后再拼接。
方案2:使用Chat Completions端点(更适配对话场景)
如果你的核心需求是对话式续问,推荐使用专门的Chat Completions端点,它原生支持结构化的对话历史格式,无需手动拼接Prompt。
示例流程:
- 第一次请求(初始提问):
curl https://api.openai.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "解释一下什么是机器学习"}] }'
- 续问时,将历史对话(用户+AI的消息)全部放入
messages数组:
curl https://api.openai.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "model": "gpt-3.5-turbo", "messages": [ {"role": "user", "content": "解释一下什么是机器学习"}, {"role": "assistant", "content": "机器学习是人工智能的一个分支,通过数据训练模型来完成特定任务..."}, {"role": "user", "content": "那它和深度学习的区别是什么?"} ] }'
- 每次续问只需追加新的
user角色消息即可,遇到token上限时,同样可通过截断早期对话或摘要压缩来继续请求。
关于突破单次token限制
不管使用哪个端点,都可以通过以下方式实现类似Chat界面的多次续问突破单次token限制:
- 对历史对话进行摘要压缩:把之前的对话总结成一段简洁的上下文描述,放入新请求中
- 截断非关键对话:只保留最近几轮核心对话,丢弃早期无关内容
内容的提问来源于stack exchange,提问作者qus
相关产品推荐
相关产品推荐

