V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
adobas007
V2EX  ›  OpenAI

[求教] OpenAI API 方式,每次 create()一个会话,聊天过程中 gpt 是如何保存上下文的?有没有专门的文档介绍?

  •  
  •   adobas007 · 2023-11-13 15:03:15 +08:00 · 998 次点击
    这是一个创建于 380 天前的主题,其中的信息可能已经有所发展或是发生改变。
    OpenAI API 方式,每次 create()一个会话,聊天过程中 gpt 是如何保存上下文的?有没有专门的文档介绍?
    11 条回复    2023-11-14 10:38:11 +08:00
    Akitora
        1
    Akitora  
       2023-11-13 15:04:56 +08:00
    自己把每一段对话拼起来请求发回去,抓包网页版 GPT 可以看到怎么拼的
    vacuitym
        2
    vacuitym  
       2023-11-13 15:09:54 +08:00
    楼主想问的应该是 assitants api 的吧,我只看到了 thread 会自动获取上下文
    cheng6563
        3
    cheng6563  
       2023-11-13 15:12:42 +08:00
    每次你发送消息,实际上是把整段聊天记录发给 GPT 模型,然后模型生成下一次回复的内容
    skwyl
        4
    skwyl  
       2023-11-13 15:13:04 +08:00
    保存是你本地保存,并且把之前的聊天记录+新的聊天记录一起提交
    adobas007
        5
    adobas007  
    OP
       2023-11-13 15:17:11 +08:00
    @cheng6563 这么聊下去,历史内容+新问题,token 费用不得了
    hahastudio
        6
    hahastudio  
       2023-11-13 15:20:29 +08:00
    如果指的是 client.chat.completions.create()
    那么给请求里塞多少上下文靠自己,简单的就是前几条记录
    另外 request token + response token 是有上限的
    adobas007
        7
    adobas007  
    OP
       2023-11-13 16:11:14 +08:00
    @hahastudio 明白了,多谢
    lins05
        8
    lins05  
       2023-11-13 23:27:21 +08:00
    > 这么聊下去,历史内容+新问题,token 费用不得了

    @adobas007 所以 OpenAI 一般的第三方前端都支持用户自己设置只带上最近的几条消息。

    chatgpt-next-web 还有一个好的设计叫 "memory prompt",它会自动调用便宜的 gpt3.5 让 gpt 把到当前为止的所有消息总结成一条,这样后续的圣诞既能节约 token 又能保存一些之前的 context


    新发布的 threads api 并没有本质上的区别,只是方便了开发者不需要每次请求都把历史消息带上而已,因为 openai 在他那边会维护一个 "thread id => 该 thread 的历史消息" 的映射,但是计费还是会把这些历史对话中的 token 计算进去。
    adobas007
        9
    adobas007  
    OP
       2023-11-14 09:18:20 +08:00
    @lins05 在请教一下
    我们是否可以自己 fake 数据 messag(system,user,assistant),内容输入 GPT ,GPT 会怎么做?
    从网络结构上,有没有可能推断出 GPT 的架构( GPT 公布模型 transformer 只是一个基础原型,其整个系统架构应该远不止这些)
    yinmin
        10
    yinmin  
       2023-11-14 09:40:00 +08:00 via iPhone
    #9 可以的。自己构造几组 user,assistant 喂给 gpt 作为范例,gpt 就会参照 fake 的格式进行回复。

    例如:你希望 gpt 分析文本给出里面的地址信息,可以 fake 几个 json 格式的输出范例,然后给真实数据时,gpt 也是返回 json 格式的。

    又比如你的 prompt 很长消耗 token ,可以给一组同时处理多条数据的范例,然后就能一次处理多条数据了。
    xabclink
        11
    xabclink  
       2023-11-14 10:38:11 +08:00
    @lins05 这是最失败的设计, 聊天场景这种操作,很快下面的对话鸡同鸭讲
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3101 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 14:27 · PVG 22:27 · LAX 06:27 · JFK 09:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.