ChatGPT 会话里每条消息的交互,都会包含之前所有的对话吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ton618
V2EX    OpenAI

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

  •  
  •   ton618 2023-06-08 15:19:53 +08:00 2057 次点击
    这是一个创建于 902 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    ```
    didikee
        4
    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 提供的接口来看是需要传入之前的话才能实现上下文连贯的。
    ton618
        5
    ton618  
    OP
       2023-06-08 17:51:01 +08:00
    @didikee 你这个不太对吧,system 代表的是当前会话的「背景设定」类似于:我要你扮演 xx 角色这类信息。

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

    另外 @brader ,token 长度不等于消息文本长度,可以通过 tiktoken 库提前计算 token 。
    Cod1ng
        13
    Cod1ng  
       2023-06-22 21:30:55 +08:00
    应该是做了某种的摘要,可以在对话多轮之后,问 chatGPT “我说过的第 x 句话是什么”或者“你回复的第 y 句话是什么”,就知道他是否存储了原始的 context 了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3438 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 05:01 PVG 13:01 LAX 21:01 JFK 00:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86