Bootstrap

Letta - 构建有状态LLM应用程序

在这里插入图片描述


一、关于 Letta(以前的MemGPT)

👾Letta是一个用于构建 有状态LLM应用程序的开源框架,您可以使用Letta构建 具有高级推理能力 和 透明长期记忆的 有状态代理,Letta框架是白盒的,与模型无关。


在这里插入图片描述


Letta & MemGPT

注:在找MemGPT吗?你来对地方了!

MemGPT包和Docker映像已重命名为letta,以阐明MemGPT代理和将LLM代理作为服务运行的API服务器/运行时之间的区别。

您使用Letta框架来创建MemGPT代理在此处阅读有关MemGPT和Letta之间关系的更多信息。


二、⚡快速入门

使用Letta的推荐方法是运行use Docker。要安装Docker,请参阅Docker的安装指南。有关安装Docker的问题,请参阅Docker的故障排除指南。您也可以使用pip安装Letta(请参阅下面的说明)。


🌖运行Letta服务器

注:Letta代理位于Letta服务器内,该服务器将它们持久化到数据库中。您可以通过REST API+Python/Typescript SDK和代理开发环境(图形界面)与Letta服务器内的Letta代理进行交互。

Letta服务器可以连接到各种LLM API后端(OpenAIAnturpicvLLMOllama等)。要启用对这些LLM API提供程序的访问,请在使用docker run时设置适当的环境变量:

# replace `~/.letta/.persist/pgdata` with wherever you want to store your agent data
docker run \
  -v ~/.letta/.persist/pgdata:/var/lib/postgresql/data \
  -p 8283:8283 \
  -e OPENAI_API_KEY="your_openai_api_key" \
  letta/letta:latest

如果您有许多不同的LLM API密钥,您也可以设置一个.env文件并将其传递给docker run

# using a .env file instead of passing environment variables
docker run \
  -v ~/.letta/.persist/pgdata:/var/lib/postgresql/data \
  -p 8283:8283 \
  --env-file .env \
  letta/letta:latest

