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

2023-04-08 14:34:29 +08:00
 amon

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 似乎又失去了意义。

2533 次点击
所在节点    OpenAI
10 条回复
metalvest
2023-04-08 14:41:44 +08:00
用 langchain 保存在 Redis 里,用 refine 类型递归查找
参考官方文档里的助理用例
swulling
2023-04-08 14:48:58 +08:00
会话压缩,让 GPT 帮你总结下之前对话的摘要,扔到 system 中。
amon
2023-04-08 15:26:41 +08:00
@metalvest 谢谢,方便分享下文档地址吗?

@swulling 谢谢,“让 GPT 总结”是指另外调一次 api 去提取摘要吗。
metalvest
2023-04-08 18:29:20 +08:00
metalvest
2023-04-08 18:32:56 +08:00
zmxnv123
2023-04-08 18:44:33 +08:00
https://www.v2ex.com/t/930154 最近看的一篇帖子,不管这个楼主说的对不对,我觉得都能引发一些思考。
hahastudio
2023-04-08 19:02:04 +08:00
简单点就用 tiktoken 去算 token 数,或者用一个设置去设置历史消息的上限。我自己用的话,对话一般也就 6 条以内算是相关性强的
sorcerer
2023-04-10 07:14:34 +08:00
@metalvest 这个不能突破 openai api 的 token 数限制吧。。
yinmin
2023-04-10 09:29:28 +08:00
推荐一个项目: https://github.com/Yidadaa/ChatGPT-Next-Web

这个项目比较好的处理了你的问题。你用 chrome 开发者工具跟踪 ajax ,多次对话之后,能看到总结压缩之前的对话内容
metalvest
2023-04-11 11:48:16 +08:00
@sorcerer 不是突破 token 数限制,是增加总 token 消耗为代价节省单次 token 数使用,达到处理超长文本的目的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/930809

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX