记忆系统,上下文处理+mem0
This commit is contained in:
@@ -4,6 +4,33 @@
|
||||
|
||||
## 记录
|
||||
|
||||
### [CL-20260413-2320] 2026-04-13 23:20 — 集成 Mem0 记忆系统:滑动窗口 + 跨会话长期记忆
|
||||
- **tags**: Mem0, 记忆系统, 上下文管理, 长期记忆, Ollama, embedding, 滑动窗口
|
||||
- **affected_files**:
|
||||
- art-agent/backend/app/memory.py(新建)
|
||||
- art-agent/backend/app/agent/loop.py
|
||||
- art-agent/backend/app/config.py
|
||||
- art-agent/backend/app/api/chat.py
|
||||
- art-agent/backend/requirements.txt
|
||||
- art-agent/backend/.env
|
||||
- art-agent/frontend/src/lib/api.ts
|
||||
- art-agent/frontend/src/app/page.tsx
|
||||
- .gitignore
|
||||
- **what**: 集成 Mem0 开源版作为统一记忆方案,一次性解决两个延期方案:上下文管理(滑动窗口截断)和跨会话长期记忆(事实提取+语义检索)
|
||||
- **why**: 当前对话全量透传无截断,长对话会超 token 上限且费用线性增长;且每次会话从零开始无法记住用户偏好
|
||||
- **decisions**:
|
||||
- 选择 Mem0 OSS 自部署(非平台托管),完全本地化,数据在 ./data/qdrant
|
||||
- DeepSeek 作为事实提取 LLM(复用现有 key,成本极低)
|
||||
- Ollama nomic-embed-text 作为本地 embedding(免费,768维,性能足够)
|
||||
- 不做静默降级:Ollama 不可用 → 阻止启动;search 失败 → SSE error 中断对话;add 失败 → SSE warning 告知用户
|
||||
- 用 asyncio.run_in_executor 异步执行 memory.add(),不阻塞用户体验
|
||||
- **notes**:
|
||||
- 测试时创建了 data/qdrant 目录(含测试记忆数据),已加入 .gitignore
|
||||
- Ollama 需要作为后台服务保持运行
|
||||
- 首次 Mem0 初始化约需 5-8 秒(创建 Qdrant collection)
|
||||
- 解决了延期方案 [context-window-management] 和 [mem0-long-term-memory]
|
||||
- **source_chat**: [Mem0 记忆系统集成](mem0-memory-integration)
|
||||
|
||||
### [CL-20260413-1130] 2026-04-13 11:30 — 修复 SDXL 模型 404 错误:补全 Replicate 版本 hash
|
||||
- **tags**: bug修复, Replicate, SDXL, 模型配置, 404
|
||||
- **affected_files**:
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
最近 ~50 次改动的一句话概要,按时间倒序排列。每次会话自动注入上下文。
|
||||
|
||||
- [CL-20260413-2320] 集成 Mem0 记忆系统:Mem0 OSS + DeepSeek 事实提取 + Ollama 本地 embedding + 滑动窗口,一次性解决上下文管理和跨会话长期记忆
|
||||
- [CL-20260413-1130] 修复 SDXL 模型 404 错误:与 Kolors 同因,Replicate 非 Flux 官方模型需补全版本 hash
|
||||
- [CL-20260413-1100] 修复切换模型后 LLM 仍声称使用旧模型名:System Prompt 动态注入当前模型名,阻止 LLM 从对话历史幻觉旧模型
|
||||
- [CL-20260413-1030] Agent Loop 假生成检测 + 自动重试:DeepSeek 用文字模拟生图时自动注入纠正消息强制调用工具
|
||||
|
||||
@@ -3,6 +3,11 @@
|
||||
最近 ~10 次改动的摘要记录,按时间倒序排列。
|
||||
当 Agent 检测到当前任务与近期改动相关时自动读取。
|
||||
|
||||
### [CL-20260413-2320] 2026-04-13 — 集成 Mem0 记忆系统:滑动窗口 + 跨会话长期记忆
|
||||
- **tags**: Mem0, 记忆系统, 上下文管理, 长期记忆, Ollama, embedding, 滑动窗口
|
||||
- **affected_files**: app/memory.py, app/agent/loop.py, app/config.py, app/api/chat.py, requirements.txt, .env, frontend/src/lib/api.ts, frontend/src/app/page.tsx
|
||||
- **summary**: 集成 Mem0 OSS 作为统一记忆方案。DeepSeek 做事实提取,Ollama nomic-embed-text 做本地 embedding,Qdrant 文件模式做向量存储。agent loop 新增滑动窗口(MAX_RECENT_TURNS=20)、记忆检索注入 system prompt、异步事实存储。前端传递 session_id 实现会话级记忆作用域。不做静默降级,所有错误显式报告。
|
||||
|
||||
### [CL-20260413-1130] 2026-04-13 — 修复 SDXL 模型 404 错误:补全 Replicate 版本 hash
|
||||
- **tags**: bug修复, Replicate, SDXL, 模型配置, 404
|
||||
- **affected_files**: art-agent/backend/app/config.py
|
||||
|
||||
@@ -91,53 +91,18 @@
|
||||
- **chosen_alternative**: 当前资源库使用手动标签 + Prompt 文本搜索
|
||||
- **deferred_reason**: 当前阶段资源量少,手动管理足够;等资源积累到一定量级后再引入自动化
|
||||
|
||||
### [context-window-management] 对话上下文管理(Token 预算 + 滑动窗口 + 摘要)
|
||||
- **status**: deferred
|
||||
- **tags**: 上下文管理, token, 滑动窗口, 对话摘要, agent loop, 长对话
|
||||
- **recorded**: 2026-04-13
|
||||
- **source_chat**: [Art Agent 上下文与记忆体系讨论](memory-architecture-discussion)
|
||||
- **prerequisite**: 无(随时可做,优先级高于长期记忆)
|
||||
- **related_files**:
|
||||
- art-agent/backend/app/agent/loop.py
|
||||
- art-agent/frontend/src/lib/api.ts
|
||||
- art-agent/frontend/src/lib/store.ts
|
||||
- **context**: |
|
||||
当前 Art Agent 对话采用"全量透传":前端把完整 messages 发给后端,后端原样拼接传给 LLM,
|
||||
没有 token 计数、截断或摘要。长对话会导致上下文超限、费用线性增长。
|
||||
实施方案(自建,无需外部依赖):
|
||||
1. Token 计数:用 tiktoken 库在构建 api_messages 时计数
|
||||
2. 滑动窗口:超过预算时截断最早的消息
|
||||
3. 对话摘要:被截断的消息先调 LLM 生成摘要,作为压缩上下文保留
|
||||
预估工作量 1-2 天,是记忆体系的第一层基础。
|
||||
- **chosen_alternative**: 当前全量透传,依赖模型自身的上下文窗口上限
|
||||
- **deferred_reason**: 当前探索期对话通常较短,暂未触及上限;但随着迭代使用会很快需要
|
||||
|
||||
### [mem0-long-term-memory] 引入 Mem0 作为长期记忆层
|
||||
- **status**: deferred
|
||||
- **tags**: 长期记忆, Mem0, 用户偏好, 语义检索, 事实提取, memory layer
|
||||
- **recorded**: 2026-04-13
|
||||
- **source_chat**: [Art Agent 上下文与记忆体系讨论](memory-architecture-discussion)
|
||||
- **prerequisite**: 第一层上下文管理(context-window-management)完成后
|
||||
- **related_files**:
|
||||
- art-agent/backend/app/agent/loop.py
|
||||
- art-agent/backend/app/config.py
|
||||
- **context**: |
|
||||
引入 Mem0 开源版(Apache 2.0)作为 Art Agent 的跨会话长期记忆层:
|
||||
- Mem0 是"bolt-on"设计,保留自己的 agent loop,只外挂 memory API
|
||||
- 核心 API:memory.add()(存储+自动事实提取)+ memory.search()(语义检索)
|
||||
- 自部署:pip install mem0ai + Qdrant 向量库,LLM 用 DeepSeek 降成本
|
||||
- 记忆范围:用户风格偏好、历史生成反馈、常用参数等
|
||||
- 与自建 Rules/Docs 静态知识系统互补:Mem0 负责动态记忆,Rules 负责预置知识
|
||||
技术选型对比(本次讨论结论):
|
||||
- Letta 不适合:它是完整 agent runtime,不是 memory layer,需要替换现有 loop
|
||||
- Zep 可行但偏重:时序知识图谱能力强但集成复杂度更高
|
||||
- Mem0 最适合:设计哲学完全对口"已有 agent + 外挂 memory",集成最简(~20 行代码)
|
||||
预估工作量 3-5 天(含 Mem0 部署 + 集成 + extraction prompt 调优)。
|
||||
- **chosen_alternative**: 当前无长期记忆,每次会话从零开始
|
||||
- **deferred_reason**: 探索期优先做第一层上下文管理;长期记忆在用户量和使用频率增长后再引入
|
||||
|
||||
---
|
||||
|
||||
## Completed / Cancelled Items
|
||||
|
||||
(暂无已完成或已废弃的方案)
|
||||
### [context-window-management] 对话上下文管理(滑动窗口)
|
||||
- **status**: completed
|
||||
- **completed_date**: 2026-04-13
|
||||
- **completed_by**: [CL-20260413-2320] Mem0 记忆系统集成
|
||||
- **notes**: 原计划自建 tiktoken + 滑动窗口 + 摘要。实际方案:Mem0 的事实提取替代了"对话摘要",滑动窗口在 loop.py 中实现(MAX_RECENT_TURNS=20)
|
||||
|
||||
### [mem0-long-term-memory] 引入 Mem0 作为长期记忆层
|
||||
- **status**: completed
|
||||
- **completed_date**: 2026-04-13
|
||||
- **completed_by**: [CL-20260413-2320] Mem0 记忆系统集成
|
||||
- **notes**: Mem0 OSS 自部署(DeepSeek 事实提取 + Ollama nomic-embed-text embedding + Qdrant 本地向量库),与上下文管理一并实施
|
||||
|
||||
Reference in New Issue
Block a user