amon
V2EX  ›  OpenAI

ChatGPT 的 api 使用问题:关于加载上下文的限制

By amon at 2023 年 4 月 8 日 · 3984 次点击

Hello ,关于 ChatGPT api 调用,有个大大的疑惑,烦请大佬们解答,谢谢🙏

1 、已知 OpenAI 并没有提供会话和上下文相关的 api ,Chat 的 api 调用格式如下,只能靠传输历史对话记录作为上下文。

openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

2 、OpenAI 的 api 调用中,最大 tokens 有限制,比如 Chat 的模型是 4096tokens (包含请求和响应)。

问题来了: 1 、 如果历史对话记录已经很多条了,远远超过 4096tokens ,那么这个上下文该如何实现呢? 2 、 如果不保存上下文的话,那么这个 Chat 似乎又失去了意义。

10 条回复  •  2023-04-11 11:48:16 +08:00
metalvest
   1
metalvest  
   2023 年 4 月 8 日 via Android   ❤️ 2
用 langchain 保存在 Redis 里,用 refine 类型递归查找
参考官方文档里的助理用例
swulling
   2
swulling  
   2023 年 4 月 8 日   ❤️ 1
会话压缩,让 GPT 帮你总结下之前对话的摘要,扔到 system 中。
amon
   3
amon  
OP
   2023 年 4 月 8 日
@metalvest 谢谢,方便分享下文档地址吗?

@swulling 谢谢,“让 GPT 总结”是指另外调一次 api 去提取摘要吗。
metalvest
   5
metalvest  
   2023 年 4 月 8 日 via Android   ❤️ 2
xe2vherd
   6
xe2vherd  
   2023 年 4 月 8 日 via iPhone   ❤️ 1
https://www.v2ex.com/t/930154 最近看的一篇帖子,不管这个楼主说的对不对,我觉得都能引发一些思考。
hahastudio
   7
hahastudio  
   2023 年 4 月 8 日   ❤️ 1
简单点就用 tiktoken 去算 token 数,或者用一个设置去设置历史消息的上限。我自己用的话,对话一般也就 6 条以内算是相关性强的
sorcerer
   8
sorcerer  
   2023 年 4 月 10 日 via Android
@metalvest 这个不能突破 openai api 的 token 数限制吧。。
yinmin
   9
yinmin  
   2023 年 4 月 10 日 via iPhone
推荐一个项目: https://github.com/Yidadaa/ChatGPT-Next-Web

这个项目比较好的处理了你的问题。你用 chrome 开发者工具跟踪 ajax ,多次对话之后,能看到总结压缩之前的对话内容
metalvest
   10
metalvest  
   2023 年 4 月 11 日 via Android
@sorcerer 不是突破 token 数限制,是增加总 token 消耗为代价节省单次 token 数使用,达到处理超长文本的目的。
© 2026 V2EX · 60ms · 3.9.8.5