核心概念

核心概念包括代理、记忆、工具和 Letta 架构

LLM 的根本限制

大型语言模型在设计上是无状态的。LLM 的知识来自两个来源:

  1. 模型权重 - 训练后固定
  2. 上下文窗口 - 推理时提供的临时输入

这意味着 LLM 在交互之间没有持久记忆。每次 API 调用都从头开始,没有能力从过去的经验中学习或在会话之间维护状态。

什么是有状态代理?

有状态代理通过在所有交互中维护持久记忆和身份来克服这一限制。

一个有状态代理具有:

  • 持久身份 - 作为唯一实体存在,在会话之间保持连续性
  • 主动记忆形成 - 自主决定存储和更新什么信息
  • 累积状态 - 通过经验学习,而不仅仅依靠模型权重
  • 长期上下文 - 维护超越单次对话窗口的知识

与传统的 LLM 应用程序(您的代码管理状态)不同,有状态代理主动管理自己的记忆,使用内置工具来读取、写入和搜索其持久存储。

为什么有状态很重要

传统的 LLM 应用程序是无状态的 - 每次交互都从头开始。您的应用程序必须:

  • 在您自己的数据库中存储所有对话历史
  • 每次 API 调用时发送整个上下文
  • 自己实现记忆和个性化逻辑
  • 手动管理上下文窗口限制

使用 Letta 的有状态代理,所有这些都为您处理好了。 代理维护自己的持久状态,智能管理其上下文窗口,并从每次交互中学习,无需您构建复杂的状态管理层。

有状态 vs 无状态 API

有状态代理与传统 LLM API 之间的区别是根本性的:

传统 API(无状态): 请求之间没有记忆。您的应用程序管理一切。

Letta(有状态): 代理维护自己的持久状态。您只发送新消息。

传统无状态 API

使用无状态 API,请求之间没有状态持久化。客户端必须在每次调用时发送完整的对话历史。

客户端必须在每个请求中发送完整的对话历史:

  • 请求 2: [msg1, response1, msg2]
  • 请求 3: [msg1, response1, msg2, response2, msg3]

Letta 有状态 API

Letta 在服务器上维护代理状态并将其持久化到数据库。客户端只发送新消息,服务器处理所有状态管理。

客户端只发送新消息:

  • 请求 2: [msg2]
  • 请求 3: [msg3]

关键区别

方面 传统(无状态) Letta(有状态)
状态管理客户端服务器端
请求格式发送完整对话历史只发送新消息
记忆无(临时)持久数据库
上下文限制硬限制,然后失败智能管理
代理身份每个代理有唯一 ID
长对话昂贵且脆弱无限扩展
个性化应用程序必须管理内置记忆块
多会话需要外部数据库原生支持

代码比较

无状态 API(例如 OpenAI):

# 您必须每次发送完整的对话
messages = [
    {"role": "user", "content": "Hello, I'm Sarah"},
    {"role": "assistant", "content": "Hi Sarah!"},
    {"role": "user", "content": "What's my name?"},  # ← 新消息
]

# 发送所有内容
response = openai.chat.completions.create(
    model="gpt-4",
    messages=messages  # ← 需要完整历史
)

# 您必须自己存储和管理消息
messages.append(response.choices[0].message)

有状态 API(Letta):

# 代理已经知道上下文
response = client.agents.messages.create(
    agent_id=agent.id,
    input="What's my name?"  # ← 只发送新消息
)

# 代理从其记忆块中记住 Sarah
# 无需发送先前的消息

代理即服务

Letta 将代理视为持久服务,而不是临时库调用。

在传统框架中,代理是存在于应用程序内存中的对象,当您的应用程序停止时就会消失。在 Letta 中,代理是独立的服务,它们:

  • 在您的应用程序未运行时继续存在
  • 在数据库中维护状态
  • 可以同时从多个应用程序访问
  • 在服务器上自主运行

您通过 REST API 与 Letta 代理交互:

POST /agents/{agent_id}/messages

这种架构支持:

  • 多用户应用程序 - 每个用户获得自己的持久代理
  • 代理间通信 - 代理可以相互发送消息
  • 后台处理 - 代理可以在您的应用程序离线时继续工作
  • 部署灵活性 - 独立于应用程序扩展代理

默认持久化

在 Letta 中,所有状态都自动持久化

  • 代理记忆(记忆块和归档记忆)
  • 消息历史
  • 工具配置
  • 代理状态和上下文

因为所有内容都持久化:

  • 代理可以随时暂停和恢复
  • 您可以在不同机器上重新加载代理
  • 状态永远不会因应用程序重启而丢失
  • 长对话不会降低性能

自我编辑记忆

与被动检索文档的 RAG 系统不同,Letta 代理主动管理自己的记忆。代理使用内置工具来:

  • 在学习新信息时编辑其记忆块
  • 将事实插入归档记忆以进行长期存储
  • 在需要上下文时搜索过去的对话

这使代理能够:

  • 随时间学习用户偏好
  • 在会话之间保持一致的个性
  • 与用户建立长期关系
  • 从交互中持续改进

了解更多关于记忆 →

代理 vs 线程

Letta 没有线程会话的概念。相反,只有具有单一永久消息历史的有状态代理

为什么没有线程? Letta 基于这样的原则构建:所有交互都应该是持久记忆的一部分,而不是临时会话。这实现了:

  • 跨所有对话的持续学习
  • 真正的长期记忆和关系
  • "开始新线程"时没有上下文丢失

对于多用户应用程序,我们建议为每个用户创建一个代理。每个代理维护关于该特定用户的自己的持久记忆。

如果您需要对话模板或起点,请使用 代理模板 来创建具有预配置状态的新代理。

LLM 操作系统

LLM 操作系统是管理代理执行、状态和记忆的基础设施层。这包括:

  • 代理运行时 - 管理工具执行和推理循环
  • 记忆层 - 处理上下文窗口管理和持久化
  • 有状态层 - 协调数据库、缓存和执行之间的状态

Letta 的架构灵感来自 MemGPT 研究论文,该论文引入了这些概念。

超越模型大小

通往更强大 AI 系统的路径不仅仅是更大的模型或更长的上下文窗口。有状态代理代表了一个根本性的转变:通过累积经验学习、与用户建立持久关系、无需重新训练即可持续改进的代理。

使用有状态代理,您可以构建:

  • 个性化助手,随时间适应个人用户
  • 学习系统,从反馈和交互中改进
  • 长期关系,代理发展关于用户和任务的深度上下文
  • 自主服务,独立运行并维护自己的知识

这种架构转变——从无状态函数调用到有状态代理服务——实现了一类传统 LLM API 无法实现的新型 AI 应用。

下一步