找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5114

积分

0

好友

710

主题
发表于 3 小时前 | 查看: 4| 回复: 0

刚接触大模型业务开发的朋友,尤其是做产品设计的,经常会抛出一个直击灵魂的问题:“既然叫人工智能,为什么它不能像人一样,聊过天就自动记住?非得每次都在代码里把历史聊天记录重新传一遍,这也太不合理了吧?”

说实话,我刚开始搞大模型接入的时候也这么想过。但真到了工程落地上,你会发现大模型不带记忆,并不是技术上做不到,而是不敢这么做

一旦把大模型做成自带物理记忆的,整个系统的可用性、安全性和成本立马就会彻底失控。

目前业界解决 AI 记忆,无非就三条路:模型微调,强行把记忆写进参数里;无限拉长上下文窗口,硬塞历史记录;外部存储挂载,通过外挂数据库来管记忆。

在真实的企业级应用里,外部存储挂载是唯一的正解。保持大模型的绝对无状态,是让系统能长久活下去的底线要求。

为什么不能让大模型自己去记?

说白了,大模型就是一个极其庞大的、固化的纯数学函数。

你给它一个输入,它在内部跑几百亿个参数的矩阵乘法,吐出一个输出。只要参数不动,同样的输入永远是同样的输出。如果你想让它在物理层面上“记住”刚才说的话,就意味着每一次对话,都要触发一次反向传播去更新这几百亿个权重参数。

先不说现在的技术能不能做到实时更新,哪怕能做到,这种单次对话级别的 GPU 计算开销也能直接把公司搞破产。这还涉及智能 & 数据 & 云层面上的算力调度与成本控制难题。

更致命的是数据越权和隔离问题。假设你的模型通过改参数记住了张三的隐私数据,等李四来提问的时候,模型极有可能顺嘴就把张三的隐私给吐出来了。在企业级应用里,这种跨租户的数据泄露绝对是不可触碰的红线。

无限拉长上下文窗口可行吗?

既然不能改参数,那现在很多模型动不动支持 100 万、200 万的 Token 上下文,我把用户过去一年的聊天记录全作为 Prompt 塞进去不就行了?

这是典型的偷懒思维。

上下文越长,大模型处理首个 Token 的耗时就越长。而且无论你是调 API 还是本地部署,显存和计费都是按 Token 数量来的。为了问一句“今天天气怎么样”,你把过去半年的废话全传过去,不仅响应慢如蜗牛,算力成本也高到离谱。从后端 & 架构的角度看,这种设计完全违背了高并发系统对时延与吞吐的基本要求。

外部存储挂载:计算与存储分离

大厂现在不管是用 RAG 还是外挂 Redis 来做记忆,本质上都遵循了分布式系统最核心的设计美学:计算与存储分离。

大模型应该只负责推理。

用户的长期记忆,我们用向量数据库存起来;短期对话,我们用 Redis 存起来。我们在业务代码里,真正需要的记忆逻辑其实非常朴素:把大模型当成一个没有感情的推理器,记忆由咱们自己的业务数据库来管。这里的数据库/中间件/技术栈选型直接决定了记忆系统的可靠性与扩展能力。

看下面这段伪代码,这就是线上的核心心法:

// 核心心法:大模型必须是无状态的,记忆永远存在外部数据库里
public String chatWithMemory(String userId, String userMessage) {
    // 1. 从我们自己的数据库里,把这个用户之前的聊天记录捞出来
    List<Message> history = memoryDb.getHistory(userId);

    // 2. 把历史记录和当前的新问题,拼装成一个完整的上下文
    List<Message> context = buildContext(history, userMessage);

    // 3. 把整个上下文发给无状态的大模型,它只负责这一次的推理
    String response = llmClient.call(context);

    // 4. 把大模型的回答存进数据库,作为下一次的“记忆”
    memoryDb.save(userId, userMessage, response);

    return response;
}

逻辑非常直白,没有任何黑盒。

这样做最大的好处是系统极其稳定可控。因为状态都在你自己的数据库里,大模型永远是无状态的。你可以今天用 OpenAI,明天无缝切换成 DeepSeek,甚至在流量高峰期随时横向扩容 100 个模型节点来抗并发。

历史记忆太多怎么兜底?

肯定有后端同学会问,每次都要去查数据库再拼装,如果历史记录太多,拼出来的上下文依然很大怎么办?

这就到了考验业务侧架构能力的时候了。在实际的业务落地中,我们绝对不会把所有历史都无脑传过去。

常用的手段是做“记忆滑动窗口”,比如按 Token 截断,只传最近的 5 轮对话;对于更长的历史,我们会写个后台定时任务,调用便宜的小模型把过去的长对话压缩总结成一段 100 字的摘要,下次提问时只带摘要进去。

把这些状态的控制权死死捏在业务代码手里,远比扔给一个不可控的 AI 黑盒要踏实得多。

说在最后

非要让大模型拥有人类一样的物理记忆,就是把系统最核心的状态管理交给了最不可控的环节。一旦记忆出现混乱、幻觉或者越权,你连个排查日志的地方都找不到。

接受大模型的无状态设定,用成熟的传统数据库去管理记忆,单纯把它当成一个推理引擎来用,这才是工程落地该有的姿势。

这么多年搞后端的经验告诉我一条死理,也是任何分布式系统的架构红线:绝对不要让昂贵的计算节点去保存业务状态。

把状态沉淀到数据库,把逻辑留在代码里,把推理交给大模型。边界清晰了,系统才能安安稳稳。

在云栈社区的技术讨论中,我们始终强调这种架构分层的重要性:无状态的计算层搭配有状态的存储层,正是现代人工智能应用能够规模化落地的关键所在。




上一篇:Java + LangChain4j 三阶语义切片实战:让 RAG 召回率突破瓶颈
下一篇:复杂项目如何AI友好?飞书项目MCP、CLI与AI节点实战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-25 11:15 , Processed in 0.644474 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表