文章目录
一、关于 Letta(以前的MemGPT)
👾Letta是一个用于构建 有状态LLM应用程序的开源框架,您可以使用Letta构建 具有高级推理能力 和 透明长期记忆的 有状态代理,Letta框架是白盒的,与模型无关。
- github : https://github.com/letta-ai/letta
- 主页 : https://letta.com/
- 文档: https://docs.letta.com/
- Letta Cloud : https://forms.letta.com/early-access
- Discord | Twitter Follow
- arxiv 2310.08560
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后端(OpenAI、Anturpic、vLLM、Ollama等)。要启用对这些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(代理开发环境)
注:Letta ADE是一个图形用户交互界面,用于创建、部署、交互和观察您的Letta代理。
例如,如果您正在运行Letta服务器来支持最终用户应用程序(例如客户支持聊天机器人),您可以使用ADE来测试、调试和观察服务器中的代理。您还可以将ADE用作与Letta代理交互的通用聊天界面。
ADE可以连接到自托管的Letta服务器(例如在您的笔记本电脑上运行的Letta服务器)以及Letta云服务。当连接到自托管/私有服务器时,ADE使用Letta REST API与您的服务器通信。
🖥️ 将ADE连接到本地Letta服务器
要将ADE与本地Letta服务器连接,只需:
- 启动你的Letta服务器(
docker run ...
) - 访问https://app.letta.com,您将在左侧面板中看到“本地服务器”作为选项
🔐 要使用密码保护服务器,请在docker run
命令中包含SECURE=true
和LETTA_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等外部服务上):
- 单击“添加远程服务器”
- 输入您想要的服务器名称、服务器的IP地址和服务器密码(如果已设置)
三、常见问题(FAQ)🧑🚀
“我需要安装Docker才能使用Letta吗?”
不,您可以使用pip
(通过pip install -U letta
)以及从源代码(通过poetry install
)安装Letta。请参阅下面的说明。
“使用
pip
与Docker
安装有什么区别?”
Letta通过将所有代理数据存储在数据库中来为您的代理提供持久性(它们无限期地存在)。Letta旨在与PostgreSQL(世界上最流行的数据库)一起使用,但是,无法通过pip
安装PostgreSQL,因此Letta的pip
安装默认使用SQLite。如果您在自己的计算机上运行PostgreSQL实例,您仍然可以通过设置环境变量将Letta(通过pip
安装)连接到PostgreSQLLETTA_PG_URI
。
使用SQLite时,Letta不支持数据库迁移,因此如果您想确保能够升级到最新的Letta版本并迁移Letta代理数据,请确保您使用PostgreSQL作为Letta数据库后端。下面的完整兼容性表:
安装方法 | 启动服务器命令 | 数据库后端 | 支持数据迁移? |
---|---|---|---|
pip install letta | letta server | SQLite | ❌ |
pip install letta | export LETTA_PG_URI=... +letta server | PostgreSQL | ✅ |
Install Docker | docker 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的两种主要方式是通过pypi(pip
)或通过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)
在Letta中,所有代理都存储/持久化在同一个数据库中,因此您在CLI中创建的代理可以通过API和ADE访问,反之亦然。查看我们文档上的快速入门指南,了解您在Letta CLI中创建代理并通过Letta API向同一代理发送消息的教程。
2025-01-27(一)