同一个问题,为什么还要再问一次模型

栈边接通以后,最先想到的是调用开销。读者反复点“这篇讲了什么”,文章没有改,问题也一样,每次都重新生成一遍,既要等,也会继续消耗额度。

模型服务商的上下文缓存能复用部分输入计算,但它并不等于整个回答免费。所以这次先在网站自己这边保存可复用的结果:命中时直接返回已有回答,不再向模型发请求。

什么才算同一个问题

不能只比较最后一句话。“后来呢”放在两个项目里,或者放在两段不同的对话后面,意思可能完全不同。

栈边会一起检查当前文章、问题、最近对话、公开内容版本和模型设置。文章有更新、上下文变了或换了模型,都重新生成。第一版只做精确匹配,不因为两个问题看起来相似就把旧答案拿过来。

三个快捷按钮则始终从当前文章出发,不夹带前面的聊天。这样读者多点一次同一个按钮,确实能拿到已有回答;自己在输入框里追问时,仍然会保留最近对话。

少存一些,也少重复一些

快捷问题只围绕公开文章,它们的完整回答在本机保留一天,服务重启后也能继续复用。自由输入和追问只在内存中暂存半小时,不写进磁盘文件。缓存最多保存 200 项,过期或长期没用到的结果会被淘汰。

两个人同时问同一个问题时,也只发起一次模型调用。如果其中一个人关掉请求,另一个还在等,就继续完成;全部取消时才中止。报错、超时和被截断的回答不存进缓存。

面板会显示“复用已有回答 · 本次未调用模型”。这句话只在网站缓存命中时出现,不把服务商的输入缓存当成免调用。

仍然有第一次等待

首次提问、不同的上下文,以及文章更新后的首次提问,依然需要调用模型。缓存解决的是重复开销,不会让所有问题都免费,也不能保证答案正确。出处仍然保留,读者可以回到文章核对。