ChatGPT 会话里每条消息的交互,都会包含之前所有的对话吗?

2023-06-08 15:19:53 +08:00
 zrc199021

如题,这个问题不是很理解。官方版 ChatGPT 的会话里面,每次提问回答,后台都默认带着之前所有的内容吗?还是又一定 quota 限制?

我看 openai 的 api 不是这么做的。有人测试过或者了解吗?

1431 次点击
所在节点    OpenAI
13 条回复
kkhaike
2023-06-08 15:37:55 +08:00
据我的理解,每个会话不会包含所有内容。
而是 AI 算法经过前面所有内容的最终状态。
你只要知道 chatgpt 本质是个向后生成算法就行
chitanda
2023-06-08 17:11:50 +08:00
即使在同一个会话中,它也经常想不起来我之前发过的东西,还需要重新发一遍
brader
2023-06-08 17:27:02 +08:00
目前我接入他们的 API ,确实是自己传递完整的上下文对话给他的,类似这样子,随着对话,数组一直叠加,我不知道你们是不是这么做的
```
[
{
"role":"user",
"content":"你好"
},
{
"role":"assistant",
"content":"你好!我是 AI 助手,请问你有什么需要帮助的吗?"
},
{
"role":"user",
"content":"我们来玩角色扮演"
}
]

```
didikee
2023-06-08 17:40:59 +08:00
在 openai 的接口中:
{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello!"}]
}

其中的 role 规则:
role string Required
The role of the author of this message. One of system, user, or assistant.

user 代表用户输入的内容。system 即代表上下文,也就是你之前说的话。

所以从 openai 提供的接口来看是需要传入之前的话才能实现上下文连贯的。
zrc199021
2023-06-08 17:51:01 +08:00
@didikee 你这个不太对吧,system 代表的是当前会话的「背景设定」类似于:我要你扮演 xx 角色这类信息。

我个人猜测,官方 ChatGPT 和 api 类似,他应该有个默认的上下文容量限制,比如 1024 个 token 什么的。
mobpsycho100
2023-06-08 18:05:25 +08:00
didikee
2023-06-08 18:05:26 +08:00
@zrc199021 确实,我理解有误。根据这篇文章 ( https://ai.stackexchange.com/questions/39837/meaning-of-roles-in-the-api-of-gpt-4-chatgpt-system-user-assistant )的解释,应该需要像 @brader 回答的一样把之前的对话带过去。我目前使用的是别人写好的一个 UI 框架,它可以设置最多附带的上下文语句的数量。

我之前在测试的时候把之前说过的话放在 system 里貌似也能得到附带上下文效果,可能我测试太少出现偏差。
brader
2023-06-08 18:09:13 +08:00
@zrc199021 很早以前是限 1024 的,现在好像放宽大多了,能满足你大部分的使用场景了
brader
2023-06-08 18:16:24 +08:00
@didikee
@zrc199021
@mobpsycho100 我接入这个 API 做产品也有一段时间了,根据我的个人经验观察,目前我能想到的比较好的方案就是:在综合考虑 API 限制、成本、用户体验下,在单次会话中,我们尽量保证一个足够长的上下文对话长度(比如最后 20 句话),因为多少句话并不能准确衡量消息长度,所以我们同时要递归检测消息长度是否超限,假设 API 的最大 token 限制是 4096 ,那么我们每次递归检查,判断到消息长度超过 4096 ,就丢弃一句上下文对话,直到符合长度限制为止。
C0nvN3t
2023-06-09 10:22:16 +08:00
@brader 大文本貌似还是不行 需要手动分片请求
brader
2023-06-09 10:39:55 +08:00
@C0nvN3t 再怎么分片都是没有用的,别人有上限,你不同会话,就没有了关联性了
aiqinxuancai
2023-06-09 11:23:45 +08:00
是需要包含之前所有的对话和回复,但是因为 token 有限制( 3.5=4096token ),说了太多的话,会逐步丢弃最早的会话内容,这就是遗忘的本质。

另外 @brader ,token 长度不等于消息文本长度,可以通过 tiktoken 库提前计算 token 。
Cod1ng
2023-06-22 21:30:55 +08:00
应该是做了某种的摘要,可以在对话多轮之后,问 chatGPT “我说过的第 x 句话是什么”或者“你回复的第 y 句话是什么”,就知道他是否存储了原始的 context 了

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

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

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

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

© 2021 V2EX