自动记忆:官方 memories 对齐的提取+注入闭环(确定性 v1)

开关默认关(generate/use),设置接口 GET/PUT /users/me/auto-memory-settings,任务级覆盖 POST /tasks/{id}/auto-memory-flags,手动触发 POST /users/me/auto-memory/run,日志 GET /users/me/auto-memory-log。

提取:worker run_loop 轮次边界扫 completed 任务,闲置/时长/长度/外部上下文/配额剩余百分比五道门,脱敏后写 project 级 identity_memories,同一任务去重、同一目标 supersede 合并;只写 project 级,不跨项目泄漏。

注入:worker run_one 首轮把最新各 5 条用户/项目记忆拼进内存 prompt 副本(goal 任务同步改内存 goal),库原 prompt 不动;续跑/断点/协调员不注入,注入失败 fail-open。

v1 诚实边界:extract/consolidation 模型只存设置不调模型;MCP/web 线程内调用暂无 tasks 表标记,外部上下文门只认任务间消息与协调员子任务;无控制台 UI。
This commit is contained in:
host committed 2026-10-28 12:12:10 +08:00
1 parent b93666fbe8
commit cbc90f9d30
8 files changed
+1370 -6

No files matched your search

+28
View File
@@ -967,6 +967,34 @@ POSTGRES_SCHEMA = (
"superseded_by TEXT, "
"created_at DOUBLE PRECISION, "
"updated_at DOUBLE PRECISION)",
# Auto memory (cloud/auto_memory.py): TEXT primary keys,
# so no IDENTITY sequence to keep in sync in migrations.py.
"CREATE TABLE IF NOT EXISTS memory_settings("
"user_id TEXT PRIMARY KEY, "
"generate_memories INTEGER DEFAULT 0, "
"use_memories INTEGER DEFAULT 0, "
"disable_on_external_context INTEGER DEFAULT 1, "
"min_rate_limit_remaining_percent INTEGER DEFAULT 20, "
"idle_seconds INTEGER DEFAULT 900, "
"min_duration_seconds DOUBLE PRECISION DEFAULT 30, "
"min_result_chars INTEGER DEFAULT 200, "
"extract_model TEXT, "
"consolidation_model TEXT, "
"updated_at DOUBLE PRECISION)",
"CREATE TABLE IF NOT EXISTS task_memory_flags("
"task_id TEXT PRIMARY KEY, "
"use_memories INTEGER, "
"generate_memories INTEGER, "
"updated_at DOUBLE PRECISION)",
"CREATE TABLE IF NOT EXISTS memory_extraction_log("
"task_id TEXT PRIMARY KEY, "
"owner_user_id TEXT, "
"project_id TEXT, "
"status TEXT, "
"reason TEXT, "
"memory_id TEXT, "
"created_at DOUBLE PRECISION, "
"processed_at DOUBLE PRECISION)",
)