这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

MemGPT

MemGPT

1 - 介绍

memgpt 介绍

memgpt 现在改名 Letta.


memgpt

https://research.memgpt.ai/

项目的愿景:

Towards LLMs as Operating Systems

迈向将 LLMs 作为操作系统

项目目标:

Teach LLMs to manage their own memory for unbounded context!

教会 LLMs 管理自己的内存以实现无界上下文!

概述

  • LLMs 越来越多地被用于永久聊天

  • 有限的上下文长度使得永久聊天具有挑战性

  • MemGPT 管理一个虚拟上下文(受操作系统虚拟内存启发),以创建无界的 LLM 上下文

  • 使用 MemGPT,我们证明了 LLM 可以被教导管理自己的内存!

摘要

大型语言模型(LLMs)革新了人工智能,但其受限于有限的上下文窗口,这阻碍了它们在长对话和文档分析等任务中的应用。

为了能够在有限的上下文窗口之外使用上下文,我们提出了虚拟上下文管理技术,该技术借鉴了传统操作系统中的分层内存系统,通过在物理内存和磁盘之间进行分页来提供扩展虚拟内存的错觉。

利用这项技术,我们引入了 MemGPT(MemoryGPT),这是一个智能管理不同存储层级的系统,旨在有效地在 LLM 有限的上下文窗口内提供扩展上下文。

我们在两个领域评估了我们的受操作系统启发的设计,在这些领域现代 LLM 有限的上下文窗口严重影响了它们的性能:

  1. 文档分析,MemGPT 能够分析远超底层 LLM 上下文窗口的大型文档,

  2. 多会话聊天,MemGPT 能够创建能够通过长期与用户互动而记忆、反思和动态演变的对话代理。我们在 https://memgpt.ai 上发布了我们的实验代码和数据。

Letta

https://github.com/letta-ai/letta

https://docs.letta.com/

Letta is the platform for building stateful agents: open AI with advanced memory that can learn and self-improve over time.

Letta 是构建有状态代理的平台:具有高级记忆的开放 AI,可以随着时间的推移学习和自我改进。

Letta 中的核心概念

Letta 是由 MemGPT 的创造者开发的,MemGPT 是一篇介绍了"LLM 操作系统"概念以进行内存管理的研究论文。Letta 中设计有状态代理的核心概念遵循 MemGPT LLM OS 原则:

  1. 内存层级:代理具有自我编辑的内存,分为上下文内存和上下文外内存

  2. 内存块:代理的上下文内存由持久可编辑的内存块组成

  3. 代理式上下文工程:代理通过使用工具来编辑、删除或搜索记忆来控制上下文窗口

  4. 持续自我改进的代理:每个"代理"都是一个单一实体,具有持续的(无限的)消息历史

相关资料

论文

MemGPT: Towards LLMs as Operating Systems

https://arxiv.org/pdf/2310.08560

2 - 启动速度

MemGPT 的启动速度

部署

参考:

https://github.com/letta-ai/letta?tab=readme-ov-file#simple-hello-world-example

准备工作

以 python 为例:

pip install letta-client

登录 letta, 获取 api key.

export LETTA_API_KEY="sk-let-NTExNDRjZjxxxxxxx2OA=="

为了访问 letta 的服务器, 需要科学上网. 如果用的是 socks 代码, 则需要安装 pip 包:

pip install "httpx[socks]"

编写 agent

mkdir -p ~/work/code/agents/letta/hellowworld
cd ~/work/code/agents/letta/hellowworld

vi main.py

输入内容:

import os
import time
import psutil
from letta_client import Letta

# 记录程序开始时间
start_time = time.perf_counter()

# Connect to Letta Cloud (get your API key at https://app.letta.com/api-keys)
client = Letta(api_key=os.getenv("LETTA_API_KEY"))
# 如果是自托管,可以改成:
# client = Letta(base_url="http://localhost:8283", embedding="openai/text-embedding-3-small")

agent_state = client.agents.create(
    model="openai/gpt-4.1",
    memory_blocks=[
        {
          "label": "human",
          "value": "The human's name is Chad. They like vibe coding."
        },
        {
          "label": "persona",
          "value": "My name is Sam, a helpful assistant."
        }
    ],
    tools=["web_search", "run_code"]
)

# 在创建 agent 完成后,记录时间
elapsed = (time.perf_counter() - start_time) * 1000  # 毫秒

# 获取当前进程内存占用
process = psutil.Process()
mem = process.memory_info().rss / (1024 * 1024)  # MB

# 打印启动时间和内存占用
print(f"程序启动时间: {elapsed:.0f} ms, 内存占用: {mem:.2f} MB")

# 打印 agent id
print(agent_state.id)

response = client.agents.messages.create(
    agent_id=agent_state.id,
    messages=[
        {
            "role": "user",
            "content": "Hey, nice to meet you, my name is Brad."
        }
    ]
)

# 打印响应消息
for message in response.messages:
    print(message)

代码在官方 example 基础上增加了启动时间打印和内存使用打印.

运行:

# 开启 http 代理
# proxyon

python main.py

输出为:

程序启动时间: 1058 ms, 内存占用: 52.19 MB
agent-9d98c82e-4d4c-4d9e-a97d-187a30b52756
AssistantMessage(id='message-d567f53e-a4cc-42c2-9a24-4051c58fe305', content='Hey Brad, nice to meet you too! If there’s anything you want to work on or chat about, just let me know.', date=datetime.datetime(2025, 11, 21, 10, 35, 24, tzinfo=TzInfo(UTC)), is_err=None, message_type='assistant_message', name=None, otid='d567f53e-a4cc-42c2-9a24-4051c58fe300', run_id='run-3ae41158-73f2-45e7-be1b-3558254d9163', sender_id=None, seq_id=None, step_id='step-2535b417-86d8-4279-a56f-7e481f96ad72')

多测试几次, 数据为:

  • 程序启动时间: 1052 ms, 内存占用: 52.30 MB
  • 程序启动时间: 1173 ms, 内存占用: 52.66 MB
  • 程序启动时间: 992 ms, 内存占用: 52.03 MB

所以启动时间大概是 1000 ms, 内存占用 52 MB.

注意: 这里启动不够快的主要原因可能是创建 client 时需要和服务器端建立连接, 而服务器端在国外访问速度慢, 如果服务器端在本地部署, 应该可以快很多.

注意2: 这里用快照启动没有意义, 因此 client 建立的连接在快照恢复时会无效, 只能冷启动.