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

2023-11-13 15:03:15 +08:00
 adobas007
OpenAI API 方式,每次 create()一个会话,聊天过程中 gpt 是如何保存上下文的?有没有专门的文档介绍?
975 次点击
所在节点    OpenAI
11 条回复
Akitora
2023-11-13 15:04:56 +08:00
自己把每一段对话拼起来请求发回去,抓包网页版 GPT 可以看到怎么拼的
vacuitym
2023-11-13 15:09:54 +08:00
楼主想问的应该是 assitants api 的吧,我只看到了 thread 会自动获取上下文
cheng6563
2023-11-13 15:12:42 +08:00
每次你发送消息,实际上是把整段聊天记录发给 GPT 模型,然后模型生成下一次回复的内容
skwyl
2023-11-13 15:13:04 +08:00
保存是你本地保存,并且把之前的聊天记录+新的聊天记录一起提交
adobas007
2023-11-13 15:17:11 +08:00
@cheng6563 这么聊下去,历史内容+新问题,token 费用不得了
hahastudio
2023-11-13 15:20:29 +08:00
如果指的是 client.chat.completions.create()
那么给请求里塞多少上下文靠自己,简单的就是前几条记录
另外 request token + response token 是有上限的
adobas007
2023-11-13 16:11:14 +08:00
@hahastudio 明白了,多谢
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
2023-11-14 09:18:20 +08:00
@lins05 在请教一下
我们是否可以自己 fake 数据 messag(system,user,assistant),内容输入 GPT ,GPT 会怎么做?
从网络结构上,有没有可能推断出 GPT 的架构( GPT 公布模型 transformer 只是一个基础原型,其整个系统架构应该远不止这些)
yinmin
2023-11-14 09:40:00 +08:00
#9 可以的。自己构造几组 user,assistant 喂给 gpt 作为范例,gpt 就会参照 fake 的格式进行回复。

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

又比如你的 prompt 很长消耗 token ,可以给一组同时处理多条数据的范例,然后就能一次处理多条数据了。
xabclink
2023-11-14 10:38:11 +08:00
@lins05 这是最失败的设计, 聊天场景这种操作,很快下面的对话鸡同鸭讲

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

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

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

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

© 2021 V2EX