源文件:chapter3/memobase/README.md 基于 Kimi K3 的 Memobase Agent(LOCOMO 基准) 一个具备精细记忆管理的进阶 AI Agent 实现,由 Kimi K3 模型驱动,并在 LOCOMO(长上下文与记忆优化)基准上评估。 本目录下有两条线,请勿混淆: 真正的 Memobase 框架演示( )——使用真实的 开源 Memobase SDK( ,包 ) 连接到正在运行的 Memobase 服务。这是书中第 3 章描述的 Memobase Profile(结构化用户属性)+ Event Memory(时间线)划分的标准演示。 参见 Memobase Profile + Event 演示。
源文件:chapter3/memobase/README.md
一个具备精细记忆管理的进阶 AI Agent 实现,由 Kimi K3 模型驱动,并在 LOCOMO(长上下文与记忆优化)基准上评估。
本目录下有两条线,请勿混淆:
- 真正的 Memobase 框架演示(
profile_demo.py)——使用真实的
开源 Memobase SDK(pip install memobase,包memobase>=0.0.27)
连接到正在运行的 Memobase 服务。这是书中第 3 章描述的 Memobase
Profile(结构化用户属性)+ Event Memory(时间线)划分的标准演示。
参见 Memobase Profile + Event 演示。- 手写的记忆 Agent(
agent.py/main.py)——一个自包含、
受 Memobase 启发 的MemoryStore(情景 / 语义 / 程序 / 工作
记忆,pickle 持久化),直接调用 Kimi K3。它不需要 Memobase
服务,只要一个KIMI_API_KEY。下面的--mode命令
(interactive / benchmark / demo / task)都驱动这个 Agent。
多种记忆类型:
记忆操作:
跨多个任务类别的综合评估:
cd projects/week2/memobase
pip install -r requirements.txt
cp env.example .env # 编辑 .env 并加入你的 Kimi API 密钥
编辑 config.py 进行自定义:
一边构建并使用记忆,一边与 Agent 对话:
python main.py --mode interactive
交互模式下的可用命令:
/help - 显示可用命令/memory - 显示记忆统计/clear - 清空工作记忆/reset - 重置对话(保留长期记忆)/learn - 触发记忆整合/exit - 退出交互模式运行 LOCOMO 基准评测:
# 运行完整基准 python main.py --mode benchmark # 运行特定类别 python main.py --mode benchmark --category multi_turn_reasoning # 运行有限数量的任务 python main.py --mode benchmark --num-tasks 5
运行预置的演示场景:
python main.py --mode demo
演示内容包括:
执行一个特定任务:
python main.py --mode task --task "Plan a 7-day trip to Japan with a $3000 budget"
--api-key KEY - 覆盖环境变量中的 API 密钥--no-memory - 以空记忆库启动--verbose - 开启详细日志profile_demo.py 使用真实的开源 Memobase SDK,展示其两种
记忆结构:Profile(主题 → 子主题 → 内容,例如basic_info→城市、work→职位、interest→游戏偏好)和 Event Memory(一条
用于"我们什么时候讨论过预算?"这类问题的时间线)。它遵循
Memobase 的缓冲管线:insert(写入用户缓冲)→flush(触发一次 LLM 抽取)→ profile / event / context(召回)。
Memobase 的记忆抽取在服务端完成,因此演示需要可访问的
Memobase 服务(客户端本身不调用 LLM):
http://localhost:8019,默认 tokensecret。抽取模型在服务端的 .env /config.yaml 中配置,而非由本客户端设置(--model 仅供参考)。project_url + api_key。通过 --project-url / --api-key 或MEMOBASE_PROJECT_URL / MEMOBASE_API_KEY 环境变量让客户端指向服务(参见env.example)。
pip install -r requirements.txt # 安装 memobase SDK # 针对运行中的服务做端到端演示(内置示例对话): python profile_demo.py # 离线预览——展示对话 + 管线,但不联网,也不伪造结果: python profile_demo.py --dry-run # 记忆生成后的单步操作: python profile_demo.py --op profile # 召回结构化用户画像 python profile_demo.py --op event # 召回事件时间线 python profile_demo.py --op context # 拼装好的记忆上下文字符串 python profile_demo.py --input chat.json --output result.json
如果没有可达的服务,演示会给出一条可操作的提示(指向--dry-run 或 --project-url)后退出,而不是凭空编造记忆输出。
agent.py)MemoryStore 类管理不同的记忆类型,具备:
agent.py)MemobaseAgent 类提供:
locomo_benchmark.py)LOCOMOBenchmark 类实现:
当记忆超过阈值时:
在空闲或被触发整合时:
处理查询时:
结果保存在 benchmark_results/ 中,包含:
通过修改 Agent 类来扩展自定义工具:
def add_tool(self, tool_name, tool_function): # 添加工具注册逻辑 pass
在 config.py 中添加新的记忆类型:
MEMOBASE_CONFIG["memory_types"].append("custom_type")
在 locomo_benchmark.py 中添加自定义基准任务:
self.tasks.append(BenchmarkTask( id="custom_001", category="custom_category", query="Your custom task query", expected_capabilities=["capability1", "capability2"] ))
API 密钥错误:
.env 中已设置 KIMI_API_KEY记忆溢出:
MAX_MEMORY_ENTRIES性能缓慢:
MODEL_MAX_TOKENS欢迎贡献!可改进的方向:
MIT License - 详情见 LICENSE 文件
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.