大模型的 api 为什么设计成无状态的?

4 天前
 Need4more

在看 openai 的 messages api ,发现客户端需要做大量得状态管理,来维护历史消息,为什么不和网站 cookie 一样弄个 sessionId 这样的状态字段。另外,聊天场景下,每次请求都携带重复的历史数据,得浪费多少带宽资源!

请问,从技术角度分析这样设计的好处是啥?

这是官方的 python 客户端示例:

2839 次点击
所在节点    问与答
33 条回复
hwdq0012
4 天前
热知识:有状态服务可以通过 redis 之类的服务转换为无状态,弹性扩容更方便
min
4 天前
带宽值几个钱?
Need4more
4 天前
@zdl0929 是的
mumbler
4 天前
@wnpllrzodiac #19 人脑内存并不大,验证码超过 6 位都要分至少两次输入,背单词背课文更是困难,一会就忘了,记忆都是极其精简的摘要和画面,上下文不足 1K ,只不过人脑效率高,而且容错率极高,哪怕真错了也可以不承认
Need4more
4 天前
@min
@RedNax
可是他们现在月活都超 5 亿了呀,这么大的流量不考虑带宽成本吗?
个人感觉是历史遗留问题,早期纯文本对话这样设计不是问题,可是现在支持多模态,输入会包含图片、视频、文件了,带宽成本不容小觑!
他们现在也有带状态的 api ,pdf 上传:
https://platform.openai.com/docs/guides/pdf-files?api-mode=responses
coefuqin
4 天前
今年都加大权重的堆砌记忆能力了,还需要 web 的状态做什么。
DTCPSS
4 天前
方便 scale
wyntalgeer
4 天前
因为状态在应用层,LLM 你把它理解成一个高级算法。你见过给 SDK/工具类/算法库加状态的?
ipwx
4 天前
大模型的上下文是内部的某种 embedding 输出啊。。。

====

这个 embedding 不同模型都不一样,同一个模型的不同版本都不一样。只有精确到某个版本、某个模型,才有可能存储这个真正的上下文。你调用的是通用接口,所以没办法拿到这个真正的上下文,那你只能把 history 再喂给它一遍,让它重新构造出这个内部上下文。

有些模型有 streaming api ,一个合理的实现方法是客户端只存某个 id ,让服务器去存储这个上下文 context 。用 id 去关联 context 。但用户啥时候弃用这个 context ?多长时间过期?这些问题都很麻烦,特别是互联网场景,用户很多的情况下。所以很多 api 不支持 streaming 也很合理嘛。

更何况如果你用着某个上下文,服务器那边模型更新了,瞬间原来的 context embedding 废了,进去就是一堆乱码,用户这不得骂娘,还不如浪费些算力让大模型重新看一遍历史。

====

当然不得不存储 embedding 的场景也是有的,那种就叫做 rag 。这也算是一种折中:让大模型每次都看一遍整个资料库显然计算开销太大了,但是让大模型每次都把所有对话的 embedding 都存下来那存储(和检索)开销又太大了。那么不得已,就采用资料库的 embedding 存起来、对话不存 embedding 。这不是很合理么
willchen
3 天前
计费透明呗
chanChristin
3 天前
@Need4more #25 5 亿带宽成本高,那 5 亿的状态保存成本就不高了?
sakeven
3 天前
别给无状态 API 找各种理由了,OpenAI 已经在主推 Responses API 了😁
lan894734188
3 天前
因为综合来说 显存和运行性能划算 无状态还能吃你 input tokens

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

https://yangjunhui.monster/t/1136171

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

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

© 2021 V2EX