Letta服务器运行后,您可以通过端口8283访问它(例如向http://localhost:8283/v1发送REST API请求)。您还可以将服务器连接到Letta ADE,以便在Web界面中访问和管理您的代理。


👾 访问 Letta ADE(代理开发环境)

https://app.letta.com/

注:Letta ADE是一个图形用户交互界面,用于创建、部署、交互和观察您的Letta代理。

例如,如果您正在运行Letta服务器来支持最终用户应用程序(例如客户支持聊天机器人),您可以使用ADE来测试、调试和观察服务器中的代理。您还可以将ADE用作与Letta代理交互的通用聊天界面。

ADE可以连接到自托管的Letta服务器(例如在您的笔记本电脑上运行的Letta服务器)以及Letta云服务。当连接到自托管/私有服务器时,ADE使用Letta REST API与您的服务器通信。

在这里插入图片描述


🖥️ 将ADE连接到本地Letta服务器

要将ADE与本地Letta服务器连接,只需:

  1. 启动你的Letta服务器(docker run ...
  2. 访问https://app.letta.com,您将在左侧面板中看到“本地服务器”作为选项

在这里插入图片描述


🔐 要使用密码保护服务器,请在docker run命令中包含SECURE=trueLETTA_SERVER_PASSWORD=yourpassword

# If LETTA_SERVER_PASSWORD isn't set, the server will autogenerate a password
docker run \
  -v ~/.letta/.persist/pgdata:/var/lib/postgresql/data \
  -p 8283:8283 \
  --env-file .env \
  -e SECURE=true \
  -e LETTA_SERVER_PASSWORD=yourpassword \
  letta/letta:latest

🌐 将ADE连接到外部(自托管)Letta服务器

如果您的Letta服务器没有在localhost上运行(例如,您将其部署在EC2等外部服务上):

  1. 单击“添加远程服务器”
  2. 输入您想要的服务器名称、服务器的IP地址和服务器密码(如果已设置)


三、常见问题(FAQ)🧑‍🚀

“我需要安装Docker才能使用Letta吗?”

不,您可以使用pip(通过pip install -U letta)以及从源代码(通过poetry install)安装Letta。请参阅下面的说明。


“使用pipDocker安装有什么区别?”

Letta通过将所有代理数据存储在数据库中来为您的代理提供持久性(它们无限期地存在)。Letta旨在与PostgreSQL(世界上最流行的数据库)一起使用,但是,无法通过pip安装PostgreSQL,因此Letta的pip安装默认使用SQLite。如果您在自己的计算机上运行PostgreSQL实例,您仍然可以通过设置环境变量将Letta(通过pip安装)连接到PostgreSQLLETTA_PG_URI

使用SQLite时,Letta不支持数据库迁移,因此如果您想确保能够升级到最新的Letta版本并迁移Letta代理数据,请确保您使用PostgreSQL作为Letta数据库后端。下面的完整兼容性表:

安装方法启动服务器命令数据库后端支持数据迁移?
pip install lettaletta serverSQLite
pip install lettaexport LETTA_PG_URI=...+letta serverPostgreSQL
Install Dockerdocker run ...完整命令PostgreSQL

“如何在本地使用ADE?”

要将ADE连接到本地Letta服务器,只需运行Letta服务器(确保您可以访问localhost:8283)并转到https://app.letta.com。如果您想使用旧版本的ADE(在localhost上运行),请降级到Letta版本<=0.5.0


“如果我将ADE连接到本地服务器,我的代理数据是否会上传到letta.com?”

不,您的Letta服务器数据库中的数据将保留在您的机器上。Letta ADE Web应用程序只需连接到您的本地Letta服务器(通过REST API),并在其上提供一个图形界面,以在浏览器的本地状态下可视化您的本地Letta数据。


“我必须使用你的ADE吗?我可以自己建造吗?”

ADE建立在(完全开源的)Letta服务器和Letta代理API之上。您可以在REST API之上构建自己的应用程序,就像ADE一样(查看此处的文档)。


“我可以通过CLI与Letta代理交互吗?”

使用Letta的推荐方法是通过REST API和ADE,但是您也可以通过CLI访问您的代理。


查看运行Letta CLI的说明

您可以通过Letta CLI工具(letta run)与您的代理聊天。如果您正在运行Letta Docker容器,您可以使用docker exec在容器内运行Letta CLI:

# replace `<letta_container_id>` with the ID of your Letta container, found via `docker ps`
docker exec -it <letta_container_id> letta run

您还可以在命令中使用docker ps来自动查找Letta容器的ID:

docker exec -it $(docker ps -q -f ancestor=letta/letta) letta run

在CLI工具中,您将能够创建新代理或加载现有代理:

🧬 Creating new agent...
? Select LLM model: letta-free [type=openai] [ip=https://inference.memgpt.ai]
? Select embedding model: letta-free [type=hugging-face] [ip=https://embeddings.memgpt.ai]
->  🤖 Using persona profile: 'sam_pov'
->  🧑 Using human profile: 'basic'
->  🛠️  8 tools: send_message, pause_heartbeats, conversation_search, conversation_search_date, archival_memory_insert, archival_memory_search, core_memory_append, core_memory_replace

🎉 Created new agent 'InspiringSpinach'

Hit enter to begin (will request first Letta message)

💭 User engaged. Recognize as Chad. Acknowledge presence and establish connection. Explore interests and engage in meaningful discourse.
🤖 Hello, Chad. It's nice to meet you. I am keen on learning and exploring new ideas and concepts. Is there a specific topic you'd like to discuss today?

> Enter your message: my name is Brad, not Chad...

💭 A discrepancy in identity. Reflect this change in core memory. Apologize for the oversight, and rectify the error.
⚡🧠 [function] updating memory with core_memory_replace
         First name: Chad
        → First name: Brad
💭 Apologize for the mistake in recognizing his name, and begin the conversation anew, addressing him by the correct name this time.
🤖 I apologize for the oversight, Brad. Let's restart. It's a pleasure to meet you, Brad. Is there a specific topic you'd like to discuss today?

> Enter your message:

四、快速入门(pip)⚡

警告:SQLite官方不支持SQLite

当您使用pip安装Letta时,默认数据库后端是SQLite(您仍然可以通过设置LETTA_PG_URI使用外部postgres服务来安装Letta的pip)。

我们不正式支持SQLite后端的Letta版本之间的迁移,仅支持postgres。如果您想跨多个Letta版本保留代理数据,我们强烈建议使用Docker安装方法,这是将postgres与Letta一起使用的最简单方法。


安装Letta的两种主要方式是通过pypipip)或通过Docker

  • pip(下面的指南)-尝试Letta的最简单方法,默认使用SQLite和ChromaDB作为数据库后端
  • Docker(指南在这里)-推荐用于生产设置,将默认使用Postgres(+pgector)作为数据库后端

1、使用pip

$ pip install -U letta

2、为您选择的LLM/ 提供程序设置环境变量

$ export OPENAI_API_KEY=sk-...

对于Ollama(有关如何设置各种提供商的示例,请参阅我们的完整文档):

$ export OLLAMA_BASE_URL=http://localhost:11434

3、运行Letta CLI

您可以创建代理并通过Letta CLI工具与他们聊天(letta run):

$ letta run

🧬 Creating new agent...
? Select LLM model: letta-free [type=openai] [ip=https://inference.memgpt.ai]
? Select embedding model: letta-free [type=hugging-face] [ip=https://embeddings.memgpt.ai]
->  🤖 Using persona profile: 'sam_pov'
->  🧑 Using human profile: 'basic'
->  🛠️  8 tools: send_message, pause_heartbeats, conversation_search, conversation_search_date, archival_memory_insert, archival_memory_search, core_memory_append, core_memory_replace

🎉 Created new agent 'InspiringSpinach'

Hit enter to begin (will request first Letta message)

💭 User engaged. Recognize as Chad. Acknowledge presence and establish connection. Explore interests and engage in meaningful discourse.
🤖 Hello, Chad. It's nice to meet you. I am keen on learning and exploring new ideas and concepts. Is there a specific topic you'd like to discuss today?

> Enter your message: my name is Brad, not Chad...

💭 A discrepancy in identity. Reflect this change in core memory. Apologize for the oversight, and rectify the error.
⚡🧠 [function] updating memory with core_memory_replace
         First name: Chad
        → First name: Brad
💭 Apologize for the mistake in recognizing his name, and begin the conversation anew, addressing him by the correct name this time.
🤖 I apologize for the oversight, Brad. Let's restart. It's a pleasure to meet you, Brad. Is there a specific topic you'd like to discuss today?

> Enter your message:

4、运行Letta服务器

您可以使用letta server启动Letta API服务器(请参阅此处的完整API参考):

$ letta server

Initializing database...
Running: uvicorn server:app --host localhost --port 8283
INFO:     Started server process [47750]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://localhost:8283 (Press CTRL+C to quit)

http://localhost:8283


在Letta中,所有代理都存储/持久化在同一个数据库中,因此您在CLI中创建的代理可以通过API和ADE访问,反之亦然。查看我们文档上的快速入门指南,了解您在Letta CLI中创建代理并通过Letta API向同一代理发送消息的教程。


2025-01-27(一)

;