
&nsp; 1 bv 9 天前 给你提示一点:req.Context() |
2 raycheung 9 天前 |
3 DefoliationM 9 天前 via Android 哥们基础不牢呀,用 context 就行了。 |
4 cryptovae 9 天前 为了解决 A 又引入了 B ,我真是服了 简单事简单做,LLM 流式输出,管它前端断不断,最终结果肯定要入库,等前端用户刷新的时候自己去轮训这个 message 结果就行了 |
6 boolean1135 9 天前 via Android mark 一下,到时候回家学习学习 AI 开发 |
7 cryptovae 9 天前 @yoshiyuki 你得的回答完全不切合主题,题主要的是异常断开后,能继续恢复,你给我说浪费 token 的事,在没有用户主动点击取消的情况下,用户只会觉得你凭什么不给我回答了,比如 deepseek ,chatgpt 都会在刷新页面自动接着回答 |
8 Charlie17Li 9 天前 @yoshiyuki 如果是我我会刷新一下,不想多打一点字 |
9 Junian OP 谢谢各位反馈,统一回一下。 @bv @DefoliationM req.Context() 确实能感知客户端断开,这个我清楚。但我要解决的不是"知道客户端走了",是断开之后的事: 1. 重连后怎么把之前的 chunk 补回去( replay ) 2. 生产者和消费者不在同一个进程甚至不在同一台机器 3. 用户在 A 节点点取消,B 节点的生成要能停 单靠 context 搞不定这几个。streamhub 底下该用 context 的地方也在用,上面多了一层跨实例的状态管理。 @raycheung durable-streams 是一个协议规范,定义 HTTP 层 offset-based streaming 的标准。streamhub 是直接用 Redis Streams 做存储的 Go 库,层级不太一样,但确实解决的问题有重叠。 @cryptovae 最终结果入库+轮询在生成完之后确实没问题。流式输出的点在于生成过程中就要实时推,不是攒完再返回。刷新后自动接上( deepseek/chatgpt 就是这么做的)才是这个库在解决的场景。 |
10 Junian OP @raycheung 哦刚仔细看了下 durable-streams ,确实比我之前说的要大不少,不只是协议规范,人家有完整的多语言客户端和 server 实现,还集成了 Vercel AI SDK 不过定位还是不太一样。durable-streams 是一个通用的持久化流协议,偏基础设施层,你需要跑他的 server 。streamhub 就是一个库,直接用你现有的 Redis 就行,不引入新的依赖,适合已经有 Redis 的项目快速接入 |
11 voidmnwzp 7 天前 via iPhone 这不是典型的简单问题复杂化吗 httphanlder 传个 context 给 llmhandler ,如果 http 这边有 err 了,直接 cancel 掉不就完了。。。 |