LLM 无状态:你的每次对话都是第一次见面

15 阅读1分钟

> ******

cover.png## 一、大模型本身没有记忆

每次调用 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 应用三层都做。

五、总结

  1. LLM 是无状态的,每次 API 调用都是独立请求
  2. 你感受到的"记忆"是客户端拼接 messages 的结果
  3. 无状态是高并发和水平扩展的前提 > 4. Prompt → Context → Loop 三层决定了 AI 应用的能力上限

image-1.png