最近搞了个 chatgpt 的在线网站,写出来可以对话,但是不知道怎么进行连续对话,不知道怎么记住会话状态,求大佬给个解决方案
1
qinrui 2023-02-11 23:52:15 +08:00 via iPhone
|
2
HankAviator 2023-02-12 01:04:03 +08:00
花钱也可以
|
3
ansonsiva 2023-02-12 01:10:45 +08:00
没办法,现在的 api 是 3.0 版本的,没法连续对话,除非你把前一个对话放在后一个对话里一起提问
官方网页上的 chatgpt 是 3.5 版本的,没开放 api |
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 ,所以历史记录的长度也有限制,不能无限制往上加。 |
5
ersic 2023-02-12 12:57:13 +08:00
把所有对话内容都传过去
|
6
LaurelHarmon 2023-02-12 17:26:55 +08:00 via Android
之前网页版会返回文本内容加 utterance id ,新请求带上 last utterance id 就行
|
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 后的模型。 不知有没有做过这方面功能的前辈。望指点 |