源码深度学习 · 零基础友好 · 20 天

Letta(Legacy V1) 源码学习

提供带长期记忆、工具调用和多模型适配的状态化 LLM Agent 服务端(本仓库为 legacy V1)。这不是 API 速查表,而是一条可以重复走的源码路线:每天用 30 分钟,从一个真实相对路径出发,先用类比建立直觉,再把它接回整条运行链路。

00

开篇 · 这是个什么项目

Letta(Legacy V1) 可以先想成一间会做笔记的长期助理。它的代码不是一堆孤立文件:入口接到需求,核心对象做判断,工具或模型完成工作,状态把结果交给下一个环节。

💡 20 天的主线先找入口和地图,再跟一次真实任务穿过核心循环;随后研究状态、模型、工具与扩展;最后用复盘把全部概念连成一张可迁移的地图。不要背目录名,要不断问「谁创建它、它把什么交给谁」。
大白话读源码像参观工厂:第一天先看门牌和楼层,不急着拆机器。后面每节课只打开一个焦点路径,但始终知道它属于哪层、服务哪个业务动作。
01

架构全景(动起来看)

发光扫过的每一层都是一次任务可能经过的站点。不同仓库命名不同,但「接入 → 编排 → 核心能力 → 资源」的责任边界很相似。

L5 · 接入层
CLI本层职责
FastAPI本层职责
Routers本层职责
L4 · Agent 层
AgentLoop本层职责
LettaAgent本层职责
L3 · 领域服务
Agent/Message/Block Managers本层职责
L2 · 集成层
LLM本层职责
MCP本层职责
数据源本层职责
L1 · 数据层
Schemas本层职责
ORM本层职责
记忆存储本层职责
输入用户任务组织对象 / 流程执行模型 / 工具沉淀状态 / 记忆
设计取舍分层会增加跳转文件的次数,却让每层只承担一种职责:入口容易替换,核心逻辑能测试,模型与外部工具可插拔。读代码时先沿箭头追「数据」而不是追每一个类。
02

怎么使用这份教程

⏱️

每天 30 分钟

6 讲,每讲先问问题,再给本质和大白话。

📍

真实相对路径

所有路径都从项目根目录算,不把你的机器路径写进源码引用。

🧪

先验证再推理

每页都有可复制 bash 命令;文件版本变化时以本地实际内容为准。

🧭

可迁移方法

学会从入口、数据结构、循环和扩展点读任何 AI 项目。

S1

阶段 1 · 遗留服务端全景

D01-D03 · 定位 V1、入口和 API
01

Legacy V1 服务端定位

README.md:确认本仓库的维护状态和适合学习的边界。

≈30 min · 6 讲开始学 →
02

CLI 入口

letta/main.py:认识命令行如何启动和管理 Letta 服务。

≈30 min · 6 讲开始学 →
03

FastAPI 应用装配

letta/server/rest_api/app.py:阅读中间件、路由、异常和应用生命周期。

≈30 min · 6 讲开始学 →
S2

阶段 2 · Agent 与记忆模型

D04-D07 · 消息、Block、上下文窗口
04

Agent API 路由

letta/server/rest_api/routers/v1/agents.py:理解 Agent 创建、查询和配置的 HTTP 接口。

≈30 min · 6 讲开始学 →
05

Agent 请求与响应模型

letta/schemas/agent.py:掌握 API 数据契约和领域字段。

≈30 min · 6 讲开始学 →
06

消息与记忆 Schema

letta/schemas/memory.py:理解记忆块、上下文和消息结构。

≈30 min · 6 讲开始学 →
07

Agent 持久化模型

letta/orm/agent.py:阅读 Agent 在关系数据库中的实体表达。

≈30 min · 6 讲开始学 →
S3

阶段 3 · 一次对话的运行环

D08-D11 · 模型、工具、流式响应
08

Agent 主循环

letta/agents/agent_loop.py:跟踪一轮输入如何变成模型调用、工具调用和结果。

≈30 min · 6 讲开始学 →
09

Letta Agent 实现

letta/agents/letta_agent.py:认识具体 Agent 如何组合记忆、消息和配置。

≈30 min · 6 讲开始学 →
10

上下文窗口计算

letta/services/context_window_calculator/context_window_calculator.py:理解如何在 token 上限内安排上下文。

≈30 min · 6 讲开始学 →
11

消息 API 与流式交付

letta/server/rest_api/routers/v1/messages.py:把消息请求、Agent 运行和 HTTP 响应串起来。

≈30 min · 6 讲开始学 →
S4

阶段 4 · 服务与存储

D12-D14 · Manager、ORM、数据生命周期
12

Agent Manager

letta/services/agent_manager.py:学习 Agent 生命周期和业务编排的服务层做法。

≈30 min · 6 讲开始学 →
13

Message Manager

letta/services/message_manager.py:理解消息创建、查询和持久化职责。

≈30 min · 6 讲开始学 →
14

Block 与长期记忆

letta/services/block_manager.py:掌握记忆块的管理与版本化思路。

≈30 min · 6 讲开始学 →
S5

阶段 5 · 扩展能力

D15-D17 · 多模型、MCP、数据源
15

模型供应商抽象

letta/llm_api/llm_client.py:理解统一接口如何屏蔽模型提供商差异。

≈30 min · 6 讲开始学 →
16

工具 Schema 生成

letta/functions/schema_generator.py:学习 Python 工具如何成为 LLM 可调用的描述。

≈30 min · 6 讲开始学 →
17

MCP 工具执行

letta/services/tool_executor/mcp_tool_executor.py:理解 Agent 如何经 MCP 调用外部能力。

≈30 min · 6 讲开始学 →
S6

阶段 6 · 可靠运行

D18-D20 · 摘要、可观测性与迁移判断
18

上下文摘要与压缩

letta/services/summarizer/compact.py:阅读超长对话的记忆保留策略。

≈30 min · 6 讲开始学 →
19

数据源与文件接入

letta/data_sources/connectors.py:认识外部资料进入 Agent 系统的边界。

≈30 min · 6 讲开始学 →
20

V1 架构复盘与迁移判断

letta/server/server.py:梳理分层,并结合仓库状态判断何时转向新 Letta Agent。

≈30 min · 6 讲开始学 →