## 一、大模型本身没有记忆
每次调用 LLM API 都是独立的 HTTP 请求。上一次说了什么,模型根本不知道。
你觉得它在"记住"对话,是因为你每次把整段对话历史拼接成 messages 数组发过去。所谓的"记忆"是你自己在维护。
二、为什么设计成无状态
大模型推理是计算密集型 + 显存饥渴。如果服务端维护会话状态,每一个活跃会话都要占用显存。用户量一上来,显存迅速撑爆。
无状态架构意味着:服务器不存你的数据、请求可以分发到任意节点、系统可以水平扩展。这不是缺陷,这是工程选择。
三、Token 膨胀问题
对话越长,历史消息消耗的 Token 越多。解决思路:
function trimHistory(messages, maxTokens) {
const system = messages.filter(m => m.role === 'system');
const recent = messages.filter(m => m.role !== 'system').slice(-10);
return [...system, ...recent];
}
更复杂的策略包括:LRU 淘汰、摘要压缩、RAG 检索。
四、Prompt → Context → Loop 三层演进
- Prompt Engineering:怎么问。提升单次输出质量的上限
- Context Engineering:给什么。RAG、工具调用、Agent,精准注入上下文
- Loop Engineering:造系统。AI 自主规划 → 执行 → 观察 → 调整
这三层不是替代关系,是叠加关系。好的 AI 应用三层都做。
五、总结
- LLM 是无状态的,每次 API 调用都是独立请求
- 你感受到的"记忆"是客户端拼接 messages 的结果
- 无状态是高并发和水平扩展的前提 > 4. Prompt → Context → Loop 三层决定了 AI 应用的能力上限