V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
NorthSea
V2EX  ›  程序员

chatgpt 怎么进行连续对话

  •  
  •   NorthSea · 2023-02-11 23:29:00 +08:00 · 4704 次点击
    这是一个创建于 681 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近搞了个 chatgpt 的在线网站,写出来可以对话,但是不知道怎么进行连续对话,不知道怎么记住会话状态,求大佬给个解决方案

    7 条回复    2023-02-19 00:55:29 +08:00
    qinrui
        1
    qinrui  
       2023-02-11 23:52:15 +08:00 via iPhone
    HankAviator
        2
    HankAviator  
       2023-02-12 01:04:03 +08:00
    花钱也可以
    ansonsiva
        3
    ansonsiva  
       2023-02-12 01:10:45 +08:00
    没办法,现在的 api 是 3.0 版本的,没法连续对话,除非你把前一个对话放在后一个对话里一起提问
    官方网页上的 chatgpt 是 3.5 版本的,没开放 api
    sneezry
        4
    sneezry  
       2023-02-12 01:38:45 +08:00
    发起提问的时候配置 stop 参数,比如 stop: [' Human:', ' AI:'],然后问题带上之前的提问和 AI 给出的回答。比如你如果想实现下面的对话:

    你:你更喜欢猫还是狗?
    AI:猫。
    你:为什么?
    AI:因为猫更能治愈我的心灵。

    那么你在发送第二个问题的时候要发送“为什么? Human:你更喜欢猫还是狗? AI:猫。”。注意 Human 和 AI 前有空格。

    OpenAI 有一个最大 token 限制,你的提问内容不能超过 4096 个 token ,所以历史记录的长度也有限制,不能无限制往上加。
    ersic
        5
    ersic  
       2023-02-12 12:57:13 +08:00
    把所有对话内容都传过去
    LaurelHarmon
        6
    LaurelHarmon  
       2023-02-12 17:26:55 +08:00 via Android
    之前网页版会返回文本内容加 utterance id ,新请求带上 last utterance id 就行
    alsorunning
        7
    alsorunning  
       2023-02-19 00:55:29 +08:00
    大家知道 openai 的模型输出是有字数限制的,不能超过 4000 个 token 。这 4000 token 是包含 prompt 的内容加 completion 的总和。

    比方说,在 playground 中的 chat 示例,就是给定下面的文字当作 prompt:

    ```
    The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.

    Human: Hello, who are you?
    AI: I am an AI created by OpenAI. How can I help you today?
    Human:
    ```

    如果要实现对话的效果,就是让 ai 模型来续写这段文字。一旦 ai 写到 Human 这个关键字,就停下来等用户输入。这样塑造用户在与 ai 对话的错觉。

    这么做的话一旦超过 4000 token ,就必须舍弃之前的内容。一般可以保留 prompt ,从最早的 completion 开始舍弃。这样的策略对于简短的问答 session 是可行的。不过,对于很长的对话却有问题。

    比方说我做一个虚拟老婆,初始的人物设定放在 prompt 里没问题,不过更多人物设定是在对话中产生的,这些设定会随着内容增加。我又不希望这个模型在聊两天后把之前的设定忘了,这时候就有问题了。

    我能想到的点子是:把每次 completion 的结果都当成 fine tuning ,一旦一个 session 超过 4000 token 后,就切换到 fine tuning 后的模型。

    不知有没有做过这方面功能的前辈。望指点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1044 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 20:01 · PVG 04:01 · LAX 12:01 · JFK 15:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.