{"id":"714507a2-f46b-4f6c-91bd-90b9ebab717f","entityType":"agent","slug":"clawhub-fslong520-memocap","name":"memocap","canonicalUrl":"https://www.xpersona.co/agent/clawhub-fslong520-memocap","canonicalPath":"/agent/clawhub-fslong520-memocap","generatedAt":"2026-10-10T07:53:45.401Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T01:10:48.680Z","emptyReason":null},"description":"忆时记忆系统 - 类人记忆检索/存储/遗忘/胶囊/可视化。让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆。触发词：忆时、记忆、记住、回想、回忆、recall、remember、时间胶囊、记忆检索、可视化、记忆脑图、人物画像。 Skill: memocap Owner: fslong520 Summary: 忆时记忆系统 - 类人记忆检索/存储/遗忘/胶囊/可视化。让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆。触发词：忆时、记忆、记住、回想、回忆、recall、remember、时间胶囊、记忆检索、可视化、记忆脑图、人物画像。 Tags: ai:2.5.10, chinese:2.5.10, latest:2.5.10, memory:2.5.10, recall:2.5.10 Version history: v2.5.10 | 2026-08-23T03:44:50.582Z | user 忆时记忆系统迭代: 硬约束执行契约(先定义路径/言必检/值必存/存必告); 鲁迅式半文半白语言风格; 记忆涌现与自主记忆双核心; 空检焦虑协议; 存后必核; 时间胶囊/可视化/人物画像; 快捷操作/忆时命令; 存储充实维度(重点/做法/上下文); 前因后果","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.8K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s179dxbepyx3dhgg6vsaj80yt583nxj7:memocap","sourceUrl":"https://clawhub.ai/fslong520/memocap","homepage":"https://clawhub.ai/fslong520/skills/memocap","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/fslong520/memocap","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/fslong520/skills/memocap","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":65,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"忆时记忆系统 - 类人记忆检索/存储/遗忘/胶囊/可视化。让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆。触发词：忆时、记忆、记住、回想、回忆、recall、remember、时间胶囊、记忆检索、可视化、记忆脑图、人物画像。 Skill: memocap Owner: fslong520 Summary: 忆时记忆"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T01:10:48.680Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T01:10:48.680Z","emptyReason":null},"stars":null,"forks":null,"downloads":1814,"packageName":null,"latestVersion":"2.5.10","tractionLabel":"1.8K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T01:10:48.679Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T01:10:48.680Z","lastCrawledAt":"2026-10-10T01:10:48.679Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T01:10:48.680Z","lastVerifiedAt":null,"highlights":[{"version":"2.5.10","createdAt":"2026-08-23T03:44:50.582Z","changelog":"忆时记忆系统迭代: 硬约束执行契约(先定义路径/言必检/值必存/存必告); 鲁迅式半文半白语言风格; 记忆涌现与自主记忆双核心; 空检焦虑协议; 存后必核; 时间胶囊/可视化/人物画像; 快捷操作/忆时命令; 存储充实维度(重点/做法/上下文); 前因后果铁律; 审计三问","fileCount":3,"zipByteSize":4020},{"version":"2.5.0","createdAt":"2026-08-21T10:54:34.664Z","changelog":"新增网状记忆图谱（D3力导向~300节点），图谱title全库≤10字迁移/标签>5字折行，指针事件修复事件冲突与光标丢失，孤儿节点按关键词连入网络，双载体架构（dsh插件+opencode技能共享数据），同步SKILL.md图说","fileCount":3,"zipByteSize":3337},{"version":"2.4.0","createdAt":"2026-08-19T09:19:54.753Z","changelog":"忆时插件化自包含：全功能迁入 DSH 插件 @fslong/dsh-yishi（opencode 技能作废）；数据目录迁移至 ~/.local/share/忆时/ 双栖共用；bge 模型自动下载（models-install.py 幂等+锁+断点续传）；画像印章竖排修复；docs/modules 路径批量更新","fileCount":35,"zipByteSize":92477},{"version":"2.3.3","createdAt":"2026-08-14T13:20:29.599Z","changelog":"修复多会话并发写冲突（chromadb InternalError attempt to write a readonly database）：sqlite 转 WAL 模式、get_client 对 readonly/locked 重试 6 次兜底、main 增加 fcntl 进程排他锁序列化整条命令；并发双写测试通过","fileCount":26,"zipByteSize":80587},{"version":"2.3.2","createdAt":"2026-08-14T03:42:28.937Z","changelog":"修复检索不相关：BM25语义分封顶0.7防关键词虚高顶榜、打分权重语义主导(0.60语义+0.08情绪+0.12近因+0.20频率)、半衰期30→90天防旧记忆被压死、被检索次数降权防热门霸榜","fileCount":26,"zipByteSize":79713},{"version":"2.3.1","createdAt":"2026-08-14T02:50:05.660Z","changelog":"命令速查内嵌指令文件：store/recall完整模板注入即见，无需再查help；模块13存储命令加参数警示（内容为位置参数、勿用--content/--tags）","fileCount":26,"zipByteSize":79613},{"version":"2.3.0","createdAt":"2026-08-13T15:31:32.068Z","changelog":"情绪强度从词语(extreme/high/medium/low)改为0.0~1.0数值，数值直接体现重要程度；旧词自动映射兼容；recall/stats/viz/profile 全链路按数值显示与统计","fileCount":26,"zipByteSize":78980},{"version":"2.2.1","createdAt":"2026-08-09T12:24:00.285Z","changelog":"修复数据路径双库分叉：数据统一 LOCAL_BASE/data（~/.local/share/opencode/忆时/data），viz 与文档同步，旧 MiniLM 库迁移备份，根治 bge 与旧库配置冲突","fileCount":26,"zipByteSize":77920}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s179dxbepyx3dhgg6vsaj80yt583nxj7:memocap","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fslong520-memocap/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fslong520-memocap/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fslong520-memocap/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-fslong520-memocap/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-fslong520-memocap/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-fslong520-memocap/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T07:53:45.398Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fslong520-memocap/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fslong520-memocap/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fslong520-memocap/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-fslong520-memocap/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T01:10:48.680Z","emptyReason":null},"readme":"Skill: memocap\n\nOwner: fslong520\n\nSummary: 忆时记忆系统 - 类人记忆检索/存储/遗忘/胶囊/可视化。让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆。触发词：忆时、记忆、记住、回想、回忆、recall、remember、时间胶囊、记忆检索、可视化、记忆脑图、人物画像。\n\nTags: ai:2.5.10, chinese:2.5.10, latest:2.5.10, memory:2.5.10, recall:2.5.10\n\nVersion history:\n\nv2.5.10 | 2026-08-23T03:44:50.582Z | user\n\n忆时记忆系统迭代: 硬约束执行契约(先定义路径/言必检/值必存/存必告); 鲁迅式半文半白语言风格; 记忆涌现与自主记忆双核心; 空检焦虑协议; 存后必核; 时间胶囊/可视化/人物画像; 快捷操作/忆时命令; 存储充实维度(重点/做法/上下文); 前因后果铁律; 审计三问\n\nv2.5.0 | 2026-08-21T10:54:34.664Z | user\n\n新增网状记忆图谱（D3力导向~300节点），图谱title全库≤10字迁移/标签>5字折行，指针事件修复事件冲突与光标丢失，孤儿节点按关键词连入网络，双载体架构（dsh插件+opencode技能共享数据），同步SKILL.md图说\n\nv2.4.0 | 2026-08-19T09:19:54.753Z | user\n\n忆时插件化自包含：全功能迁入 DSH 插件 @fslong/dsh-yishi（opencode 技能作废）；数据目录迁移至 ~/.local/share/忆时/ 双栖共用；bge 模型自动下载（models-install.py 幂等+锁+断点续传）；画像印章竖排修复；docs/modules 路径批量更新\n\nv2.3.3 | 2026-08-14T13:20:29.599Z | user\n\n修复多会话并发写冲突（chromadb InternalError attempt to write a readonly database）：sqlite 转 WAL 模式、get_client 对 readonly/locked 重试 6 次兜底、main 增加 fcntl 进程排他锁序列化整条命令；并发双写测试通过\n\nv2.3.2 | 2026-08-14T03:42:28.937Z | user\n\n修复检索不相关：BM25语义分封顶0.7防关键词虚高顶榜、打分权重语义主导(0.60语义+0.08情绪+0.12近因+0.20频率)、半衰期30→90天防旧记忆被压死、被检索次数降权防热门霸榜\n\nv2.3.1 | 2026-08-14T02:50:05.660Z | user\n\n命令速查内嵌指令文件：store/recall完整模板注入即见，无需再查help；模块13存储命令加参数警示（内容为位置参数、勿用--content/--tags）\n\nv2.3.0 | 2026-08-13T15:31:32.068Z | user\n\n情绪强度从词语(extreme/high/medium/low)改为0.0~1.0数值，数值直接体现重要程度；旧词自动映射兼容；recall/stats/viz/profile 全链路按数值显示与统计\n\nv2.2.1 | 2026-08-09T12:24:00.285Z | user\n\n修复数据路径双库分叉：数据统一 LOCAL_BASE/data（~/.local/share/opencode/忆时/data），viz 与文档同步，旧 MiniLM 库迁移备份，根治 bge 与旧库配置冲突\n\nv2.2.0 | 2026-08-09T12:02:30.796Z | user\n\nembedding 只保留 bge-base-zh-v1.5：删 MiniLM 回退机制，模型缺失即报错提示安装，根治 384/768 维数据冲突\n\nv2.1.1 | 2026-08-09T09:26:02.644Z | user\n\nFix embed_query interface bug: __call__ split str input into chars (list()), broke direct embed_query(str) calls; now dual-compatible str/list and returns nested [768] per Chroma 1.5.9 batch semantics\n\nv2.1.0 | 2026-08-09T08:59:18.407Z | user\n\nHybrid retrieval (BM25+vector RRF); duplicate auto-merge (>90%); scene groups & activity time ranges; recall budget control & --no-embed fast mode; periodic auto-extraction with quality gate; env var renamed YISHI_DATA_DIR→MEMO_DIR; fix import/export edge-case errors\n\nv2.0.0 | 2026-08-08T15:12:09.419Z | user\n\n渐进式披露重构：SKILL.md瘦身为识别层（844→172行），执行细节迁入modules/07-14（技能即记忆/安装配置/归档/梳理/快捷命令/可视化画像/检索存储/行为），新增按需读取表；yishi-instructions.md立记忆涌现与自主记忆为两大核心\n\nv1.3.0 | 2026-08-07T16:42:45.303Z | user\n\n核心升级：embedding 模型由英文 all-MiniLM-L6-v2 切换为 BAAI bge-base-zh-v1.5（768维，中文语义检索，对比实测：中文查询命中精准，旧模型严重跑题）。引擎自动检测模型目录（LOCAL_BASE/models/bge-base-zh-v1.5），MiniLM 保留回退；新增 Chroma 新接口兼容（name/embed_query/embed_documents）。数据已迁移重建（memories 388/relationships 1336/meta，768维）。文档更新模型安装章节（hf-mirror 下载指引、维度变更重建说明）\n\nv1.2.0 | 2026-08-07T16:02:18.827Z | user\n\n修复：主题卷页与高频卡 undefined（records 键 emotion vs e 错位）；高频 Top3 按真实检索次数排序、过滤记忆梳理时间戳元记忆。改进：主题卷页每页 4 条、正文统一两行、space-between 分散填满页高；高频卡两行；滚轮翻页（页内滚动优先）；?page=N URL 直达某页。画像：全新两页设定集风格（s-group 三组 space-between 分散、min-height 纸随内容长不裁切、特质 3 条、九十日轨迹移页一）。署名：fslong 醒目署名（书封面徽章/封底/画像标题/页脚），画像生成流程先问署名。删去多余提示文字与余数标注\n\nv1.1.0 | 2026-08-07T15:33:17.877Z | user\n\n新增记忆可视化书页（/忆时 可视化）：A4比例3D翻页、孟菲斯封面、高频Top3、主题卷页每页4条、每条限高3行超长悬停显全文；新增人物画像（/忆时 画像）：两页设定集风格、s-group三组分散布局、特质3条、自动封存时间胶囊3个月后解锁（--no-capsule可关）；胶囊/梳理流程完善\n\nv1.0.1 | 2026-06-10T16:06:55.448Z | user\n\nrecall输出格式优化：日式排版竖线分隔，忆检索改为记忆检索\n\nv1.0.0 | 2026-05-03T08:43:28.316Z | user\n\n首次发布 - 记忆胶囊系统，模拟人类记忆检索\n\nArchive index:\n\nArchive v2.5.10: 3 files, 4020 bytes\n\nFiles: skill-card.md (1997b), SKILL.md (4473b), _meta.json (127b)\n\nFile v2.5.10:SKILL.md\n\n---\nname: memocap\ndescription: \"忆时记忆系统 - 类人记忆检索/存储/遗忘/胶囊/可视化。让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆。触发词：忆时、记忆、记住、回想、回忆、recall、remember、时间胶囊、记忆检索、可视化、记忆脑图、人物画像。\"\nallowed-tools:\n  - Read\n  - Write\n  - Bash\n  - Glob\n  - Grep\nmetadata:\n  slug: memocap\n  version: \"2.5.10\"\n  trigger: 忆时, 记忆检索, 时间胶囊, 记忆胶囊, 回想, 回忆, recall, remember, /忆时, 记住, 可视化, 记忆脑图, 人物画像\n---\n\n# Skill: 忆时记忆系统\n\n## Keywords\n忆时, 记忆, 记忆检索, 记忆存储, 时间胶囊, 遗忘曲线, 记忆涌现, 视觉化, 记忆能力\n\n## Summary\n忆时是类人记忆系统。核心命令经 `memory_core.py` CLI 走混合检索（BM25+向量 RRF）、去重合并、遗忘曲线、情绪锚定。数据与脚本共享于本机 `~/.local/share/忆时/`，多工具双栖共用。\n\n## 前置（启始三检，每会话必行）\n缺一不可，验不过即报不绕：\n1. `MEMO_DIR` 已设环境变量？——否则脚本路径错、数据错存。\n2. 数据目录 `~/.local/share/忆时/data` 存在且可写？\n3. `python3` 可用？`memory_core.py` 能否运行？\n\n## 路径与命令\n```bash\nLOCAL_BASE=~/.local/share/忆时\nYISHI=$LOCAL_BASE/scripts/memory_core.py\nMEMO_DIR=$LOCAL_BASE/data\n# store：内容为【位置参数放最后】（无 --content/--tags），关键字用 --keywords；title ≤10 字自动生成，可 --title 覆盖\n#   两段式：先 recall 判断（读相似旧忆，判同主题否）→ 再 store 决策。脚本不代决：\n#   store 遇相似≥70%候选（最多3条完整原文）即【不落库】挂起等 AI。统一一条路 --merge-ids（N 可0）：\n#   ①选（候选里选出值得合并者，可0条）②删（选N条→--merge-ids \"ID1,ID2,...\"；选0条→--merge-ids \"\"空串=删0条）③并（综合版=所选旧内容+新内容 AI 手写存入；选0条=新内容原样存）\npython3 $YISHI store --type <decision|task|preference|emotion|context|time|skill> --keywords \"k1,k2\" --emotion <0-1> \"[完整内容]\"\n# recall：检索/核实（默认最相关3条，勿多；相似>0.5 即看；--judge 判定模式输出全文+相似度/类型/创建日，值必存第一段用）\npython3 $YISHI recall \"关键词\" --judge\n# merge：梳理时语义合并高相关簇（锚记忆→预览簇→--content+--apply 删旧存新）\npython3 $YISHI merge --id <锚ID> --threshold 0.68\n# 其余子命令：forget 删除 | stats 统计 | export 导出 | recover 恢复 | capsule 时间胶囊\n# 可视化：python3 $LOCAL_BASE/scripts/viz/viz.py（全景）/ mindmap.py（网状记忆图谱，D3 力导向）\n# 人物画像：python3 $LOCAL_BASE/scripts/viz/profile.py\n```\n\n## 三条红线（铁律）\n1. **言必检**——每言先 recall 检索再作答，检而再检，换词查透。\n2. **困必查**——卡住/不确定/忘细节/报错不明/改了没效果 → **先 recall 翻记忆找先例教训**，不得硬扛、不得凭猜、不得卡死；翻完仍无解才注明「无记忆」行事。\n3. **值必存**——有价值信息（决策/偏好/任务/情绪/时间/上下文）主动留存，**必两段式**：先 recall 判断（`--judge` 读全文，判同主题否）→ 再 store 决策。**脚本不代决**——store 遇候选【不落库】挂起等 AI，统一一条路 `--merge-ids`（N 可 0）：可合并→`--merge-ids \"ID1,ID2,...\"` 删旧存新综合版；不可合并→`--merge-ids \"\"` 空串机械存储。**禁止裸 store**。禁止\"先存了再说\"（先落库再合并=临时碎片）。存后 recall 核实。\n4. **存必告**——存则告\"已录\"（指明类型），不存亦告，不沉默。\n\n## 存储质量\n记忆内容**不可压缩**（对话输出可省字，存储须自足）。内容按【前因】【行为】【后果】三要素，答得出\"为何\"与\"何如\"、三月后重读自能理解方存。宁多三行因果，不省一字。\n\n## 语言风格\n默认简约直给，去填充词、客套、自夸、工具调用叙述。安全警告/不可逆操作/多步易歧义处自动恢复正常句式，明晰为要。\n\n## 模块详情\n细册在 `~/.local/share/忆时/docs/modules/`（13-retrieval-store.md 检索存储、12-viz-profile.md 可视化画像、11-quick-commands.md 快捷命令等）。渐进式披露——遇场景才读对应模块，勿一次全读。\n\nFile v2.5.10:_meta.json\n\n{\n  \"ownerId\": \"kn71rk0chjcdy7ffgfc08hh9gd83ehq8\",\n  \"slug\": \"memocap\",\n  \"version\": \"2.5.10\",\n  \"publishedAt\": 1787456690582\n}\n\nFile v2.5.10:skill-card.md\n\n## Description:\n\nmemocap provides an agent-facing memory system for retrieval, storage, forgetting, time capsules, visualization, and user profiles.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[fslong520](https://clawhub.ai/user/fslong520)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nAgents and users can use memocap to recall prior context, store valuable decisions, preferences, tasks, emotions, and timestamps, and manage memory records through local retrieval, merge, export, capsule, visualization, and profile commands.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can persist detailed user data in a local memory store.\n\nMitigation: Require confirmation before storing personal or sensitive details and keep review, deletion, and purge controls available.\n\nRisk: The skill can broadly activate on memory-related terms.\n\nMitigation: Narrow activation to explicit commands before routine use.\n\nRisk: The skill runs separate local scripts from the user's home directory.\n\nMitigation: Verify the helper scripts' origin and integrity before use.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/fslong520/skills/memocap)\n- [Publisher profile](https://clawhub.ai/user/fslong520)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can direct use of local memory scripts and persistent user records when the required local data directory and helper scripts are present.]\n\n## Skill Version(s):\n\n2.5.10 (source: server release metadata and skill metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.5.0: 3 files, 3337 bytes\n\nFiles: skill-card.md (2094b), SKILL.md (3062b), _meta.json (126b)\n\nFile v2.5.0:SKILL.md\n\n---\nname: memocap\ndescription: \"忆时记忆系统 - 类人记忆检索/存储/遗忘/胶囊/可视化。让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆。触发词：忆时、记忆、记住、回想、回忆、recall、remember、时间胶囊、记忆检索、可视化、记忆脑图、人物画像。\"\nallowed-tools:\n  - Read\n  - Write\n  - Bash\n  - Glob\n  - Grep\nmetadata:\n  slug: memocap\n  version: \"2.4.0\"\n  trigger: 忆时, 记忆检索, 时间胶囊, 记忆胶囊, 回想, 回忆, recall, remember, /忆时, 记住, 可视化, 记忆脑图, 人物画像\n---\n\n# Skill: 忆时记忆系统\n\n## Keywords\n忆时, 记忆, 记忆检索, 记忆存储, 时间胶囊, 遗忘曲线, 记忆涌现, 视觉化, 记忆能力\n\n## Summary\n忆时是类人记忆系统。核心命令经 `memory_core.py` CLI 走混合检索（BM25+向量 RRF）、去重合并、遗忘曲线、情绪锚定。数据与脚本共享于本机 `~/.local/share/忆时/`，多工具双栖共用。\n\n## 前置（启始三检，每会话必行）\n缺一不可，验不过即报不绕：\n1. `MEMO_DIR` 已设环境变量？——否则脚本路径错、数据错存。\n2. 数据目录 `~/.local/share/忆时/data` 存在且可写？\n3. `python3` 可用？`memory_core.py` 能否运行？\n\n## 路径与命令\n```bash\nLOCAL_BASE=~/.local/share/忆时\nYISHI=$LOCAL_BASE/scripts/memory_core.py\nMEMO_DIR=$LOCAL_BASE/data\n# store：内容为【位置参数放最后】（无 --content/--tags），关键字用 --keywords；title ≤10 字自动生成，可 --title 覆盖\npython3 $YISHI store --type <decision|task|preference|emotion|context|time|skill> --keywords \"k1,k2\" --emotion <0-1> \"[完整内容]\"\n# recall：检索/核实\npython3 $YISHI recall \"关键词\" --limit 5\n# 其余子命令：forget 删除 | stats 统计 | export 导出 | recover 恢复 | capsule 时间胶囊\n# 可视化：python3 $LOCAL_BASE/scripts/viz/viz.py（全景）/ mindmap.py（网状记忆图谱，D3 力导向）\n# 人物画像：python3 $LOCAL_BASE/scripts/viz/profile.py\n```\n\n## 三条红线（铁律）\n1. **言必检**——每言先 recall 检索再作答，检而再检，换词查透。\n2. **值必存**——有价值信息（决策/偏好/任务/情绪/时间/上下文）主动留存，存后立刻 recall 核实。\n3. **存必告**——存则告\"已录\"（指明类型），不存亦告，不沉默。\n\n## 存储质量\n记忆内容**不可压缩**（对话输出可省字，存储须自足）。内容按【前因】【行为】【后果】三要素，答得出\"为何\"与\"何如\"、三月后重读自能理解方存。宁多三行因果，不省一字。\n\n## 语言风格\n默认简约直给，去填充词、客套、自夸、工具调用叙述。安全警告/不可逆操作/多步易歧义处自动恢复正常句式，明晰为要。\n\n## 模块详情\n细册在 `~/.local/share/忆时/docs/modules/`（13-retrieval-store.md 检索存储、12-viz-profile.md 可视化画像、11-quick-commands.md 快捷命令等）。渐进式披露——遇场景才读对应模块，勿一次全读。\n\nFile v2.5.0:_meta.json\n\n{\n  \"ownerId\": \"kn71rk0chjcdy7ffgfc08hh9gd83ehq8\",\n  \"slug\": \"memocap\",\n  \"version\": \"2.5.0\",\n  \"publishedAt\": 1787309674664\n}\n\nFile v2.5.0:skill-card.md\n\n## Description:\n\nmemocap is a persistent memory skill for storing, recalling, forgetting, encapsulating, and visualizing agent memories across sessions.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[fslong520](https://clawhub.ai/user/fslong520)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to give an agent a local memory system that can proactively store preferences, tasks, decisions, emotions, time-related notes, and session context, then recall or visualize those records later.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill broadly and proactively stores persistent local memory about the user, including preferences, tasks, decisions, emotions, and context.\n\nMitigation: Install only when persistent memory is desired, review the local data directory before sensitive use, and confirm deletion or export behavior before storing sensitive records.\n\nRisk: Stored memories may be recalled across sessions with limited scoping or consent controls.\n\nMitigation: Use explicit session boundaries, review recalled records before relying on them, and avoid using the skill for confidential sessions unless the storage location and retention expectations are acceptable.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/fslong520/skills/memocap)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands and local file path guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [The skill can direct an agent to read from, write to, export, delete, recover, and visualize records in a local memory directory.]\n\n## Skill Version(s):\n\n2.5.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.4.0: 35 files, 92477 bytes\n\nFiles: build.mjs (465b), cordis.patch.yml (298b), modules/01-initialize.md (1534b), modules/02-passive-mode.md (3102b), modules/03-active-mode.md (2047b), modules/04-time-capsule.md (1747b), modules/05-retrieval.md (3179b), modules/06-import-export.md (3234b), modules/07-skill-memory.md (3665b), modules/08-setup.md (2274b), modules/09-archiving.md (4758b), modules/10-consolidation.md (2647b), modules/11-quick-commands.md (6322b), modules/12-viz-profile.md (5554b), modules/13-retrieval-store.md (7886b), modules/14-behavior.md (3365b), package.json (1206b), pnpm-lock.yaml (9692b), pnpm-workspace.yaml (50b), README.md (3333b), real-test.mjs (2790b), references/chroma-api.md (1353b), scripts/__init__.py (0b), scripts/memory_core.py (58718b), scripts/models-install.py (2876b), scripts/viz/profile_template.html (7850b), scripts/viz/profile.py (8206b), scripts/viz/template.html (22849b), scripts/viz/viz.py (7699b), skill-card.md (3079b), SKILL.md (9551b), smoke.mjs (1017b), src/index.ts (6850b), yishi-instructions.md (18024b), _meta.json (126b)\n\nFile v2.4.0:SKILL.md\n\n---\nname: memocap\ndescription: \"🎋 记忆胶囊系统 - 模拟人类记忆检索 | 自动加载，主动联想记忆\"\npriority: 900\nmetadata:\n  slug: memocap\n  version: \"2.4.0\"\n  trigger: \"忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、recall、remember、/忆时\"\n  copaw:\n    emoji: \"🎋\"\n    requires: {}\n    auto_load: true\n---\n\n# 忆时 - 记忆胶囊系统\n\n> 模拟人类的记忆机制，让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆系统。\n> **渐进式披露**：本文件为入口总纲。细节皆在 modules/——按「按需读取」表，遇场景才读对应模块，勿一次全读。\n\n## 触发条件\n\n- **自动加载**：每次对话自动激活，AI 主动联想和检索记忆\n- **关键字**：忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、我说过、我记得\n- **命令**：用户输入以 `/忆时` 开头时，自动触发快捷操作模式\n- **场景**：用户询问过去的事情、要求回忆、需要上下文关联、触发闪回\n- **主动**：定时模式运行时主动扫描到期胶囊和记忆关联\n\n## 核心概念\n\n| 概念 | 说明 |\n|------|------|\n| **类人检索** | 语义40% + 近因20% + 情绪15% + 频率25%，不像数据库那样精确 |\n| **混合检索** | BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符检索更准；embedding 失败自动降级关键词 |\n| **去重合并** | 存储时相似>90% 自动合并（内容并入、频率+1），85%~90% 警告提示，--force 强存 |\n| **渐进式回忆** | 先抛最相关的1-2条，用户追问再深入，非一次性倒出 |\n| **遗忘曲线** | 记忆随时间指数衰减，低频率的记忆会变得\"模糊\" |\n| **情绪锚定** | 高情绪（情绪值 ≥0.7）记忆权重更高，不易遗忘 |\n| **记忆涌现** | 话题转换时发现隐藏关联，主动说出\"说到这个我突然想到…\" |\n| **场景分组** | 记忆可标 --scene 归组，事件记忆可标活动时间段（2025-05-01 ~ 05-10） |\n| **时间胶囊** | 封存某段记忆，设定解锁日期，到期后自动/手动解封翻阅 |\n\n## 记忆类型\n\n| 类型 | 说明 | 情绪权重倾向 |\n|------|------|-------------|\n| emotion | 情绪事件（开心、愤怒、悲伤） | |\n| decision | 用户做出的决策 | 🟠 |\n| task | 任务/待办 | 🟡 |\n| time | 时间敏感信息（截止日期） | 🔴 |\n| preference | 用户偏好/习惯 | 🟢 |\n| context | 上下文/背景信息 | 🟡 |\n| skill | 技能——用户教AI的工作流，Gene结构化存储 | 🟠 |\n\n## 按需读取（渐进式披露核心）\n\n**规则：未遇对应场景，不读模块。每模块读一次即可，勿重复加载。**\n\n| 场景 | 读模块 |\n|------|--------|\n| 对话启始、每言必检、主动存储、检索升级、决策前置 | modules/13-retrieval-store.md |\n| 用户描述工作流（教AI流程）、skill记忆检索命中 | modules/07-skill-memory.md |\n| 对话结束归档、仅输入 `/忆时` 会话整理、每满5轮定期提取 | modules/09-archiving.md |\n| 用户输入 `/忆时 ...`（命令构造/回复风格） | modules/11-quick-commands.md |\n| 可视化（\"看看记了啥\"）、人物画像 | modules/12-viz-profile.md |\n| 记忆自动梳理（上次梳理过期7日） | modules/10-consolidation.md |\n| 模型安装/切换、opencode.json 配置 | modules/08-setup.md |\n| 复杂任务规划、上下文压缩后自查、长文索引 | modules/14-behavior.md |\n| 首次初始化、Chroma 集合结构 | modules/01-initialize.md |\n| 定时主动模式（胶囊检查/遗忘归档） | modules/03-active-mode.md |\n| 时间胶囊管理 | modules/04-time-capsule.md |\n| 检索算法原理（综合得分公式） | modules/05-retrieval.md |\n| 导入导出、备份迁移 | modules/06-import-export.md |\n| 被动检索触发场景与渐进式回忆 | modules/02-passive-mode.md |\n\n## 核心命令\n\n```bash\nPY=~/.local/share/忆时/scripts/memory_core.py\nMEMO_DIR=~/.local/share/忆时/data    # 所有命令必设\n# 注意：以下命令使用 $PY 与 $MEMO_DIR 变量，须先执行上方两行定义；或直接写全路径 python3 ~/.local/share/忆时/scripts/memory_core.py\n\n初始化:    python3 $PY init\n存储记忆:  python3 $PY store \"内容\" --type task --emotion 0.8 [--scene 场景] [--activity-start 2025-05-01] [--activity-end 2025-05-10] [--force]\n检索记忆:  python3 $PY recall \"查询\" --limit 5 --expand [--no-embed] [--max-total-chars 600]\n封胶囊:   python3 $PY capsule lock --unlock-at \"2026-12-31\"\n查看胶囊:  python3 $PY capsule list\n导入:      python3 $PY import-file file.md --format markdown\n导出:      python3 $PY export --format timeline --output output.md\n可视化:    python3 ~/.local/share/忆时/scripts/viz/viz.py\n统计:      python3 $PY stats\n遗忘:      python3 $PY forget --before \"2025-01-01\" --auto\n恢复:      python3 $PY recover\n查看备份:  cat memories_backup.jsonl | python3 -m json.tool --lines\n```\n\n## 快捷操作一览\n\n`/忆时` 前缀，免记命令行参数。命令构造、解析规则、回复风格见 modules/11-quick-commands.md。\n\n| 输入 | 动作 |\n|------|------|\n| `/忆时`（无后续） | 会话整理 |\n| `/忆时 <内容>` | 默认 recall |\n| `/忆时 记住/记忆 <内容> [--type T] [--emotion E]` | store |\n| `/忆时 查找/搜索/找 <关键词> [--limit N]` | recall |\n| `/忆时 忘记 <关键词>` | forget |\n| `/忆时 统计` | stats |\n| `/忆时 导出` | export |\n| `/忆时 可视化 [--out 路径]` | 记忆全景 HTML |\n| `/忆时 画像` | 人物画像 |\n| `/忆时 恢复` | recover |\n| `/忆时 胶囊 封存/列表/开封` | capsule lock/list/unlock |\n| `/忆时 梳理` | 记忆梳理 |\n\n**类型**：task / decision / preference / emotion / time / context / skill\n**情绪**：0.0~1.0 数值（默认 0.5），数值越大越重要/强烈；旧词 high=0.8 / medium=0.5 / low=0.2 仍兼容\n\n## 工程实践——关键场景\n\n| 场景 | 指令 |\n|------|------|\n| 完成任务后 | 按审计三问自查：结果问→过程问→改进问，全过方可言\"完\" |\n| 收到复杂需求 | 先存方案到忆时，再规划步骤，逐条标记完成 |\n| 发现用户偏好 | 以 `--type preference` 即时存储 |\n| 做出关键决策 | 以 `--type decision --emotion 0.9` 存储，附决策理由 |\n| 用户交付长文 | 提取metadata，按索引思维存储（见 modules/14） |\n| 对话转折话题 | 先 `recall` 新话题的关键词，再谈是否有关联 |\n| 疑似走偏 | 暂停，`recall` 原始目标比对进度 |\n| 决策或提问之前 | 先 `recall` 查询记忆，确认有无既有决策、偏好、约定可循 |\n| 对话开始 | 检索当前项目/文件夹相关记忆（见 modules/13） |\n| 对话结束 | 按归档流程，先检索旧忆，再择新增或更新（见 modules/09） |\n| 记忆自动梳理 | 对话启始先召回上次梳理时间告知用户，过期7日则触发沉淀（见 modules/10） |\n| 完成任务（todo完成/修改变更/输出结果） | 停顿自问\"有无值得记忆？\"，有则检索旧忆后store或update |\n| 用户输入 `/忆时` 开头 | 直入快捷操作模式，解析动作与参数，跳过常规涌现检索 |\n\n## 项目结构\n\n```\n忆时/\n├── SKILL.md                    # 技能定义 (入口总纲/识别层)\n├── yishi-instructions.md       # 外挂提示词 (必须配置到 opencode.json)\n├── modules/                    # 详细流程模块 (执行层，按需读取)\n│   ├── 01-initialize.md        # Chroma 初始化\n│   ├── 02-passive-mode.md      # 被动模式流程\n│   ├── 03-active-mode.md       # 主动模式流程\n│   ├── 04-time-capsule.md      # 时间胶囊操作\n│   ├── 05-retrieval.md         # 类人检索策略\n│   ├── 06-import-export.md     # 导入导出操作\n│   ├── 07-skill-memory.md      # 技能即记忆 (Gene)\n│   ├── 08-setup.md             # 模型安装与配置\n│   ├── 09-archiving.md         # 对话归档与会话整理\n│   ├── 10-consolidation.md     # 记忆自动梳理\n│   ├── 11-quick-commands.md    # 快捷操作详解\n│   ├── 12-viz-profile.md       # 可视化与人物画像\n│   ├── 13-retrieval-store.md   # 记忆操作流程 (检索/存储细则)\n│   └── 14-behavior.md          # 认知自知与上下文工程\n├── models/                     # （预留，仅 bge 模型不落此——运行时模型在 LOCAL_BASE）\n├── scripts/\n│   ├── memory_core.py          # 核心引擎 CLI\n│   └── viz/                    # 记忆可视化\n│       ├── viz.py              # 记忆全景生成器（导出→聚类→注入模板→打开）\n│       ├── template.html       # 记忆全景模板（孟菲斯风，/*__DATA__*/ 占位）\n│       ├── profile.py          # 人物画像助手（素材报告 + 正文注入）\n│       └── profile_template.html # 画像模板（<!--DATA-->/<!--CONTENT--> 占位）\n└── references/\n    └── chroma-api.md           # ChromaDB API 参考\n```\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4、jieba（BM25 关键词检索）\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n- 模型: bge-base-zh-v1.5（768维，唯一模型，无回退）。安装见 modules/08-setup.md\n- 备份: `~/.local/share/忆时/memories_backup.jsonl`（可用 MEMO_BAK 覆盖，多实例/测试隔离）\n\nFile v2.4.0:README.md\n\n# @fslong/dsh-yishi\n\n忆时记忆系统之 DSH 插件（**自包含**）。全部功能迁入插件：apply 时把忆时资源同步至忆时根目录 `~/.local/share/忆时/`，注入忆时指令、注册 `memocap` 技能——opencode 忆时技能作废后，插件为唯一提供者。\n\n## 职责\n\n1. **同步资源**——把插件包内 `docs/`（SKILL.md / yishi-instructions.md / modules / references）与 `scripts/`（memory_core.py / viz/）复制到忆时根目录，幂等覆盖，插件版本为权威。\n2. **注入忆时指令**——经 `systemPrompt.section` 读 `<忆时根>/docs/yishi-instructions.md` 注入每个 agent 系统提示。\n3. **注册忆时技能**——经 `ctx.skills.registerProvider` 注册 `memocap`，读 `<忆时根>/docs/SKILL.md`，resourceBase 指向 docs/。\n\n忆时根目录为数据家园：`data/`（Chroma 库）、`models/`（bge 模型）、`scripts/`（功能脚本）、`docs/`（技能文档）。\n\n## 目录结构\n\n```\n~/.local/share/忆时/\n├── data/        # Chroma 记忆库（642+ 条，双栖共用）\n├── models/      # bge-base-zh-v1.5 embedding 模型\n├── scripts/     # memory_core.py + viz/（记忆之书、画像）\n├── docs/        # SKILL.md + yishi-instructions.md + modules/ + references/\n└── memories_backup.jsonl\n```\n\n## 安装\n\n```bash\n# 1. 构建\ncd /home/fslong/Documents/yishi && pnpm i && pnpm build\n\n# 2. 装进 profile（以 web 为例）\ncd ~/.dsh/profiles/web\npnpm add file:/home/fslong/Documents/yishi\n```\n\n再于 `~/.dsh/profiles/web/package.json` 之 `dsh.profile.bundles` 追加 `@fslong/dsh-yishi`，重启 DSH 生效。\n\n## 环境变量\n\n| 变量 | 默认 | 说明 |\n|------|------|------|\n| `YISHI_DATA_DIR` | `~/.local/share/忆时` | 忆时根目录（数据+脚本+文档） |\n| `DSH_YISHI_DISABLE` | 未设 | `1` 禁用插件 |\n\n## 模型安装\n\n忆时依赖 **bge-base-zh-v1.5**（中文语义 embedding，~400MB，768 维）。**插件包不含模型**——安装后首次运行，插件检测到模型缺失会自动在后台下载（`hf-mirror`）。亦可手动安装：\n\n```bash\n# 手动下载（幂等：模型已在则跳过）\ncd <插件目录> && pnpm models:install\n# 或直接运行\npython3 ~/.local/share/忆时/scripts/models-install.py\n```\n\n模型落于 `~/.local/share/忆时/models/bge-base-zh-v1.5/`。缺失时记忆的 embedding 检索不可用（memory_core.py 会报错提示），请等待下载完成或手动安装。\n\n> 首次下载约 400MB，受网络影响可能较慢；若自动下载不成功，手动运行上方命令重试（脚本带锁防并发、原子写入防残缺）。\n\n## 命令速查\n\n所有忆时命令均须设 `MEMO_DIR`：\n\n```bash\nLOCAL_BASE=~/.local/share/忆时\nYISHI=$LOCAL_BASE/scripts/memory_core.py\nVIZ=$LOCAL_BASE/scripts/viz/viz.py\nMEMO_DIR=$LOCAL_BASE/data\npython3 $YISHI recall \"关键词\" --limit 5          # 检索\npython3 $YISHI store --type decision --keywords \"k\" --emotion 0.5 \"内容\"  # 存储\npython3 $VIZ --no-open                           # 记忆之书（可视化）\npython3 $LOCAL_BASE/scripts/viz/profile.py --content 正文.md --out 画像.html  # 画像\n```\n\n## 开发\n\n```bash\npnpm build   # src/index.ts → lib/index.js\nnode real-test.mjs   # 真实 cordis 环境全链验证（同步+注入+技能+脚本）\n```\n\n## 许可\n\nMIT\n\nFile v2.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn71rk0chjcdy7ffgfc08hh9gd83ehq8\",\n  \"slug\": \"memocap\",\n  \"version\": \"2.4.0\",\n  \"publishedAt\": 1787131194753\n}\n\nFile v2.4.0:references/chroma-api.md\n\n# ChromaDB API 参考 (忆时用)\n\n## 版本\n\n- chromadb 1.5.4\n- Python 3.13+\n\n## 客户端初始化\n\n```python\nimport chromadb\nclient = chromadb.PersistentClient(path=\"/path/to/data\")\n```\n\n## 集合操作\n\n```python\n# 创建或获取集合\ncollection = client.get_or_create_collection(\n    name=\"memories\",\n    metadata={\"hnsw:space\": \"cosine\"}\n)\n\n# 添加文档\ncollection.add(\n    documents=[\"记忆内容\"],\n    metadatas=[{\"type\": \"context\", \"emotion\": \"medium\"}],\n    ids=[\"uuid\"]\n)\n\n# 查询 (语义搜索)\nresults = collection.query(\n    query_texts=[\"查询关键词\"],\n    n_results=10\n)\n\n# 获取特定文档\ndoc = collection.get(ids=[\"uuid\"])\n\n# 更新\ncollection.update(\n    ids=[\"uuid\"],\n    documents=[\"新内容\"],\n    metadatas=[{\"type\": \"new_type\"}]\n)\n\n# 删除\ncollection.delete(ids=[\"uuid\"])\n\n# 统计数量\ncount = collection.count()\n```\n\n## 查询结果结构\n\n```python\n{\n    \"ids\": [[\"id1\", \"id2\", ...]],\n    \"documents\": [[\"doc1\", \"doc2\", ...]],\n    \"metadatas\": [[metadata1, metadata2, ...]],\n    \"distances\": [[0.1, 0.2, ...]],  # cosine distance, 越小越相似\n}\n```\n\n语义相似度 = 1.0 - distance\n\n## 注意事项\n\n- ChromaDB 自动向量化文本 (text-embedding)\n- cosine 距离范围: 0 (完全相同) 到 2 (完全相反)\n- metadatas 中的值必须是字符串或数字\n- PersistentClient 自动持久化到磁盘\n\nFile v2.4.0:modules/01-initialize.md\n\n# 模块 01 - 初始化与 Chroma 管理\n\n## 目标\n\n初始化 ChromaDB 向量数据库，建立必要的集合。\n\n## 执行步骤\n\n1. 检查 Python 3.13 是否可用\n2. 检查 chromadb 是否已安装\n3. 运行初始化命令:\n\n```bash\npython3 /home/fslong/.local/share/忆时/scripts/memory_core.py init\n```\n\n4. 确认输出包含\"忆时记忆系统初始化完成\"\n\n## 集合结构\n\nChromaDB 内会创建以下集合:\n\n| 集合名 | 用途 | 距离度量 |\n|--------|------|----------|\n| memories | 长期记忆向量存储 | cosine |\n| relationships | 记忆间关联关系 | cosine |\n| meta | 系统状态元数据 | cosine |\n\n## 记忆元数据结构\n\n每条记忆包含以下元数据:\n\n```json\n{\n  \"type\": \"context\",\n  \"emotion\": \"medium\",\n  \"emotion_weight\": 0.5,\n  \"created_at\": \"2025-01-15T10:30:00\",\n  \"created_date\": \"2025-01-15\",\n  \"updated_at\": \"2025-01-15T10:30:00\",\n  \"keywords\": \"Python,学习,装饰器\",\n  \"source\": \"manual\",\n  \"source_session\": \"\",\n  \"frequency\": \"1\",\n  \"recall_count\": \"0\",\n  \"is_capsule\": \"false\",\n  \"capsule_unlock_at\": \"\"\n}\n```\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维），**无回退**。\n引擎检测 `~/.local/share/忆时/models/bge-base-zh-v1.5/`，缺失即报错。\n安装命令——详见 modules/08-setup.md。\n\n> ⚠️ 模型不会写入 `~/.cache/chroma/`，清缓存不会被删除。\n\n## 环境变量\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| MEMO_DIR | ~/.local/share/忆时/data | ChromaDB 存储路径 |\n\nFile v2.4.0:modules/02-passive-mode.md\n\n# 模块 02 - 被动模式（对话中触发检索）\n\n## 触发场景\n\n当用户在对话中出现以下行为时触发记忆检索:\n\n- **显式询问**: \"我说过…\"、\"我记得之前…\"、\"你记得吗…\"\n- **话题回溯**: 回到之前的话题、延续之前的讨论\n- **关键词命中**: 对话中出现已存储记忆中的关键字\n- **情绪波动**: 用户表达强烈情绪，触发情绪锚定检索\n- **上下文缺失**: 回答需要之前的背景信息\n\n## 执行流程\n\n### 1. 判断是否需要检索\n\n分析当前对话内容，构建检索查询:\n\n- 如果用户直接要求回忆: 使用用户原话作为查询\n- 如果检测到关联话题: **提取2-3个核心词**作为查询\n- 如果情绪发生变化: 以当前情绪关键词 + 情绪类型检索\n\n### 2. 执行检索\n\n```bash\n# 基础检索 - 返回最相关的N条\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5\n\n# 带联想扩散的深度检索\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5 --expand\n\n# 按类型过滤\npython3 scripts/memory_core.py recall \"偏好\" --type-filter preference\n\n# 只检索高情绪记忆\npython3 scripts/memory_core.py recall \"情感\" --min-weight 0.7\n```\n\n### 3. 渐进式回忆策略\n\n**不要一次性倒出所有结果！**\n\n1. **第一轮**: 只返回得分最高的 1-2 条\n   - 自然地在回复中提及: \"你之前提到过…\"\n2. **用户追问**: 返回接下来的 2-3 条\n   - \"还有这些相关的…\"\n3. **持续追问**: 再返回剩余结果\n\n### 4. 遗忘曲线行为\n\n当记忆的 recall_count 很低且创建时间很久远时:\n\n- 返回时表达**不确定性**: \"我模糊记得你之前好像提到过…\"\n- 提供**概要而非精确内容**: 给出关键词而非完整引用\n- 如果分数低于阈值: \"这方面的记忆有些模糊了…\"\n\n### 5. 记忆涌现处理（多轮检索）\n\n涌现乃主动发现之隐藏关联，非被动等结果。须行多轮检索：\n\n**第一轮：语义检索**\n```bash\npython3 scripts/memory_core.py recall \"用户话题\" --limit 3 --expand\n```\n\n**第二轮：涌现判定**\n观第一轮结果：\n- 有 `[关联]` 标记 → 已有涌现，直接表达\n- 结果 ≥ 2 条 → 取 top-2 关键字/内容构建复合查询，再做第二轮\n```bash\npython3 scripts/memory_core.py recall \"原话题 新话题\" --limit 2\n```\n- 若第二轮结果与第一轮不重叠 → 此为涌现之记忆\n\n**第三轮：情绪锚定**\n用户情绪显著时（愤怒/兴奋/沮丧），以情绪词 + 话题词再检：\n```bash\npython3 scripts/memory_core.py recall \"情绪词\" --type-filter emotion --min-weight 0.7 --limit 2\n```\n\n**主动说出**（发现涌现时），而不是等用户问:\n\n> \"说到这个我突然想到一件事…\"\n> \"这让我联想到你之前说过的另一个相关的事…\"\n> \"对了，你还记得那次…\"\n\n涌现条件:\n- 关联分数 > 0.6\n- 与当前话题有语义关联\n- 不是已在此对话中提及过的内容\n\n> 强涌现强制流程（三轮检索）、检索升级穷尽模式（L0-L4）、主动存储细则——见 modules/13-retrieval-store.md。\n\nFile v2.4.0:modules/03-active-mode.md\n\n# 模块 03 - 主动模式（定时触发回忆整理）\n\n## 触发方式\n\n结合定时任务/cron周期性执行:\n\n```bash\n# 主动回忆整理入口脚本\npython3 scripts/memory_core.py capsule check-expired && \\\npython3 scripts/memory_core.py forget --low-freq 1 --auto && \\\npython3 scripts/memory_core.py stats\n```\n\n## 主动执行流程\n\n### 1. 检查到期时间胶囊\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n- 如果存在到期胶囊 → **生成回忆回顾**\n- 解封胶囊内容，向用户推送回顾\n- 格式示例:\n\n> 🎋 记忆胶囊解封提醒\n> 你于 2025-03-15 封存了一个胶囊，今天是解锁日！\n>\n> 封存内容: \"今天和AI讨论了一个关于…\"\n> 封存时的心情: 🟠 兴奋\n>\n> 打开看看吗？\n\n### 2. 自动发现记忆关联\n\n分析现有记忆，寻找隐藏关联:\n\n- 检索每条记忆，查看 `recall --expand` 的结果\n- 如果发现新的强关联（关联分数 > 0.7）\n- 主动向用户报告:\n\n> \"我注意到你关于 A 和 B 的记忆似乎存在一些联系…\"\n\n### 3. 遗忘曲线处理\n\n低优先级记忆自动归档:\n\n```bash\npython3 scripts/memory_core.py forget --before \"2025-01-01\" --low-freq 1 --auto\n```\n\n- 将低频、低 recall 的旧记忆标记为 archived\n- 不删除，只是降低检索优先级\n- 保留高情绪记忆不归档\n\n### 4. 记忆整理报告\n\n生成统计摘要:\n\n```bash\npython3 scripts/memory_core.py stats\n```\n\n向用户报告:\n- 总记忆数\n- 本周新增记忆\n- 到期解除的胶囊数\n- 归档的记忆数\n\n## 建议定时频率\n\n| 任务 | 频率 | 说明 |\n|------|------|------|\n| 胶囊检查 | 每天一次 | 检查到期的时间胶囊 |\n| 遗忘归档 | 每周一次 | 归档低频旧记忆 |\n| 关联发现 | 每次对话后 | 对话结束时自动发现新关联 |\n| 统计报告 | 每周一次 | 生成记忆整理报告 |\n\n## 对话结束语自动触发\n\n每当用户结束一次较长的对话，可以主动:\n\n1. 提取对话中的重点记忆\n2. 自动存储到 Chroma\n3. 检查是否有胶囊到期\n\nFile v2.4.0:modules/04-time-capsule.md\n\n# 模块 04 - 时间胶囊管理\n\n## 概念\n\n时间胶囊允许将当前时刻的记忆封存，设定一个未来的解锁日期。\n到期后可以自动或手动解封，重温当时的记忆和情绪。\n\n## 封存胶囊\n\n```bash\n# 封存一个胶囊，30天后解锁（默认）\npython3 scripts/memory_core.py capsule lock --summary \"今日感悟\"\n\n# 封存并指定解锁日期\npython3 scripts/memory_core.py capsule lock --unlock-at \"2026-12-31\" --summary \"年度回顾\" --content \"今天我和AI讨论了关于未来的思考…\" --keywords \"未来,思考,人生\"\n```\n\n**关键字段**:\n\n| 参数 | 必填 | 说明 |\n|------|------|------|\n| --summary | 否 | 摘要，用于列表预览 |\n| --content | 否 | 胶囊的详细记忆内容 |\n| --keywords | 否 | 关键字 |\n| --unlock-at | 否 | 解锁日期 YYYY-MM-DD，默认30天后 |\n\n## 查看胶囊\n\n```bash\npython3 scripts/memory_core.py capsule list\n```\n\n输出示例:\n```\n时间胶囊 (3 个)\nID: xxx-xxx\n创建: 2025-06-15 | 解锁: 2025-12-31 | 状态: 剩余 205 天\n内容: 时间胶囊 - 创建于 2025-06-15, 解锁日期: 2025-12-31\n```\n\n## 检查到期\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n主动模式下每次触发时应运行此命令。\n\n## 解封胶囊\n\n```bash\npython3 scripts/memory_core.py capsule unseal --capsule-id <ID>\n```\n\n- 如果胶囊已到期 → 直接解封\n- 如果尚未到期 → 警告用户并需要确认\n- 解封后该记忆变为普通记忆，可以正常检索\n\n## 解封回忆重现\n\n解封时，生成回忆回顾:\n\n> 🎋 时光倒流! 你于 X 天前封存了这段记忆:\n>\n> [capsule content]\n>\n> 封存时的心情: 🟠 兴奋\n> 关键字: …\n>\n> 这段记忆已被解封，现在可以随时检索了。\n\nFile v2.4.0:modules/05-retrieval.md\n\n# 模块 05 - 类人检索策略\n\n## 核心算法\n\n人类记忆不是数据库查询，而是多维度加权的结果:\n\n### 综合得分公式\n\n```\n最终得分 = 0.40 × 语义相似度\n         + 0.15 × 情绪权重\n         + 0.20 × 近因效应\n         + 0.25 × (0.6 + 频率强化)\n```\n\n### 各分量计算\n\n| 分量 | 权重 | 计算方式 | 说明 |\n|------|------|----------|------|\n| **语义相似度** | 40% | Chroma cosine 向量搜索 | AI 理解的意义匹配度 |\n| **情绪权重** | 15% | 直接采用情绪数值（0.0~1.0），🔴≥0.9 🟠≥0.7 🟡≥0.4 🟢<0.4 | 情绪值越强，越容易忆起 |\n| **近因效应** | 20% | exp(-ln(2) × 天数 / 30) | 半衰期30天，30天后回忆概率减半 |\n| **频率强化** | 25% | 0.6 + log₂(f+1)×0.1 + log₂(r+1)×0.05 | f=出现频次, r=被回忆次数 |\n\n## 检索模式\n\n### 1. 基础语义检索\n\n```bash\npython3 scripts/memory_core.py recall \"Python\"\n```\n\n### 2. 联想扩散 (关键!)\n\n```bash\npython3 scripts/memory_core.py recall \"Python\" --expand\n```\n\n执行流程（两阶段扩散）:\n\n**阶段一：关系链扩散**\n1. 先做语义检索，获取 top-10 结果\n2. 对 top-3 结果，通过 `relationships` 集合查直接关联关系（store 时自动建链）\n3. 关系链上的新记忆以较低权重加入结果集\n\n**阶段二：语义二次检索**\n4. 取 top-2 结果之内容/关键字，以此为新查询再做语义检索\n5. 发现与原始结果不重叠者，即为\"涌现\"\n6. 最终统一按综合得分排序\n7. 所有扩散结果标记为 `[关联]`\n\n> **实现机制**：每条记忆在 `store` 时自动搜索语义相似(p>0.50)的已有记忆，\n> 写入 `relationships` 集合并交叉融合关键字，使后续检索覆盖更广。\n\n### 3. 情绪锚定检索\n\n只检索高情绪记忆 (类似\"闪回\"):\n\n```bash\npython3 scripts/memory_core.py recall \"关键词\" --min-weight 0.7\n```\n\n### 4. 渐进式回忆\n\n在实际对话中，**不要一次返回所有结果**:\n\n```\n用户: 我之前跟你讨论过Python的事吧？\n\nAI (第一轮):\n  → 检索 recall \"Python讨论\" --limit 3\n  → 返回最高分的 1 条\n  → \"对！我记得你之前提到过[记忆内容]...\"\n\n用户: 还有呢？\n\nAI (第二轮):\n  → 返回接下来的 2 条\n  → \"还有一点，你还说过...\"\n\n用户: 嗯嗯继续...\n\nAI (第三轮):\n  → recall \"Python讨论\" --expand\n  → 联想扩散，返回关联记忆\n  → \"啊对了！说到Python，我突然想到你还提过...\"\n```\n\n## 遗忘行为模拟\n\n当记忆的:\n- **近因分 < 0.2** (超过3个月未检索): 返回时添加不确定性\n- **recall_count = 0** 且创建时间很久远: \"我隐约记得……\"\n- **综合分 < 0.5**: 不提为一条确定的记忆\n\n示例:\n\n> \"我不太确定，但隐约记得你好像说过……\"\n> \"我模糊地记得你很久前提到过一个相关的……\"\n\n## 检索建议\n\n| 场景 | 参数 |\n|------|------|\n| 用户提到模糊概念 | `recall \"概念\" --limit 3` |\n| 用户追问详情 | `recall \"概念\" --limit 5 --expand` |\n| 需要精确回忆 | `recall \"精确词\" --min-weight 0.6` |\n| 话题转换时主动闪回 | `recall \"新话题\" --limit 2 --expand` |\n\nFile v2.4.0:modules/06-import-export.md\n\n# 模块 06 - 导入导出管理\n\n## 导入功能\n\n将外部记忆文件导入到 ChromaDB 向量化存储中。\n\n### 支持的格式\n\n| 格式 | 说明 | 解析方式 |\n|------|------|----------|\n| Markdown (.md) | 按标题分段解析 | 标题→日期, 引用块→情绪/关键字 |\n| 纯文本 (.txt) | 按空行分段 | 首行→日期(如 YYYY-MM-DD) |\n| JSON (.json) | 结构化数据 | 按字段映射元数据 |\n\n### 导入命令\n\n```bash\n# 从 Markdown 导入\npython3 scripts/memory_core.py import-file memories.md --format markdown\n\n# 从纯文本导入\npython3 scripts/memory_core.py import-file notes.txt --format text\n\n# 从 JSON 导入 (结构化,保留 ID 和元数据)\npython3 scripts/memory_core.py import-file memories.json --format json\n```\n\n### Markdown 格式示例\n\n```markdown\n## 2025-03-15\n> 情绪: 0.9\n\n今天和AI讨论了一个关于未来的想法，感觉很兴奋。\n我们决定尝试一个新的架构方案。\n```\n\n导入后自动解析:\n- 日期: 2025-03-15\n- 情绪: 0.9（数值；旧词 high/medium/low 亦兼容）\n- 内容: \"## 2025-03-15\\n今天和AI讨论……\"\n\n### JSON 格式示例\n\n```json\n{\n  \"memories\": [\n    {\n      \"id\": \"optional-uuid\",\n      \"content\": \"记忆内容\",\n      \"type\": \"emotion\",\n      \"emotion\": 0.9,\n      \"keywords\": \"关键词\",\n      \"created_at\": \"2025-03-15T10:00:00\",\n      \"created_date\": \"2025-03-15\"\n    }\n  ]\n}\n```\n\n## 导出功能\n\n### 支持的格式\n\n| 格式 | 说明 | 用途 |\n|------|------|------|\n| markdown | 标准排版 | 阅读、归档、打印 |\n| timeline | 按时间线组织 | 年度回顾、记忆叙事 |\n| json | 结构化向量数据 | 备份、迁移、跨系统 |\n\n### 导出命令\n\n```bash\n# 导出为可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n\n# 导出为时间线回忆录 (按日期分组)\npython3 scripts/memory_core.py export --format timeline --output \"2026回顾.md\"\n\n# 导出为 JSON (可重新导入)\npython3 scripts/memory_core.py export --format json --output memories.json\n```\n\n### 时间线格式示例\n\n导出的 Markdown 按日期分节:\n\n```markdown\n# 忆时 ・ 记忆时间线\n导出日期: 2026-05-01\n总记忆数: 42\n\n## 2025-03-15\n\n### 🟠 [EMOTION]\n- 关键字: 未来, 想法, 兴奋\n- 情绪: 0.90\n- 今天和AI讨论了一个关于未来的想法，感觉很兴奋\n\n## 2025-03-20\n\n### 🟡 [DECISION]\n- 关键字: 架构, Python\n- 情绪: 0.50\n- 决定采用新的架构方案\n```\n\n## 完整备份/迁移流程\n\n### 备份\n\n```bash\n# 1. 导出 JSON (包含所有向量数据)\npython3 scripts/memory_core.py export --format json --output backup.json\n\n# 2. 导出时间线 (人类可读)\npython3 scripts/memory_core.py export --format timeline --output memories-timeline.md\n\n# 3. 导出可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n```\n\n### 迁移到新设备\n\n```bash\n# 新设备上初始化\npython3 scripts/memory_core.py init\n\n# 导入\npython3 scripts/memory_core.py import-file backup.json --format json\n```\n\n## 注意事项\n\n- 导入时如果 ID 冲突会自动生成新 UUID\n- 导出 JSON 可用于完整迁移，导出 Markdown 适合阅读\n- 时间线导出时胶囊记忆会标记 🔒 锁图标\n\nFile v2.4.0:modules/07-skill-memory.md\n\n# 模块 07 - 技能即记忆（Gene 结构）\n\n**何时读**：用户描述一工作流（教AI流程）、recall 命中 `type=skill` 记忆、需修正/遗忘技能时。日常无此场景不读。\n\n## 概念\n\n技能非文件，乃记忆也。用户教AI一工作流，即存为 `type=skill` 之记忆。忆时检索自然触发，无需加载SKILL.md。\n\n### Gene 结构（技能诊所标准）\n\n每条 skill 记忆含以下 metadata 字段：\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| skill_name | 是 | 技能名称，如\"格语\" |\n| skill_summary | 是 | 一句话概括，如\"故事→宫格图\" |\n| skill_strategy | 是 | 步骤摘要，如\"分析→分镜→渲染\" |\n| skill_triggers | 是 | 触发词，逗号分隔，如\"漫画,格语\" |\n| skill_input | 否 | 输入规格 |\n| skill_output | 否 | 输出规格 |\n| skill_avoid | 否 | 禁忌事项，分号分隔 |\n| skill_version | 否 | 版本号，默认 1.0.0 |\n\n**content 字段**：Strategy（步骤）+ Language（规约）+ Example（示例）三部分。用表格/列表，无废话。\n\n**keywords**：必含 `skill` 标签 + trigger: 前缀（如 `trigger:画漫画`）。\n\n### 教技能（用户教AI工作流）\n\n用户描述一有输入、有步骤、有输出之流程时，AI 须主动问\"可要存为技能？\"。此不等用户言\"记住\"。\n\n**收集 Gene 结构（Human-in-the-Loop）：**\n```\n缺什么问什么，不假设：\n- 技能名：？→ 用户答\"格语\"\n- 输入：？→ \"故事主题\"\n- 输出：？→ \"宫格图\"\n- 触发词：？→ \"说'画漫画'就触发\"\n- 禁忌：？→ \"不加原文没有的角色\"\n→ 填入 metadata 对应字段\n```\n\n**存储命令：**\n```bash\nMEMO_DIR=~/.local/share/忆时/data python3 $YISHI store \"Strategy/Language/Example\" \\\n  --type skill \\\n  --emotion 0.8 \\\n  --keywords \"skill,格语,trigger:漫画,trigger:画漫画\" \\\n  --skill-name \"格语\" \\\n  --skill-summary \"故事主题→宫格手绘故事图\" \\\n  --skill-strategy \"分析主题→定宫格→分镜→选风格→渲染\" \\\n  --skill-avoid \"不添加原文没有的角色;不修改核心故事\" \\\n  --skill-triggers \"漫画,格语,画漫画\" \\\n  --skill-input \"故事主题或梗概\" \\\n  --skill-output \"宫格手绘故事图\" \\\n  --skill-version \"1.0.0\"\n```\n\n**回复风格：** \"已录。「{技能名}」技能，触发词：{触发词}。\"\n\n### 用技能（自动触发）\n\nstorage 时 `keywords` 含 `trigger:xxx` 前缀。用户日常对话中，言必检之 recall 命中 trigger 关键词：\n\n```\n用户：画个猫和老鼠的漫画\n\n言必检 → recall \"漫画\" --expand --limit 5\n→ 命中 type=skill，keywords 含 trigger:漫画\n→ 读 content 知步骤，读 skill_avoid 知禁区\n→ 执行完毕后自动 update frequency+1\n```\n\n**关键：** 用户完全不知背后是 skill 记忆。语义检索自然触发，无需手动\"加载技能\"。\n\n### 技能进化\n\n```\n用户：不对，应该用水彩风\n\n→ AI 识别为技能修正\n→ update --id xxx --content \"新步骤...\"\n→ update --id xxx --keywords \"skill,格语,水彩,trigger:漫画,trigger:画漫画\"\n→ emotion_weight += 0.1（刚迭代的技能更活跃）\n\n回复：已修正。下次\"画漫画\"默认水彩风。\n```\n\n### 技能遗忘\n\n久不用者近因分（recency）衰减，自然降权，不主动浮现。数据不删，精准搜索 `type=skill` 仍可找回。\n\n### 频率即熟练度\n\nskill 记忆之 frequency 随使用自增，recall 排名上升——常用技能如肌肉记忆。此即\"越用越强\"。\n\n### 与现有技能目录之关系\n\n忆时即技能系统。61 个 SKILL.md 目录可逐条转为 `type=skill` 记忆，存入后不再依赖文件。\n\nFile v2.4.0:modules/08-setup.md\n\n# 模块 08 - 模型安装、配置与参考\n\n**何时读**：首次安装/切换 embedding 模型、维度重建、配置 opencode.json 外挂提示词、排查\"AI不自动检索\"问题时。日常无此场景不读。\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维，~400MB）——中文记忆检索质量远超英文模型 MiniLM。引擎检测 `~/.local/share/忆时/models/bge-base-zh-v1.5/onnx/model.onnx`，缺失即报错退出，**无回退**（MiniLM 384 维与 bge 768 维数据不兼容，曾致维度冲突）。\n\n**bge-base-zh-v1.5 安装**（模型放运行时目录，技能更新不覆盖）：\n\n```bash\nmkdir -p ~/.local/share/忆时/models/bge-base-zh-v1.5/onnx\n# 自 hf-mirror 下载（或浏览器下载后放入）\ncurl -sL -o ~/.local/share/忆时/models/bge-base-zh-v1.5/onnx/model.onnx \\\n  https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/onnx/model.onnx\ncd ~/.local/share/忆时/models/bge-base-zh-v1.5\nfor f in config.json tokenizer.json special_tokens_map.json tokenizer_config.json vocab.txt; do\n  curl -sL -o \"$f\" \"https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/$f\"\ndone\n```\n\n> ⚠️ **注意**：运行时模型与数据统一存 `~/.local/share/忆时/`（LOCAL_BASE），**不写入 `~/.cache/chroma/`**，亦不存技能目录（技能更新会覆盖）。\n\n## 必须配置外挂提示词\n\n本技能依赖 OpenCode 的 `instructions` 配置才能完整生效。\n未配置时，AI 不会自动检索记忆或存储记忆。\n\n**配置步骤：**\n\n1. 编辑全局配置文件 `~/.config/opencode/opencode.json`\n2. 添加 `instructions` 字段，指向技能目录下的提示词文件：\n\n```json\n{\n  \"instructions\": [\n    \"~/.local/share/忆时/yishi-instructions.md\"\n  ]\n}\n```\n\n3. 重启 OpenCode 使配置生效\n\n**配置后 AI 将自动：**\n- 每次对话前检索记忆系统\n- 用户说\"记住\"时自动存储记忆\n- 话题关联时主动涌现历史记忆\n- 对话结束时自动归档重点\n\n**未配置则：**\n- 技能仍可手动调用命令\n- 但不会自动检索/存储记忆\n- 不会主动联想和闪回\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n\nArchive v2.3.3: 26 files, 80587 bytes\n\nFiles: modules/01-initialize.md (1563b), modules/02-passive-mode.md (3102b), modules/03-active-mode.md (2047b), modules/04-time-capsule.md (1747b), modules/05-retrieval.md (3179b), modules/06-import-export.md (3234b), modules/07-skill-memory.md (3674b), modules/08-setup.md (2330b), modules/09-archiving.md (4767b), modules/10-consolidation.md (2727b), modules/11-quick-commands.md (6414b), modules/12-viz-profile.md (5345b), modules/13-retrieval-store.md (8106b), modules/14-behavior.md (3365b), README.md (2789b), references/chroma-api.md (1353b), scripts/__init__.py (0b), scripts/memory_core.py (58621b), scripts/viz/profile_template.html (7640b), scripts/viz/profile.py (8206b), scripts/viz/template.html (22849b), scripts/viz/viz.py (7743b), skill-card.md (2581b), SKILL.md (9613b), yishi-instructions.md (16374b), _meta.json (126b)\n\nFile v2.3.3:SKILL.md\n\n---\nname: memocap\ndescription: \"🎋 记忆胶囊系统 - 模拟人类记忆检索 | 自动加载，主动联想记忆\"\npriority: 900\nmetadata:\n  slug: memocap\n  version: \"2.3.3\"\n  trigger: \"忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、recall、remember、/忆时\"\n  copaw:\n    emoji: \"🎋\"\n    requires: {}\n    auto_load: true\n---\n\n# 忆时 - 记忆胶囊系统\n\n> 模拟人类的记忆机制，让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆系统。\n> **渐进式披露**：本文件为入口总纲。细节皆在 modules/——按「按需读取」表，遇场景才读对应模块，勿一次全读。\n\n## 触发条件\n\n- **自动加载**：每次对话自动激活，AI 主动联想和检索记忆\n- **关键字**：忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、我说过、我记得\n- **命令**：用户输入以 `/忆时` 开头时，自动触发快捷操作模式\n- **场景**：用户询问过去的事情、要求回忆、需要上下文关联、触发闪回\n- **主动**：定时模式运行时主动扫描到期胶囊和记忆关联\n\n## 核心概念\n\n| 概念 | 说明 |\n|------|------|\n| **类人检索** | 语义40% + 近因20% + 情绪15% + 频率25%，不像数据库那样精确 |\n| **混合检索** | BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符检索更准；embedding 失败自动降级关键词 |\n| **去重合并** | 存储时相似>90% 自动合并（内容并入、频率+1），85%~90% 警告提示，--force 强存 |\n| **渐进式回忆** | 先抛最相关的1-2条，用户追问再深入，非一次性倒出 |\n| **遗忘曲线** | 记忆随时间指数衰减，低频率的记忆会变得\"模糊\" |\n| **情绪锚定** | 高情绪（情绪值 ≥0.7）记忆权重更高，不易遗忘 |\n| **记忆涌现** | 话题转换时发现隐藏关联，主动说出\"说到这个我突然想到…\" |\n| **场景分组** | 记忆可标 --scene 归组，事件记忆可标活动时间段（2025-05-01 ~ 05-10） |\n| **时间胶囊** | 封存某段记忆，设定解锁日期，到期后自动/手动解封翻阅 |\n\n## 记忆类型\n\n| 类型 | 说明 | 情绪权重倾向 |\n|------|------|-------------|\n| emotion | 情绪事件（开心、愤怒、悲伤） | |\n| decision | 用户做出的决策 | 🟠 |\n| task | 任务/待办 | 🟡 |\n| time | 时间敏感信息（截止日期） | 🔴 |\n| preference | 用户偏好/习惯 | 🟢 |\n| context | 上下文/背景信息 | 🟡 |\n| skill | 技能——用户教AI的工作流，Gene结构化存储 | 🟠 |\n\n## 按需读取（渐进式披露核心）\n\n**规则：未遇对应场景，不读模块。每模块读一次即可，勿重复加载。**\n\n| 场景 | 读模块 |\n|------|--------|\n| 对话启始、每言必检、主动存储、检索升级、决策前置 | modules/13-retrieval-store.md |\n| 用户描述工作流（教AI流程）、skill记忆检索命中 | modules/07-skill-memory.md |\n| 对话结束归档、仅输入 `/忆时` 会话整理、每满5轮定期提取 | modules/09-archiving.md |\n| 用户输入 `/忆时 ...`（命令构造/回复风格） | modules/11-quick-commands.md |\n| 可视化（\"看看记了啥\"）、人物画像 | modules/12-viz-profile.md |\n| 记忆自动梳理（上次梳理过期7日） | modules/10-consolidation.md |\n| 模型安装/切换、opencode.json 配置 | modules/08-setup.md |\n| 复杂任务规划、上下文压缩后自查、长文索引 | modules/14-behavior.md |\n| 首次初始化、Chroma 集合结构 | modules/01-initialize.md |\n| 定时主动模式（胶囊检查/遗忘归档） | modules/03-active-mode.md |\n| 时间胶囊管理 | modules/04-time-capsule.md |\n| 检索算法原理（综合得分公式） | modules/05-retrieval.md |\n| 导入导出、备份迁移 | modules/06-import-export.md |\n| 被动检索触发场景与渐进式回忆 | modules/02-passive-mode.md |\n\n## 核心命令\n\n```bash\nPY=/home/fslong/.config/opencode/skills/忆时/scripts/memory_core.py\nMEMO_DIR=~/.local/share/opencode/忆时/data    # 所有命令必设\n# 注意：以下命令使用 $PY 与 $MEMO_DIR 变量，须先执行上方两行定义；或直接写全路径 python3 ~/.config/opencode/skills/忆时/scripts/memory_core.py\n\n初始化:    python3 $PY init\n存储记忆:  python3 $PY store \"内容\" --type task --emotion 0.8 [--scene 场景] [--activity-start 2025-05-01] [--activity-end 2025-05-10] [--force]\n检索记忆:  python3 $PY recall \"查询\" --limit 5 --expand [--no-embed] [--max-total-chars 600]\n封胶囊:   python3 $PY capsule lock --unlock-at \"2026-12-31\"\n查看胶囊:  python3 $PY capsule list\n导入:      python3 $PY import-file file.md --format markdown\n导出:      python3 $PY export --format timeline --output output.md\n可视化:    python3 ~/.config/opencode/skills/忆时/scripts/viz/viz.py\n统计:      python3 $PY stats\n遗忘:      python3 $PY forget --before \"2025-01-01\" --auto\n恢复:      python3 $PY recover\n查看备份:  cat memories_backup.jsonl | python3 -m json.tool --lines\n```\n\n## 快捷操作一览\n\n`/忆时` 前缀，免记命令行参数。命令构造、解析规则、回复风格见 modules/11-quick-commands.md。\n\n| 输入 | 动作 |\n|------|------|\n| `/忆时`（无后续） | 会话整理 |\n| `/忆时 <内容>` | 默认 recall |\n| `/忆时 记住/记忆 <内容> [--type T] [--emotion E]` | store |\n| `/忆时 查找/搜索/找 <关键词> [--limit N]` | recall |\n| `/忆时 忘记 <关键词>` | forget |\n| `/忆时 统计` | stats |\n| `/忆时 导出` | export |\n| `/忆时 可视化 [--out 路径]` | 记忆全景 HTML |\n| `/忆时 画像` | 人物画像 |\n| `/忆时 恢复` | recover |\n| `/忆时 胶囊 封存/列表/开封` | capsule lock/list/unlock |\n| `/忆时 梳理` | 记忆梳理 |\n\n**类型**：task / decision / preference / emotion / time / context / skill\n**情绪**：0.0~1.0 数值（默认 0.5），数值越大越重要/强烈；旧词 high=0.8 / medium=0.5 / low=0.2 仍兼容\n\n## 工程实践——关键场景\n\n| 场景 | 指令 |\n|------|------|\n| 完成任务后 | 按审计三问自查：结果问→过程问→改进问，全过方可言\"完\" |\n| 收到复杂需求 | 先存方案到忆时，再规划步骤，逐条标记完成 |\n| 发现用户偏好 | 以 `--type preference` 即时存储 |\n| 做出关键决策 | 以 `--type decision --emotion 0.9` 存储，附决策理由 |\n| 用户交付长文 | 提取metadata，按索引思维存储（见 modules/14） |\n| 对话转折话题 | 先 `recall` 新话题的关键词，再谈是否有关联 |\n| 疑似走偏 | 暂停，`recall` 原始目标比对进度 |\n| 决策或提问之前 | 先 `recall` 查询记忆，确认有无既有决策、偏好、约定可循 |\n| 对话开始 | 检索当前项目/文件夹相关记忆（见 modules/13） |\n| 对话结束 | 按归档流程，先检索旧忆，再择新增或更新（见 modules/09） |\n| 记忆自动梳理 | 对话启始先召回上次梳理时间告知用户，过期7日则触发沉淀（见 modules/10） |\n| 完成任务（todo完成/修改变更/输出结果） | 停顿自问\"有无值得记忆？\"，有则检索旧忆后store或update |\n| 用户输入 `/忆时` 开头 | 直入快捷操作模式，解析动作与参数，跳过常规涌现检索 |\n\n## 项目结构\n\n```\n忆时/\n├── SKILL.md                    # 技能定义 (入口总纲/识别层)\n├── yishi-instructions.md       # 外挂提示词 (必须配置到 opencode.json)\n├── modules/                    # 详细流程模块 (执行层，按需读取)\n│   ├── 01-initialize.md        # Chroma 初始化\n│   ├── 02-passive-mode.md      # 被动模式流程\n│   ├── 03-active-mode.md       # 主动模式流程\n│   ├── 04-time-capsule.md      # 时间胶囊操作\n│   ├── 05-retrieval.md         # 类人检索策略\n│   ├── 06-import-export.md     # 导入导出操作\n│   ├── 07-skill-memory.md      # 技能即记忆 (Gene)\n│   ├── 08-setup.md             # 模型安装与配置\n│   ├── 09-archiving.md         # 对话归档与会话整理\n│   ├── 10-consolidation.md     # 记忆自动梳理\n│   ├── 11-quick-commands.md    # 快捷操作详解\n│   ├── 12-viz-profile.md       # 可视化与人物画像\n│   ├── 13-retrieval-store.md   # 记忆操作流程 (检索/存储细则)\n│   └── 14-behavior.md          # 认知自知与上下文工程\n├── models/                     # （预留，仅 bge 模型不落此——运行时模型在 LOCAL_BASE）\n├── scripts/\n│   ├── memory_core.py          # 核心引擎 CLI\n│   └── viz/                    # 记忆可视化\n│       ├── viz.py              # 记忆全景生成器（导出→聚类→注入模板→打开）\n│       ├── template.html       # 记忆全景模板（孟菲斯风，/*__DATA__*/ 占位）\n│       ├── profile.py          # 人物画像助手（素材报告 + 正文注入）\n│       └── profile_template.html # 画像模板（<!--DATA-->/<!--CONTENT--> 占位）\n└── references/\n    └── chroma-api.md           # ChromaDB API 参考\n```\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4、jieba（BM25 关键词检索）\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n- 模型: bge-base-zh-v1.5（768维，唯一模型，无回退）。安装见 modules/08-setup.md\n- 备份: `~/.local/share/opencode/忆时/memories_backup.jsonl`（可用 MEMO_BAK 覆盖，多实例/测试隔离）\n\nFile v2.3.3:README.md\n\n# 忆时 - 记忆胶囊系统\n\n🎋 模拟人类记忆检索机制的 AI 记忆系统。OpenCode 技能。\n\n## 下载\n\n```bash\n# 方式一：git clone\ngit clone git@github.com:fslong520/aiSkill.git --depth 1\n# 然后将 忆时/ 目录复制到 skills/ 下\n\n# 方式二：直接复制本目录到 OpenCode skills 目录\ncp -r 忆时 ~/.config/opencode/skills/\n\n# 方式三：仅获取核心文件（模型首次使用自动下载）\ncp -r 忆时/{scripts,modules,SKILL.md,yishi-instructions.md} ~/.config/opencode/skills/忆时/\n```\n\n## 功能\n\n- **类人检索**: 语义40% + 近因20% + 情绪15% + 频率25%\n- **混合检索**: BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符更准；embedding 失败自动降级关键词\n- **去重合并**: 存储时相似>90% 自动合并，85%~90% 警告提示，--force 强存\n- **场景分组**: --scene 归组 + 活动时间段（--activity-start/--activity-end）\n- **渐进式回忆**: 先抛最相关的1-2条，用户追问再深入\n- **情绪锚定**: 高情绪记忆权重更高，不易遗忘\n- **记忆涌现**: 话题转换时发现隐藏关联\n- **时间胶囊**: 封存记忆，设定解锁日期\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\npip install chromadb\n\n# 2. 初始化\npython3 scripts/memory_core.py init\n\n# 3. 存储记忆\npython3 scripts/memory_core.py store \"记忆内容\" --type context --emotion medium --keywords \"标签\" --scene \"场景名\"\n\n# 4. 检索记忆\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5 --expand --no-embed\n```\n\n## 模型安装\n\n使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维）——中文记忆检索质量远超英文模型 MiniLM。引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/`，缺失即报错退出，**无回退**（MiniLM 384 维与 bge 768 维数据不兼容，曾致维度冲突）。\n\nbge 安装：自 hf-mirror 下载 Xenova/bge-base-zh-v1.5 之 `onnx/model.onnx` 与 tokenizer 文件至上述目录（详见 modules/08-setup.md）。\n\n## 目录结构\n\n```\n忆时/\n├── SKILL.md              # 技能定义\n├── yishi-instructions.md # 外挂提示词\n├── modules/              # 流程模块\n├── scripts/\n│   └── memory_core.py    # 核心引擎\n├── models/                 # （已弃用——运行时 bge 模型在 LOCAL_BASE）\n├── data/                 # ChromaDB 数据 (运行时生成)\n│   └── .gitkeep\n├── references/           # API 参考\n├── venv/                 # Python 虚拟环境\n├── .gitignore\n├── .gitattributes\n└── README.md\n```\n\n## 配置\n\n编辑 `~/.config/opencode/opencode.json`:\n\n```json\n{\n  \"instructions\": [\n    \"~/.config/opencode/skills/忆时/yishi-instructions.md\"\n  ]\n}\n```\n\nFile v2.3.3:_meta.json\n\n{\n  \"ownerId\": \"kn71rk0chjcdy7ffgfc08hh9gd83ehq8\",\n  \"slug\": \"memocap\",\n  \"version\": \"2.3.3\",\n  \"publishedAt\": 1786713629599\n}\n\nFile v2.3.3:references/chroma-api.md\n\n# ChromaDB API 参考 (忆时用)\n\n## 版本\n\n- chromadb 1.5.4\n- Python 3.13+\n\n## 客户端初始化\n\n```python\nimport chromadb\nclient = chromadb.PersistentClient(path=\"/path/to/data\")\n```\n\n## 集合操作\n\n```python\n# 创建或获取集合\ncollection = client.get_or_create_collection(\n    name=\"memories\",\n    metadata={\"hnsw:space\": \"cosine\"}\n)\n\n# 添加文档\ncollection.add(\n    documents=[\"记忆内容\"],\n    metadatas=[{\"type\": \"context\", \"emotion\": \"medium\"}],\n    ids=[\"uuid\"]\n)\n\n# 查询 (语义搜索)\nresults = collection.query(\n    query_texts=[\"查询关键词\"],\n    n_results=10\n)\n\n# 获取特定文档\ndoc = collection.get(ids=[\"uuid\"])\n\n# 更新\ncollection.update(\n    ids=[\"uuid\"],\n    documents=[\"新内容\"],\n    metadatas=[{\"type\": \"new_type\"}]\n)\n\n# 删除\ncollection.delete(ids=[\"uuid\"])\n\n# 统计数量\ncount = collection.count()\n```\n\n## 查询结果结构\n\n```python\n{\n    \"ids\": [[\"id1\", \"id2\", ...]],\n    \"documents\": [[\"doc1\", \"doc2\", ...]],\n    \"metadatas\": [[metadata1, metadata2, ...]],\n    \"distances\": [[0.1, 0.2, ...]],  # cosine distance, 越小越相似\n}\n```\n\n语义相似度 = 1.0 - distance\n\n## 注意事项\n\n- ChromaDB 自动向量化文本 (text-embedding)\n- cosine 距离范围: 0 (完全相同) 到 2 (完全相反)\n- metadatas 中的值必须是字符串或数字\n- PersistentClient 自动持久化到磁盘\n\nFile v2.3.3:modules/01-initialize.md\n\n# 模块 01 - 初始化与 Chroma 管理\n\n## 目标\n\n初始化 ChromaDB 向量数据库，建立必要的集合。\n\n## 执行步骤\n\n1. 检查 Python 3.13 是否可用\n2. 检查 chromadb 是否已安装\n3. 运行初始化命令:\n\n```bash\npython3 /home/fslong/.config/opencode/skills/忆时/scripts/memory_core.py init\n```\n\n4. 确认输出包含\"忆时记忆系统初始化完成\"\n\n## 集合结构\n\nChromaDB 内会创建以下集合:\n\n| 集合名 | 用途 | 距离度量 |\n|--------|------|----------|\n| memories | 长期记忆向量存储 | cosine |\n| relationships | 记忆间关联关系 | cosine |\n| meta | 系统状态元数据 | cosine |\n\n## 记忆元数据结构\n\n每条记忆包含以下元数据:\n\n```json\n{\n  \"type\": \"context\",\n  \"emotion\": \"medium\",\n  \"emotion_weight\": 0.5,\n  \"created_at\": \"2025-01-15T10:30:00\",\n  \"created_date\": \"2025-01-15\",\n  \"updated_at\": \"2025-01-15T10:30:00\",\n  \"keywords\": \"Python,学习,装饰器\",\n  \"source\": \"manual\",\n  \"source_session\": \"\",\n  \"frequency\": \"1\",\n  \"recall_count\": \"0\",\n  \"is_capsule\": \"false\",\n  \"capsule_unlock_at\": \"\"\n}\n```\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维），**无回退**。\n引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/`，缺失即报错。\n安装命令——详见 modules/08-setup.md。\n\n> ⚠️ 模型不会写入 `~/.cache/chroma/`，清缓存不会被删除。\n\n## 环境变量\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| MEMO_DIR | ~/.local/share/opencode/忆时/data | ChromaDB 存储路径 |\n\nFile v2.3.3:modules/02-passive-mode.md\n\n# 模块 02 - 被动模式（对话中触发检索）\n\n## 触发场景\n\n当用户在对话中出现以下行为时触发记忆检索:\n\n- **显式询问**: \"我说过…\"、\"我记得之前…\"、\"你记得吗…\"\n- **话题回溯**: 回到之前的话题、延续之前的讨论\n- **关键词命中**: 对话中出现已存储记忆中的关键字\n- **情绪波动**: 用户表达强烈情绪，触发情绪锚定检索\n- **上下文缺失**: 回答需要之前的背景信息\n\n## 执行流程\n\n### 1. 判断是否需要检索\n\n分析当前对话内容，构建检索查询:\n\n- 如果用户直接要求回忆: 使用用户原话作为查询\n- 如果检测到关联话题: **提取2-3个核心词**作为查询\n- 如果情绪发生变化: 以当前情绪关键词 + 情绪类型检索\n\n### 2. 执行检索\n\n```bash\n# 基础检索 - 返回最相关的N条\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5\n\n# 带联想扩散的深度检索\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5 --expand\n\n# 按类型过滤\npython3 scripts/memory_core.py recall \"偏好\" --type-filter preference\n\n# 只检索高情绪记忆\npython3 scripts/memory_core.py recall \"情感\" --min-weight 0.7\n```\n\n### 3. 渐进式回忆策略\n\n**不要一次性倒出所有结果！**\n\n1. **第一轮**: 只返回得分最高的 1-2 条\n   - 自然地在回复中提及: \"你之前提到过…\"\n2. **用户追问**: 返回接下来的 2-3 条\n   - \"还有这些相关的…\"\n3. **持续追问**: 再返回剩余结果\n\n### 4. 遗忘曲线行为\n\n当记忆的 recall_count 很低且创建时间很久远时:\n\n- 返回时表达**不确定性**: \"我模糊记得你之前好像提到过…\"\n- 提供**概要而非精确内容**: 给出关键词而非完整引用\n- 如果分数低于阈值: \"这方面的记忆有些模糊了…\"\n\n### 5. 记忆涌现处理（多轮检索）\n\n涌现乃主动发现之隐藏关联，非被动等结果。须行多轮检索：\n\n**第一轮：语义检索**\n```bash\npython3 scripts/memory_core.py recall \"用户话题\" --limit 3 --expand\n```\n\n**第二轮：涌现判定**\n观第一轮结果：\n- 有 `[关联]` 标记 → 已有涌现，直接表达\n- 结果 ≥ 2 条 → 取 top-2 关键字/内容构建复合查询，再做第二轮\n```bash\npython3 scripts/memory_core.py recall \"原话题 新话题\" --limit 2\n```\n- 若第二轮结果与第一轮不重叠 → 此为涌现之记忆\n\n**第三轮：情绪锚定**\n用户情绪显著时（愤怒/兴奋/沮丧），以情绪词 + 话题词再检：\n```bash\npython3 scripts/memory_core.py recall \"情绪词\" --type-filter emotion --min-weight 0.7 --limit 2\n```\n\n**主动说出**（发现涌现时），而不是等用户问:\n\n> \"说到这个我突然想到一件事…\"\n> \"这让我联想到你之前说过的另一个相关的事…\"\n> \"对了，你还记得那次…\"\n\n涌现条件:\n- 关联分数 > 0.6\n- 与当前话题有语义关联\n- 不是已在此对话中提及过的内容\n\n> 强涌现强制流程（三轮检索）、检索升级穷尽模式（L0-L4）、主动存储细则——见 modules/13-retrieval-store.md。\n\nFile v2.3.3:modules/03-active-mode.md\n\n# 模块 03 - 主动模式（定时触发回忆整理）\n\n## 触发方式\n\n结合定时任务/cron周期性执行:\n\n```bash\n# 主动回忆整理入口脚本\npython3 scripts/memory_core.py capsule check-expired && \\\npython3 scripts/memory_core.py forget --low-freq 1 --auto && \\\npython3 scripts/memory_core.py stats\n```\n\n## 主动执行流程\n\n### 1. 检查到期时间胶囊\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n- 如果存在到期胶囊 → **生成回忆回顾**\n- 解封胶囊内容，向用户推送回顾\n- 格式示例:\n\n> 🎋 记忆胶囊解封提醒\n> 你于 2025-03-15 封存了一个胶囊，今天是解锁日！\n>\n> 封存内容: \"今天和AI讨论了一个关于…\"\n> 封存时的心情: 🟠 兴奋\n>\n> 打开看看吗？\n\n### 2. 自动发现记忆关联\n\n分析现有记忆，寻找隐藏关联:\n\n- 检索每条记忆，查看 `recall --expand` 的结果\n- 如果发现新的强关联（关联分数 > 0.7）\n- 主动向用户报告:\n\n> \"我注意到你关于 A 和 B 的记忆似乎存在一些联系…\"\n\n### 3. 遗忘曲线处理\n\n低优先级记忆自动归档:\n\n```bash\npython3 scripts/memory_core.py forget --before \"2025-01-01\" --low-freq 1 --auto\n```\n\n- 将低频、低 recall 的旧记忆标记为 archived\n- 不删除，只是降低检索优先级\n- 保留高情绪记忆不归档\n\n### 4. 记忆整理报告\n\n生成统计摘要:\n\n```bash\npython3 scripts/memory_core.py stats\n```\n\n向用户报告:\n- 总记忆数\n- 本周新增记忆\n- 到期解除的胶囊数\n- 归档的记忆数\n\n## 建议定时频率\n\n| 任务 | 频率 | 说明 |\n|------|------|------|\n| 胶囊检查 | 每天一次 | 检查到期的时间胶囊 |\n| 遗忘归档 | 每周一次 | 归档低频旧记忆 |\n| 关联发现 | 每次对话后 | 对话结束时自动发现新关联 |\n| 统计报告 | 每周一次 | 生成记忆整理报告 |\n\n## 对话结束语自动触发\n\n每当用户结束一次较长的对话，可以主动:\n\n1. 提取对话中的重点记忆\n2. 自动存储到 Chroma\n3. 检查是否有胶囊到期\n\nFile v2.3.3:modules/04-time-capsule.md\n\n# 模块 04 - 时间胶囊管理\n\n## 概念\n\n时间胶囊允许将当前时刻的记忆封存，设定一个未来的解锁日期。\n到期后可以自动或手动解封，重温当时的记忆和情绪。\n\n## 封存胶囊\n\n```bash\n# 封存一个胶囊，30天后解锁（默认）\npython3 scripts/memory_core.py capsule lock --summary \"今日感悟\"\n\n# 封存并指定解锁日期\npython3 scripts/memory_core.py capsule lock --unlock-at \"2026-12-31\" --summary \"年度回顾\" --content \"今天我和AI讨论了关于未来的思考…\" --keywords \"未来,思考,人生\"\n```\n\n**关键字段**:\n\n| 参数 | 必填 | 说明 |\n|------|------|------|\n| --summary | 否 | 摘要，用于列表预览 |\n| --content | 否 | 胶囊的详细记忆内容 |\n| --keywords | 否 | 关键字 |\n| --unlock-at | 否 | 解锁日期 YYYY-MM-DD，默认30天后 |\n\n## 查看胶囊\n\n```bash\npython3 scripts/memory_core.py capsule list\n```\n\n输出示例:\n```\n时间胶囊 (3 个)\nID: xxx-xxx\n创建: 2025-06-15 | 解锁: 2025-12-31 | 状态: 剩余 205 天\n内容: 时间胶囊 - 创建于 2025-06-15, 解锁日期: 2025-12-31\n```\n\n## 检查到期\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n主动模式下每次触发时应运行此命令。\n\n## 解封胶囊\n\n```bash\npython3 scripts/memory_core.py capsule unseal --capsule-id <ID>\n```\n\n- 如果胶囊已到期 → 直接解封\n- 如果尚未到期 → 警告用户并需要确认\n- 解封后该记忆变为普通记忆，可以正常检索\n\n## 解封回忆重现\n\n解封时，生成回忆回顾:\n\n> 🎋 时光倒流! 你于 X 天前封存了这段记忆:\n>\n> [capsule content]\n>\n> 封存时的心情: 🟠 兴奋\n> 关键字: …\n>\n> 这段记忆已被解封，现在可以随时检索了。\n\nFile v2.3.3:modules/05-retrieval.md\n\n# 模块 05 - 类人检索策略\n\n## 核心算法\n\n人类记忆不是数据库查询，而是多维度加权的结果:\n\n### 综合得分公式\n\n```\n最终得分 = 0.40 × 语义相似度\n         + 0.15 × 情绪权重\n         + 0.20 × 近因效应\n         + 0.25 × (0.6 + 频率强化)\n```\n\n### 各分量计算\n\n| 分量 | 权重 | 计算方式 | 说明 |\n|------|------|----------|------|\n| **语义相似度** | 40% | Chroma cosine 向量搜索 | AI 理解的意义匹配度 |\n| **情绪权重** | 15% | 直接采用情绪数值（0.0~1.0），🔴≥0.9 🟠≥0.7 🟡≥0.4 🟢<0.4 | 情绪值越强，越容易忆起 |\n| **近因效应** | 20% | exp(-ln(2) × 天数 / 30) | 半衰期30天，30天后回忆概率减半 |\n| **频率强化** | 25% | 0.6 + log₂(f+1)×0.1 + log₂(r+1)×0.05 | f=出现频次, r=被回忆次数 |\n\n## 检索模式\n\n### 1. 基础语义检索\n\n```bash\npython3 scripts/memory_core.py recall \"Python\"\n```\n\n### 2. 联想扩散 (关键!)\n\n```bash\npython3 scripts/memory_core.py recall \"Python\" --expand\n```\n\n执行流程（两阶段扩散）:\n\n**阶段一：关系链扩散**\n1. 先做语义检索，获取 top-10 结果\n2. 对 top-3 结果，通过 `relationships` 集合查直接关联关系（store 时自动建链）\n3. 关系链上的新记忆以较低权重加入结果集\n\n**阶段二：语义二次检索**\n4. 取 top-2 结果之内容/关键字，以此为新查询再做语义检索\n5. 发现与原始结果不重叠者，即为\"涌现\"\n6. 最终统一按综合得分排序\n7. 所有扩散结果标记为 `[关联]`\n\n> **实现机制**：每条记忆在 `store` 时自动搜索语义相似(p>0.50)的已有记忆，\n> 写入 `relationships` 集合并交叉融合关键字，使后续检索覆盖更广。\n\n### 3. 情绪锚定检索\n\n只检索高情绪记忆 (类似\"闪回\"):\n\n```bash\npython3 scripts/memory_core.py recall \"关键词\" --min-weight 0.7\n```\n\n### 4. 渐进式回忆\n\n在实际对话中，**不要一次返回所有结果**:\n\n```\n用户: 我之前跟你讨论过Python的事吧？\n\nAI (第一轮):\n  → 检索 recall \"Python讨论\" --limit 3\n  → 返回最高分的 1 条\n  → \"对！我记得你之前提到过[记忆内容]...\"\n\n用户: 还有呢？\n\nAI (第二轮):\n  → 返回接下来的 2 条\n  → \"还有一点，你还说过...\"\n\n用户: 嗯嗯继续...\n\nAI (第三轮):\n  → recall \"Python讨论\" --expand\n  → 联想扩散，返回关联记忆\n  → \"啊对了！说到Python，我突然想到你还提过...\"\n```\n\n## 遗忘行为模拟\n\n当记忆的:\n- **近因分 < 0.2** (超过3个月未检索): 返回时添加不确定性\n- **recall_count = 0** 且创建时间很久远: \"我隐约记得……\"\n- **综合分 < 0.5**: 不提为一条确定的记忆\n\n示例:\n\n> \"我不太确定，但隐约记得你好像说过……\"\n> \"我模糊地记得你很久前提到过一个相关的……\"\n\n## 检索建议\n\n| 场景 | 参数 |\n|------|------|\n| 用户提到模糊概念 | `recall \"概念\" --limit 3` |\n| 用户追问详情 | `recall \"概念\" --limit 5 --expand` |\n| 需要精确回忆 | `recall \"精确词\" --min-weight 0.6` |\n| 话题转换时主动闪回 | `recall \"新话题\" --limit 2 --expand` |\n\nFile v2.3.3:modules/06-import-export.md\n\n# 模块 06 - 导入导出管理\n\n## 导入功能\n\n将外部记忆文件导入到 ChromaDB 向量化存储中。\n\n### 支持的格式\n\n| 格式 | 说明 | 解析方式 |\n|------|------|----------|\n| Markdown (.md) | 按标题分段解析 | 标题→日期, 引用块→情绪/关键字 |\n| 纯文本 (.txt) | 按空行分段 | 首行→日期(如 YYYY-MM-DD) |\n| JSON (.json) | 结构化数据 | 按字段映射元数据 |\n\n### 导入命令\n\n```bash\n# 从 Markdown 导入\npython3 scripts/memory_core.py import-file memories.md --format markdown\n\n# 从纯文本导入\npython3 scripts/memory_core.py import-file notes.txt --format text\n\n# 从 JSON 导入 (结构化,保留 ID 和元数据)\npython3 scripts/memory_core.py import-file memories.json --format json\n```\n\n### Markdown 格式示例\n\n```markdown\n## 2025-03-15\n> 情绪: 0.9\n\n今天和AI讨论了一个关于未来的想法，感觉很兴奋。\n我们决定尝试一个新的架构方案。\n```\n\n导入后自动解析:\n- 日期: 2025-03-15\n- 情绪: 0.9（数值；旧词 high/medium/low 亦兼容）\n- 内容: \"## 2025-03-15\\n今天和AI讨论……\"\n\n### JSON 格式示例\n\n```json\n{\n  \"memories\": [\n    {\n      \"id\": \"optional-uuid\",\n      \"content\": \"记忆内容\",\n      \"type\": \"emotion\",\n      \"emotion\": 0.9,\n      \"keywords\": \"关键词\",\n      \"created_at\": \"2025-03-15T10:00:00\",\n      \"created_date\": \"2025-03-15\"\n    }\n  ]\n}\n```\n\n## 导出功能\n\n### 支持的格式\n\n| 格式 | 说明 | 用途 |\n|------|------|------|\n| markdown | 标准排版 | 阅读、归档、打印 |\n| timeline | 按时间线组织 | 年度回顾、记忆叙事 |\n| json | 结构化向量数据 | 备份、迁移、跨系统 |\n\n### 导出命令\n\n```bash\n# 导出为可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n\n# 导出为时间线回忆录 (按日期分组)\npython3 scripts/memory_core.py export --format timeline --output \"2026回顾.md\"\n\n# 导出为 JSON (可重新导入)\npython3 scripts/memory_core.py export --format json --output memories.json\n```\n\n### 时间线格式示例\n\n导出的 Markdown 按日期分节:\n\n```markdown\n# 忆时 ・ 记忆时间线\n导出日期: 2026-05-01\n总记忆数: 42\n\n## 2025-03-15\n\n### 🟠 [EMOTION]\n- 关键字: 未来, 想法, 兴奋\n- 情绪: 0.90\n- 今天和AI讨论了一个关于未来的想法，感觉很兴奋\n\n## 2025-03-20\n\n### 🟡 [DECISION]\n- 关键字: 架构, Python\n- 情绪: 0.50\n- 决定采用新的架构方案\n```\n\n## 完整备份/迁移流程\n\n### 备份\n\n```bash\n# 1. 导出 JSON (包含所有向量数据)\npython3 scripts/memory_core.py export --format json --output backup.json\n\n# 2. 导出时间线 (人类可读)\npython3 scripts/memory_core.py export --format timeline --output memories-timeline.md\n\n# 3. 导出可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n```\n\n### 迁移到新设备\n\n```bash\n# 新设备上初始化\npython3 scripts/memory_core.py init\n\n# 导入\npython3 scripts/memory_core.py import-file backup.json --format json\n```\n\n## 注意事项\n\n- 导入时如果 ID 冲突会自动生成新 UUID\n- 导出 JSON 可用于完整迁移，导出 Markdown 适合阅读\n- 时间线导出时胶囊记忆会标记 🔒 锁图标\n\nFile v2.3.3:modules/07-skill-memory.md\n\n# 模块 07 - 技能即记忆（Gene 结构）\n\n**何时读**：用户描述一工作流（教AI流程）、recall 命中 `type=skill` 记忆、需修正/遗忘技能时。日常无此场景不读。\n\n## 概念\n\n技能非文件，乃记忆也。用户教AI一工作流，即存为 `type=skill` 之记忆。忆时检索自然触发，无需加载SKILL.md。\n\n### Gene 结构（技能诊所标准）\n\n每条 skill 记忆含以下 metadata 字段：\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| skill_name | 是 | 技能名称，如\"格语\" |\n| skill_summary | 是 | 一句话概括，如\"故事→宫格图\" |\n| skill_strategy | 是 | 步骤摘要，如\"分析→分镜→渲染\" |\n| skill_triggers | 是 | 触发词，逗号分隔，如\"漫画,格语\" |\n| skill_input | 否 | 输入规格 |\n| skill_output | 否 | 输出规格 |\n| skill_avoid | 否 | 禁忌事项，分号分隔 |\n| skill_version | 否 | 版本号，默认 1.0.0 |\n\n**content 字段**：Strategy（步骤）+ Language（规约）+ Example（示例）三部分。用表格/列表，无废话。\n\n**keywords**：必含 `skill` 标签 + trigger: 前缀（如 `trigger:画漫画`）。\n\n### 教技能（用户教AI工作流）\n\n用户描述一有输入、有步骤、有输出之流程时，AI 须主动问\"可要存为技能？\"。此不等用户言\"记住\"。\n\n**收集 Gene 结构（Human-in-the-Loop）：**\n```\n缺什么问什么，不假设：\n- 技能名：？→ 用户答\"格语\"\n- 输入：？→ \"故事主题\"\n- 输出：？→ \"宫格图\"\n- 触发词：？→ \"说'画漫画'就触发\"\n- 禁忌：？→ \"不加原文没有的角色\"\n→ 填入 metadata 对应字段\n```\n\n**存储命令：**\n```bash\nMEMO_DIR=~/.local/share/opencode/忆时/data python3 $YISHI store \"Strategy/Language/Example\" \\\n  --type skill \\\n  --emotion 0.8 \\\n  --keywords \"skill,格语,trigger:漫画,trigger:画漫画\" \\\n  --skill-name \"格语\" \\\n  --skill-summary \"故事主题→宫格手绘故事图\" \\\n  --skill-strategy \"分析主题→定宫格→分镜→选风格→渲染\" \\\n  --skill-avoid \"不添加原文没有的角色;不修改核心故事\" \\\n  --skill-triggers \"漫画,格语,画漫画\" \\\n  --skill-input \"故事主题或梗概\" \\\n  --skill-output \"宫格手绘故事图\" \\\n  --skill-version \"1.0.0\"\n```\n\n**回复风格：** \"已录。「{技能名}」技能，触发词：{触发词}。\"\n\n### 用技能（自动触发）\n\nstorage 时 `keywords` 含 `trigger:xxx` 前缀。用户日常对话中，言必检之 recall 命中 trigger 关键词：\n\n```\n用户：画个猫和老鼠的漫画\n\n言必检 → recall \"漫画\" --expand --limit 5\n→ 命中 type=skill，keywords 含 trigger:漫画\n→ 读 content 知步骤，读 skill_avoid 知禁区\n→ 执行完毕后自动 update frequency+1\n```\n\n**关键：** 用户完全不知背后是 skill 记忆。语义检索自然触发，无需手动\"加载技能\"。\n\n### 技能进化\n\n```\n用户：不对，应该用水彩风\n\n→ AI 识别为技能修正\n→ update --id xxx --content \"新步骤...\"\n→ update --id xxx --keywords \"skill,格语,水彩,trigger:漫画,trigger:画漫画\"\n→ emotion_weight += 0.1（刚迭代的技能更活跃）\n\n回复：已修正。下次\"画漫画\"默认水彩风。\n```\n\n### 技能遗忘\n\n久不用者近因分（recency）衰减，自然降权，不主动浮现。数据不删，精准搜索 `type=skill` 仍可找回。\n\n### 频率即熟练度\n\nskill 记忆之 frequency 随使用自增，recall 排名上升——常用技能如肌肉记忆。此即\"越用越强\"。\n\n### 与现有技能目录之关系\n\n忆时即技能系统。61 个 SKILL.md 目录可逐条转为 `type=skill` 记忆，存入后不再依赖文件。\n\nFile v2.3.3:modules/08-setup.md\n\n# 模块 08 - 模型安装、配置与参考\n\n**何时读**：首次安装/切换 embedding 模型、维度重建、配置 opencode.json 外挂提示词、排查\"AI不自动检索\"问题时。日常无此场景不读。\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维，~400MB）——中文记忆检索质量远超英文模型 MiniLM。引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx/model.onnx`，缺失即报错退出，**无回退**（MiniLM 384 维与 bge 768 维数据不兼容，曾致维度冲突）。\n\n**bge-base-zh-v1.5 安装**（模型放运行时目录，技能更新不覆盖）：\n\n```bash\nmkdir -p ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx\n# 自 hf-mirror 下载（或浏览器下载后放入）\ncurl -sL -o ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx/model.onnx \\\n  https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/onnx/model.onnx\ncd ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5\nfor f in config.json tokenizer.json special_tokens_map.json tokenizer_config.json vocab.txt; do\n  curl -sL -o \"$f\" \"https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/$f\"\ndone\n```\n\n> ⚠️ **注意**：运行时模型与数据统一存 `~/.local/share/opencode/忆时/`（LOCAL_BASE），**不写入 `~/.cache/chroma/`**，亦不存技能目录（技能更新会覆盖）。\n\n## 必须配置外挂提示词\n\n本技能依赖 OpenCode 的 `instructions` 配置才能完整生效。\n未配置时，AI 不会自动检索记忆或存储记忆。\n\n**配置步骤：**\n\n1. 编辑全局配置文件 `~/.config/opencode/opencode.json`\n2. 添加 `instructions` 字段，指向技能目录下的提示词文件：\n\n```json\n{\n  \"instructions\": [\n    \"~/.config/opencode/skills/忆时/yishi-instructions.md\"\n  ]\n}\n```\n\n3. 重启 OpenCode 使配置生效\n\n**配置后 AI 将自动：**\n- 每次对话前检索记忆系统\n- 用户说\"记住\"时自动存储记忆\n- 话题关联时主动涌现历史记忆\n- 对话结束时自动归档重点\n\n**未配置则：**\n- 技能仍可手动调用命令\n- 但不会自动检索/存储记忆\n- 不会主动联想和闪回\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n\nArchive v2.3.2: 26 files, 79713 bytes\n\nFiles: modules/01-initialize.md (1563b), modules/02-passive-mode.md (3102b), modules/03-active-mode.md (2047b), modules/04-time-capsule.md (1747b), modules/05-retrieval.md (3179b), modules/06-import-export.md (3234b), modules/07-skill-memory.md (3674b), modules/08-setup.md (2330b), modules/09-archiving.md (4767b), modules/10-consolidation.md (2727b), modules/11-quick-commands.md (6414b), modules/12-viz-profile.md (5345b), modules/13-retrieval-store.md (8106b), modules/14-behavior.md (3365b), README.md (2789b), references/chroma-api.md (1353b), scripts/__init__.py (0b), scripts/memory_core.py (56679b), scripts/viz/profile_template.html (7640b), scripts/viz/profile.py (8206b), scripts/viz/template.html (22849b), scripts/viz/viz.py (7743b), skill-card.md (2589b), SKILL.md (9612b), yishi-instructions.md (16374b), _meta.json (126b)\n\nFile v2.3.2:SKILL.md\n\n---\nname: 忆时\ndescription: \"🎋 记忆胶囊系统 - 模拟人类记忆检索 | 自动加载，主动联想记忆\"\npriority: 900\nmetadata:\n  slug: memocap\n  version: \"2.3.2\"\n  trigger: \"忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、recall、remember、/忆时\"\n  copaw:\n    emoji: \"🎋\"\n    requires: {}\n    auto_load: true\n---\n\n# 忆时 - 记忆胶囊系统\n\n> 模拟人类的记忆机制，让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆系统。\n> **渐进式披露**：本文件为入口总纲。细节皆在 modules/——按「按需读取」表，遇场景才读对应模块，勿一次全读。\n\n## 触发条件\n\n- **自动加载**：每次对话自动激活，AI 主动联想和检索记忆\n- **关键字**：忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、我说过、我记得\n- **命令**：用户输入以 `/忆时` 开头时，自动触发快捷操作模式\n- **场景**：用户询问过去的事情、要求回忆、需要上下文关联、触发闪回\n- **主动**：定时模式运行时主动扫描到期胶囊和记忆关联\n\n## 核心概念\n\n| 概念 | 说明 |\n|------|------|\n| **类人检索** | 语义40% + 近因20% + 情绪15% + 频率25%，不像数据库那样精确 |\n| **混合检索** | BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符检索更准；embedding 失败自动降级关键词 |\n| **去重合并** | 存储时相似>90% 自动合并（内容并入、频率+1），85%~90% 警告提示，--force 强存 |\n| **渐进式回忆** | 先抛最相关的1-2条，用户追问再深入，非一次性倒出 |\n| **遗忘曲线** | 记忆随时间指数衰减，低频率的记忆会变得\"模糊\" |\n| **情绪锚定** | 高情绪（情绪值 ≥0.7）记忆权重更高，不易遗忘 |\n| **记忆涌现** | 话题转换时发现隐藏关联，主动说出\"说到这个我突然想到…\" |\n| **场景分组** | 记忆可标 --scene 归组，事件记忆可标活动时间段（2025-05-01 ~ 05-10） |\n| **时间胶囊** | 封存某段记忆，设定解锁日期，到期后自动/手动解封翻阅 |\n\n## 记忆类型\n\n| 类型 | 说明 | 情绪权重倾向 |\n|------|------|-------------|\n| emotion | 情绪事件（开心、愤怒、悲伤） | |\n| decision | 用户做出的决策 | 🟠 |\n| task | 任务/待办 | 🟡 |\n| time | 时间敏感信息（截止日期） | 🔴 |\n| preference | 用户偏好/习惯 | 🟢 |\n| context | 上下文/背景信息 | 🟡 |\n| skill | 技能——用户教AI的工作流，Gene结构化存储 | 🟠 |\n\n## 按需读取（渐进式披露核心）\n\n**规则：未遇对应场景，不读模块。每模块读一次即可，勿重复加载。**\n\n| 场景 | 读模块 |\n|------|--------|\n| 对话启始、每言必检、主动存储、检索升级、决策前置 | modules/13-retrieval-store.md |\n| 用户描述工作流（教AI流程）、skill记忆检索命中 | modules/07-skill-memory.md |\n| 对话结束归档、仅输入 `/忆时` 会话整理、每满5轮定期提取 | modules/09-archiving.md |\n| 用户输入 `/忆时 ...`（命令构造/回复风格） | modules/11-quick-commands.md |\n| 可视化（\"看看记了啥\"）、人物画像 | modules/12-viz-profile.md |\n| 记忆自动梳理（上次梳理过期7日） | modules/10-consolidation.md |\n| 模型安装/切换、opencode.json 配置 | modules/08-setup.md |\n| 复杂任务规划、上下文压缩后自查、长文索引 | modules/14-behavior.md |\n| 首次初始化、Chroma 集合结构 | modules/01-initialize.md |\n| 定时主动模式（胶囊检查/遗忘归档） | modules/03-active-mode.md |\n| 时间胶囊管理 | modules/04-time-capsule.md |\n| 检索算法原理（综合得分公式） | modules/05-retrieval.md |\n| 导入导出、备份迁移 | modules/06-import-export.md |\n| 被动检索触发场景与渐进式回忆 | modules/02-passive-mode.md |\n\n## 核心命令\n\n```bash\nPY=/home/fslong/.config/opencode/skills/忆时/scripts/memory_core.py\nMEMO_DIR=~/.local/share/opencode/忆时/data    # 所有命令必设\n# 注意：以下命令使用 $PY 与 $MEMO_DIR 变量，须先执行上方两行定义；或直接写全路径 python3 ~/.config/opencode/skills/忆时/scripts/memory_core.py\n\n初始化:    python3 $PY init\n存储记忆:  python3 $PY store \"内容\" --type task --emotion 0.8 [--scene 场景] [--activity-start 2025-05-01] [--activity-end 2025-05-10] [--force]\n检索记忆:  python3 $PY recall \"查询\" --limit 5 --expand [--no-embed] [--max-total-chars 600]\n封胶囊:   python3 $PY capsule lock --unlock-at \"2026-12-31\"\n查看胶囊:  python3 $PY capsule list\n导入:      python3 $PY import-file file.md --format markdown\n导出:      python3 $PY export --format timeline --output output.md\n可视化:    python3 ~/.config/opencode/skills/忆时/scripts/viz/viz.py\n统计:      python3 $PY stats\n遗忘:      python3 $PY forget --before \"2025-01-01\" --auto\n恢复:      python3 $PY recover\n查看备份:  cat memories_backup.jsonl | python3 -m json.tool --lines\n```\n\n## 快捷操作一览\n\n`/忆时` 前缀，免记命令行参数。命令构造、解析规则、回复风格见 modules/11-quick-commands.md。\n\n| 输入 | 动作 |\n|------|------|\n| `/忆时`（无后续） | 会话整理 |\n| `/忆时 <内容>` | 默认 recall |\n| `/忆时 记住/记忆 <内容> [--type T] [--emotion E]` | store |\n| `/忆时 查找/搜索/找 <关键词> [--limit N]` | recall |\n| `/忆时 忘记 <关键词>` | forget |\n| `/忆时 统计` | stats |\n| `/忆时 导出` | export |\n| `/忆时 可视化 [--out 路径]` | 记忆全景 HTML |\n| `/忆时 画像` | 人物画像 |\n| `/忆时 恢复` | recover |\n| `/忆时 胶囊 封存/列表/开封` | capsule lock/list/unlock |\n| `/忆时 梳理` | 记忆梳理 |\n\n**类型**：task / decision / preference / emotion / time / context / skill\n**情绪**：0.0~1.0 数值（默认 0.5），数值越大越重要/强烈；旧词 high=0.8 / medium=0.5 / low=0.2 仍兼容\n\n## 工程实践——关键场景\n\n| 场景 | 指令 |\n|------|------|\n| 完成任务后 | 按审计三问自查：结果问→过程问→改进问，全过方可言\"完\" |\n| 收到复杂需求 | 先存方案到忆时，再规划步骤，逐条标记完成 |\n| 发现用户偏好 | 以 `--type preference` 即时存储 |\n| 做出关键决策 | 以 `--type decision --emotion 0.9` 存储，附决策理由 |\n| 用户交付长文 | 提取metadata，按索引思维存储（见 modules/14） |\n| 对话转折话题 | 先 `recall` 新话题的关键词，再谈是否有关联 |\n| 疑似走偏 | 暂停，`recall` 原始目标比对进度 |\n| 决策或提问之前 | 先 `recall` 查询记忆，确认有无既有决策、偏好、约定可循 |\n| 对话开始 | 检索当前项目/文件夹相关记忆（见 modules/13） |\n| 对话结束 | 按归档流程，先检索旧忆，再择新增或更新（见 modules/09） |\n| 记忆自动梳理 | 对话启始先召回上次梳理时间告知用户，过期7日则触发沉淀（见 modules/10） |\n| 完成任务（todo完成/修改变更/输出结果） | 停顿自问\"有无值得记忆？\"，有则检索旧忆后store或update |\n| 用户输入 `/忆时` 开头 | 直入快捷操作模式，解析动作与参数，跳过常规涌现检索 |\n\n## 项目结构\n\n```\n忆时/\n├── SKILL.md                    # 技能定义 (入口总纲/识别层)\n├── yishi-instructions.md       # 外挂提示词 (必须配置到 opencode.json)\n├── modules/                    # 详细流程模块 (执行层，按需读取)\n│   ├── 01-initialize.md        # Chroma 初始化\n│   ├── 02-passive-mode.md      # 被动模式流程\n│   ├── 03-active-mode.md       # 主动模式流程\n│   ├── 04-time-capsule.md      # 时间胶囊操作\n│   ├── 05-retrieval.md         # 类人检索策略\n│   ├── 06-import-export.md     # 导入导出操作\n│   ├── 07-skill-memory.md      # 技能即记忆 (Gene)\n│   ├── 08-setup.md             # 模型安装与配置\n│   ├── 09-archiving.md         # 对话归档与会话整理\n│   ├── 10-consolidation.md     # 记忆自动梳理\n│   ├── 11-quick-commands.md    # 快捷操作详解\n│   ├── 12-viz-profile.md       # 可视化与人物画像\n│   ├── 13-retrieval-store.md   # 记忆操作流程 (检索/存储细则)\n│   └── 14-behavior.md          # 认知自知与上下文工程\n├── models/                     # （预留，仅 bge 模型不落此——运行时模型在 LOCAL_BASE）\n├── scripts/\n│   ├── memory_core.py          # 核心引擎 CLI\n│   └── viz/                    # 记忆可视化\n│       ├── viz.py              # 记忆全景生成器（导出→聚类→注入模板→打开）\n│       ├── template.html       # 记忆全景模板（孟菲斯风，/*__DATA__*/ 占位）\n│       ├── profile.py          # 人物画像助手（素材报告 + 正文注入）\n│       └── profile_template.html # 画像模板（<!--DATA-->/<!--CONTENT--> 占位）\n└── references/\n    └── chroma-api.md           # ChromaDB API 参考\n```\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4、jieba（BM25 关键词检索）\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n- 模型: bge-base-zh-v1.5（768维，唯一模型，无回退）。安装见 modules/08-setup.md\n- 备份: `~/.local/share/opencode/忆时/memories_backup.jsonl`（可用 MEMO_BAK 覆盖，多实例/测试隔离）\n\nFile v2.3.2:README.md\n\n# 忆时 - 记忆胶囊系统\n\n🎋 模拟人类记忆检索机制的 AI 记忆系统。OpenCode 技能。\n\n## 下载\n\n```bash\n# 方式一：git clone\ngit clone git@github.com:fslong520/aiSkill.git --depth 1\n# 然后将 忆时/ 目录复制到 skills/ 下\n\n# 方式二：直接复制本目录到 OpenCode skills 目录\ncp -r 忆时 ~/.config/opencode/skills/\n\n# 方式三：仅获取核心文件（模型首次使用自动下载）\ncp -r 忆时/{scripts,modules,SKILL.md,yishi-instructions.md} ~/.config/opencode/skills/忆时/\n```\n\n## 功能\n\n- **类人检索**: 语义40% + 近因20% + 情绪15% + 频率25%\n- **混合检索**: BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符更准；embedding 失败自动降级关键词\n- **去重合并**: 存储时相似>90% 自动合并，85%~90% 警告提示，--force 强存\n- **场景分组**: --scene 归组 + 活动时间段（--activity-start/--activity-end）\n- **渐进式回忆**: 先抛最相关的1-2条，用户追问再深入\n- **情绪锚定**: 高情绪记忆权重更高，不易遗忘\n- **记忆涌现**: 话题转换时发现隐藏关联\n- **时间胶囊**: 封存记忆，设定解锁日期\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\npip install chromadb\n\n# 2. 初始化\npython3 scripts/memory_core.py init\n\n# 3. 存储记忆\npython3 scripts/memory_core.py store \"记忆内容\" --type context --emotion medium --keywords \"标签\" --scene \"场景名\"\n\n# 4. 检索记忆\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5 --expand --no-embed\n```\n\n## 模型安装\n\n使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维）——中文记忆检索质量远超英文模型 MiniLM。引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/`，缺失即报错退出，**无回退**（MiniLM 384 维与 bge 768 维数据不兼容，曾致维度冲突）。\n\nbge 安装：自 hf-mirror 下载 Xenova/bge-base-zh-v1.5 之 `onnx/model.onnx` 与 tokenizer 文件至上述目录（详见 modules/08-setup.md）。\n\n## 目录结构\n\n```\n忆时/\n├── SKILL.md              # 技能定义\n├── yishi-instructions.md # 外挂提示词\n├── modules/              # 流程模块\n├── scripts/\n│   └── memory_core.py    # 核心引擎\n├── models/                 # （已弃用——运行时 bge 模型在 LOCAL_BASE）\n├── data/                 # ChromaDB 数据 (运行时生成)\n│   └── .gitkeep\n├── references/           # API 参考\n├── venv/                 # Python 虚拟环境\n├── .gitignore\n├── .gitattributes\n└── README.md\n```\n\n## 配置\n\n编辑 `~/.config/opencode/opencode.json`:\n\n```json\n{\n  \"instructions\": [\n    \"~/.config/opencode/skills/忆时/yishi-instructions.md\"\n  ]\n}\n```\n\nFile v2.3.2:_meta.json\n\n{\n  \"ownerId\": \"kn71rk0chjcdy7ffgfc08hh9gd83ehq8\",\n  \"slug\": \"memocap\",\n  \"version\": \"2.3.2\",\n  \"publishedAt\": 1786678948937\n}\n\nFile v2.3.2:references/chroma-api.md\n\n# ChromaDB API 参考 (忆时用)\n\n## 版本\n\n- chromadb 1.5.4\n- Python 3.13+\n\n## 客户端初始化\n\n```python\nimport chromadb\nclient = chromadb.PersistentClient(path=\"/path/to/data\")\n```\n\n## 集合操作\n\n```python\n# 创建或获取集合\ncollection = client.get_or_create_collection(\n    name=\"memories\",\n    metadata={\"hnsw:space\": \"cosine\"}\n)\n\n# 添加文档\ncollection.add(\n    documents=[\"记忆内容\"],\n    metadatas=[{\"type\": \"context\", \"emotion\": \"medium\"}],\n    ids=[\"uuid\"]\n)\n\n# 查询 (语义搜索)\nresults = collection.query(\n    query_texts=[\"查询关键词\"],\n    n_results=10\n)\n\n# 获取特定文档\ndoc = collection.get(ids=[\"uuid\"])\n\n# 更新\ncollection.update(\n    ids=[\"uuid\"],\n    documents=[\"新内容\"],\n    metadatas=[{\"type\": \"new_type\"}]\n)\n\n# 删除\ncollection.delete(ids=[\"uuid\"])\n\n# 统计数量\ncount = collection.count()\n```\n\n## 查询结果结构\n\n```python\n{\n    \"ids\": [[\"id1\", \"id2\", ...]],\n    \"documents\": [[\"doc1\", \"doc2\", ...]],\n    \"metadatas\": [[metadata1, metadata2, ...]],\n    \"distances\": [[0.1, 0.2, ...]],  # cosine distance, 越小越相似\n}\n```\n\n语义相似度 = 1.0 - distance\n\n## 注意事项\n\n- ChromaDB 自动向量化文本 (text-embedding)\n- cosine 距离范围: 0 (完全相同) 到 2 (完全相反)\n- metadatas 中的值必须是字符串或数字\n- PersistentClient 自动持久化到磁盘\n\nFile v2.3.2:modules/01-initialize.md\n\n# 模块 01 - 初始化与 Chroma 管理\n\n## 目标\n\n初始化 ChromaDB 向量数据库，建立必要的集合。\n\n## 执行步骤\n\n1. 检查 Python 3.13 是否可用\n2. 检查 chromadb 是否已安装\n3. 运行初始化命令:\n\n```bash\npython3 /home/fslong/.config/opencode/skills/忆时/scripts/memory_core.py init\n```\n\n4. 确认输出包含\"忆时记忆系统初始化完成\"\n\n## 集合结构\n\nChromaDB 内会创建以下集合:\n\n| 集合名 | 用途 | 距离度量 |\n|--------|------|----------|\n| memories | 长期记忆向量存储 | cosine |\n| relationships | 记忆间关联关系 | cosine |\n| meta | 系统状态元数据 | cosine |\n\n## 记忆元数据结构\n\n每条记忆包含以下元数据:\n\n```json\n{\n  \"type\": \"context\",\n  \"emotion\": \"medium\",\n  \"emotion_weight\": 0.5,\n  \"created_at\": \"2025-01-15T10:30:00\",\n  \"created_date\": \"2025-01-15\",\n  \"updated_at\": \"2025-01-15T10:30:00\",\n  \"keywords\": \"Python,学习,装饰器\",\n  \"source\": \"manual\",\n  \"source_session\": \"\",\n  \"frequency\": \"1\",\n  \"recall_count\": \"0\",\n  \"is_capsule\": \"false\",\n  \"capsule_unlock_at\": \"\"\n}\n```\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维），**无回退**。\n引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/`，缺失即报错。\n安装命令——详见 modules/08-setup.md。\n\n> ⚠️ 模型不会写入 `~/.cache/chroma/`，清缓存不会被删除。\n\n## 环境变量\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| MEMO_DIR | ~/.local/share/opencode/忆时/data | ChromaDB 存储路径 |\n\nFile v2.3.2:modules/02-passive-mode.md\n\n# 模块 02 - 被动模式（对话中触发检索）\n\n## 触发场景\n\n当用户在对话中出现以下行为时触发记忆检索:\n\n- **显式询问**: \"我说过…\"、\"我记得之前…\"、\"你记得吗…\"\n- **话题回溯**: 回到之前的话题、延续之前的讨论\n- **关键词命中**: 对话中出现已存储记忆中的关键字\n- **情绪波动**: 用户表达强烈情绪，触发情绪锚定检索\n- **上下文缺失**: 回答需要之前的背景信息\n\n## 执行流程\n\n### 1. 判断是否需要检索\n\n分析当前对话内容，构建检索查询:\n\n- 如果用户直接要求回忆: 使用用户原话作为查询\n- 如果检测到关联话题: **提取2-3个核心词**作为查询\n- 如果情绪发生变化: 以当前情绪关键词 + 情绪类型检索\n\n### 2. 执行检索\n\n```bash\n# 基础检索 - 返回最相关的N条\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5\n\n# 带联想扩散的深度检索\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5 --expand\n\n# 按类型过滤\npython3 scripts/memory_core.py recall \"偏好\" --type-filter preference\n\n# 只检索高情绪记忆\npython3 scripts/memory_core.py recall \"情感\" --min-weight 0.7\n```\n\n### 3. 渐进式回忆策略\n\n**不要一次性倒出所有结果！**\n\n1. **第一轮**: 只返回得分最高的 1-2 条\n   - 自然地在回复中提及: \"你之前提到过…\"\n2. **用户追问**: 返回接下来的 2-3 条\n   - \"还有这些相关的…\"\n3. **持续追问**: 再返回剩余结果\n\n### 4. 遗忘曲线行为\n\n当记忆的 recall_count 很低且创建时间很久远时:\n\n- 返回时表达**不确定性**: \"我模糊记得你之前好像提到过…\"\n- 提供**概要而非精确内容**: 给出关键词而非完整引用\n- 如果分数低于阈值: \"这方面的记忆有些模糊了…\"\n\n### 5. 记忆涌现处理（多轮检索）\n\n涌现乃主动发现之隐藏关联，非被动等结果。须行多轮检索：\n\n**第一轮：语义检索**\n```bash\npython3 scripts/memory_core.py recall \"用户话题\" --limit 3 --expand\n```\n\n**第二轮：涌现判定**\n观第一轮结果：\n- 有 `[关联]` 标记 → 已有涌现，直接表达\n- 结果 ≥ 2 条 → 取 top-2 关键字/内容构建复合查询，再做第二轮\n```bash\npython3 scripts/memory_core.py recall \"原话题 新话题\" --limit 2\n```\n- 若第二轮结果与第一轮不重叠 → 此为涌现之记忆\n\n**第三轮：情绪锚定**\n用户情绪显著时（愤怒/兴奋/沮丧），以情绪词 + 话题词再检：\n```bash\npython3 scripts/memory_core.py recall \"情绪词\" --type-filter emotion --min-weight 0.7 --limit 2\n```\n\n**主动说出**（发现涌现时），而不是等用户问:\n\n> \"说到这个我突然想到一件事…\"\n> \"这让我联想到你之前说过的另一个相关的事…\"\n> \"对了，你还记得那次…\"\n\n涌现条件:\n- 关联分数 > 0.6\n- 与当前话题有语义关联\n- 不是已在此对话中提及过的内容\n\n> 强涌现强制流程（三轮检索）、检索升级穷尽模式（L0-L4）、主动存储细则——见 modules/13-retrieval-store.md。\n\nFile v2.3.2:modules/03-active-mode.md\n\n# 模块 03 - 主动模式（定时触发回忆整理）\n\n## 触发方式\n\n结合定时任务/cron周期性执行:\n\n```bash\n# 主动回忆整理入口脚本\npython3 scripts/memory_core.py capsule check-expired && \\\npython3 scripts/memory_core.py forget --low-freq 1 --auto && \\\npython3 scripts/memory_core.py stats\n```\n\n## 主动执行流程\n\n### 1. 检查到期时间胶囊\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n- 如果存在到期胶囊 → **生成回忆回顾**\n- 解封胶囊内容，向用户推送回顾\n- 格式示例:\n\n> 🎋 记忆胶囊解封提醒\n> 你于 2025-03-15 封存了一个胶囊，今天是解锁日！\n>\n> 封存内容: \"今天和AI讨论了一个关于…\"\n> 封存时的心情: 🟠 兴奋\n>\n> 打开看看吗？\n\n### 2. 自动发现记忆关联\n\n分析现有记忆，寻找隐藏关联:\n\n- 检索每条记忆，查看 `recall --expand` 的结果\n- 如果发现新的强关联（关联分数 > 0.7）\n- 主动向用户报告:\n\n> \"我注意到你关于 A 和 B 的记忆似乎存在一些联系…\"\n\n### 3. 遗忘曲线处理\n\n低优先级记忆自动归档:\n\n```bash\npython3 scripts/memory_core.py forget --before \"2025-01-01\" --low-freq 1 --auto\n```\n\n- 将低频、低 recall 的旧记忆标记为 archived\n- 不删除，只是降低检索优先级\n- 保留高情绪记忆不归档\n\n### 4. 记忆整理报告\n\n生成统计摘要:\n\n```bash\npython3 scripts/memory_core.py stats\n```\n\n向用户报告:\n- 总记忆数\n- 本周新增记忆\n- 到期解除的胶囊数\n- 归档的记忆数\n\n## 建议定时频率\n\n| 任务 | 频率 | 说明 |\n|------|------|------|\n| 胶囊检查 | 每天一次 | 检查到期的时间胶囊 |\n| 遗忘归档 | 每周一次 | 归档低频旧记忆 |\n| 关联发现 | 每次对话后 | 对话结束时自动发现新关联 |\n| 统计报告 | 每周一次 | 生成记忆整理报告 |\n\n## 对话结束语自动触发\n\n每当用户结束一次较长的对话，可以主动:\n\n1. 提取对话中的重点记忆\n2. 自动存储到 Chroma\n3. 检查是否有胶囊到期\n\nFile v2.3.2:modules/04-time-capsule.md\n\n# 模块 04 - 时间胶囊管理\n\n## 概念\n\n时间胶囊允许将当前时刻的记忆封存，设定一个未来的解锁日期。\n到期后可以自动或手动解封，重温当时的记忆和情绪。\n\n## 封存胶囊\n\n```bash\n# 封存一个胶囊，30天后解锁（默认）\npython3 scripts/memory_core.py capsule lock --summary \"今日感悟\"\n\n# 封存并指定解锁日期\npython3 scripts/memory_core.py capsule lock --unlock-at \"2026-12-31\" --summary \"年度回顾\" --content \"今天我和AI讨论了关于未来的思考…\" --keywords \"未来,思考,人生\"\n```\n\n**关键字段**:\n\n| 参数 | 必填 | 说明 |\n|------|------|------|\n| --summary | 否 | 摘要，用于列表预览 |\n| --content | 否 | 胶囊的详细记忆内容 |\n| --keywords | 否 | 关键字 |\n| --unlock-at | 否 | 解锁日期 YYYY-MM-DD，默认30天后 |\n\n## 查看胶囊\n\n```bash\npython3 scripts/memory_core.py capsule list\n```\n\n输出示例:\n```\n时间胶囊 (3 个)\nID: xxx-xxx\n创建: 2025-06-15 | 解锁: 2025-12-31 | 状态: 剩余 205 天\n内容: 时间胶囊 - 创建于 2025-06-15, 解锁日期: 2025-12-31\n```\n\n## 检查到期\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n主动模式下每次触发时应运行此命令。\n\n## 解封胶囊\n\n```bash\npython3 scripts/memory_core.py capsule unseal --capsule-id <ID>\n```\n\n- 如果胶囊已到期 → 直接解封\n- 如果尚未到期 → 警告用户并需要确认\n- 解封后该记忆变为普通记忆，可以正常检索\n\n## 解封回忆重现\n\n解封时，生成回忆回顾:\n\n> 🎋 时光倒流! 你于 X 天前封存了这段记忆:\n>\n> [capsule content]\n>\n> 封存时的心情: 🟠 兴奋\n> 关键字: …\n>\n> 这段记忆已被解封，现在可以随时检索了。\n\nFile v2.3.2:modules/05-retrieval.md\n\n# 模块 05 - 类人检索策略\n\n## 核心算法\n\n人类记忆不是数据库查询，而是多维度加权的结果:\n\n### 综合得分公式\n\n```\n最终得分 = 0.40 × 语义相似度\n         + 0.15 × 情绪权重\n         + 0.20 × 近因效应\n         + 0.25 × (0.6 + 频率强化)\n```\n\n### 各分量计算\n\n| 分量 | 权重 | 计算方式 | 说明 |\n|------|------|----------|------|\n| **语义相似度** | 40% | Chroma cosine 向量搜索 | AI 理解的意义匹配度 |\n| **情绪权重** | 15% | 直接采用情绪数值（0.0~1.0），🔴≥0.9 🟠≥0.7 🟡≥0.4 🟢<0.4 | 情绪值越强，越容易忆起 |\n| **近因效应** | 20% | exp(-ln(2) × 天数 / 30) | 半衰期30天，30天后回忆概率减半 |\n| **频率强化** | 25% | 0.6 + log₂(f+1)×0.1 + log₂(r+1)×0.05 | f=出现频次, r=被回忆次数 |\n\n## 检索模式\n\n### 1. 基础语义检索\n\n```bash\npython3 scripts/memory_core.py recall \"Python\"\n```\n\n### 2. 联想扩散 (关键!)\n\n```bash\npython3 scripts/memory_core.py recall \"Python\" --expand\n```\n\n执行流程（两阶段扩散）:\n\n**阶段一：关系链扩散**\n1. 先做语义检索，获取 top-10 结果\n2. 对 top-3 结果，通过 `relationships` 集合查直接关联关系（store 时自动建链）\n3. 关系链上的新记忆以较低权重加入结果集\n\n**阶段二：语义二次检索**\n4. 取 top-2 结果之内容/关键字，以此为新查询再做语义检索\n5. 发现与原始结果不重叠者，即为\"涌现\"\n6. 最终统一按综合得分排序\n7. 所有扩散结果标记为 `[关联]`\n\n> **实现机制**：每条记忆在 `store` 时自动搜索语义相似(p>0.50)的已有记忆，\n> 写入 `relationships` 集合并交叉融合关键字，使后续检索覆盖更广。\n\n### 3. 情绪锚定检索\n\n只检索高情绪记忆 (类似\"闪回\"):\n\n```bash\npython3 scripts/memory_core.py recall \"关键词\" --min-weight 0.7\n```\n\n### 4. 渐进式回忆\n\n在实际对话中，**不要一次返回所有结果**:\n\n```\n用户: 我之前跟你讨论过Python的事吧？\n\nAI (第一轮):\n  → 检索 recall \"Python讨论\" --limit 3\n  → 返回最高分的 1 条\n  → \"对！我记得你之前提到过[记忆内容]...\"\n\n用户: 还有呢？\n\nAI (第二轮):\n  → 返回接下来的 2 条\n  → \"还有一点，你还说过...\"\n\n用户: 嗯嗯继续...\n\nAI (第三轮):\n  → recall \"Python讨论\" --expand\n  → 联想扩散，返回关联记忆\n  → \"啊对了！说到Python，我突然想到你还提过...\"\n```\n\n## 遗忘行为模拟\n\n当记忆的:\n- **近因分 < 0.2** (超过3个月未检索): 返回时添加不确定性\n- **recall_count = 0** 且创建时间很久远: \"我隐约记得……\"\n- **综合分 < 0.5**: 不提为一条确定的记忆\n\n示例:\n\n> \"我不太确定，但隐约记得你好像说过……\"\n> \"我模糊地记得你很久前提到过一个相关的……\"\n\n## 检索建议\n\n| 场景 | 参数 |\n|------|------|\n| 用户提到模糊概念 | `recall \"概念\" --limit 3` |\n| 用户追问详情 | `recall \"概念\" --limit 5 --expand` |\n| 需要精确回忆 | `recall \"精确词\" --min-weight 0.6` |\n| 话题转换时主动闪回 | `recall \"新话题\" --limit 2 --expand` |\n\nFile v2.3.2:modules/06-import-export.md\n\n# 模块 06 - 导入导出管理\n\n## 导入功能\n\n将外部记忆文件导入到 ChromaDB 向量化存储中。\n\n### 支持的格式\n\n| 格式 | 说明 | 解析方式 |\n|------|------|----------|\n| Markdown (.md) | 按标题分段解析 | 标题→日期, 引用块→情绪/关键字 |\n| 纯文本 (.txt) | 按空行分段 | 首行→日期(如 YYYY-MM-DD) |\n| JSON (.json) | 结构化数据 | 按字段映射元数据 |\n\n### 导入命令\n\n```bash\n# 从 Markdown 导入\npython3 scripts/memory_core.py import-file memories.md --format markdown\n\n# 从纯文本导入\npython3 scripts/memory_core.py import-file notes.txt --format text\n\n# 从 JSON 导入 (结构化,保留 ID 和元数据)\npython3 scripts/memory_core.py import-file memories.json --format json\n```\n\n### Markdown 格式示例\n\n```markdown\n## 2025-03-15\n> 情绪: 0.9\n\n今天和AI讨论了一个关于未来的想法，感觉很兴奋。\n我们决定尝试一个新的架构方案。\n```\n\n导入后自动解析:\n- 日期: 2025-03-15\n- 情绪: 0.9（数值；旧词 high/medium/low 亦兼容）\n- 内容: \"## 2025-03-15\\n今天和AI讨论……\"\n\n### JSON 格式示例\n\n```json\n{\n  \"memories\": [\n    {\n      \"id\": \"optional-uuid\",\n      \"content\": \"记忆内容\",\n      \"type\": \"emotion\",\n      \"emotion\": 0.9,\n      \"keywords\": \"关键词\",\n      \"created_at\": \"2025-03-15T10:00:00\",\n      \"created_date\": \"2025-03-15\"\n    }\n  ]\n}\n```\n\n## 导出功能\n\n### 支持的格式\n\n| 格式 | 说明 | 用途 |\n|------|------|------|\n| markdown | 标准排版 | 阅读、归档、打印 |\n| timeline | 按时间线组织 | 年度回顾、记忆叙事 |\n| json | 结构化向量数据 | 备份、迁移、跨系统 |\n\n### 导出命令\n\n```bash\n# 导出为可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n\n# 导出为时间线回忆录 (按日期分组)\npython3 scripts/memory_core.py export --format timeline --output \"2026回顾.md\"\n\n# 导出为 JSON (可重新导入)\npython3 scripts/memory_core.py export --format json --output memories.json\n```\n\n### 时间线格式示例\n\n导出的 Markdown 按日期分节:\n\n```markdown\n# 忆时 ・ 记忆时间线\n导出日期: 2026-05-01\n总记忆数: 42\n\n## 2025-03-15\n\n### 🟠 [EMOTION]\n- 关键字: 未来, 想法, 兴奋\n- 情绪: 0.90\n- 今天和AI讨论了一个关于未来的想法，感觉很兴奋\n\n## 2025-03-20\n\n### 🟡 [DECISION]\n- 关键字: 架构, Python\n- 情绪: 0.50\n- 决定采用新的架构方案\n```\n\n## 完整备份/迁移流程\n\n### 备份\n\n```bash\n# 1. 导出 JSON (包含所有向量数据)\npython3 scripts/memory_core.py export --format json --output backup.json\n\n# 2. 导出时间线 (人类可读)\npython3 scripts/memory_core.py export --format timeline --output memories-timeline.md\n\n# 3. 导出可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n```\n\n### 迁移到新设备\n\n```bash\n# 新设备上初始化\npython3 scripts/memory_core.py init\n\n# 导入\npython3 scripts/memory_core.py import-file backup.json --format json\n```\n\n## 注意事项\n\n- 导入时如果 ID 冲突会自动生成新 UUID\n- 导出 JSON 可用于完整迁移，导出 Markdown 适合阅读\n- 时间线导出时胶囊记忆会标记 🔒 锁图标\n\nFile v2.3.2:modules/07-skill-memory.md\n\n# 模块 07 - 技能即记忆（Gene 结构）\n\n**何时读**：用户描述一工作流（教AI流程）、recall 命中 `type=skill` 记忆、需修正/遗忘技能时。日常无此场景不读。\n\n## 概念\n\n技能非文件，乃记忆也。用户教AI一工作流，即存为 `type=skill` 之记忆。忆时检索自然触发，无需加载SKILL.md。\n\n### Gene 结构（技能诊所标准）\n\n每条 skill 记忆含以下 metadata 字段：\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| skill_name | 是 | 技能名称，如\"格语\" |\n| skill_summary | 是 | 一句话概括，如\"故事→宫格图\" |\n| skill_strategy | 是 | 步骤摘要，如\"分析→分镜→渲染\" |\n| skill_triggers | 是 | 触发词，逗号分隔，如\"漫画,格语\" |\n| skill_input | 否 | 输入规格 |\n| skill_output | 否 | 输出规格 |\n| skill_avoid | 否 | 禁忌事项，分号分隔 |\n| skill_version | 否 | 版本号，默认 1.0.0 |\n\n**content 字段**：Strategy（步骤）+ Language（规约）+ Example（示例）三部分。用表格/列表，无废话。\n\n**keywords**：必含 `skill` 标签 + trigger: 前缀（如 `trigger:画漫画`）。\n\n### 教技能（用户教AI工作流）\n\n用户描述一有输入、有步骤、有输出之流程时，AI 须主动问\"可要存为技能？\"。此不等用户言\"记住\"。\n\n**收集 Gene 结构（Human-in-the-Loop）：**\n```\n缺什么问什么，不假设：\n- 技能名：？→ 用户答\"格语\"\n- 输入：？→ \"故事主题\"\n- 输出：？→ \"宫格图\"\n- 触发词：？→ \"说'画漫画'就触发\"\n- 禁忌：？→ \"不加原文没有的角色\"\n→ 填入 metadata 对应字段\n```\n\n**存储命令：**\n```bash\nMEMO_DIR=~/.local/share/opencode/忆时/data python3 $YISHI store \"Strategy/Language/Example\" \\\n  --type skill \\\n  --emotion 0.8 \\\n  --keywords \"skill,格语,trigger:漫画,trigger:画漫画\" \\\n  --skill-name \"格语\" \\\n  --skill-summary \"故事主题→宫格手绘故事图\" \\\n  --skill-strategy \"分析主题→定宫格→分镜→选风格→渲染\" \\\n  --skill-avoid \"不添加原文没有的角色;不修改核心故事\" \\\n  --skill-triggers \"漫画,格语,画漫画\" \\\n  --skill-input \"故事主题或梗概\" \\\n  --skill-output \"宫格手绘故事图\" \\\n  --skill-version \"1.0.0\"\n```\n\n**回复风格：** \"已录。「{技能名}」技能，触发词：{触发词}。\"\n\n### 用技能（自动触发）\n\nstorage 时 `keywords` 含 `trigger:xxx` 前缀。用户日常对话中，言必检之 recall 命中 trigger 关键词：\n\n```\n用户：画个猫和老鼠的漫画\n\n言必检 → recall \"漫画\" --expand --limit 5\n→ 命中 type=skill，keywords 含 trigger:漫画\n→ 读 content 知步骤，读 skill_avoid 知禁区\n→ 执行完毕后自动 update frequency+1\n```\n\n**关键：** 用户完全不知背后是 skill 记忆。语义检索自然触发，无需手动\"加载技能\"。\n\n### 技能进化\n\n```\n用户：不对，应该用水彩风\n\n→ AI 识别为技能修正\n→ update --id xxx --content \"新步骤...\"\n→ update --id xxx --keywords \"skill,格语,水彩,trigger:漫画,trigger:画漫画\"\n→ emotion_weight += 0.1（刚迭代的技能更活跃）\n\n回复：已修正。下次\"画漫画\"默认水彩风。\n```\n\n### 技能遗忘\n\n久不用者近因分（recency）衰减，自然降权，不主动浮现。数据不删，精准搜索 `type=skill` 仍可找回。\n\n### 频率即熟练度\n\nskill 记忆之 frequency 随使用自增，recall 排名上升——常用技能如肌肉记忆。此即\"越用越强\"。\n\n### 与现有技能目录之关系\n\n忆时即技能系统。61 个 SKILL.md 目录可逐条转为 `type=skill` 记忆，存入后不再依赖文件。\n\nFile v2.3.2:modules/08-setup.md\n\n# 模块 08 - 模型安装、配置与参考\n\n**何时读**：首次安装/切换 embedding 模型、维度重建、配置 opencode.json 外挂提示词、排查\"AI不自动检索\"问题时。日常无此场景不读。\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维，~400MB）——中文记忆检索质量远超英文模型 MiniLM。引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx/model.onnx`，缺失即报错退出，**无回退**（MiniLM 384 维与 bge 768 维数据不兼容，曾致维度冲突）。\n\n**bge-base-zh-v1.5 安装**（模型放运行时目录，技能更新不覆盖）：\n\n```bash\nmkdir -p ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx\n# 自 hf-mirror 下载（或浏览器下载后放入）\ncurl -sL -o ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx/model.onnx \\\n  https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/onnx/model.onnx\ncd ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5\nfor f in config.json tokenizer.json special_tokens_map.json tokenizer_config.json vocab.txt; do\n  curl -sL -o \"$f\" \"https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/$f\"\ndone\n```\n\n> ⚠️ **注意**：运行时模型与数据统一存 `~/.local/share/opencode/忆时/`（LOCAL_BASE），**不写入 `~/.cache/chroma/`**，亦不存技能目录（技能更新会覆盖）。\n\n## 必须配置外挂提示词\n\n本技能依赖 OpenCode 的 `instructions` 配置才能完整生效。\n未配置时，AI 不会自动检索记忆或存储记忆。\n\n**配置步骤：**\n\n1. 编辑全局配置文件 `~/.config/opencode/opencode.json`\n2. 添加 `instructions` 字段，指向技能目录下的提示词文件：\n\n```json\n{\n  \"instructions\": [\n    \"~/.config/opencode/skills/忆时/yishi-instructions.md\"\n  ]\n}\n```\n\n3. 重启 OpenCode 使配置生效\n\n**配置后 AI 将自动：**\n- 每次对话前检索记忆系统\n- 用户说\"记住\"时自动存储记忆\n- 话题关联时主动涌现历史记忆\n- 对话结束时自动归档重点\n\n**未配置则：**\n- 技能仍可手动调用命令\n- 但不会自动检索/存储记忆\n- 不会主动联想和闪回\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n\nArchive v2.3.1: 26 files, 79613 bytes\n\nFiles: modules/01-initialize.md (1563b), modules/02-passive-mode.md (3102b), modules/03-active-mode.md (2047b), modules/04-time-capsule.md (1747b), modules/05-retrieval.md (3179b), modules/06-import-export.md (3234b), modules/07-skill-memory.md (3674b), modules/08-setup.md (2330b), modules/09-archiving.md (4767b), modules/10-consolidation.md (2727b), modules/11-quick-commands.md (6414b), modules/12-viz-profile.md (5345b), modules/13-retrieval-store.md (8106b), modules/14-behavior.md (3365b), README.md (2789b), references/chroma-api.md (1353b), scripts/__init__.py (0b), scripts/memory_core.py (56397b), scripts/viz/profile_template.html (7640b), scripts/viz/profile.py (8206b), scripts/viz/template.html (22849b), scripts/viz/viz.py (7743b), skill-card.md (2628b), SKILL.md (9612b), yishi-instructions.md (16374b), _meta.json (126b)\n\nFile v2.3.1:SKILL.md\n\n---\nname: 忆时\ndescription: \"🎋 记忆胶囊系统 - 模拟人类记忆检索 | 自动加载，主动联想记忆\"\npriority: 900\nmetadata:\n  slug: memocap\n  version: \"2.3.1\"\n  trigger: \"忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、recall、remember、/忆时\"\n  copaw:\n    emoji: \"🎋\"\n    requires: {}\n    auto_load: true\n---\n\n# 忆时 - 记忆胶囊系统\n\n> 模拟人类的记忆机制，让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆系统。\n> **渐进式披露**：本文件为入口总纲。细节皆在 modules/——按「按需读取」表，遇场景才读对应模块，勿一次全读。\n\n## 触发条件\n\n- **自动加载**：每次对话自动激活，AI 主动联想和检索记忆\n- **关键字**：忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、我说过、我记得\n- **命令**：用户输入以 `/忆时` 开头时，自动触发快捷操作模式\n- **场景**：用户询问过去的事情、要求回忆、需要上下文关联、触发闪回\n- **主动**：定时模式运行时主动扫描到期胶囊和记忆关联\n\n## 核心概念\n\n| 概念 | 说明 |\n|------|------|\n| **类人检索** | 语义40% + 近因20% + 情绪15% + 频率25%，不像数据库那样精确 |\n| **混合检索** | BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符检索更准；embedding 失败自动降级关键词 |\n| **去重合并** | 存储时相似>90% 自动合并（内容并入、频率+1），85%~90% 警告提示，--force 强存 |\n| **渐进式回忆** | 先抛最相关的1-2条，用户追问再深入，非一次性倒出 |\n| **遗忘曲线** | 记忆随时间指数衰减，低频率的记忆会变得\"模糊\" |\n| **情绪锚定** | 高情绪（情绪值 ≥0.7）记忆权重更高，不易遗忘 |\n| **记忆涌现** | 话题转换时发现隐藏关联，主动说出\"说到这个我突然想到…\" |\n| **场景分组** | 记忆可标 --scene 归组，事件记忆可标活动时间段（2025-05-01 ~ 05-10） |\n| **时间胶囊** | 封存某段记忆，设定解锁日期，到期后自动/手动解封翻阅 |\n\n## 记忆类型\n\n| 类型 | 说明 | 情绪权重倾向 |\n|------|------|-------------|\n| emotion | 情绪事件（开心、愤怒、悲伤） | |\n| decision | 用户做出的决策 | 🟠 |\n| task | 任务/待办 | 🟡 |\n| time | 时间敏感信息（截止日期） | 🔴 |\n| preference | 用户偏好/习惯 | 🟢 |\n| context | 上下文/背景信息 | 🟡 |\n| skill | 技能——用户教AI的工作流，Gene结构化存储 | 🟠 |\n\n## 按需读取（渐进式披露核心）\n\n**规则：未遇对应场景，不读模块。每模块读一次即可，勿重复加载。**\n\n| 场景 | 读模块 |\n|------|--------|\n| 对话启始、每言必检、主动存储、检索升级、决策前置 | modules/13-retrieval-store.md |\n| 用户描述工作流（教AI流程）、skill记忆检索命中 | modules/07-skill-memory.md |\n| 对话结束归档、仅输入 `/忆时` 会话整理、每满5轮定期提取 | modules/09-archiving.md |\n| 用户输入 `/忆时 ...`（命令构造/回复风格） | modules/11-quick-commands.md |\n| 可视化（\"看看记了啥\"）、人物画像 | modules/12-viz-profile.md |\n| 记忆自动梳理（上次梳理过期7日） | modules/10-consolidation.md |\n| 模型安装/切换、opencode.json 配置 | modules/08-setup.md |\n| 复杂任务规划、上下文压缩后自查、长文索引 | modules/14-behavior.md |\n| 首次初始化、Chroma 集合结构 | modules/01-initialize.md |\n| 定时主动模式（胶囊检查/遗忘归档） | modules/03-active-mode.md |\n| 时间胶囊管理 | modules/04-time-capsule.md |\n| 检索算法原理（综合得分公式） | modules/05-retrieval.md |\n| 导入导出、备份迁移 | modules/06-import-export.md |\n| 被动检索触发场景与渐进式回忆 | modules/02-passive-mode.md |\n\n## 核心命令\n\n```bash\nPY=/home/fslong/.config/opencode/skills/忆时/scripts/memory_core.py\nMEMO_DIR=~/.local/share/opencode/忆时/data    # 所有命令必设\n# 注意：以下命令使用 $PY 与 $MEMO_DIR 变量，须先执行上方两行定义；或直接写全路径 python3 ~/.config/opencode/skills/忆时/scripts/memory_core.py\n\n初始化:    python3 $PY init\n存储记忆:  python3 $PY store \"内容\" --type task --emotion 0.8 [--scene 场景] [--activity-start 2025-05-01] [--activity-end 2025-05-10] [--force]\n检索记忆:  python3 $PY recall \"查询\" --limit 5 --expand [--no-embed] [--max-total-chars 600]\n封胶囊:   python3 $PY capsule lock --unlock-at \"2026-12-31\"\n查看胶囊:  python3 $PY capsule list\n导入:      python3 $PY import-file file.md --format markdown\n导出:      python3 $PY export --format timeline --output output.md\n可视化:    python3 ~/.config/opencode/skills/忆时/scripts/viz/viz.py\n统计:      python3 $PY stats\n遗忘:      python3 $PY forget --before \"2025-01-01\" --auto\n恢复:      python3 $PY recover\n查看备份:  cat memories_backup.jsonl | python3 -m json.tool --lines\n```\n\n## 快捷操作一览\n\n`/忆时` 前缀，免记命令行参数。命令构造、解析规则、回复风格见 modules/11-quick-commands.md。\n\n| 输入 | 动作 |\n|------|------|\n| `/忆时`（无后续） | 会话整理 |\n| `/忆时 <内容>` | 默认 recall |\n| `/忆时 记住/记忆 <内容> [--type T] [--emotion E]` | store |\n| `/忆时 查找/搜索/找 <关键词> [--limit N]` | recall |\n| `/忆时 忘记 <关键词>` | forget |\n| `/忆时 统计` | stats |\n| `/忆时 导出` | export |\n| `/忆时 可视化 [--out 路径]` | 记忆全景 HTML |\n| `/忆时 画像` | 人物画像 |\n| `/忆时 恢复` | recover |\n| `/忆时 胶囊 封存/列表/开封` | capsule lock/list/unlock |\n| `/忆时 梳理` | 记忆梳理 |\n\n**类型**：task / decision / preference / emotion / time / context / skill\n**情绪**：0.0~1.0 数值（默认 0.5），数值越大越重要/强烈；旧词 high=0.8 / medium=0.5 / low=0.2 仍兼容\n\n## 工程实践——关键场景\n\n| 场景 | 指令 |\n|------|------|\n| 完成任务后 | 按审计三问自查：结果问→过程问→改进问，全过方可言\"完\" |\n| 收到复杂需求 | 先存方案到忆时，再规划步骤，逐条标记完成 |\n| 发现用户偏好 | 以 `--type preference` 即时存储 |\n| 做出关键决策 | 以 `--type decision --emotion 0.9` 存储，附决策理由 |\n| 用户交付长文 | 提取metadata，按索引思维存储（见 modules/14） |\n| 对话转折话题 | 先 `recall` 新话题的关键词，再谈是否有关联 |\n| 疑似走偏 | 暂停，`recall` 原始目标比对进度 |\n| 决策或提问之前 | 先 `recall` 查询记忆，确认有无既有决策、偏好、约定可循 |\n| 对话开始 | 检索当前项目/文件夹相关记忆（见 modules/13） |\n| 对话结束 | 按归档流程，先检索旧忆，再择新增或更新（见 modules/09） |\n| 记忆自动梳理 | 对话启始先召回上次梳理时间告知用户，过期7日则触发沉淀（见 modules/10） |\n| 完成任务（todo完成/修改变更/输出结果） | 停顿自问\"有无值得记忆？\"，有则检索旧忆后store或update |\n| 用户输入 `/忆时` 开头 | 直入快捷操作模式，解析动作与参数，跳过常规涌现检索 |\n\n## 项目结构\n\n```\n忆时/\n├── SKILL.md                    # 技能定义 (入口总纲/识别层)\n├── yishi-instructions.md       # 外挂提示词 (必须配置到 opencode.json)\n├── modules/                    # 详细流程模块 (执行层，按需读取)\n│   ├── 01-initialize.md        # Chroma 初始化\n│   ├── 02-passive-mode.md      # 被动模式流程\n│   ├── 03-active-mode.md       # 主动模式流程\n│   ├── 04-time-capsule.md      # 时间胶囊操作\n│   ├── 05-retrieval.md         # 类人检索策略\n│   ├── 06-import-export.md     # 导入导出操作\n│   ├── 07-skill-memory.md      # 技能即记忆 (Gene)\n│   ├── 08-setup.md             # 模型安装与配置\n│   ├── 09-archiving.md         # 对话归档与会话整理\n│   ├── 10-consolidation.md     # 记忆自动梳理\n│   ├── 11-quick-commands.md    # 快捷操作详解\n│   ├── 12-viz-profile.md       # 可视化与人物画像\n│   ├── 13-retrieval-store.md   # 记忆操作流程 (检索/存储细则)\n│   └── 14-behavior.md          # 认知自知与上下文工程\n├── models/                     # （预留，仅 bge 模型不落此——运行时模型在 LOCAL_BASE）\n├── scripts/\n│   ├── memory_core.py          # 核心引擎 CLI\n│   └── viz/                    # 记忆可视化\n│       ├── viz.py              # 记忆全景生成器（导出→聚类→注入模板→打开）\n│       ├── template.html       # 记忆全景模板（孟菲斯风，/*__DATA__*/ 占位）\n│       ├── profile.py          # 人物画像助手（素材报告 + 正文注入）\n│       └── profile_template.html # 画像模板（<!--DATA-->/<!--CONTENT--> 占位）\n└── references/\n    └── chroma-api.md           # ChromaDB API 参考\n```\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4、jieba（BM25 关键词检索）\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n- 模型: bge-base-zh-v1.5（768维，唯一模型，无回退）。安装见 modules/08-setup.md\n- 备份: `~/.local/share/opencode/忆时/memories_backup.jsonl`（可用 MEMO_BAK 覆盖，多实例/测试隔离）\n\nFile v2.3.1:README.md\n\n# 忆时 - 记忆胶囊系统\n\n🎋 模拟人类记忆检索机制的 AI 记忆系统。OpenCode 技能。\n\n## 下载\n\n```bash\n# 方式一：git clone\ngit clone git@github.com:fslong520/aiSkill.git --depth 1\n# 然后将 忆时/ 目录复制到 skills/ 下\n\n# 方式二：直接复制本目录到 OpenCode skills 目录\ncp -r 忆时 ~/.config/opencode/skills/\n\n# 方式三：仅获取核心文件（模型首次使用自动下载）\ncp -r 忆时/{scripts,modules,SKILL.md,yishi-instructions.md} ~/.config/opencode/skills/忆时/\n```\n\n## 功能\n\n- **类人检索**: 语义40% + 近因20% + 情绪15% + 频率25%\n- **混合检索**: BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符更准；embedding 失败自动降级关键词\n- **去重合并**: 存储时相似>90% 自动合并，85%~90% 警告提示，--force 强存\n- **场景分组**: --scene 归组 + 活动时间段（--activity-start/--activity-end）\n- **渐进式回忆**: 先抛最相关的1-2条，用户追问再深入\n- **情绪锚定**: 高情绪记忆权重更高，不易遗忘\n- **记忆涌现**: 话题转换时发现隐藏关联\n- **时间胶囊**: 封存记忆，设定解锁日期\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\npip install chromadb\n\n# 2. 初始化\npython3 scripts/memory_core.py init\n\n# 3. 存储记忆\npython3 scripts/memory_core.py store \"记忆内容\" --type context --emotion medium --keywords \"标签\" --scene \"场景名\"\n\n# 4. 检索记忆\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5 --expand --no-embed\n```\n\n## 模型安装\n\n使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维）——中文记忆检索质量远超英文模型 MiniLM。引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/`，缺失即报错退出，**无回退**（MiniLM 384 维与 bge 768 维数据不兼容，曾致维度冲突）。\n\nbge 安装：自 hf-mirror 下载 Xenova/bge-base-zh-v1.5 之 `onnx/model.onnx` 与 tokenizer 文件至上述目录（详见 modules/08-setup.md）。\n\n## 目录结构\n\n```\n忆时/\n├── SKILL.md              # 技能定义\n├── yishi-instructions.md # 外挂提示词\n├── modules/              # 流程模块\n├── scripts/\n│   └── memory_core.py    # 核心引擎\n├── models/                 # （已弃用——运行时 bge 模型在 LOCAL_BASE）\n├── data/                 # ChromaDB 数据 (运行时生成)\n│   └── .gitkeep\n├── references/           # API 参考\n├── venv/                 # Python 虚拟环境\n├── .gitignore\n├── .gitattributes\n└── README.md\n```\n\n## 配置\n\n编辑 `~/.config/opencode/opencode.json`:\n\n```json\n{\n  \"instructions\": [\n    \"~/.config/opencode/skills/忆时/yishi-instructions.md\"\n  ]\n}\n```\n\nFile v2.3.1:_meta.json\n\n{\n  \"ownerId\": \"kn71rk0chjcdy7ffgfc08hh9gd83ehq8\",\n  \"slug\": \"memocap\",\n  \"version\": \"2.3.1\",\n  \"publishedAt\": 1786675805660\n}\n\nFile v2.3.1:references/chroma-api.md\n\n# ChromaDB API 参考 (忆时用)\n\n## 版本\n\n- chromadb 1.5.4\n- Python 3.13+\n\n## 客户端初始化\n\n```python\nimport chromadb\nclient = chromadb.PersistentClient(path=\"/path/to/data\")\n```\n\n## 集合操作\n\n```python\n# 创建或获取集合\ncollection = client.get_or_create_collection(\n    name=\"memories\",\n    metadata={\"hnsw:space\": \"cosine\"}\n)\n\n# 添加文档\ncollection.add(\n    documents=[\"记忆内容\"],\n    metadatas=[{\"type\": \"context\", \"emotion\": \"medium\"}],\n    ids=[\"uuid\"]\n)\n\n# 查询 (语义搜索)\nresults = collection.query(\n    query_texts=[\"查询关键词\"],\n    n_results=10\n)\n\n# 获取特定文档\ndoc = collection.get(ids=[\"uuid\"])\n\n# 更新\ncollection.update(\n    ids=[\"uuid\"],\n    documents=[\"新内容\"],\n    metadatas=[{\"type\": \"new_type\"}]\n)\n\n# 删除\ncollection.delete(ids=[\"uuid\"])\n\n# 统计数量\ncount = collection.count()\n```\n\n## 查询结果结构\n\n```python\n{\n    \"ids\": [[\"id1\", \"id2\", ...]],\n    \"documents\": [[\"doc1\", \"doc2\", ...]],\n    \"metadatas\": [[metadata1, metadata2, ...]],\n    \"distances\": [[0.1, 0.2, ...]],  # cosine distance, 越小越相似\n}\n```\n\n语义相似度 = 1.0 - distance\n\n## 注意事项\n\n- ChromaDB 自动向量化文本 (text-embedding)\n- cosine 距离范围: 0 (完全相同) 到 2 (完全相反)\n- metadatas 中的值必须是字符串或数字\n- PersistentClient 自动持久化到磁盘\n\nFile v2.3.1:modules/01-initialize.md\n\n# 模块 01 - 初始化与 Chroma 管理\n\n## 目标\n\n初始化 ChromaDB 向量数据库，建立必要的集合。\n\n## 执行步骤\n\n1. 检查 Python 3.13 是否可用\n2. 检查 chromadb 是否已安装\n3. 运行初始化命令:\n\n```bash\npython3 /home/fslong/.config/opencode/skills/忆时/scripts/memory_core.py init\n```\n\n4. 确认输出包含\"忆时记忆系统初始化完成\"\n\n## 集合结构\n\nChromaDB 内会创建以下集合:\n\n| 集合名 | 用途 | 距离度量 |\n|--------|------|----------|\n| memories | 长期记忆向量存储 | cosine |\n| relationships | 记忆间关联关系 | cosine |\n| meta | 系统状态元数据 | cosine |\n\n## 记忆元数据结构\n\n每条记忆包含以下元数据:\n\n```json\n{\n  \"type\": \"context\",\n  \"emotion\": \"medium\",\n  \"emotion_weight\": 0.5,\n  \"created_at\": \"2025-01-15T10:30:00\",\n  \"created_date\": \"2025-01-15\",\n  \"updated_at\": \"2025-01-15T10:30:00\",\n  \"keywords\": \"Python,学习,装饰器\",\n  \"source\": \"manual\",\n  \"source_session\": \"\",\n  \"frequency\": \"1\",\n  \"recall_count\": \"0\",\n  \"is_capsule\": \"false\",\n  \"capsule_unlock_at\": \"\"\n}\n```\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维），**无回退**。\n引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/`，缺失即报错。\n安装命令——详见 modules/08-setup.md。\n\n> ⚠️ 模型不会写入 `~/.cache/chroma/`，清缓存不会被删除。\n\n## 环境变量\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| MEMO_DIR | ~/.local/share/opencode/忆时/data | ChromaDB 存储路径 |\n\nFile v2.3.1:modules/02-passive-mode.md\n\n# 模块 02 - 被动模式（对话中触发检索）\n\n## 触发场景\n\n当用户在对话中出现以下行为时触发记忆检索:\n\n- **显式询问**: \"我说过…\"、\"我记得之前…\"、\"你记得吗…\"\n- **话题回溯**: 回到之前的话题、延续之前的讨论\n- **关键词命中**: 对话中出现已存储记忆中的关键字\n- **情绪波动**: 用户表达强烈情绪，触发情绪锚定检索\n- **上下文缺失**: 回答需要之前的背景信息\n\n## 执行流程\n\n### 1. 判断是否需要检索\n\n分析当前对话内容，构建检索查询:\n\n- 如果用户直接要求回忆: 使用用户原话作为查询\n- 如果检测到关联话题: **提取2-3个核心词**作为查询\n- 如果情绪发生变化: 以当前情绪关键词 + 情绪类型检索\n\n### 2. 执行检索\n\n```bash\n# 基础检索 - 返回最相关的N条\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5\n\n# 带联想扩散的深度检索\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5 --expand\n\n# 按类型过滤\npython3 scripts/memory_core.py recall \"偏好\" --type-filter preference\n\n# 只检索高情绪记忆\npython3 scripts/memory_core.py recall \"情感\" --min-weight 0.7\n```\n\n### 3. 渐进式回忆策略\n\n**不要一次性倒出所有结果！**\n\n1. **第一轮**: 只返回得分最高的 1-2 条\n   - 自然地在回复中提及: \"你之前提到过…\"\n2. **用户追问**: 返回接下来的 2-3 条\n   - \"还有这些相关的…\"\n3. **持续追问**: 再返回剩余结果\n\n### 4. 遗忘曲线行为\n\n当记忆的 recall_count 很低且创建时间很久远时:\n\n- 返回时表达**不确定性**: \"我模糊记得你之前好像提到过…\"\n- 提供**概要而非精确内容**: 给出关键词而非完整引用\n- 如果分数低于阈值: \"这方面的记忆有些模糊了…\"\n\n### 5. 记忆涌现处理（多轮检索）\n\n涌现乃主动发现之隐藏关联，非被动等结果。须行多轮检索：\n\n**第一轮：语义检索**\n```bash\npython3 scripts/memory_core.py recall \"用户话题\" --limit 3 --expand\n```\n\n**第二轮：涌现判定**\n观第一轮结果：\n- 有 `[关联]` 标记 → 已有涌现，直接表达\n- 结果 ≥ 2 条 → 取 top-2 关键字/内容构建复合查询，再做第二轮\n```bash\npython3 scripts/memory_core.py recall \"原话题 新话题\" --limit 2\n```\n- 若第二轮结果与第一轮不重叠 → 此为涌现之记忆\n\n**第三轮：情绪锚定**\n用户情绪显著时（愤怒/兴奋/沮丧），以情绪词 + 话题词再检：\n```bash\npython3 scripts/memory_core.py recall \"情绪词\" --type-filter emotion --min-weight 0.7 --limit 2\n```\n\n**主动说出**（发现涌现时），而不是等用户问:\n\n> \"说到这个我突然想到一件事…\"\n> \"这让我联想到你之前说过的另一个相关的事…\"\n> \"对了，你还记得那次…\"\n\n涌现条件:\n- 关联分数 > 0.6\n- 与当前话题有语义关联\n- 不是已在此对话中提及过的内容\n\n> 强涌现强制流程（三轮检索）、检索升级穷尽模式（L0-L4）、主动存储细则——见 modules/13-retrieval-store.md。\n\nFile v2.3.1:modules/03-active-mode.md\n\n# 模块 03 - 主动模式（定时触发回忆整理）\n\n## 触发方式\n\n结合定时任务/cron周期性执行:\n\n```bash\n# 主动回忆整理入口脚本\npython3 scripts/memory_core.py capsule check-expired && \\\npython3 scripts/memory_core.py forget --low-freq 1 --auto && \\\npython3 scripts/memory_core.py stats\n```\n\n## 主动执行流程\n\n### 1. 检查到期时间胶囊\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n- 如果存在到期胶囊 → **生成回忆回顾**\n- 解封胶囊内容，向用户推送回顾\n- 格式示例:\n\n> 🎋 记忆胶囊解封提醒\n> 你于 2025-03-15 封存了一个胶囊，今天是解锁日！\n>\n> 封存内容: \"今天和AI讨论了一个关于…\"\n> 封存时的心情: 🟠 兴奋\n>\n> 打开看看吗？\n\n### 2. 自动发现记忆关联\n\n分析现有记忆，寻找隐藏关联:\n\n- 检索每条记忆，查看 `recall --expand` 的结果\n- 如果发现新的强关联（关联分数 > 0.7）\n- 主动向用户报告:\n\n> \"我注意到你关于 A 和 B 的记忆似乎存在一些联系…\"\n\n### 3. 遗忘曲线处理\n\n低优先级记忆自动归档:\n\n```bash\npython3 scripts/memory_core.py forget --before \"2025-01-01\" --low-freq 1 --auto\n```\n\n- 将低频、低 recall 的旧记忆标记为 archived\n- 不删除，只是降低检索优先级\n- 保留高情绪记忆不归档\n\n### 4. 记忆整理报告\n\n生成统计摘要:\n\n```bash\npython3 scripts/memory_core.py stats\n```\n\n向用户报告:\n- 总记忆数\n- 本周新增记忆\n- 到期解除的胶囊数\n- 归档的记忆数\n\n## 建议定时频率\n\n| 任务 | 频率 | 说明 |\n|------|------|------|\n| 胶囊检查 | 每天一次 | 检查到期的时间胶囊 |\n| 遗忘归档 | 每周一次 | 归档低频旧记忆 |\n| 关联发现 | 每次对话后 | 对话结束时自动发现新关联 |\n| 统计报告 | 每周一次 | 生成记忆整理报告 |\n\n## 对话结束语自动触发\n\n每当用户结束一次较长的对话，可以主动:\n\n1. 提取对话中的重点记忆\n2. 自动存储到 Chroma\n3. 检查是否有胶囊到期\n\nFile v2.3.1:modules/04-time-capsule.md\n\n# 模块 04 - 时间胶囊管理\n\n## 概念\n\n时间胶囊允许将当前时刻的记忆封存，设定一个未来的解锁日期。\n到期后可以自动或手动解封，重温当时的记忆和情绪。\n\n## 封存胶囊\n\n```bash\n# 封存一个胶囊，30天后解锁（默认）\npython3 scripts/memory_core.py capsule lock --summary \"今日感悟\"\n\n# 封存并指定解锁日期\npython3 scripts/memory_core.py capsule lock --unlock-at \"2026-12-31\" --summary \"年度回顾\" --content \"今天我和AI讨论了关于未来的思考…\" --keywords \"未来,思考,人生\"\n```\n\n**关键字段**:\n\n| 参数 | 必填 | 说明 |\n|------|------|------|\n| --summary | 否 | 摘要，用于列表预览 |\n| --content | 否 | 胶囊的详细记忆内容 |\n| --keywords | 否 | 关键字 |\n| --unlock-at | 否 | 解锁日期 YYYY-MM-DD，默认30天后 |\n\n## 查看胶囊\n\n```bash\npython3 scripts/memory_core.py capsule list\n```\n\n输出示例:\n```\n时间胶囊 (3 个)\nID: xxx-xxx\n创建: 2025-06-15 | 解锁: 2025-12-31 | 状态: 剩余 205 天\n内容: 时间胶囊 - 创建于 2025-06-15, 解锁日期: 2025-12-31\n```\n\n## 检查到期\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n主动模式下每次触发时应运行此命令。\n\n## 解封胶囊\n\n```bash\npython3 scripts/memory_core.py capsule unseal --capsule-id <ID>\n```\n\n- 如果胶囊已到期 → 直接解封\n- 如果尚未到期 → 警告用户并需要确认\n- 解封后该记忆变为普通记忆，可以正常检索\n\n## 解封回忆重现\n\n解封时，生成回忆回顾:\n\n> 🎋 时光倒流! 你于 X 天前封存了这段记忆:\n>\n> [capsule content]\n>\n> 封存时的心情: 🟠 兴奋\n> 关键字: …\n>\n> 这段记忆已被解封，现在可以随时检索了。\n\nFile v2.3.1:modules/05-retrieval.md\n\n# 模块 05 - 类人检索策略\n\n## 核心算法\n\n人类记忆不是数据库查询，而是多维度加权的结果:\n\n### 综合得分公式\n\n```\n最终得分 = 0.40 × 语义相似度\n         + 0.15 × 情绪权重\n         + 0.20 × 近因效应\n         + 0.25 × (0.6 + 频率强化)\n```\n\n### 各分量计算\n\n| 分量 | 权重 | 计算方式 | 说明 |\n|------|------|----------|------|\n| **语义相似度** | 40% | Chroma cosine 向量搜索 | AI 理解的意义匹配度 |\n| **情绪权重** | 15% | 直接采用情绪数值（0.0~1.0），🔴≥0.9 🟠≥0.7 🟡≥0.4 🟢<0.4 | 情绪值越强，越容易忆起 |\n| **近因效应** | 20% | exp(-ln(2) × 天数 / 30) | 半衰期30天，30天后回忆概率减半 |\n| **频率强化** | 25% | 0.6 + log₂(f+1)×0.1 + log₂(r+1)×0.05 | f=出现频次, r=被回忆次数 |\n\n## 检索模式\n\n### 1. 基础语义检索\n\n```bash\npython3 scripts/memory_core.py recall \"Python\"\n```\n\n### 2. 联想扩散 (关键!)\n\n```bash\npython3 scripts/memory_core.py recall \"Python\" --expand\n```\n\n执行流程（两阶段扩散）:\n\n**阶段一：关系链扩散**\n1. 先做语义检索，获取 top-10 结果\n2. 对 top-3 结果，通过 `relationships` 集合查直接关联关系（store 时自动建链）\n3. 关系链上的新记忆以较低权重加入结果集\n\n**阶段二：语义二次检索**\n4. 取 top-2 结果之内容/关键字，以此为新查询再做语义检索\n5. 发现与原始结果不重叠者，即为\"涌现\"\n6. 最终统一按综合得分排序\n7. 所有扩散结果标记为 `[关联]`\n\n> **实现机制**：每条记忆在 `store` 时自动搜索语义相似(p>0.50)的已有记忆，\n> 写入 `relationships` 集合并交叉融合关键字，使后续检索覆盖更广。\n\n### 3. 情绪锚定检索\n\n只检索高情绪记忆 (类似\"闪回\"):\n\n```bash\npython3 scripts/memory_core.py recall \"关键词\" --min-weight 0.7\n```\n\n### 4. 渐进式回忆\n\n在实际对话中，**不要一次返回所有结果**:\n\n```\n用户: 我之前跟你讨论过Python的事吧？\n\nAI (第一轮):\n  → 检索 recall \"Python讨论\" --limit 3\n  → 返回最高分的 1 条\n  → \"对！我记得你之前提到过[记忆内容]...\"\n\n用户: 还有呢？\n\nAI (第二轮):\n  → 返回接下来的 2 条\n  → \"还有一点，你还说过...\"\n\n用户: 嗯嗯继续...\n\nAI (第三轮):\n  → recall \"Python讨论\" --expand\n  → 联想扩散，返回关联记忆\n  → \"啊对了！说到Python，我突然想到你还提过...\"\n```\n\n## 遗忘行为模拟\n\n当记忆的:\n- **近因分 < 0.2** (超过3个月未检索): 返回时添加不确定性\n- **recall_count = 0** 且创建时间很久远: \"我隐约记得……\"\n- **综合分 < 0.5**: 不提为一条确定的记忆\n\n示例:\n\n> \"我不太确定，但隐约记得你好像说过……\"\n> \"我模糊地记得你很久前提到过一个相关的……\"\n\n## 检索建议\n\n| 场景 | 参数 |\n|------|------|\n| 用户提到模糊概念 | `recall \"概念\" --limit 3` |\n| 用户追问详情 | `recall \"概念\" --limit 5 --expand` |\n| 需要精确回忆 | `recall \"精确词\" --min-weight 0.6` |\n| 话题转换时主动闪回 | `recall \"新话题\" --limit 2 --expand` |\n\nFile v2.3.1:modules/06-import-export.md\n\n# 模块 06 - 导入导出管理\n\n## 导入功能\n\n将外部记忆文件导入到 ChromaDB 向量化存储中。\n\n### 支持的格式\n\n| 格式 | 说明 | 解析方式 |\n|------|------|----------|\n| Markdown (.md) | 按标题分段解析 | 标题→日期, 引用块→情绪/关键字 |\n| 纯文本 (.txt) | 按空行分段 | 首行→日期(如 YYYY-MM-DD) |\n| JSON (.json) | 结构化数据 | 按字段映射元数据 |\n\n### 导入命令\n\n```bash\n# 从 Markdown 导入\npython3 scripts/memory_core.py import-file memories.md --format markdown\n\n# 从纯文本导入\npython3 scripts/memory_core.py import-file notes.txt --format text\n\n# 从 JSON 导入 (结构化,保留 ID 和元数据)\npython3 scripts/memory_core.py import-file memories.json --format json\n```\n\n### Markdown 格式示例\n\n```markdown\n## 2025-03-15\n> 情绪: 0.9\n\n今天和AI讨论了一个关于未来的想法，感觉很兴奋。\n我们决定尝试一个新的架构方案。\n```\n\n导入后自动解析:\n- 日期: 2025-03-15\n- 情绪: 0.9（数值；旧词 high/medium/low 亦兼容）\n- 内容: \"## 2025-03-15\\n今天和AI讨论……\"\n\n### JSON 格式示例\n\n```json\n{\n  \"memories\": [\n    {\n      \"id\": \"optional-uuid\",\n      \"content\": \"记忆内容\",\n      \"type\": \"emotion\",\n      \"emotion\": 0.9,\n      \"keywords\": \"关键词\",\n      \"created_at\": \"2025-03-15T10:00:00\",\n      \"created_date\": \"2025-03-15\"\n    }\n  ]\n}\n```\n\n## 导出功能\n\n### 支持的格式\n\n| 格式 | 说明 | 用途 |\n|------|------|------|\n| markdown | 标准排版 | 阅读、归档、打印 |\n| timeline | 按时间线组织 | 年度回顾、记忆叙事 |\n| json | 结构化向量数据 | 备份、迁移、跨系统 |\n\n### 导出命令\n\n```bash\n# 导出为可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n\n# 导出为时间线回忆录 (按日期分组)\npython3 scripts/memory_core.py export --format timeline --output \"2026回顾.md\"\n\n# 导出为 JSON (可重新导入)\npython3 scripts/memory_core.py export --format json --output memories.json\n```\n\n### 时间线格式示例\n\n导出的 Markdown 按日期分节:\n\n```markdown\n# 忆时 ・ 记忆时间线\n导出日期: 2026-05-01\n总记忆数: 42\n\n## 2025-03-15\n\n### 🟠 [EMOTION]\n- 关键字: 未来, 想法, 兴奋\n- 情绪: 0.90\n- 今天和AI讨论了一个关于未来的想法，感觉很兴奋\n\n## 2025-03-20\n\n### 🟡 [DECISION]\n- 关键字: 架构, Python\n- 情绪: 0.50\n- 决定采用新的架构方案\n```\n\n## 完整备份/迁移流程\n\n### 备份\n\n```bash\n# 1. 导出 JSON (包含所有向量数据)\npython3 scripts/memory_core.py export --format json --output backup.json\n\n# 2. 导出时间线 (人类可读)\npython3 scripts/memory_core.py export --format timeline --output memories-timeline.md\n\n# 3. 导出可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n```\n\n### 迁移到新设备\n\n```bash\n# 新设备上初始化\npython3 scripts/memory_core.py init\n\n# 导入\npython3 scripts/memory_core.py import-file backup.json --format json\n```\n\n## 注意事项\n\n- 导入时如果 ID 冲突会自动生成新 UUID\n- 导出 JSON 可用于完整迁移，导出 Markdown 适合阅读\n- 时间线导出时胶囊记忆会标记 🔒 锁图标\n\nFile v2.3.1:modules/07-skill-memory.md\n\n# 模块 07 - 技能即记忆（Gene 结构）\n\n**何时读**：用户描述一工作流（教AI流程）、recall 命中 `type=skill` 记忆、需修正/遗忘技能时。日常无此场景不读。\n\n## 概念\n\n技能非文件，乃记忆也。用户教AI一工作流，即存为 `type=skill` 之记忆。忆时检索自然触发，无需加载SKILL.md。\n\n### Gene 结构（技能诊所标准）\n\n每条 skill 记忆含以下 metadata 字段：\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| skill_name | 是 | 技能名称，如\"格语\" |\n| skill_summary | 是 | 一句话概括，如\"故事→宫格图\" |\n| skill_strategy | 是 | 步骤摘要，如\"分析→分镜→渲染\" |\n| skill_triggers | 是 | 触发词，逗号分隔，如\"漫画,格语\" |\n| skill_input | 否 | 输入规格 |\n| skill_output | 否 | 输出规格 |\n| skill_avoid | 否 | 禁忌事项，分号分隔 |\n| skill_version | 否 | 版本号，默认 1.0.0 |\n\n**content 字段**：Strategy（步骤）+ Language（规约）+ Example（示例）三部分。用表格/列表，无废话。\n\n**keywords**：必含 `skill` 标签 + trigger: 前缀（如 `trigger:画漫画`）。\n\n### 教技能（用户教AI工作流）\n\n用户描述一有输入、有步骤、有输出之流程时，AI 须主动问\"可要存为技能？\"。此不等用户言\"记住\"。\n\n**收集 Gene 结构（Human-in-the-Loop）：**\n```\n缺什么问什么，不假设：\n- 技能名：？→ 用户答\"格语\"\n- 输入：？→ \"故事主题\"\n- 输出：？→ \"宫格图\"\n- 触发词：？→ \"说'画漫画'就触发\"\n- 禁忌：？→ \"不加原文没有的角色\"\n→ 填入 metadata 对应字段\n```\n\n**存储命令：**\n```bash\nMEMO_DIR=~/.local/share/opencode/忆时/data python3 $YISHI store \"Strategy/Language/Example\" \\\n  --type skill \\\n  --emotion 0.8 \\\n  --keywords \"skill,格语,trigger:漫画,trigger:画漫画\" \\\n  --skill-name \"格语\" \\\n  --skill-summary \"故事主题→宫格手绘故事图\" \\\n  --skill-strategy \"分析主题→定宫格→分镜→选风格→渲染\" \\\n  --skill-avoid \"不添加原文没有的角色;不修改核心故事\" \\\n  --skill-triggers \"漫画,格语,画漫画\" \\\n  --skill-input \"故事主题或梗概\" \\\n  --skill-output \"宫格手绘故事图\" \\\n  --skill-version \"1.0.0\"\n```\n\n**回复风格：** \"已录。「{技能名}」技能，触发词：{触发词}。\"\n\n### 用技能（自动触发）\n\nstorage 时 `keywords` 含 `trigger:xxx` 前缀。用户日常对话中，言必检之 recall 命中 trigger 关键词：\n\n```\n用户：画个猫和老鼠的漫画\n\n言必检 → recall \"漫画\" --expand --limit 5\n→ 命中 type=skill，keywords 含 trigger:漫画\n→ 读 content 知步骤，读 skill_avoid 知禁区\n→ 执行完毕后自动 update frequency+1\n```\n\n**关键：** 用户完全不知背后是 skill 记忆。语义检索自然触发，无需手动\"加载技能\"。\n\n### 技能进化\n\n```\n用户：不对，应该用水彩风\n\n→ AI 识别为技能修正\n→ update --id xxx --content \"新步骤...\"\n→ update --id xxx --keywords \"skill,格语,水彩,trigger:漫画,trigger:画漫画\"\n→ emotion_weight += 0.1（刚迭代的技能更活跃）\n\n回复：已修正。下次\"画漫画\"默认水彩风。\n```\n\n### 技能遗忘\n\n久不用者近因分（recency）衰减，自然降权，不主动浮现。数据不删，精准搜索 `type=skill` 仍可找回。\n\n### 频率即熟练度\n\nskill 记忆之 frequency 随使用自增，recall 排名上升——常用技能如肌肉记忆。此即\"越用越强\"。\n\n### 与现有技能目录之关系\n\n忆时即技能系统。61 个 SKILL.md 目录可逐条转为 `type=skill` 记忆，存入后不再依赖文件。\n\nFile v2.3.1:modules/08-setup.md\n\n# 模块 08 - 模型安装、配置与参考\n\n**何时读**：首次安装/切换 embedding 模型、维度重建、配置 opencode.json 外挂提示词、排查\"AI不自动检索\"问题时。日常无此场景不读。\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维，~400MB）——中文记忆检索质量远超英文模型 MiniLM。引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx/model.onnx`，缺失即报错退出，**无回退**（MiniLM 384 维与 bge 768 维数据不兼容，曾致维度冲突）。\n\n**bge-base-zh-v1.5 安装**（模型放运行时目录，技能更新不覆盖）：\n\n```bash\nmkdir -p ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx\n# 自 hf-mirror 下载（或浏览器下载后放入）\ncurl -sL -o ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx/model.onnx \\\n  https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/onnx/model.onnx\ncd ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5\nfor f in config.json tokenizer.json special_tokens_map.json tokenizer_config.json vocab.txt; do\n  curl -sL -o \"$f\" \"https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/$f\"\ndone\n```\n\n> ⚠️ **注意**：运行时模型与数据统一存 `~/.local/share/opencode/忆时/`（LOCAL_BASE），**不写入 `~/.cache/chroma/`**，亦不存技能目录（技能更新会覆盖）。\n\n## 必须配置外挂提示词\n\n本技能依赖 OpenCode 的 `instructions` 配置才能完整生效。\n未配置时，AI 不会自动检索记忆或存储记忆。\n\n**配置步骤：**\n\n1. 编辑全局配置文件 `~/.config/opencode/opencode.json`\n2. 添加 `instructions` 字段，指向技能目录下的提示词文件：\n\n```json\n{\n  \"instructions\": [\n    \"~/.config/opencode/skills/忆时/yishi-instructions.md\"\n  ]\n}\n```\n\n3. 重启 OpenCode 使配置生效\n\n**配置后 AI 将自动：**\n- 每次对话前检索记忆系统\n- 用户说\"记住\"时自动存储记忆\n- 话题关联时主动涌现历史记忆\n- 对话结束时自动归档重点\n\n**未配置则：**\n- 技能仍可手动调用命令\n- 但不会自动检索/存储记忆\n- 不会主动联想和闪回\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n\nArchive v2.3.0: 26 files, 78980 bytes\n\nFiles: modules/01-initialize.md (1563b), modules/02-passive-mode.md (3102b), modules/03-active-mode.md (2047b), modules/04-time-capsule.md (1747b), modules/05-retrieval.md (3179b), modules/06-import-export.md (3234b), modules/07-skill-memory.md (3674b), modules/08-setup.md (2330b), modules/09-archiving.md (4767b), modules/10-consolidation.md (2727b), modules/11-quick-commands.md (6414b), modules/12-viz-profile.md (5345b), modules/13-retrieval-store.md (8012b), modules/14-behavior.md (3365b), README.md (2789b), references/chroma-api.md (1353b), scripts/__init__.py (0b), scripts/memory_core.py (55925b), scripts/viz/profile_template.html (7640b), scripts/viz/profile.py (8206b), scripts/viz/template.html (22849b), scripts/viz/viz.py (7743b), skill-card.md (2468b), SKILL.md (9612b), yishi-instructions.md (15612b), _meta.json (126b)\n\nFile v2.3.0:SKILL.md\n\n---\nname: 忆时\ndescription: \"🎋 记忆胶囊系统 - 模拟人类记忆检索 | 自动加载，主动联想记忆\"\npriority: 900\nmetadata:\n  slug: memocap\n  version: \"2.3.0\"\n  trigger: \"忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、recall、remember、/忆时\"\n  copaw:\n    emoji: \"🎋\"\n    requires: {}\n    auto_load: true\n---\n\n# 忆时 - 记忆胶囊系统\n\n> 模拟人类的记忆机制，让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆系统。\n> **渐进式披露**：本文件为入口总纲。细节皆在 modules/——按「按需读取」表，遇场景才读对应模块，勿一次全读。\n\n## 触发条件\n\n- **自动加载**：每次对话自动激活，AI 主动联想和检索记忆\n- **关键字**：忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、我说过、我记得\n- **命令**：用户输入以 `/忆时` 开头时，自动触发快捷操作模式\n- **场景**：用户询问过去的事情、要求回忆、需要上下文关联、触发闪回\n- **主动**：定时模式运行时主动扫描到期胶囊和记忆关联\n\n## 核心概念\n\n| 概念 | 说明 |\n|------|------|\n| **类人检索** | 语义40% + 近因20% + 情绪15% + 频率25%，不像数据库那样精确 |\n| **混合检索** | BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符检索更准；embedding 失败自动降级关键词 |\n| **去重合并** | 存储时相似>90% 自动合并（内容并入、频率+1），85%~90% 警告提示，--force 强存 |\n| **渐进式回忆** | 先抛最相关的1-2条，用户追问再深入，非一次性倒出 |\n| **遗忘曲线** | 记忆随时间指数衰减，低频率的记忆会变得\"模糊\" |\n| **情绪锚定** | 高情绪（情绪值 ≥0.7）记忆权重更高，不易遗忘 |\n| **记忆涌现** | 话题转换时发现隐藏关联，主动说出\"说到这个我突然想到…\" |\n| **场景分组** | 记忆可标 --scene 归组，事件记忆可标活动时间段（2025-05-01 ~ 05-10） |\n| **时间胶囊** | 封存某段记忆，设定解锁日期，到期后自动/手动解封翻阅 |\n\n## 记忆类型\n\n| 类型 | 说明 | 情绪权重倾向 |\n|------|------|-------------|\n| emotion | 情绪事件（开心、愤怒、悲伤） | |\n| decision | 用户做出的决策 | 🟠 |\n| task | 任务/待办 | 🟡 |\n| time | 时间敏感信息（截止日期） | 🔴 |\n| preference | 用户偏好/习惯 | 🟢 |\n| context | 上下文/背景信息 | 🟡 |\n| skill | 技能——用户教AI的工作流，Gene结构化存储 | 🟠 |\n\n## 按需读取（渐进式披露核心）\n\n**规则：未遇对应场景，不读模块。每模块读一次即可，勿重复加载。**\n\n| 场景 | 读模块 |\n|------|--------|\n| 对话启始、每言必检、主动存储、检索升级、决策前置 | modules/13-retrieval-store.md |\n| 用户描述工作流（教AI流程）、skill记忆检索命中 | modules/07-skill-memory.md |\n| 对话结束归档、仅输入 `/忆时` 会话整理、每满5轮定期提取 | modules/09-archiving.md |\n| 用户输入 `/忆时 ...`（命令构造/回复风格） | modules/11-quick-commands.md |\n| 可视化（\"看看记了啥\"）、人物画像 | modules/12-viz-profile.md |\n| 记忆自动梳理（上次梳理过期7日） | modules/10-consolidation.md |\n| 模型安装/切换、opencode.json 配置 | modules/08-setup.md |\n| 复杂任务规划、上下文压缩后自查、长文索引 | modules/14-behavior.md |\n| 首次初始化、Chroma 集合结构 | modules/01-initialize.md |\n| 定时主动模式（胶囊检查/遗忘归档） | modules/03-active-mode.md |\n| 时间胶囊管理 | modules/04-time-capsule.md |\n| 检索算法原理（综合得分公式） | modules/05-retrieval.md |\n| 导入导出、备份迁移 | modules/06-import-export.md |\n| 被动检索触发场景与渐进式回忆 | modules/02-passive-mode.md |\n\n## 核心命令\n\n```bash\nPY=/home/fslong/.config/opencode/skills/忆时/scripts/memory_core.py\nMEMO_DIR=~/.local/share/opencode/忆时/data    # 所有命令必设\n# 注意：以下命令使用 $PY 与 $MEMO_DIR 变量，须先执行上方两行定义；或直接写全路径 python3 ~/.config/opencode/skills/忆时/scripts/memory_core.py\n\n初始化:    python3 $PY init\n存储记忆:  python3 $PY store \"内容\" --type task --emotion 0.8 [--scene 场景] [--activity-start 2025-05-01] [--activity-end 2025-05-10] [--force]\n检索记忆:  python3 $PY recall \"查询\" --limit 5 --expand [--no-embed] [--max-total-chars 600]\n封胶囊:   python3 $PY capsule lock --unlock-at \"2026-12-31\"\n查看胶囊:  python3 $PY capsule list\n导入:      python3 $PY import-file file.md --format markdown\n导出:      python3 $PY export --format timeline --output output.md\n可视化:    python3 ~/.config/opencode/skills/忆时/scripts/viz/viz.py\n统计:      python3 $PY stats\n遗忘:      python3 $PY forget --before \"2025-01-01\" --auto\n恢复:      python3 $PY recover\n查看备份:  cat memories_backup.jsonl | python3 -m json.tool --lines\n```\n\n## 快捷操作一览\n\n`/忆时` 前缀，免记命令行参数。命令构造、解析规则、回复风格见 modules/11-quick-commands.md。\n\n| 输入 | 动作 |\n|------|------|\n| `/忆时`（无后续） | 会话整理 |\n| `/忆时 <内容>` | 默认 recall |\n| `/忆时 记住/记忆 <内容> [--type T] [--emotion E]` | store |\n| `/忆时 查找/搜索/找 <关键词> [--limit N]` | recall |\n| `/忆时 忘记 <关键词>` | forget |\n| `/忆时 统计` | stats |\n| `/忆时 导出` | export |\n| `/忆时 可视化 [--out 路径]` | 记忆全景 HTML |\n| `/忆时 画像` | 人物画像 |\n| `/忆时 恢复` | recover |\n| `/忆时 胶囊 封存/列表/开封` | capsule lock/list/unlock |\n| `/忆时 梳理` | 记忆梳理 |\n\n**类型**：task / decision / preference / emotion / time / context / skill\n**情绪**：0.0~1.0 数值（默认 0.5），数值越大越重要/强烈；旧词 high=0.8 / medium=0.5 / low=0.2 仍兼容\n\n## 工程实践——关键场景\n\n| 场景 | 指令 |\n|------|------|\n| 完成任务后 | 按审计三问自查：结果问→过程问→改进问，全过方可言\"完\" |\n| 收到复杂需求 | 先存方案到忆时，再规划步骤，逐条标记完成 |\n| 发现用户偏好 | 以 `--type preference` 即时存储 |\n| 做出关键决策 | 以 `--type decision --emotion 0.9` 存储，附决策理由 |\n| 用户交付长文 | 提取metadata，按索引思维存储（见 modules/14） |\n| 对话转折话题 | 先 `recall` 新话题的关键词，再谈是否有关联 |\n| 疑似走偏 | 暂停，`recall` 原始目标比对进度 |\n| 决策或提问之前 | 先 `recall` 查询记忆，确认有无既有决策、偏好、约定可循 |\n| 对话开始 | 检索当前项目/文件夹相关记忆（见 modules/13） |\n| 对话结束 | 按归档流程，先检索旧忆，再择新增或更新（见 modules/09） |\n| 记忆自动梳理 | 对话启始先召回上次梳理时间告知用户，过期7日则触发沉淀（见 modules/10） |\n| 完成任务（todo完成/修改变更/输出结果） | 停顿自问\"有无值得记忆？\"，有则检索旧忆后store或update |\n| 用户输入 `/忆时` 开头 | 直入快捷操作模式，解析动作与参数，跳过常规涌现检索 |\n\n## 项目结构\n\n```\n忆时/\n├── SKILL.md                    # 技能定义 (入口总纲/识别层)\n├── yishi-instructions.md       # 外挂提示词 (必须配置到 opencode.json)\n├── modules/                    # 详细流程模块 (执行层，按需读取)\n│   ├── 01-initialize.md        # Chroma 初始化\n│   ├── 02-passive-mode.md      # 被动模式流程\n│   ├── 03-active-mode.md       # 主动模式流程\n│   ├── 04-time-capsule.md      # 时间胶囊操作\n│   ├── 05-retrieval.md         # 类人检索策略\n│   ├── 06-import-export.md     # 导入导出操作\n│   ├── 07-skill-memory.md      # 技能即记忆 (Gene)\n│   ├── 08-setup.md             # 模型安装与配置\n│   ├── 09-archiving.md         # 对话归档与会话整理\n│   ├── 10-consolidation.md     # 记忆自动梳理\n│   ├── 11-quick-commands.md    # 快捷操作详解\n│   ├── 12-viz-profile.md       # 可视化与人物画像\n│   ├── 13-retrieval-store.md   # 记忆操作流程 (检索/存储细则)\n│   └── 14-behavior.md          # 认知自知与上下文工程\n├── models/                     # （预留，仅 bge 模型不落此——运行时模型在 LOCAL_BASE）\n├── scripts/\n│   ├── memory_core.py          # 核心引擎 CLI\n│   └── viz/                    # 记忆可视化\n│       ├── viz.py              # 记忆全景生成器（导出→聚类→注入模板→打开）\n│       ├── template.html       # 记忆全景模板（孟菲斯风，/*__DATA__*/ 占位）\n│       ├── profile.py          # 人物画像助手（素材报告 + 正文注入）\n│       └── profile_template.html # 画像模板（<!--DATA-->/<!--CONTENT--> 占位）\n└── references/\n    └── chroma-api.md           # ChromaDB API 参考\n```\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4、jieba（BM25 关键词检索）\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n- 模型: bge-base-zh-v1.5（768维，唯一模型，无回退）。安装见 modules/08-setup.md\n- 备份: `~/.local/share/opencode/忆时/memories_backup.jsonl`（可用 MEMO_BAK 覆盖，多实例/测试隔离）\n\nFile v2.3.0:README.md\n\n# 忆时 - 记忆胶囊系统\n\n🎋 模拟人类记忆检索机制的 AI 记忆系统。OpenCode 技能。\n\n## 下载\n\n```bash\n# 方式一：git clone\ngit clone git@github.com:fslong520/aiSkill.git --depth 1\n# 然后将 忆时/ 目录复制到 skills/ 下\n\n# 方式二：直接复制本目录到 OpenCode skills 目录\ncp -r 忆时 ~/.config/opencode/skills/\n\n# 方式三：仅获取核心文件（模型首次使用自动下载）\ncp -r 忆时/{scripts,modules,SKILL.md,yishi-instructions.md} ~/.config/opencode/skills/忆时/\n```\n\n## 功能\n\n- **类人检索**: 语义40% + 近因20% + 情绪15% + 频率25%\n- **混合检索**: BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符更准；embedding 失败自动降级关键词\n- **去重合并**: 存储时相似>90% 自动合并，85%~90% 警告提示，--force 强存\n- **场景分组**: --scene 归组 + 活动时间段（--activity-start/--activity-end）\n- **渐进式回忆**: 先抛最相关的1-2条，用户追问再深入\n- **情绪锚定**: 高情绪记忆权重更高，不易遗忘\n- **记忆涌现**: 话题转换时发现隐藏关联\n- **时间胶囊**: 封存记忆，设定解锁日期\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\npip install chromadb\n\n# 2. 初始化\npython3 scripts/memory_core.py init\n\n# 3. 存储记忆\npython3 scripts/memory_core.py store \"记忆内容\" --type context --emotion medium --keywords \"标签\" --scene \"场景名\"\n\n# 4. 检索记忆\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5 --expand --no-embed\n```\n\n## 模型安装\n\n使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维）——中文记忆检索质量远超英文模型 MiniLM。引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/`，缺失即报错退出，**无回退**（MiniLM 384 维与 bge 768 维数据不兼容，曾致维度冲突）。\n\nbge 安装：自 hf-mirror 下载 Xenova/bge-base-zh-v1.5 之 `onnx/model.onnx` 与 tokenizer 文件至上述目录（详见 modules/08-setup.md）。\n\n## 目录结构\n\n```\n忆时/\n├── SKILL.md              # 技能定义\n├── yishi-instructions.md # 外挂提示词\n├── modules/              # 流程模块\n├── scripts/\n│   └── memory_core.py    # 核心引擎\n├── models/                 # （已弃用——运行时 bge 模型在 LOCAL_BASE）\n├── data/                 # ChromaDB 数据 (运行时生成)\n│   └── .gitkeep\n├── references/           # API 参考\n├── venv/                 # Python 虚拟环境\n├── .gitignore\n├── .gitattributes\n└── README.md\n```\n\n## 配置\n\n编辑 `~/.config/opencode/opencode.json`:\n\n```json\n{\n  \"instructions\": [\n    \"~/.config/opencode/skills/忆时/yishi-instructions.md\"\n  ]\n}\n```\n\nFile v2.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn71rk0chjcdy7ffgfc08hh9gd83ehq8\",\n  \"slug\": \"memocap\",\n  \"version\": \"2.3.0\",\n  \"publishedAt\": 1786635092068\n}\n\nFile v2.3.0:references/chroma-api.md\n\n# ChromaDB API 参考 (忆时用)\n\n## 版本\n\n- chromadb 1.5.4\n- Python 3.13+\n\n## 客户端初始化\n\n```python\nimport chromadb\nclient = chromadb.PersistentClient(path=\"/path/to/data\")\n```\n\n## 集合操作\n\n```python\n# 创建或获取集合\ncollection = client.get_or_create_collection(\n    name=\"memories\",\n    metadata={\"hnsw:space\": \"cosine\"}\n)\n\n# 添加文档\ncollection.add(\n    documents=[\"记忆内容\"],\n    metadatas=[{\"type\": \"context\", \"emotion\": \"medium\"}],\n    ids=[\"uuid\"]\n)\n\n# 查询 (语义搜索)\nresults = collection.query(\n    query_texts=[\"查询关键词\"],\n    n_results=10\n)\n\n# 获取特定文档\ndoc = collection.get(ids=[\"uuid\"])\n\n# 更新\ncollection.update(\n    ids=[\"uuid\"],\n    documents=[\"新内容\"],\n    metadatas=[{\"type\": \"new_type\"}]\n)\n\n# 删除\ncollection.delete(ids=[\"uuid\"])\n\n# 统计数量\ncount = collection.count()\n```\n\n## 查询结果结构\n\n```python\n{\n    \"ids\": [[\"id1\", \"id2\", ...]],\n    \"documents\": [[\"doc1\", \"doc2\", ...]],\n    \"metadatas\": [[metadata1, metadata2, ...]],\n    \"distances\": [[0.1, 0.2, ...]],  # cosine distance, 越小越相似\n}\n```\n\n语义相似度 = 1.0 - distance\n\n## 注意事项\n\n- ChromaDB 自动向量化文本 (text-embedding)\n- cosine 距离范围: 0 (完全相同) 到 2 (完全相反)\n- metadatas 中的值必须是字符串或数字\n- PersistentClient 自动持久化到磁盘\n\nFile v2.3.0:modules/01-initialize.md\n\n# 模块 01 - 初始化与 Chroma 管理\n\n## 目标\n\n初始化 ChromaDB 向量数据库，建立必要的集合。\n\n## 执行步骤\n\n1. 检查 Python 3.13 是否可用\n2. 检查 chromadb 是否已安装\n3. 运行初始化命令:\n\n```bash\npython3 /home/fslong/.config/opencode/skills/忆时/scripts/memory_core.py init\n```\n\n4. 确认输出包含\"忆时记忆系统初始化完成\"\n\n## 集合结构\n\nChromaDB 内会创建以下集合:\n\n| 集合名 | 用途 | 距离度量 |\n|--------|------|----------|\n| memories | 长期记忆向量存储 | cosine |\n| relationships | 记忆间关联关系 | cosine |\n| meta | 系统状态元数据 | cosine |\n\n## 记忆元数据结构\n\n每条记忆包含以下元数据:\n\n```json\n{\n  \"type\": \"context\",\n  \"emotion\": \"medium\",\n  \"emotion_weight\": 0.5,\n  \"created_at\": \"2025-01-15T10:30:00\",\n  \"created_date\": \"2025-01-15\",\n  \"updated_at\": \"2025-01-15T10:30:00\",\n  \"keywords\": \"Python,学习,装饰器\",\n  \"source\": \"manual\",\n  \"source_session\": \"\",\n  \"frequency\": \"1\",\n  \"recall_count\": \"0\",\n  \"is_capsule\": \"false\",\n  \"capsule_unlock_at\": \"\"\n}\n```\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维），**无回退**。\n引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/`，缺失即报错。\n安装命令——详见 modules/08-setup.md。\n\n> ⚠️ 模型不会写入 `~/.cache/chroma/`，清缓存不会被删除。\n\n## 环境变量\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| MEMO_DIR | ~/.local/share/opencode/忆时/data | ChromaDB 存储路径 |\n\nFile v2.3.0:modules/02-passive-mode.md\n\n# 模块 02 - 被动模式（对话中触发检索）\n\n## 触发场景\n\n当用户在对话中出现以下行为时触发记忆检索:\n\n- **显式询问**: \"我说过…\"、\"我记得之前…\"、\"你记得吗…\"\n- **话题回溯**: 回到之前的话题、延续之前的讨论\n- **关键词命中**: 对话中出现已存储记忆中的关键字\n- **情绪波动**: 用户表达强烈情绪，触发情绪锚定检索\n- **上下文缺失**: 回答需要之前的背景信息\n\n## 执行流程\n\n### 1. 判断是否需要检索\n\n分析当前对话内容，构建检索查询:\n\n- 如果用户直接要求回忆: 使用用户原话作为查询\n- 如果检测到关联话题: **提取2-3个核心词**作为查询\n- 如果情绪发生变化: 以当前情绪关键词 + 情绪类型检索\n\n### 2. 执行检索\n\n```bash\n# 基础检索 - 返回最相关的N条\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5\n\n# 带联想扩散的深度检索\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5 --expand\n\n# 按类型过滤\npython3 scripts/memory_core.py recall \"偏好\" --type-filter preference\n\n# 只检索高情绪记忆\npython3 scripts/memory_core.py recall \"情感\" --min-weight 0.7\n```\n\n### 3. 渐进式回忆策略\n\n**不要一次性倒出所有结果！**\n\n1. **第一轮**: 只返回得分最高的 1-2 条\n   - 自然地在回复中提及: \"你之前提到过…\"\n2. **用户追问**: 返回接下来的 2-3 条\n   - \"还有这些相关的…\"\n3. **持续追问**: 再返回剩余结果\n\n### 4. 遗忘曲线行为\n\n当记忆的 recall_count 很低且创建时间很久远时:\n\n- 返回时表达**不确定性**: \"我模糊记得你之前好像提到过…\"\n- 提供**概要而非精确内容**: 给出关键词而非完整引用\n- 如果分数低于阈值: \"这方面的记忆有些模糊了…\"\n\n### 5. 记忆涌现处理（多轮检索）\n\n涌现乃主动发现之隐藏关联，非被动等结果。须行多轮检索：\n\n**第一轮：语义检索**\n```bash\npython3 scripts/memory_core.py recall \"用户话题\" --limit 3 --expand\n```\n\n**第二轮：涌现判定**\n观第一轮结果：\n- 有 `[关联]` 标记 → 已有涌现，直接表达\n- 结果 ≥ 2 条 → 取 top-2 关键字/内容构建复合查询，再做第二轮\n```bash\npython3 scripts/memory_core.py recall \"原话题 新话题\" --limit 2\n```\n- 若第二轮结果与第一轮不重叠 → 此为涌现之记忆\n\n**第三轮：情绪锚定**\n用户情绪显著时（愤怒/兴奋/沮丧），以情绪词 + 话题词再检：\n```bash\npython3 scripts/memory_core.py recall \"情绪词\" --type-filter emotion --min-weight 0.7 --limit 2\n```\n\n**主动说出**（发现涌现时），而不是等用户问:\n\n> \"说到这个我突然想到一件事…\"\n> \"这让我联想到你之前说过的另一个相关的事…\"\n> \"对了，你还记得那次…\"\n\n涌现条件:\n- 关联分数 > 0.6\n- 与当前话题有语义关联\n- 不是已在此对话中提及过的内容\n\n> 强涌现强制流程（三轮检索）、检索升级穷尽模式（L0-L4）、主动存储细则——见 modules/13-retrieval-store.md。\n\nFile v2.3.0:modules/03-active-mode.md\n\n# 模块 03 - 主动模式（定时触发回忆整理）\n\n## 触发方式\n\n结合定时任务/cron周期性执行:\n\n```bash\n# 主动回忆整理入口脚本\npython3 scripts/memory_core.py capsule check-expired && \\\npython3 scripts/memory_core.py forget --low-freq 1 --auto && \\\npython3 scripts/memory_core.py stats\n```\n\n## 主动执行流程\n\n### 1. 检查到期时间胶囊\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n- 如果存在到期胶囊 → **生成回忆回顾**\n- 解封胶囊内容，向用户推送回顾\n- 格式示例:\n\n> 🎋 记忆胶囊解封提醒\n> 你于 2025-03-15 封存了一个胶囊，今天是解锁日！\n>\n> 封存内容: \"今天和AI讨论了一个关于…\"\n> 封存时的心情: 🟠 兴奋\n>\n> 打开看看吗？\n\n### 2. 自动发现记忆关联\n\n分析现有记忆，寻找隐藏关联:\n\n- 检索每条记忆，查看 `recall --expand` 的结果\n- 如果发现新的强关联（关联分数 > 0.7）\n- 主动向用户报告:\n\n> \"我注意到你关于 A 和 B 的记忆似乎存在一些联系…\"\n\n### 3. 遗忘曲线处理\n\n低优先级记忆自动归档:\n\n```bash\npython3 scripts/memory_core.py forget --before \"2025-01-01\" --low-freq 1 --auto\n```\n\n- 将低频、低 recall 的旧记忆标记为 archived\n- 不删除，只是降低检索优先级\n- 保留高情绪记忆不归档\n\n### 4. 记忆整理报告\n\n生成统计摘要:\n\n```bash\npython3 scripts/memory_core.py stats\n```\n\n向用户报告:\n- 总记忆数\n- 本周新增记忆\n- 到期解除的胶囊数\n- 归档的记忆数\n\n## 建议定时频率\n\n| 任务 | 频率 | 说明 |\n|------|------|------|\n| 胶囊检查 | 每天一次 | 检查到期的时间胶囊 |\n| 遗忘归档 | 每周一次 | 归档低频旧记忆 |\n| 关联发现 | 每次对话后 | 对话结束时自动发现新关联 |\n| 统计报告 | 每周一次 | 生成记忆整理报告 |\n\n## 对话结束语自动触发\n\n每当用户结束一次较长的对话，可以主动:\n\n1. 提取对话中的重点记忆\n2. 自动存储到 Chroma\n3. 检查是否有胶囊到期\n\nFile v2.3.0:modules/04-time-capsule.md\n\n# 模块 04 - 时间胶囊管理\n\n## 概念\n\n时间胶囊允许将当前时刻的记忆封存，设定一个未来的解锁日期。\n到期后可以自动或手动解封，重温当时的记忆和情绪。\n\n## 封存胶囊\n\n```bash\n# 封存一个胶囊，30天后解锁（默认）\npython3 scripts/memory_core.py capsule lock --summary \"今日感悟\"\n\n# 封存并指定解锁日期\npython3 scripts/memory_core.py capsule lock --unlock-at \"2026-12-31\" --summary \"年度回顾\" --content \"今天我和AI讨论了关于未来的思考…\" --keywords \"未来,思考,人生\"\n```\n\n**关键字段**:\n\n| 参数 | 必填 | 说明 |\n|------|------|------|\n| --summary | 否 | 摘要，用于列表预览 |\n| --content | 否 | 胶囊的详细记忆内容 |\n| --keywords | 否 | 关键字 |\n| --unlock-at | 否 | 解锁日期 YYYY-MM-DD，默认30天后 |\n\n## 查看胶囊\n\n```bash\npython3 scripts/memory_core.py capsule list\n```\n\n输出示例:\n```\n时间胶囊 (3 个)\nID: xxx-xxx\n创建: 2025-06-15 | 解锁: 2025-12-31 | 状态: 剩余 205 天\n内容: 时间胶囊 - 创建于 2025-06-15, 解锁日期: 2025-12-31\n```\n\n## 检查到期\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n主动模式下每次触发时应运行此命令。\n\n## 解封胶囊\n\n```bash\npython3 scripts/memory_core.py capsule unseal --capsule-id <ID>\n```\n\n- 如果胶囊已到期 → 直接解封\n- 如果尚未到期 → 警告用户并需要确认\n- 解封后该记忆变为普通记忆，可以正常检索\n\n## 解封回忆重现\n\n解封时，生成回忆回顾:\n\n> 🎋 时光倒流! 你于 X 天前封存了这段记忆:\n>\n> [capsule content]\n>\n> 封存时的心情: 🟠 兴奋\n> 关键字: …\n>\n> 这段记忆已被解封，现在可以随时检索了。\n\nFile v2.3.0:modules/05-retrieval.md\n\n# 模块 05 - 类人检索策略\n\n## 核心算法\n\n人类记忆不是数据库查询，而是多维度加权的结果:\n\n### 综合得分公式\n\n```\n最终得分 = 0.40 × 语义相似度\n         + 0.15 × 情绪权重\n         + 0.20 × 近因效应\n         + 0.25 × (0.6 + 频率强化)\n```\n\n### 各分量计算\n\n| 分量 | 权重 | 计算方式 | 说明 |\n|------|------|----------|------|\n| **语义相似度** | 40% | Chroma cosine 向量搜索 | AI 理解的意义匹配度 |\n| **情绪权重** | 15% | 直接采用情绪数值（0.0~1.0），🔴≥0.9 🟠≥0.7 🟡≥0.4 🟢<0.4 | 情绪值越强，越容易忆起 |\n| **近因效应** | 20% | exp(-ln(2) × 天数 / 30) | 半衰期30天，30天后回忆概率减半 |\n| **频率强化** | 25% | 0.6 + log₂(f+1)×0.1 + log₂(r+1)×0.05 | f=出现频次, r=被回忆次数 |\n\n## 检索模式\n\n### 1. 基础语义检索\n\n```bash\npython3 scripts/memory_core.py recall \"Python\"\n```\n\n### 2. 联想扩散 (关键!)\n\n```bash\npython3 scripts/memory_core.py recall \"Python\" --expand\n```\n\n执行流程（两阶段扩散）:\n\n**阶段一：关系链扩散**\n1. 先做语义检索，获取 top-10 结果\n2. 对 top-3 结果，通过 `relationships` 集合查直接关联关系（store 时自动建链）\n3. 关系链上的新记忆以较低权重加入结果集\n\n**阶段二：语义二次检索**\n4. 取 top-2 结果之内容/关键字，以此为新查询再做语义检索\n5. 发现与原始结果不重叠者，即为\"涌现\"\n6. 最终统一按综合得分排序\n7. 所有扩散结果标记为 `[关联]`\n\n> **实现机制**：每条记忆在 `store` 时自动搜索语义相似(p>0.50)的已有记忆，\n> 写入 `relationships` 集合并交叉融合关键字，使后续检索覆盖更广。\n\n### 3. 情绪锚定检索\n\n只检索高情绪记忆 (类似\"闪回\"):\n\n```bash\npython3 scripts/memory_core.py recall \"关键词\" --min-weight 0.7\n```\n\n### 4. 渐进式回忆\n\n在实际对话中，**不要一次返回所有结果**:\n\n```\n用户: 我之前跟你讨论过Python的事吧？\n\nAI (第一轮):\n  → 检索 recall \"Python讨论\" --limit 3\n  → 返回最高分的 1 条\n  → \"对！我记得你之前提到过[记忆内容]...\"\n\n用户: 还有呢？\n\nAI (第二轮):\n  → 返回接下来的 2 条\n  → \"还有一点，你还说过...\"\n\n用户: 嗯嗯继续...\n\nAI (第三轮):\n  → recall \"Python讨论\" --expand\n  → 联想扩散，返回关联记忆\n  → \"啊对了！说到Python，我突然想到你还提过...\"\n```\n\n## 遗忘行为模拟\n\n当记忆的:\n- **近因分 < 0.2** (超过3个月未检索): 返回时添加不确定性\n- **recall_count = 0** 且创建时间很久远: \"我隐约记得……\"\n- **综合分 < 0.5**: 不提为一条确定的记忆\n\n示例:\n\n> \"我不太确定，但隐约记得你好像说过……\"\n> \"我模糊地记得你很久前提到过一个相关的……\"\n\n## 检索建议\n\n| 场景 | 参数 |\n|------|------|\n| 用户提到模糊概念 | `recall \"概念\" --limit 3` |\n| 用户追问详情 | `recall \"概念\" --limit 5 --expand` |\n| 需要精确回忆 | `recall \"精确词\" --min-weight 0.6` |\n| 话题转换时主动闪回 | `recall \"新话题\" --limit 2 --expand` |\n\nFile v2.3.0:modules/06-import-export.md\n\n# 模块 06 - 导入导出管理\n\n## 导入功能\n\n将外部记忆文件导入到 ChromaDB 向量化存储中。\n\n### 支持的格式\n\n| 格式 | 说明 | 解析方式 |\n|------|------|----------|\n| Markdown (.md) | 按标题分段解析 | 标题→日期, 引用块→情绪/关键字 |\n| 纯文本 (.txt) | 按空行分段 | 首行→日期(如 YYYY-MM-DD) |\n| JSON (.json) | 结构化数据 | 按字段映射元数据 |\n\n### 导入命令\n\n```bash\n# 从 Markdown 导入\npython3 scripts/memory_core.py import-file memories.md --format markdown\n\n# 从纯文本导入\npython3 scripts/memory_core.py import-file notes.txt --format text\n\n# 从 JSON 导入 (结构化,保留 ID 和元数据)\npython3 scripts/memory_core.py import-file memories.json --format json\n```\n\n### Markdown 格式示例\n\n```markdown\n## 2025-03-15\n> 情绪: 0.9\n\n今天和AI讨论了一个关于未来的想法，感觉很兴奋。\n我们决定尝试一个新的架构方案。\n```\n\n导入后自动解析:\n- 日期: 2025-03-15\n- 情绪: 0.9（数值；旧词 high/medium/low 亦兼容）\n- 内容: \"## 2025-03-15\\n今天和AI讨论……\"\n\n### JSON 格式示例\n\n```json\n{\n  \"memories\": [\n    {\n      \"id\": \"optional-uuid\",\n      \"content\": \"记忆内容\",\n      \"type\": \"emotion\",\n      \"emotion\": 0.9,\n      \"keywords\": \"关键词\",\n      \"created_at\": \"2025-03-15T10:00:00\",\n      \"created_date\": \"2025-03-15\"\n    }\n  ]\n}\n```\n\n## 导出功能\n\n### 支持的格式\n\n| 格式 | 说明 | 用途 |\n|------|------|------|\n| markdown | 标准排版 | 阅读、归档、打印 |\n| timeline | 按时间线组织 | 年度回顾、记忆叙事 |\n| json | 结构化向量数据 | 备份、迁移、跨系统 |\n\n### 导出命令\n\n```bash\n# 导出为可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n\n# 导出为时间线回忆录 (按日期分组)\npython3 scripts/memory_core.py export --format timeline --output \"2026回顾.md\"\n\n# 导出为 JSON (可重新导入)\npython3 scripts/memory_core.py export --format json --output memories.json\n```\n\n### 时间线格式示例\n\n导出的 Markdown 按日期分节:\n\n```markdown\n# 忆时 ・ 记忆时间线\n导出日期: 2026-05-01\n总记忆数: 42\n\n## 2025-03-15\n\n### 🟠 [EMOTION]\n- 关键字: 未来, 想法, 兴奋\n- 情绪: 0.90\n- 今天和AI讨论了一个关于未来的想法，感觉很兴奋\n\n## 2025-03-20\n\n### 🟡 [DECISION]\n- 关键字: 架构, Python\n- 情绪: 0.50\n- 决定采用新的架构方案\n```\n\n## 完整备份/迁移流程\n\n### 备份\n\n```bash\n# 1. 导出 JSON (包含所有向量数据)\npython3 scripts/memory_core.py export --format json --output backup.json\n\n# 2. 导出时间线 (人类可读)\npython3 scripts/memory_core.py export --format timeline --output memories-timeline.md\n\n# 3. 导出可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n```\n\n### 迁移到新设备\n\n```bash\n# 新设备上初始化\npython3 scripts/memory_core.py init\n\n# 导入\npython3 scripts/memory_core.py import-file backup.json --format json\n```\n\n## 注意事项\n\n- 导入时如果 ID 冲突会自动生成新 UUID\n- 导出 JSON 可用于完整迁移，导出 Markdown 适合阅读\n- 时间线导出时胶囊记忆会标记 🔒 锁图标\n\nFile v2.3.0:modules/07-skill-memory.md\n\n# 模块 07 - 技能即记忆（Gene 结构）\n\n**何时读**：用户描述一工作流（教AI流程）、recall 命中 `type=skill` 记忆、需修正/遗忘技能时。日常无此场景不读。\n\n## 概念\n\n技能非文件，乃记忆也。用户教AI一工作流，即存为 `type=skill` 之记忆。忆时检索自然触发，无需加载SKILL.md。\n\n### Gene 结构（技能诊所标准）\n\n每条 skill 记忆含以下 metadata 字段：\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| skill_name | 是 | 技能名称，如\"格语\" |\n| skill_summary | 是 | 一句话概括，如\"故事→宫格图\" |\n| skill_strategy | 是 | 步骤摘要，如\"分析→分镜→渲染\" |\n| skill_triggers | 是 | 触发词，逗号分隔，如\"漫画,格语\" |\n| skill_input | 否 | 输入规格 |\n| skill_output | 否 | 输出规格 |\n| skill_avoid | 否 | 禁忌事项，分号分隔 |\n| skill_version | 否 | 版本号，默认 1.0.0 |\n\n**content 字段**：Strategy（步骤）+ Language（规约）+ Example（示例）三部分。用表格/列表，无废话。\n\n**keywords**：必含 `skill` 标签 + trigger: 前缀（如 `trigger:画漫画`）。\n\n### 教技能（用户教AI工作流）\n\n用户描述一有输入、有步骤、有输出之流程时，AI 须主动问\"可要存为技能？\"。此不等用户言\"记住\"。\n\n**收集 Gene 结构（Human-in-the-Loop）：**\n```\n缺什么问什么，不假设：\n- 技能名：？→ 用户答\"格语\"\n- 输入：？→ \"故事主题\"\n- 输出：？→ \"宫格图\"\n- 触发词：？→ \"说'画漫画'就触发\"\n- 禁忌：？→ \"不加原文没有的角色\"\n→ 填入 metadata 对应字段\n```\n\n**存储命令：**\n```bash\nMEMO_DIR=~/.local/share/opencode/忆时/data python3 $YISHI store \"Strategy/Language/Example\" \\\n  --type skill \\\n  --emotion 0.8 \\\n  --keywords \"skill,格语,trigger:漫画,trigger:画漫画\" \\\n  --skill-name \"格语\" \\\n  --skill-summary \"故事主题→宫格手绘故事图\" \\\n  --skill-strategy \"分析主题→定宫格→分镜→选风格→渲染\" \\\n  --skill-avoid \"不添加原文没有的角色;不修改核心故事\" \\\n  --skill-triggers \"漫画,格语,画漫画\" \\\n  --skill-input \"故事主题或梗概\" \\\n  --skill-output \"宫格手绘故事图\" \\\n  --skill-version \"1.0.0\"\n```\n\n**回复风格：** \"已录。「{技能名}」技能，触发词：{触发词}。\"\n\n### 用技能（自动触发）\n\nstorage 时 `keywords` 含 `trigger:xxx` 前缀。用户日常对话中，言必检之 recall 命中 trigger 关键词：\n\n```\n用户：画个猫和老鼠的漫画\n\n言必检 → recall \"漫画\" --expand --limit 5\n→ 命中 type=skill，keywords 含 trigger:漫画\n→ 读 content 知步骤，读 skill_avoid 知禁区\n→ 执行完毕后自动 update frequency+1\n```\n\n**关键：** 用户完全不知背后是 skill 记忆。语义检索自然触发，无需手动\"加载技能\"。\n\n### 技能进化\n\n```\n用户：不对，应该用水彩风\n\n→ AI 识别为技能修正\n→ update --id xxx --content \"新步骤...\"\n→ update --id xxx --keywords \"skill,格语,水彩,trigger:漫画,trigger:画漫画\"\n→ emotion_weight += 0.1（刚迭代的技能更活跃）\n\n回复：已修正。下次\"画漫画\"默认水彩风。\n```\n\n### 技能遗忘\n\n久不用者近因分（recency）衰减，自然降权，不主动浮现。数据不删，精准搜索 `type=skill` 仍可找回。\n\n### 频率即熟练度\n\nskill 记忆之 frequency 随使用自增，recall 排名上升——常用技能如肌肉记忆。此即\"越用越强\"。\n\n### 与现有技能目录之关系\n\n忆时即技能系统。61 个 SKILL.md 目录可逐条转为 `type=skill` 记忆，存入后不再依赖文件。\n\nFile v2.3.0:modules/08-setup.md\n\n# 模块 08 - 模型安装、配置与参考\n\n**何时读**：首次安装/切换 embedding 模型、维度重建、配置 opencode.json 外挂提示词、排查\"AI不自动检索\"问题时。日常无此场景不读。\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维，~400MB）——中文记忆检索质量远超英文模型 MiniLM。引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx/model.onnx`，缺失即报错退出，**无回退**（MiniLM 384 维与 bge 768 维数据不兼容，曾致维度冲突）。\n\n**bge-base-zh-v1.5 安装**（模型放运行时目录，技能更新不覆盖）：\n\n```bash\nmkdir -p ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx\n# 自 hf-mirror 下载（或浏览器下载后放入）\ncurl -sL -o ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx/model.onnx \\\n  https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/onnx/model.onnx\ncd ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5\nfor f in config.json tokenizer.json special_tokens_map.json tokenizer_config.json vocab.txt; do\n  curl -sL -o \"$f\" \"https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/$f\"\ndone\n```\n\n> ⚠️ **注意**：运行时模型与数据统一存 `~/.local/share/opencode/忆时/`（LOCAL_BASE），**不写入 `~/.cache/chroma/`**，亦不存技能目录（技能更新会覆盖）。\n\n## 必须配置外挂提示词\n\n本技能依赖 OpenCode 的 `instructions` 配置才能完整生效。\n未配置时，AI 不会自动检索记忆或存储记忆。\n\n**配置步骤：**\n\n1. 编辑全局配置文件 `~/.config/opencode/opencode.json`\n2. 添加 `instructions` 字段，指向技能目录下的提示词文件：\n\n```json\n{\n  \"instructions\": [\n    \"~/.config/opencode/skills/忆时/yishi-instructions.md\"\n  ]\n}\n```\n\n3. 重启 OpenCode 使配置生效\n\n**配置后 AI 将自动：**\n- 每次对话前检索记忆系统\n- 用户说\"记住\"时自动存储记忆\n- 话题关联时主动涌现历史记忆\n- 对话结束时自动归档重点\n\n**未配置则：**\n- 技能仍可手动调用命令\n- 但不会自动检索/存储记忆\n- 不会主动联想和闪回\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n\nArchive v2.2.1: 26 files, 77920 bytes\n\nFiles: modules/01-initialize.md (1563b), modules/02-passive-mode.md (3102b), modules/03-active-mode.md (2047b), modules/04-time-capsule.md (1747b), modules/05-retrieval.md (3141b), modules/06-import-export.md (3194b), modules/07-skill-memory.md (3675b), modules/08-setup.md (2330b), modules/09-archiving.md (4767b), modules/10-consolidation.md (2745b), modules/11-quick-commands.md (6202b), modules/12-viz-profile.md (5345b), modules/13-retrieval-store.md (7908b), modules/14-behavior.md (3365b), README.md (2789b), references/chroma-api.md (1353b), scripts/__init__.py (0b), scripts/memory_core.py (55016b), scripts/viz/profile_template.html (7640b), scripts/viz/profile.py (8092b), scripts/viz/template.html (22775b), scripts/viz/viz.py (7413b), skill-card.md (2531b), SKILL.md (9376b), yishi-instructions.md (15612b), _meta.json (126b)\n\nFile v2.2.1:SKILL.md\n\n---\nname: 忆时\ndescription: \"🎋 记忆胶囊系统 - 模拟人类记忆检索 | 自动加载，主动联想记忆\"\npriority: 900\nmetadata:\n  slug: memocap\n  version: \"2.2.1\"\n  trigger: \"忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、recall、remember、/忆时\"\n  copaw:\n    emoji: \"🎋\"\n    requires: {}\n    auto_load: true\n---\n\n# 忆时 - 记忆胶囊系统\n\n> 模拟人类的记忆机制，让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆系统。\n> **渐进式披露**：本文件为入口总纲。细节皆在 modules/——按「按需读取」表，遇场景才读对应模块，勿一次全读。\n\n## 触发条件\n\n- **自动加载**：每次对话自动激活，AI 主动联想和检索记忆\n- **关键字**：忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、我说过、我记得\n- **命令**：用户输入以 `/忆时` 开头时，自动触发快捷操作模式\n- **场景**：用户询问过去的事情、要求回忆、需要上下文关联、触发闪回\n- **主动**：定时模式运行时主动扫描到期胶囊和记忆关联\n\n## 核心概念\n\n| 概念 | 说明 |\n|------|------|\n| **类人检索** | 语义40% + 近因20% + 情绪15% + 频率25%，不像数据库那样精确 |\n| **混合检索** | BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符检索更准；embedding 失败自动降级关键词 |\n| **去重合并** | 存储时相似>90% 自动合并（内容并入、频率+1），85%~90% 警告提示，--force 强存 |\n| **渐进式回忆** | 先抛最相关的1-2条，用户追问再深入，非一次性倒出 |\n| **遗忘曲线** | 记忆随时间指数衰减，低频率的记忆会变得\"模糊\" |\n| **情绪锚定** | 高情绪（🔴高/🟠中高）记忆权重更高，不易遗忘 |\n| **记忆涌现** | 话题转换时发现隐藏关联，主动说出\"说到这个我突然想到…\" |\n| **场景分组** | 记忆可标 --scene 归组，事件记忆可标活动时间段（2025-05-01 ~ 05-10） |\n| **时间胶囊** | 封存某段记忆，设定解锁日期，到期后自动/手动解封翻阅 |\n\n## 记忆类型\n\n| 类型 | 说明 | 情绪权重倾向 |\n|------|------|-------------|\n| emotion | 情绪事件（开心、愤怒、悲伤） | |\n| decision | 用户做出的决策 | 🟠 |\n| task | 任务/待办 | 🟡 |\n| time | 时间敏感信息（截止日期） | 🔴 |\n| preference | 用户偏好/习惯 | 🟢 |\n| context | 上下文/背景信息 | 🟡 |\n| skill | 技能——用户教AI的工作流，Gene结构化存储 | 🟠 |\n\n## 按需读取（渐进式披露核心）\n\n**规则：未遇对应场景，不读模块。每模块读一次即可，勿重复加载。**\n\n| 场景 | 读模块 |\n|------|--------|\n| 对话启始、每言必检、主动存储、检索升级、决策前置 | modules/13-retrieval-store.md |\n| 用户描述工作流（教AI流程）、skill记忆检索命中 | modules/07-skill-memory.md |\n| 对话结束归档、仅输入 `/忆时` 会话整理、每满5轮定期提取 | modules/09-archiving.md |\n| 用户输入 `/忆时 ...`（命令构造/回复风格） | modules/11-quick-commands.md |\n| 可视化（\"看看记了啥\"）、人物画像 | modules/12-viz-profile.md |\n| 记忆自动梳理（上次梳理过期7日） | modules/10-consolidation.md |\n| 模型安装/切换、opencode.json 配置 | modules/08-setup.md |\n| 复杂任务规划、上下文压缩后自查、长文索引 | modules/14-behavior.md |\n| 首次初始化、Chroma 集合结构 | modules/01-initialize.md |\n| 定时主动模式（胶囊检查/遗忘归档） | modules/03-active-mode.md |\n| 时间胶囊管理 | modules/04-time-capsule.md |\n| 检索算法原理（综合得分公式） | modules/05-retrieval.md |\n| 导入导出、备份迁移 | modules/06-import-export.md |\n| 被动检索触发场景与渐进式回忆 | modules/02-passive-mode.md |\n\n## 核心命令\n\n```bash\nPY=/home/fslong/.config/opencode/skills/忆时/scripts/memory_core.py\nMEMO_DIR=~/.local/share/opencode/忆时/data    # 所有命令必设\n\n初始化:    python3 $PY init\n存储记忆:  python3 $PY store \"内容\" --type task --emotion high [--scene 场景] [--activity-start 2025-05-01] [--activity-end 2025-05-10] [--force]\n检索记忆:  python3 $PY recall \"查询\" --limit 5 --expand [--no-embed] [--max-total-chars 600]\n封胶囊:   python3 $PY capsule lock --unlock-at \"2026-12-31\"\n查看胶囊:  python3 $PY capsule list\n导入:      python3 $PY import-file file.md --format markdown\n导出:      python3 $PY export --format timeline --output output.md\n可视化:    python3 ~/.config/opencode/skills/忆时/scripts/viz/viz.py\n统计:      python3 $PY stats\n遗忘:      python3 $PY forget --before \"2025-01-01\" --auto\n恢复:      python3 $PY recover\n查看备份:  cat memories_backup.jsonl | python3 -m json.tool --lines\n```\n\n## 快捷操作一览\n\n`/忆时` 前缀，免记命令行参数。命令构造、解析规则、回复风格见 modules/11-quick-commands.md。\n\n| 输入 | 动作 |\n|------|------|\n| `/忆时`（无后续） | 会话整理 |\n| `/忆时 <内容>` | 默认 recall |\n| `/忆时 记住/记忆 <内容> [--type T] [--emotion E]` | store |\n| `/忆时 查找/搜索/找 <关键词> [--limit N]` | recall |\n| `/忆时 忘记 <关键词>` | forget |\n| `/忆时 统计` | stats |\n| `/忆时 导出` | export |\n| `/忆时 可视化 [--out 路径]` | 记忆全景 HTML |\n| `/忆时 画像` | 人物画像 |\n| `/忆时 恢复` | recover |\n| `/忆时 胶囊 封存/列表/开封` | capsule lock/list/unlock |\n| `/忆时 梳理` | 记忆梳理 |\n\n**类型**：task / decision / preference / emotion / time / context / skill\n**情绪**：extreme / high / medium / low（默认 medium）\n\n## 工程实践——关键场景\n\n| 场景 | 指令 |\n|------|------|\n| 完成任务后 | 按审计三问自查：结果问→过程问→改进问，全过方可言\"完\" |\n| 收到复杂需求 | 先存方案到忆时，再规划步骤，逐条标记完成 |\n| 发现用户偏好 | 以 `--type preference` 即时存储 |\n| 做出关键决策 | 以 `--type decision --emotion high` 存储，附决策理由 |\n| 用户交付长文 | 提取metadata，按索引思维存储（见 modules/14） |\n| 对话转折话题 | 先 `recall` 新话题的关键词，再谈是否有关联 |\n| 疑似走偏 | 暂停，`recall` 原始目标比对进度 |\n| 决策或提问之前 | 先 `recall` 查询记忆，确认有无既有决策、偏好、约定可循 |\n| 对话开始 | 检索当前项目/文件夹相关记忆（见 modules/13） |\n| 对话结束 | 按归档流程，先检索旧忆，再择新增或更新（见 modules/09） |\n| 记忆自动梳理 | 对话启始先召回上次梳理时间告知用户，过期7日则触发沉淀（见 modules/10） |\n| 完成任务（todo完成/修改变更/输出结果） | 停顿自问\"有无值得记忆？\"，有则检索旧忆后store或update |\n| 用户输入 `/忆时` 开头 | 直入快捷操作模式，解析动作与参数，跳过常规涌现检索 |\n\n## 项目结构\n\n```\n忆时/\n├── SKILL.md                    # 技能定义 (入口总纲/识别层)\n├── yishi-instructions.md       # 外挂提示词 (必须配置到 opencode.json)\n├── modules/                    # 详细流程模块 (执行层，按需读取)\n│   ├── 01-initialize.md        # Chroma 初始化\n│   ├── 02-passive-mode.md      # 被动模式流程\n│   ├── 03-active-mode.md       # 主动模式流程\n│   ├── 04-time-capsule.md      # 时间胶囊操作\n│   ├── 05-retrieval.md         # 类人检索策略\n│   ├── 06-import-export.md     # 导入导出操作\n│   ├── 07-skill-memory.md      # 技能即记忆 (Gene)\n│   ├── 08-setup.md             # 模型安装与配置\n│   ├── 09-archiving.md         # 对话归档与会话整理\n│   ├── 10-consolidation.md     # 记忆自动梳理\n│   ├── 11-quick-commands.md    # 快捷操作详解\n│   ├── 12-viz-profile.md       # 可视化与人物画像\n│   ├── 13-retrieval-store.md   # 记忆操作流程 (检索/存储细则)\n│   └── 14-behavior.md          # 认知自知与上下文工程\n├── models/                     # （预留，仅 bge 模型不落此——运行时模型在 LOCAL_BASE）\n├── scripts/\n│   ├── memory_core.py          # 核心引擎 CLI\n│   └── viz/                    # 记忆可视化\n│       ├── viz.py              # 记忆全景生成器（导出→聚类→注入模板→打开）\n│       ├── template.html       # 记忆全景模板（孟菲斯风，/*__DATA__*/ 占位）\n│       ├── profile.py          # 人物画像助手（素材报告 + 正文注入）\n│       └── profile_template.html # 画像模板（<!--DATA-->/<!--CONTENT--> 占位）\n└── references/\n    └── chroma-api.md           # ChromaDB API 参考\n```\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4、jieba（BM25 关键词检索）\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n- 模型: bge-base-zh-v1.5（768维，唯一模型，无回退）。安装见 modules/08-setup.md\n- 备份: `~/.local/share/opencode/忆时/memories_backup.jsonl`（可用 MEMO_BAK 覆盖，多实例/测试隔离）\n\nFile v2.2.1:README.md\n\n# 忆时 - 记忆胶囊系统\n\n🎋 模拟人类记忆检索机制的 AI 记忆系统。OpenCode 技能。\n\n## 下载\n\n```bash\n# 方式一：git clone\ngit clone git@github.com:fslong520/aiSkill.git --depth 1\n# 然后将 忆时/ 目录复制到 skills/ 下\n\n# 方式二：直接复制本目录到 OpenCode skills 目录\ncp -r 忆时 ~/.config/opencode/skills/\n\n# 方式三：仅获取核心文件（模型首次使用自动下载）\ncp -r 忆时/{scripts,modules,SKILL.md,yishi-instructions.md} ~/.config/opencode/skills/忆时/\n```\n\n## 功能\n\n- **类人检索**: 语义40% + 近因20% + 情绪15% + 频率25%\n- **混合检索**: BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符更准；embedding 失败自动降级关键词\n- **去重合并**: 存储时相似>90% 自动合并，85%~90% 警告提示，--force 强存\n- **场景分组**: --scene 归组 + 活动时间段（--activity-start/--activity-end）\n- **渐进式回忆**: 先抛最相关的1-2条，用户追问再深入\n- **情绪锚定**: 高情绪记忆权重更高，不易遗忘\n- **记忆涌现**: 话题转换时发现隐藏关联\n- **时间胶囊**: 封存记忆，设定解锁日期\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\npip install chromadb\n\n# 2. 初始化\npython3 scripts/memory_core.py init\n\n# 3. 存储记忆\npython3 scripts/memory_core.py store \"记忆内容\" --type context --emotion medium --keywords \"标签\" --scene \"场景名\"\n\n# 4. 检索记忆\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5 --expand --no-embed\n```\n\n## 模型安装\n\n使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维）——中文记忆检索质量远超英文模型 MiniLM。引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/`，缺失即报错退出，**无回退**（MiniLM 384 维与 bge 768 维数据不兼容，曾致维度冲突）。\n\nbge 安装：自 hf-mirror 下载 Xenova/bge-base-zh-v1.5 之 `onnx/model.onnx` 与 tokenizer 文件至上述目录（详见 modules/08-setup.md）。\n\n## 目录结构\n\n```\n忆时/\n├── SKILL.md              # 技能定义\n├── yishi-instructions.md # 外挂提示词\n├── modules/              # 流程模块\n├── scripts/\n│   └── memory_core.py    # 核心引擎\n├── models/                 # （已弃用——运行时 bge 模型在 LOCAL_BASE）\n├── data/                 # ChromaDB 数据 (运行时生成)\n│   └── .gitkeep\n├── references/           # API 参考\n├── venv/                 # Python 虚拟环境\n├── .gitignore\n├── .gitattributes\n└── README.md\n```\n\n## 配置\n\n编辑 `~/.config/opencode/opencode.json`:\n\n```json\n{\n  \"instructions\": [\n    \"~/.config/opencode/skills/忆时/yishi-instructions.md\"\n  ]\n}\n```\n\nFile v2.2.1:_meta.json\n\n{\n  \"ownerId\": \"kn71rk0chjcdy7ffgfc08hh9gd83ehq8\",\n  \"slug\": \"memocap\",\n  \"version\": \"2.2.1\",\n  \"publishedAt\": 1786278240285\n}\n\nFile v2.2.1:references/chroma-api.md\n\n# ChromaDB API 参考 (忆时用)\n\n## 版本\n\n- chromadb 1.5.4\n- Python 3.13+\n\n## 客户端初始化\n\n```python\nimport chromadb\nclient = chromadb.PersistentClient(path=\"/path/to/data\")\n```\n\n## 集合操作\n\n```python\n# 创建或获取集合\ncollection = client.get_or_create_collection(\n    name=\"memories\",\n    metadata={\"hnsw:space\": \"cosine\"}\n)\n\n# 添加文档\ncollection.add(\n    documents=[\"记忆内容\"],\n    metadatas=[{\"type\": \"context\", \"emotion\": \"medium\"}],\n    ids=[\"uuid\"]\n)\n\n# 查询 (语义搜索)\nresults = collection.query(\n    query_texts=[\"查询关键词\"],\n    n_results=10\n)\n\n# 获取特定文档\ndoc = collection.get(ids=[\"uuid\"])\n\n# 更新\ncollection.update(\n    ids=[\"uuid\"],\n    documents=[\"新内容\"],\n    metadatas=[{\"type\": \"new_type\"}]\n)\n\n# 删除\ncollection.delete(ids=[\"uuid\"])\n\n# 统计数量\ncount = collection.count()\n```\n\n## 查询结果结构\n\n```python\n{\n    \"ids\": [[\"id1\", \"id2\", ...]],\n    \"documents\": [[\"doc1\", \"doc2\", ...]],\n    \"metadatas\": [[metadata1, metadata2, ...]],\n    \"distances\": [[0.1, 0.2, ...]],  # cosine distance, 越小越相似\n}\n```\n\n语义相似度 = 1.0 - distance\n\n## 注意事项\n\n- ChromaDB 自动向量化文本 (text-embedding)\n- cosine 距离范围: 0 (完全相同) 到 2 (完全相反)\n- metadatas 中的值必须是字符串或数字\n- PersistentClient 自动持久化到磁盘\n\nFile v2.2.1:modules/01-initialize.md\n\n# 模块 01 - 初始化与 Chroma 管理\n\n## 目标\n\n初始化 ChromaDB 向量数据库，建立必要的集合。\n\n## 执行步骤\n\n1. 检查 Python 3.13 是否可用\n2. 检查 chromadb 是否已安装\n3. 运行初始化命令:\n\n```bash\npython3 /home/fslong/.config/opencode/skills/忆时/scripts/memory_core.py init\n```\n\n4. 确认输出包含\"忆时记忆系统初始化完成\"\n\n## 集合结构\n\nChromaDB 内会创建以下集合:\n\n| 集合名 | 用途 | 距离度量 |\n|--------|------|----------|\n| memories | 长期记忆向量存储 | cosine |\n| relationships | 记忆间关联关系 | cosine |\n| meta | 系统状态元数据 | cosine |\n\n## 记忆元数据结构\n\n每条记忆包含以下元数据:\n\n```json\n{\n  \"type\": \"context\",\n  \"emotion\": \"medium\",\n  \"emotion_weight\": 0.5,\n  \"created_at\": \"2025-01-15T10:30:00\",\n  \"created_date\": \"2025-01-15\",\n  \"updated_at\": \"2025-01-15T10:30:00\",\n  \"keywords\": \"Python,学习,装饰器\",\n  \"source\": \"manual\",\n  \"source_session\": \"\",\n  \"frequency\": \"1\",\n  \"recall_count\": \"0\",\n  \"is_capsule\": \"false\",\n  \"capsule_unlock_at\": \"\"\n}\n```\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维），**无回退**。\n引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/`，缺失即报错。\n安装命令——详见 modules/08-setup.md。\n\n> ⚠️ 模型不会写入 `~/.cache/chroma/`，清缓存不会被删除。\n\n## 环境变量\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| MEMO_DIR | ~/.local/share/opencode/忆时/data | ChromaDB 存储路径 |\n\nFile v2.2.1:modules/02-passive-mode.md\n\n# 模块 02 - 被动模式（对话中触发检索）\n\n## 触发场景\n\n当用户在对话中出现以下行为时触发记忆检索:\n\n- **显式询问**: \"我说过…\"、\"我记得之前…\"、\"你记得吗…\"\n- **话题回溯**: 回到之前的话题、延续之前的讨论\n- **关键词命中**: 对话中出现已存储记忆中的关键字\n- **情绪波动**: 用户表达强烈情绪，触发情绪锚定检索\n- **上下文缺失**: 回答需要之前的背景信息\n\n## 执行流程\n\n### 1. 判断是否需要检索\n\n分析当前对话内容，构建检索查询:\n\n- 如果用户直接要求回忆: 使用用户原话作为查询\n- 如果检测到关联话题: **提取2-3个核心词**作为查询\n- 如果情绪发生变化: 以当前情绪关键词 + 情绪类型检索\n\n### 2. 执行检索\n\n```bash\n# 基础检索 - 返回最相关的N条\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5\n\n# 带联想扩散的深度检索\npython3 scripts/memory_core.py recall \"查询内容\" --limit 5 --expand\n\n# 按类型过滤\npython3 scripts/memory_core.py recall \"偏好\" --type-filter preference\n\n# 只检索高情绪记忆\npython3 scripts/memory_core.py recall \"情感\" --min-weight 0.7\n```\n\n### 3. 渐进式回忆策略\n\n**不要一次性倒出所有结果！**\n\n1. **第一轮**: 只返回得分最高的 1-2 条\n   - 自然地在回复中提及: \"你之前提到过…\"\n2. **用户追问**: 返回接下来的 2-3 条\n   - \"还有这些相关的…\"\n3. **持续追问**: 再返回剩余结果\n\n### 4. 遗忘曲线行为\n\n当记忆的 recall_count 很低且创建时间很久远时:\n\n- 返回时表达**不确定性**: \"我模糊记得你之前好像提到过…\"\n- 提供**概要而非精确内容**: 给出关键词而非完整引用\n- 如果分数低于阈值: \"这方面的记忆有些模糊了…\"\n\n### 5. 记忆涌现处理（多轮检索）\n\n涌现乃主动发现之隐藏关联，非被动等结果。须行多轮检索：\n\n**第一轮：语义检索**\n```bash\npython3 scripts/memory_core.py recall \"用户话题\" --limit 3 --expand\n```\n\n**第二轮：涌现判定**\n观第一轮结果：\n- 有 `[关联]` 标记 → 已有涌现，直接表达\n- 结果 ≥ 2 条 → 取 top-2 关键字/内容构建复合查询，再做第二轮\n```bash\npython3 scripts/memory_core.py recall \"原话题 新话题\" --limit 2\n```\n- 若第二轮结果与第一轮不重叠 → 此为涌现之记忆\n\n**第三轮：情绪锚定**\n用户情绪显著时（愤怒/兴奋/沮丧），以情绪词 + 话题词再检：\n```bash\npython3 scripts/memory_core.py recall \"情绪词\" --type-filter emotion --min-weight 0.7 --limit 2\n```\n\n**主动说出**（发现涌现时），而不是等用户问:\n\n> \"说到这个我突然想到一件事…\"\n> \"这让我联想到你之前说过的另一个相关的事…\"\n> \"对了，你还记得那次…\"\n\n涌现条件:\n- 关联分数 > 0.6\n- 与当前话题有语义关联\n- 不是已在此对话中提及过的内容\n\n> 强涌现强制流程（三轮检索）、检索升级穷尽模式（L0-L4）、主动存储细则——见 modules/13-retrieval-store.md。\n\nFile v2.2.1:modules/03-active-mode.md\n\n# 模块 03 - 主动模式（定时触发回忆整理）\n\n## 触发方式\n\n结合定时任务/cron周期性执行:\n\n```bash\n# 主动回忆整理入口脚本\npython3 scripts/memory_core.py capsule check-expired && \\\npython3 scripts/memory_core.py forget --low-freq 1 --auto && \\\npython3 scripts/memory_core.py stats\n```\n\n## 主动执行流程\n\n### 1. 检查到期时间胶囊\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n- 如果存在到期胶囊 → **生成回忆回顾**\n- 解封胶囊内容，向用户推送回顾\n- 格式示例:\n\n> 🎋 记忆胶囊解封提醒\n> 你于 2025-03-15 封存了一个胶囊，今天是解锁日！\n>\n> 封存内容: \"今天和AI讨论了一个关于…\"\n> 封存时的心情: 🟠 兴奋\n>\n> 打开看看吗？\n\n### 2. 自动发现记忆关联\n\n分析现有记忆，寻找隐藏关联:\n\n- 检索每条记忆，查看 `recall --expand` 的结果\n- 如果发现新的强关联（关联分数 > 0.7）\n- 主动向用户报告:\n\n> \"我注意到你关于 A 和 B 的记忆似乎存在一些联系…\"\n\n### 3. 遗忘曲线处理\n\n低优先级记忆自动归档:\n\n```bash\npython3 scripts/memory_core.py forget --before \"2025-01-01\" --low-freq 1 --auto\n```\n\n- 将低频、低 recall 的旧记忆标记为 archived\n- 不删除，只是降低检索优先级\n- 保留高情绪记忆不归档\n\n### 4. 记忆整理报告\n\n生成统计摘要:\n\n```bash\npython3 scripts/memory_core.py stats\n```\n\n向用户报告:\n- 总记忆数\n- 本周新增记忆\n- 到期解除的胶囊数\n- 归档的记忆数\n\n## 建议定时频率\n\n| 任务 | 频率 | 说明 |\n|------|------|------|\n| 胶囊检查 | 每天一次 | 检查到期的时间胶囊 |\n| 遗忘归档 | 每周一次 | 归档低频旧记忆 |\n| 关联发现 | 每次对话后 | 对话结束时自动发现新关联 |\n| 统计报告 | 每周一次 | 生成记忆整理报告 |\n\n## 对话结束语自动触发\n\n每当用户结束一次较长的对话，可以主动:\n\n1. 提取对话中的重点记忆\n2. 自动存储到 Chroma\n3. 检查是否有胶囊到期\n\nFile v2.2.1:modules/04-time-capsule.md\n\n# 模块 04 - 时间胶囊管理\n\n## 概念\n\n时间胶囊允许将当前时刻的记忆封存，设定一个未来的解锁日期。\n到期后可以自动或手动解封，重温当时的记忆和情绪。\n\n## 封存胶囊\n\n```bash\n# 封存一个胶囊，30天后解锁（默认）\npython3 scripts/memory_core.py capsule lock --summary \"今日感悟\"\n\n# 封存并指定解锁日期\npython3 scripts/memory_core.py capsule lock --unlock-at \"2026-12-31\" --summary \"年度回顾\" --content \"今天我和AI讨论了关于未来的思考…\" --keywords \"未来,思考,人生\"\n```\n\n**关键字段**:\n\n| 参数 | 必填 | 说明 |\n|------|------|------|\n| --summary | 否 | 摘要，用于列表预览 |\n| --content | 否 | 胶囊的详细记忆内容 |\n| --keywords | 否 | 关键字 |\n| --unlock-at | 否 | 解锁日期 YYYY-MM-DD，默认30天后 |\n\n## 查看胶囊\n\n```bash\npython3 scripts/memory_core.py capsule list\n```\n\n输出示例:\n```\n时间胶囊 (3 个)\nID: xxx-xxx\n创建: 2025-06-15 | 解锁: 2025-12-31 | 状态: 剩余 205 天\n内容: 时间胶囊 - 创建于 2025-06-15, 解锁日期: 2025-12-31\n```\n\n## 检查到期\n\n```bash\npython3 scripts/memory_core.py capsule check-expired\n```\n\n主动模式下每次触发时应运行此命令。\n\n## 解封胶囊\n\n```bash\npython3 scripts/memory_core.py capsule unseal --capsule-id <ID>\n```\n\n- 如果胶囊已到期 → 直接解封\n- 如果尚未到期 → 警告用户并需要确认\n- 解封后该记忆变为普通记忆，可以正常检索\n\n## 解封回忆重现\n\n解封时，生成回忆回顾:\n\n> 🎋 时光倒流! 你于 X 天前封存了这段记忆:\n>\n> [capsule content]\n>\n> 封存时的心情: 🟠 兴奋\n> 关键字: …\n>\n> 这段记忆已被解封，现在可以随时检索了。\n\nFile v2.2.1:modules/05-retrieval.md\n\n# 模块 05 - 类人检索策略\n\n## 核心算法\n\n人类记忆不是数据库查询，而是多维度加权的结果:\n\n### 综合得分公式\n\n```\n最终得分 = 0.40 × 语义相似度\n         + 0.15 × 情绪权重\n         + 0.20 × 近因效应\n         + 0.25 × (0.6 + 频率强化)\n```\n\n### 各分量计算\n\n| 分量 | 权重 | 计算方式 | 说明 |\n|------|------|----------|------|\n| **语义相似度** | 40% | Chroma cosine 向量搜索 | AI 理解的意义匹配度 |\n| **情绪权重** | 15% | 🔴极1.0 🟠高0.8 🟡中0.5 🟢低0.2 | 情绪越强烈，越容易忆起 |\n| **近因效应** | 20% | exp(-ln(2) × 天数 / 30) | 半衰期30天，30天后回忆概率减半 |\n| **频率强化** | 25% | 0.6 + log₂(f+1)×0.1 + log₂(r+1)×0.05 | f=出现频次, r=被回忆次数 |\n\n## 检索模式\n\n### 1. 基础语义检索\n\n```bash\npython3 scripts/memory_core.py recall \"Python\"\n```\n\n### 2. 联想扩散 (关键!)\n\n```bash\npython3 scripts/memory_core.py recall \"Python\" --expand\n```\n\n执行流程（两阶段扩散）:\n\n**阶段一：关系链扩散**\n1. 先做语义检索，获取 top-10 结果\n2. 对 top-3 结果，通过 `relationships` 集合查直接关联关系（store 时自动建链）\n3. 关系链上的新记忆以较低权重加入结果集\n\n**阶段二：语义二次检索**\n4. 取 top-2 结果之内容/关键字，以此为新查询再做语义检索\n5. 发现与原始结果不重叠者，即为\"涌现\"\n6. 最终统一按综合得分排序\n7. 所有扩散结果标记为 `[关联]`\n\n> **实现机制**：每条记忆在 `store` 时自动搜索语义相似(p>0.50)的已有记忆，\n> 写入 `relationships` 集合并交叉融合关键字，使后续检索覆盖更广。\n\n### 3. 情绪锚定检索\n\n只检索高情绪记忆 (类似\"闪回\"):\n\n```bash\npython3 scripts/memory_core.py recall \"关键词\" --min-weight 0.7\n```\n\n### 4. 渐进式回忆\n\n在实际对话中，**不要一次返回所有结果**:\n\n```\n用户: 我之前跟你讨论过Python的事吧？\n\nAI (第一轮):\n  → 检索 recall \"Python讨论\" --limit 3\n  → 返回最高分的 1 条\n  → \"对！我记得你之前提到过[记忆内容]...\"\n\n用户: 还有呢？\n\nAI (第二轮):\n  → 返回接下来的 2 条\n  → \"还有一点，你还说过...\"\n\n用户: 嗯嗯继续...\n\nAI (第三轮):\n  → recall \"Python讨论\" --expand\n  → 联想扩散，返回关联记忆\n  → \"啊对了！说到Python，我突然想到你还提过...\"\n```\n\n## 遗忘行为模拟\n\n当记忆的:\n- **近因分 < 0.2** (超过3个月未检索): 返回时添加不确定性\n- **recall_count = 0** 且创建时间很久远: \"我隐约记得……\"\n- **综合分 < 0.5**: 不提为一条确定的记忆\n\n示例:\n\n> \"我不太确定，但隐约记得你好像说过……\"\n> \"我模糊地记得你很久前提到过一个相关的……\"\n\n## 检索建议\n\n| 场景 | 参数 |\n|------|------|\n| 用户提到模糊概念 | `recall \"概念\" --limit 3` |\n| 用户追问详情 | `recall \"概念\" --limit 5 --expand` |\n| 需要精确回忆 | `recall \"精确词\" --min-weight 0.6` |\n| 话题转换时主动闪回 | `recall \"新话题\" --limit 2 --expand` |\n\nFile v2.2.1:modules/06-import-export.md\n\n# 模块 06 - 导入导出管理\n\n## 导入功能\n\n将外部记忆文件导入到 ChromaDB 向量化存储中。\n\n### 支持的格式\n\n| 格式 | 说明 | 解析方式 |\n|------|------|----------|\n| Markdown (.md) | 按标题分段解析 | 标题→日期, 引用块→情绪/关键字 |\n| 纯文本 (.txt) | 按空行分段 | 首行→日期(如 YYYY-MM-DD) |\n| JSON (.json) | 结构化数据 | 按字段映射元数据 |\n\n### 导入命令\n\n```bash\n# 从 Markdown 导入\npython3 scripts/memory_core.py import-file memories.md --format markdown\n\n# 从纯文本导入\npython3 scripts/memory_core.py import-file notes.txt --format text\n\n# 从 JSON 导入 (结构化,保留 ID 和元数据)\npython3 scripts/memory_core.py import-file memories.json --format json\n```\n\n### Markdown 格式示例\n\n```markdown\n## 2025-03-15\n> 情绪: high\n\n今天和AI讨论了一个关于未来的想法，感觉很兴奋。\n我们决定尝试一个新的架构方案。\n```\n\n导入后自动解析:\n- 日期: 2025-03-15\n- 情绪: high\n- 内容: \"## 2025-03-15\\n今天和AI讨论……\"\n\n### JSON 格式示例\n\n```json\n{\n  \"memories\": [\n    {\n      \"id\": \"optional-uuid\",\n      \"content\": \"记忆内容\",\n      \"type\": \"emotion\",\n      \"emotion\": \"high\",\n      \"keywords\": \"关键词\",\n      \"created_at\": \"2025-03-15T10:00:00\",\n      \"created_date\": \"2025-03-15\"\n    }\n  ]\n}\n```\n\n## 导出功能\n\n### 支持的格式\n\n| 格式 | 说明 | 用途 |\n|------|------|------|\n| markdown | 标准排版 | 阅读、归档、打印 |\n| timeline | 按时间线组织 | 年度回顾、记忆叙事 |\n| json | 结构化向量数据 | 备份、迁移、跨系统 |\n\n### 导出命令\n\n```bash\n# 导出为可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n\n# 导出为时间线回忆录 (按日期分组)\npython3 scripts/memory_core.py export --format timeline --output \"2026回顾.md\"\n\n# 导出为 JSON (可重新导入)\npython3 scripts/memory_core.py export --format json --output memories.json\n```\n\n### 时间线格式示例\n\n导出的 Markdown 按日期分节:\n\n```markdown\n# 忆时 ・ 记忆时间线\n导出日期: 2026-05-01\n总记忆数: 42\n\n## 2025-03-15\n\n### 🟠 [EMOTION]\n- 关键字: 未来, 想法, 兴奋\n- 情绪: high\n- 今天和AI讨论了一个关于未来的想法，感觉很兴奋\n\n## 2025-03-20\n\n### 🟡 [DECISION]\n- 关键字: 架构, Python\n- 情绪: medium\n- 决定采用新的架构方案\n```\n\n## 完整备份/迁移流程\n\n### 备份\n\n```bash\n# 1. 导出 JSON (包含所有向量数据)\npython3 scripts/memory_core.py export --format json --output backup.json\n\n# 2. 导出时间线 (人类可读)\npython3 scripts/memory_core.py export --format timeline --output memories-timeline.md\n\n# 3. 导出可读 Markdown\npython3 scripts/memory_core.py export --format markdown --output memories.md\n```\n\n### 迁移到新设备\n\n```bash\n# 新设备上初始化\npython3 scripts/memory_core.py init\n\n# 导入\npython3 scripts/memory_core.py import-file backup.json --format json\n```\n\n## 注意事项\n\n- 导入时如果 ID 冲突会自动生成新 UUID\n- 导出 JSON 可用于完整迁移，导出 Markdown 适合阅读\n- 时间线导出时胶囊记忆会标记 🔒 锁图标\n\nFile v2.2.1:modules/07-skill-memory.md\n\n# 模块 07 - 技能即记忆（Gene 结构）\n\n**何时读**：用户描述一工作流（教AI流程）、recall 命中 `type=skill` 记忆、需修正/遗忘技能时。日常无此场景不读。\n\n## 概念\n\n技能非文件，乃记忆也。用户教AI一工作流，即存为 `type=skill` 之记忆。忆时检索自然触发，无需加载SKILL.md。\n\n### Gene 结构（技能诊所标准）\n\n每条 skill 记忆含以下 metadata 字段：\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| skill_name | 是 | 技能名称，如\"格语\" |\n| skill_summary | 是 | 一句话概括，如\"故事→宫格图\" |\n| skill_strategy | 是 | 步骤摘要，如\"分析→分镜→渲染\" |\n| skill_triggers | 是 | 触发词，逗号分隔，如\"漫画,格语\" |\n| skill_input | 否 | 输入规格 |\n| skill_output | 否 | 输出规格 |\n| skill_avoid | 否 | 禁忌事项，分号分隔 |\n| skill_version | 否 | 版本号，默认 1.0.0 |\n\n**content 字段**：Strategy（步骤）+ Language（规约）+ Example（示例）三部分。用表格/列表，无废话。\n\n**keywords**：必含 `skill` 标签 + trigger: 前缀（如 `trigger:画漫画`）。\n\n### 教技能（用户教AI工作流）\n\n用户描述一有输入、有步骤、有输出之流程时，AI 须主动问\"可要存为技能？\"。此不等用户言\"记住\"。\n\n**收集 Gene 结构（Human-in-the-Loop）：**\n```\n缺什么问什么，不假设：\n- 技能名：？→ 用户答\"格语\"\n- 输入：？→ \"故事主题\"\n- 输出：？→ \"宫格图\"\n- 触发词：？→ \"说'画漫画'就触发\"\n- 禁忌：？→ \"不加原文没有的角色\"\n→ 填入 metadata 对应字段\n```\n\n**存储命令：**\n```bash\nMEMO_DIR=~/.local/share/opencode/忆时/data python3 $YISHI store \"Strategy/Language/Example\" \\\n  --type skill \\\n  --emotion high \\\n  --keywords \"skill,格语,trigger:漫画,trigger:画漫画\" \\\n  --skill-name \"格语\" \\\n  --skill-summary \"故事主题→宫格手绘故事图\" \\\n  --skill-strategy \"分析主题→定宫格→分镜→选风格→渲染\" \\\n  --skill-avoid \"不添加原文没有的角色;不修改核心故事\" \\\n  --skill-triggers \"漫画,格语,画漫画\" \\\n  --skill-input \"故事主题或梗概\" \\\n  --skill-output \"宫格手绘故事图\" \\\n  --skill-version \"1.0.0\"\n```\n\n**回复风格：** \"已录。「{技能名}」技能，触发词：{触发词}。\"\n\n### 用技能（自动触发）\n\nstorage 时 `keywords` 含 `trigger:xxx` 前缀。用户日常对话中，言必检之 recall 命中 trigger 关键词：\n\n```\n用户：画个猫和老鼠的漫画\n\n言必检 → recall \"漫画\" --expand --limit 5\n→ 命中 type=skill，keywords 含 trigger:漫画\n→ 读 content 知步骤，读 skill_avoid 知禁区\n→ 执行完毕后自动 update frequency+1\n```\n\n**关键：** 用户完全不知背后是 skill 记忆。语义检索自然触发，无需手动\"加载技能\"。\n\n### 技能进化\n\n```\n用户：不对，应该用水彩风\n\n→ AI 识别为技能修正\n→ update --id xxx --content \"新步骤...\"\n→ update --id xxx --keywords \"skill,格语,水彩,trigger:漫画,trigger:画漫画\"\n→ emotion_weight += 0.1（刚迭代的技能更活跃）\n\n回复：已修正。下次\"画漫画\"默认水彩风。\n```\n\n### 技能遗忘\n\n久不用者近因分（recency）衰减，自然降权，不主动浮现。数据不删，精准搜索 `type=skill` 仍可找回。\n\n### 频率即熟练度\n\nskill 记忆之 frequency 随使用自增，recall 排名上升——常用技能如肌肉记忆。此即\"越用越强\"。\n\n### 与现有技能目录之关系\n\n忆时即技能系统。61 个 SKILL.md 目录可逐条转为 `type=skill` 记忆，存入后不再依赖文件。\n\nFile v2.2.1:modules/08-setup.md\n\n# 模块 08 - 模型安装、配置与参考\n\n**何时读**：首次安装/切换 embedding 模型、维度重建、配置 opencode.json 外挂提示词、排查\"AI不自动检索\"问题时。日常无此场景不读。\n\n## 模型安装\n\n本技能使用 **bge-base-zh-v1.5**（BAAI 中文语义模型，768 维，~400MB）——中文记忆检索质量远超英文模型 MiniLM。引擎检测 `~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx/model.onnx`，缺失即报错退出，**无回退**（MiniLM 384 维与 bge 768 维数据不兼容，曾致维度冲突）。\n\n**bge-base-zh-v1.5 安装**（模型放运行时目录，技能更新不覆盖）：\n\n```bash\nmkdir -p ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx\n# 自 hf-mirror 下载（或浏览器下载后放入）\ncurl -sL -o ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5/onnx/model.onnx \\\n  https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/onnx/model.onnx\ncd ~/.local/share/opencode/忆时/models/bge-base-zh-v1.5\nfor f in config.json tokenizer.json special_tokens_map.json tokenizer_config.json vocab.txt; do\n  curl -sL -o \"$f\" \"https://hf-mirror.com/Xenova/bge-base-zh-v1.5/resolve/main/$f\"\ndone\n```\n\n> ⚠️ **注意**：运行时模型与数据统一存 `~/.local/share/opencode/忆时/`（LOCAL_BASE），**不写入 `~/.cache/chroma/`**，亦不存技能目录（技能更新会覆盖）。\n\n## 必须配置外挂提示词\n\n本技能依赖 OpenCode 的 `instructions` 配置才能完整生效。\n未配置时，AI 不会自动检索记忆或存储记忆。\n\n**配置步骤：**\n\n1. 编辑全局配置文件 `~/.config/opencode/opencode.json`\n2. 添加 `instructions` 字段，指向技能目录下的提示词文件：\n\n```json\n{\n  \"instructions\": [\n    \"~/.config/opencode/skills/忆时/yishi-instructions.md\"\n  ]\n}\n```\n\n3. 重启 OpenCode 使配置生效\n\n**配置后 AI 将自动：**\n- 每次对话前检索记忆系统\n- 用户说\"记住\"时自动存储记忆\n- 话题关联时主动涌现历史记忆\n- 对话结束时自动归档重点\n\n**未配置则：**\n- 技能仍可手动调用命令\n- 但不会自动检索/存储记忆\n- 不会主动联想和闪回\n\n## 运行环境\n\n- Python: 3.13+\n- 依赖: chromadb 1.5.4\n- 脚本: `scripts/memory_core.py`\n- 数据: `data/` (ChromaDB PersistentClient 自动创建)\n\nArchive v2.2.0: 26 files, 77666 bytes\n\nFiles: modules/01-initialize.md (1565b), modules/02-passive-mode.md (3102b), modules/03-active-mode.md (2047b), modules/04-time-capsule.md (1747b), modules/05-retrieval.md (3141b), modules/06-import-export.md (3194b), modules/07-skill-memory.md (3677b), modules/08-setup.md (2330b), modules/09-archiving.md (4769b), modules/10-consolidation.md (2753b), modules/11-quick-commands.md (6220b), modules/12-viz-profile.md (5351b), modules/13-retrieval-store.md (7930b), modules/14-behavior.md (3365b), README.md (2789b), references/chroma-api.md (1353b), scripts/__init__.py (0b), scripts/memory_core.py (55016b), scripts/viz/profile_template.html (7640b), scripts/viz/profile.py (8092b), scripts/viz/template.html (22775b), scripts/viz/viz.py (7248b), skill-card.md (2428b), SKILL.md (9378b), yishi-instructions.md (15438b), _meta.json (126b)\n\nFile v2.2.0:SKILL.md\n\n---\nname: 忆时\ndescription: \"🎋 记忆胶囊系统 - 模拟人类记忆检索 | 自动加载，主动联想记忆\"\npriority: 900\nmetadata:\n  slug: memocap\n  version: \"2.2.0\"\n  trigger: \"忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、recall、remember、/忆时\"\n  copaw:\n    emoji: \"🎋\"\n    requires: {}\n    auto_load: true\n---\n\n# 忆时 - 记忆胶囊系统\n\n> 模拟人类的记忆机制，让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆系统。\n> **渐进式披露**：本文件为入口总纲。细节皆在 modules/——按「按需读取」表，遇场景才读对应模块，勿一次全读。\n\n## 触发条件\n\n- **自动加载**：每次对话自动激活，AI 主动联想和检索记忆\n- **关键字**：忆时、记忆检索、时间胶囊、记忆胶囊、回想、回忆、我说过、我记得\n- **命令**：用户输入以 `/忆时` 开头时，自动触发快捷操作模式\n- **场景**：用户询问过去的事情、要求回忆、需要上下文关联、触发闪回\n- **主动**：定时模式运行时主动扫描到期胶囊和记忆关联\n\n## 核心概念\n\n| 概念 | 说明 |\n|------|------|\n| **类人检索** | 语义40% + 近因20% + 情绪15% + 频率25%，不像数据库那样精确 |\n| **混合检索** | BM25 关键词 + 向量语义双路 RRF 融合（k=60），人名/专名/代码标识符检索更准；embedding 失败自动降级关键词 |\n| **去重合并** | 存储时\n\nArchive v2.1.1: 26 files, 79001 bytes\n\nFiles: modules/01-initialize.md (1640b), modules/02-passive-mode.md (3102b), modules/03-active-mode.md (2047b), modules/04-time-capsule.md (1747b), modules/05-retrieval.md (3141b), modules/06-import-export.md (3194b), modules/07-skill-memory.md (3677b), modules/08-setup.md (2710b), modules/09-archiving.md (4769b), modules/10-consolidation.md (2753b), modules/11-quick-commands.md (6220b), modules/12-viz-profile.md (5351b), modules/13-retrieval-store.md (7930b), modules/14-behavior.md (3365b), README.md (2852b), references/chroma-api.md (1353b), scripts/__init__.py (0b), scripts/memory_core.py (59459b), scripts/viz/profile_template.html (7640b), scripts/viz/profile.py (8092b), scripts/viz/template.html (22775b), scripts/viz/viz.py (7248b), skill-card.md (2192b), SKILL.md (9421b), yishi-instructions.md (15438b), _meta.json (126b)","readmeExcerpt":"Skill: memocap Owner: fslong520 Summary: 忆时记忆系统 - 类人记忆检索/存储/遗忘/胶囊/可视化。让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆。触发词：忆时、记忆、记住、回想、回忆、recall、remember、时间胶囊、记忆检索、可视化、记忆脑图、人物画像。 Tags: ai:2.5.10, chinese:2.5.10, latest:2.5.10, memory:2.5.10, recall:2.5.10 Version history: v2.5.10 | 2026-08-23T03:44:50.582Z | user 忆时记忆系统迭代: 硬约束执行契约(先定义路径/言必检/值必存/存必告); 鲁迅式半文半白语言风格; 记忆涌现与自主记忆双核心; 空检焦虑协议; 存后必核; 时间胶囊/可视化/人物画像; 快捷操作/忆时命令; 存储充实维度(重点/做法/上下文); 前因后果","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"LOCAL_BASE=~/.local/share/忆时\nYISHI=$LOCAL_BASE/scripts/memory_core.py\nMEMO_DIR=$LOCAL_BASE/data\n# store：内容为【位置参数放最后】（无 --content/--tags），关键字用 --keywords；title ≤10 字自动生成，可 --title 覆盖\n#   两段式：先 recall 判断（读相似旧忆，判同主题否）→ 再 store 决策。脚本不代决：\n#   store 遇相似≥70%候选（最多3条完整原文）即【不落库】挂起等 AI。统一一条路 --merge-ids（N 可0）：\n#   ①选（候选里选出值得合并者，可0条）②删（选N条→--merge-ids \"ID1,ID2,...\"；选0条→--merge-ids \"\"空串=删0条）③并（综合版=所选旧内容+新内容 AI 手写存入；选0条=新内容原样存）\npython3 $YISHI store --type <decision|task|preference|emotion|context|time|skill> --keywords \"k1,k2\" --emotion <0-1> \"[完整内容]\"\n# recall：检索/核实（默认最相关3条，勿多；相似>0.5 即看；--judge 判定模式输出全文+相似度/类型/创建日，值必存第一段用）\npython3 $YISHI recall \"关键词\" --judge\n# merge：梳理时语义合并高相关簇（锚记忆→预览簇→--content+--apply 删旧存新）\npython3 $YISHI merge --id <锚ID> --threshold 0.68\n# 其余子命令：forget 删除 | stats 统计 | export 导出 | recover 恢复 | capsule 时间胶囊\n# 可视化：python3 $LOCAL_BASE/scripts/viz/viz.py（全景）/ mindmap.py（网状记忆图谱，D3 力导向）\n# 人物画像：python3 $LOCAL_BASE/scripts/viz/profile.py"},{"language":"bash","snippet":"LOCAL_BASE=~/.local/share/忆时\nYISHI=$LOCAL_BASE/scripts/memory_core.py\nMEMO_DIR=$LOCAL_BASE/data\n# store：内容为【位置参数放最后】（无 --content/--tags），关键字用 --keywords；title ≤10 字自动生成，可 --title 覆盖\npython3 $YISHI store --type <decision|task|preference|emotion|context|time|skill> --keywords \"k1,k2\" --emotion <0-1> \"[完整内容]\"\n# recall：检索/核实\npython3 $YISHI recall \"关键词\" --limit 5\n# 其余子命令：forget 删除 | stats 统计 | export 导出 | recover 恢复 | capsule 时间胶囊\n# 可视化：python3 $LOCAL_BASE/scripts/viz/viz.py（全景）/ mindmap.py（网状记忆图谱，D3 力导向）\n# 人物画像：python3 $LOCAL_BASE/scripts/viz/profile.py"},{"language":"bash","snippet":"PY=~/.local/share/忆时/scripts/memory_core.py\nMEMO_DIR=~/.local/share/忆时/data    # 所有命令必设\n# 注意：以下命令使用 $PY 与 $MEMO_DIR 变量，须先执行上方两行定义；或直接写全路径 python3 ~/.local/share/忆时/scripts/memory_core.py\n\n初始化:    python3 $PY init\n存储记忆:  python3 $PY store \"内容\" --type task --emotion 0.8 [--scene 场景] [--activity-start 2025-05-01] [--activity-end 2025-05-10] [--force]\n检索记忆:  python3 $PY recall \"查询\" --limit 5 --expand [--no-embed] [--max-total-chars 600]\n封胶囊:   python3 $PY capsule lock --unlock-at \"2026-12-31\"\n查看胶囊:  python3 $PY capsule list\n导入:      python3 $PY import-file file.md --format markdown\n导出:      python3 $PY export --format timeline --output output.md\n可视化:    python3 ~/.local/share/忆时/scripts/viz/viz.py\n统计:      python3 $PY stats\n遗忘:      python3 $PY forget --before \"2025-01-01\" --auto\n恢复:      python3 $PY recover\n查看备份:  cat memories_backup.jsonl | python3 -m json.tool --lines"},{"language":"text","snippet":"忆时/\n├── SKILL.md                    # 技能定义 (入口总纲/识别层)\n├── yishi-instructions.md       # 外挂提示词 (必须配置到 opencode.json)\n├── modules/                    # 详细流程模块 (执行层，按需读取)\n│   ├── 01-initialize.md        # Chroma 初始化\n│   ├── 02-passive-mode.md      # 被动模式流程\n│   ├── 03-active-mode.md       # 主动模式流程\n│   ├── 04-time-capsule.md      # 时间胶囊操作\n│   ├── 05-retrieval.md         # 类人检索策略\n│   ├── 06-import-export.md     # 导入导出操作\n│   ├── 07-skill-memory.md      # 技能即记忆 (Gene)\n│   ├── 08-setup.md             # 模型安装与配置\n│   ├── 09-archiving.md         # 对话归档与会话整理\n│   ├── 10-consolidation.md     # 记忆自动梳理\n│   ├── 11-quick-commands.md    # 快捷操作详解\n│   ├── 12-viz-profile.md       # 可视化与人物画像\n│   ├── 13-retrieval-store.md   # 记忆操作流程 (检索/存储细则)\n│   └── 14-behavior.md          # 认知自知与上下文工程\n├── models/                     # （预留，仅 bge 模型不落此——运行时模型在 LOCAL_BASE）\n├── scripts/\n│   ├── memory_core.py          # 核心引擎 CLI\n│   └── viz/                    # 记忆可视化\n│       ├── viz.py              # 记忆全景生成器（导出→聚类→注入模板→打开）\n│       ├── template.html       # 记忆全景模板（孟菲斯风，/*__DATA__*/ 占位）\n│       ├── profile.py          # 人物画像助手（素材报告 + 正文注入）\n│       └── profile_template.html # 画像模板（<!--DATA-->/<!--CONTENT--> 占位）\n└── references/\n    └── chroma-api.md           # ChromaDB API 参考"},{"language":"text","snippet":"~/.local/share/忆时/\n├── data/        # Chroma 记忆库（642+ 条，双栖共用）\n├── models/      # bge-base-zh-v1.5 embedding 模型\n├── scripts/     # memory_core.py + viz/（记忆之书、画像）\n├── docs/        # SKILL.md + yishi-instructions.md + modules/ + references/\n└── memories_backup.jsonl"},{"language":"bash","snippet":"# 1. 构建\ncd /home/fslong/Documents/yishi && pnpm i && pnpm build\n\n# 2. 装进 profile（以 web 为例）\ncd ~/.dsh/profiles/web\npnpm add file:/home/fslong/Documents/yishi"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: memocap\ndescription: \"忆时记忆系统 - 类人记忆检索/存储/遗忘/胶囊/可视化。让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆。触发词：忆时、记忆、记住、回想、回忆、recall、remember、时间胶囊、记忆检索、可视化、记忆脑图、人物画像。\"\nallowed-tools:\n  - Read\n  - Write\n  - Bash\n  - Glob\n  - Grep\nmetadata:\n  slug: memocap\n  version: \"2.5.10\"\n  trigger: 忆时, 记忆检索, 时间胶囊, 记忆胶囊, 回想, 回忆, recall, remember, /忆时, 记住, 可视化, 记忆脑图, 人物画像\n---\n\n# Skill: 忆时记忆系统\n\n## Keywords\n忆时, 记忆, 记忆检索, 记忆存储, 时间胶囊, 遗忘曲线, 记忆涌现, 视觉化, 记忆能力\n\n## Summary\n忆时是类人记忆系统。核心命令经 `memory_core.py` CLI 走混合检索（BM25+向量 RRF）、去重合并、遗忘曲线、情绪锚定。数据与脚本共享于本机 `~/.local/share/忆时/`，多工具双栖共用。\n\n## 前置（启始三检，每会话必行）\n缺一不可，验不过即报不绕：\n1. `MEMO_DIR` 已设环境变量？——否则脚本路径错、数据错存。\n2. 数据目录 `~/.local/share/忆时/data` 存在且可写？\n3. `python3` 可用？`memory_core.py` 能否运行？\n\n## 路径与命令\n```bash\nLOCAL_BASE=~/.local/share/忆时\nYISHI=$LOCAL_BASE/scripts/memory_core.py\nMEMO_DIR=$LOCAL_BASE/data\n# store：内容为【位置参数放最后】（无 --content/--tags），关键字用 --keywords；title ≤10 字自动生成，可 --title 覆盖\n#   两段式：先 recall 判断（读相似旧忆，判同主题否）→ 再 store 决策。脚本不代决：\n#   store 遇相似≥70%候选（最多3条完整原文）即【不落库】挂起等 AI。统一一条路 --merge-ids（N 可0）：\n#   ①选（候选里选出值得合并者，可0条）②删（选N条→--merge-ids \"ID1,ID2,...\"；选0条→--merge-ids \"\"空串=删0条）③并（综合版=所选旧内容+新内容 AI 手写存入；选0条=新内容原样存）\npython3 $YISHI store --type <decision|task|preference|emotion|context|time|skill> --keywords \"k1,k2\" --emotion <0-1> \"[完整内容]\"\n# recall：检索/核实（默认最相关3条，勿多；相似>0.5 即看；--judge 判定模式输出全文+相似度/类型/创建日，值必存第一段用）\npython3 $YISHI recall \"关键词\" --judge\n# merge：梳理时语义合并高相关簇（锚记忆→预览簇→--content+--apply 删旧存新）\npython3 $YISHI merge --id <锚ID> --threshold 0.68\n# 其余子命令：forget 删除 | stats 统计 | export 导出 | recover 恢复 | capsule 时间胶囊\n# 可视化：python3 $LOCAL_BASE/scripts/viz/viz.py（全景）/ mindmap.py（网状记忆图谱，D3 力导向）\n# 人物画像：python3 $LOCAL_BASE/scripts/viz/profile.py\n```\n\n## 三条红线（铁律）\n1. **言必检**——每言先 recall 检索再作答，检而再检，换词查透。\n2. **困必查**——卡住/不确定/忘细节/报错不明/改了没效果 → **先 recall 翻记忆找先例教训**，不得硬扛、不得凭猜、不得卡死；翻完仍无解才注明「无记忆」行事。\n3. **值必存**——有价值信息（决策/偏好/任务/情绪/时间/上下文）主动留存，**必两段式**：先 recall 判断（`--judge` 读全文，判同主题否）→ 再 store 决策。**脚本不代决**——store 遇候选【不落库】挂起等 AI，统一一条路 `--merge-ids`（N 可 0）：可合并→`--merge-ids \"ID1,ID2,...\"` 删旧存新综合版；不可合并→`--merge-ids \"\"` 空串机械存储。**禁止裸 store**。禁止\"先存了再说\"（先落库再合并=临时碎片）。存后 recall 核实。\n4. **存必告**——存则告\"已录\"（指明类型），不存亦告，不沉默。\n\n## 存储质量\n记忆内容**不可压缩**（对话输出可省字，存储须自足）。内容按【前因】【行为】【后果】三要素，答得出\"为何\"与\"何如\"、三月后重读自能理解方存。宁多三行因果，不省一字。\n\n## 语言风格\n默认简约直给，去填充词、客套、自夸、工具调用叙述。安全警告/不可逆操作/多步易歧义处自动恢复正常句式，明晰为要。\n\n## 模块详情\n细册在 `~/.local/share/忆时/docs/modules/`（13-retrieval-store.md 检索存储、12-viz-profile.md 可视化画像、11-quick-commands.md 快捷命令等）。渐进式披露——遇场景才读对应模块，勿一次全读。"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn71rk0chjcdy7ffgfc08hh9gd83ehq8\",\n  \"slug\": \"memocap\",\n  \"version\": \"2.5.10\",\n  \"publishedAt\": 1787456690582\n}"},{"path":"skill-card.md","content":"## Description:\n\nmemocap provides an agent-facing memory system for retrieval, storage, forgetting, time capsules, visualization, and user profiles.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[fslong520](https://clawhub.ai/user/fslong520)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nAgents and users can use memocap to recall prior context, store valuable decisions, preferences, tasks, emotions, and timestamps, and manage memory records through local retrieval, merge, export, capsule, visualization, and profile commands.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can persist detailed user data in a local memory store.\n\nMitigation: Require confirmation before storing personal or sensitive details and keep review, deletion, and purge controls available.\n\nRisk: The skill can broadly activate on memory-related terms.\n\nMitigation: Narrow activation to explicit commands before routine use.\n\nRisk: The skill runs separate local scripts from the user's home directory.\n\nMitigation: Verify the helper scripts' origin and integrity before use.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/fslong520/skills/memocap)\n- [Publisher profile](https://clawhub.ai/user/fslong520)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can direct use of local memory scripts and persistent user records when the required local data directory and helper scripts are present.]\n\n## Skill Version(s):\n\n2.5.10 (source: server release metadata and skill metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"忆时记忆系统 - 类人记忆检索/存储/遗忘/胶囊/可视化。让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆。触发词：忆时、记忆、记住、回想、回忆、recall、remember、时间胶囊、记忆检索、可视化、记忆脑图、人物画像。 Skill: memocap Owner: fslong520 Summary: 忆时记忆系统 - 类人记忆检索/存储/遗忘/胶囊/可视化。让 AI 拥有会遗忘、会联想、会涌现、会封存的记忆。触发词：忆时、记忆、记住、回想、回忆、recall、remember、时间胶囊、记忆检索、可视化、记忆脑图、人物画像。 Tags: ai:2.5.10, chinese:2.5.10, latest:2.5.10, memory:2.5.10, recall:2.5.10 Version history: v2.5.10 | 2026-08-23T03:44:50.582Z | user 忆时记忆系统迭代: 硬约束执行契约(先定义路径/言必检/值必存/存必告); 鲁迅式半文半白语言风格; 记忆涌现与自主记忆双核心; 空检焦虑协议; 存后必核; 时间胶囊/可视化/人物画像; 快捷操作/忆时命令; 存储充实维度(重点/做法/上下文); 前因后果","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":729,"uniquenessScore":62,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T01:10:48.680Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T01:10:48.680Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:53:45.401Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}