源文件:chapter3/mem0/README.md 基于 Kimi K3 的 Mem0 Agent(LOCOMO 基准) 一个将 Mem0 记忆框架与 Kimi K3 语言模型相结合的进阶 AI Agent 实现,专为 LOCOMO(长上下文多智能体)基准设计。 概览 本项目实现了一个先进的对话式 AI Agent,具备以下特点: 持久化记忆:使用 Mem0 框架在多次会话间管理长期记忆 先进语言模型:集成 Kimi K3 模型(具备 100 万 token 上下文窗口;
源文件:chapter3/mem0/README.md
一个将 Mem0 记忆框架与 Kimi K3 语言模型相结合的进阶 AI Agent 实现,专为 LOCOMO(长上下文多智能体)基准设计。
本项目实现了一个先进的对话式 AI Agent,具备以下特点:
LOCOMO 基准包含五类场景:
cd projects/week2/mem0
pip install -r requirements.txt
cp env.example .env # 编辑 .env,填入你的 API 密钥和配置
所需环境变量:
KIMI_API_KEY:你的 Kimi K3 API 密钥MODEL_NAME:模型名(默认:kimi-k3)。这里填的是 Moonshot 原始模型kimi-k3、kimi-k2.5、kimi-k2.6),直接透传给 API——切勿provider/model 这种斜杠形式;Mem0 配置的是指向 Moonshotbase_url 的 openai provider,会把字符串原样转发,写成 kimi/k3 会返回MEMORY_BACKEND:存储后端(local/cloud)MAX_TOKENS:最大 token 上限(默认:128000)运行快速入门示例,观察 Agent 的实际表现:
python quickstart.py
它会演示:
最能体现 Mem0 价值——其 ADD / UPDATE / DELETE /
NOOP 管线以及跨会话召回——的是 demo 模式:
python main.py --mode demo --user-id demo_user
它复现了书中(chapter3.md)的核心示例:用户先说自己住在北京,后续又说搬到了上海,
Mem0 通过 UPDATE(修订已有记忆)来解决冲突,而不是存下两条互相矛盾的记录。
其间还会通过语义检索召回一条已存记忆,展示记忆被"后续使用"。同一流程也对应quickstart.py 中的 memory_pipeline_example(),由 python quickstart.py 首先运行。
Mem0 的记忆 API 被直接暴露出来,让你无需对话循环也能观察每一步管线决策。
所有参数都有中文 --help(python main.py --help):
# ADD — 写入一段对话/一句话;打印 ADD/UPDATE/DELETE 事件 python main.py --mode memory --op add --text "我住在北京,是一名后端工程师" --user-id u1 # SEARCH — 语义召回 python main.py --mode memory --op search --query "这个用户住在哪里?" --user-id u1 # GET-ALL — 列出所有已存记忆(可选导出为 JSON) python main.py --mode memory --op get-all --user-id u1 --output mem.json # HISTORY — 某条记忆 id 的变更/审计轨迹(展示随时间的 UPDATE/DELETE) python main.py --mode memory --op history --memory-id <id> # DELETE — 按 id 删除一条记忆 python main.py --mode memory --op delete --memory-id <id>
关键参数:--op {add,search,get-all,history,delete}、--text、--query、--memory-id、--user-id、--agent-id、--model(覆盖 MODEL_NAME)、--output(将结果写入 JSON)。--text 既接受原始字符串,也接受 JSON
消息列表的文件路径。
上述操作、
demo模式以及对话模式都需要可用的 LLM
API 密钥(KIMI_API_KEY)和向量库——Mem0 的事实抽取和语义检索都是在线模型调用。
没有密钥时,CLI 会解析参数后报告缺失的密钥;不会伪造任何记忆输出。
启动一个交互式对话会话:
python main.py --mode interactive
交互模式下的可用命令:
help - 显示可用命令memories - 显示已存记忆metrics - 显示性能指标save - 保存对话状态load - 加载之前的状态new - 开始新会话exit - 退出程序从 JSON 文件批量处理多段对话:
python main.py --mode batch --input conversations.json --output results.json
输入格式:
[ { "session_id": "session_001", "user_id": "user_001", "agent_id": "agent_001", "turns": [ "第一条用户消息", "第二条用户消息" ] } ]
运行完整的 LOCOMO 基准评测:
python experiment.py --scenarios 10 --output results/
它会:
基准评估内容包括:
结果以 JSON 格式保存,结构如下:
{ "config": {...}, "scenarios": [ { "scenario": {...}, "sessions": [...], "overall_metrics": { "avg_consistency": 0.92, "avg_coherence": 0.88, "memory_utilization": 42 } } ], "overall_metrics": {...} }
Agent 模块(agent.py)
Mem0Agent:集成记忆的主 Agent 类KimiK3Client:Kimi K3 模型 API 客户端AgentContext:会话上下文管理配置(config.py)
KimiConfig:Kimi 模型设置Mem0Config:记忆系统配置LOCOMOConfig:基准参数实验框架(experiment.py)
LOCOMOBenchmark:基准实现Mem0 框架提供:
通过修改 experiment.py 创建自定义基准场景:
custom_scenario = { "type": "custom_type", "description": "Your scenario description", "topics": ["topic1", "topic2"], "context_requirements": ["requirement1", "requirement2"] }
config.mem0.backend = "local" config.mem0.vector_store_config = { "provider": "chroma", "config": { "collection_name": "my_collection", "path": "./data/chroma_db" } }
config.mem0.backend = "cloud" config.mem0.api_key = "your_mem0_api_key"
通过调整以下配置优化性能:
MAX_TOKENS:调低以获得更快响应TEMPERATURE:调低以获得更稳定的输出context_window_size:在上下文与速度之间权衡_prepare_messages() 中调整API 密钥错误
.env 中已设置 KIMI_API_KEY记忆后端问题
./data/ 有写权限MEM0_API_KEY 正确性能问题
MAX_TOKENS 以加快响应开启详细日志:
export LOG_LEVEL=DEBUG python main.py
mem0/ ├── agent.py # 核心 Agent 实现 ├── config.py # 配置管理 ├── experiment.py # LOCOMO 基准 ├── main.py # 主入口 ├── quickstart.py # 示例演示 ├── requirements.txt # 依赖 ├── env.example # 环境变量模板 └── README.md # 文档
运行测试(如可用):
pytest tests/
在标准硬件上的典型性能指标:
本项目是 AI Agent Book 训练材料的一部分。
如有问题或疑问:
quickstart.py 中的示例代码This experiment now supports a universal OpenRouter fallback for its chat LLM.
MOONSHOT_API_KEY / KIMI_API_KEY / OPENAI_API_KEY / DOUBAO_API_KEY …) is present, behavior is unchanged.OPENROUTER_API_KEY is set, the chat LLM is automatically routed through OpenRouter (https://openrouter.ai/api/v1). Model names are mapped automatically: gpt-*/o1-* → openai/…, claude-* → anthropic/claude-opus-4.8, kimi-* → moonshotai/kimi-k2.6, ids already containing / are kept as-is, and other provider-native ids (e.g. doubao-*) fall back to openai/gpt-5.6-luna. Set OPENROUTER_MODEL to force a specific OpenRouter model id.Add OPENROUTER_API_KEY=... to your .env (see env.example) to enable it.
Note: mem0's embedder still uses OpenAI embeddings (OpenRouter has no embeddings endpoint), so
OPENAI_API_KEYis still required for storing/retrieving memories. The OpenRouter fallback only covers the chat LLM (fact extraction, ADD/UPDATE/DELETE decisions, and answering).