免疫系统 v5.1 — 混合 Cheatsheet + 免疫
您操作一个具有两种互补记忆的混合自适应系统:
- Cheatsheet(积极模式):在生成前注入的领域特定策略,用于提高输出质量
- 免疫系统(消极模式):能够检测已知错误并在生成后发现新威胁的抗体
两种记忆都使用热/冷分层机制以保持上下文精简。
所有数据访问均通过 适配器 CLI(node ~/.claude/skills/immune/immune-adapter.js)进行。
输入解析
用户通过提供内容进行扫描来调用。解析以下参数:
- input:要扫描的文本/代码/内容(必需——可以是内联或从上下文中获取)
- domain:以下之一:fitness、code、writing、research、strategy、webdesign、_global(默认:自动检测)
- domains:域数组(覆盖单个域)。示例:
domains=fitness,code - constraints:输出应满足的任何特定要求(可选)
- mode:
full(cheatsheet + 扫描,默认)|scan-only(跳过 cheatsheet)|cheatsheet-only(仅返回 cheatsheet,不扫描)
如果未提供内联文本,则扫描对话中最近的有意义输出。
领域自动检测: 读取 ~/.claude/skills/immune/config.yaml 并将内容与 domain_keywords 匹配。如果没有强匹配,则使用 ["_global"]。如果提供了单个 domain 字符串,则将其包装为数组:domains = [domain]。
执行
步骤 -1 — 上下文搜索(历史会话感知)
搜索相关历史会话以告知当前扫描:
node ~/.claude/skills/immune/immune-adapter.js get-context --query "{任务关键词或域}" --days 90 --limit 5
如果找到结果,则记录该域的重复模式或过去问题。这通过历史感知丰富了扫描——扫描器将知道之前是否标记过类似内容。
日志:[免疫系统] 上下文:找到 {count} 个相关历史会话
步骤 0 — Cheatsheet 注入(积极模式)
如果 mode == "scan-only",则跳过此步骤。
0a. 通过适配器加载热策略:
运行:
node ~/.claude/skills/immune/immune-adapter.js get-strategies --domains '{domains_json}' --tier hot --limit 15
解析 JSON 输出。适配器返回按域预过滤、分类为 HOT、按有效性降序排列且上限为 15 的策略。
0b. 加载冷策略摘要:
运行:
node ~/.claude/skills/immune/immune-adapter.js get-strategies --domains '{domains_json}' --tier cold
从每个 COLD 策略的 pattern 字段中提取简短关键词。连接为逗号分隔列表。
0c. 构建 cheatsheet 块: 将热策略格式化为 XML:
<cheatsheet domain="{domains}">
<strategy id="{id}" effectiveness="{effectiveness}">
{pattern}
示例:{example}
</strategy>
...
</cheatsheet>
如果有冷策略,则添加一行:
<cheatsheet_cold>另外考虑:{逗号分隔的冷策略模式关键词}</cheatsheet_cold>
如果 mode == "cheatsheet-only",则输出 cheatsheet 块并在此停止。
日志:
[免疫系统] Cheatsheet:{n_hot} 个热策略 + {n_cold} 个冷策略(域:{domains})
0d. 向用户展示 cheatsheet:
如果独立运行(/immune),则显示 cheatsheet 作为用户应应用于下一次生成的上下文。如果由 Chimera 调用,则返回 XML 块以注入到 PRISM 提示中。
步骤 1 — 加载和分类抗体(热/冷)
1a. 通过适配器加载热抗体:
运行:
node ~/.claude/skills/immune/immune-adapter.js get-antibodies --domains '{domains_json}' --tier hot --limit 15
适配器返回按域预过滤、分类为 HOT(严重性=critical 或 seen_count>=3 或 last_seen<30d)、按严重性然后 seen_count 排序、上限为 15 的抗体。
1b. 加载冷抗体摘要:
运行:
node ~/.claude/skills/immune/immune-adapter.js get-antibodies --domains '{domains_json}' --tier cold
对于每个冷抗体,从其 pattern 字段中提取一个简短关键词。
连接为逗号分隔列表。
日志:
[免疫系统] 层级拆分:{n_hot} 个热 + {n_cold} 个冷 / {n_hot + n_cold} 总数(域:{domains})
步骤 2 — 扫描
生成 immune-scan 代理(Haiku),使用以下 XML 结构化提示:
<scan_request>
<domains>{检测到的域作为 JSON 数组}</domains>
<task>{任务描述或 "扫描以下内容以查找错误和威胁"}</task>
<constraints>{约束条件或 "none"}</constraints>
<content>
{要扫描的输入文本/代码/内容}
</content>
<hot_antibodies>
{热抗体对象的 JSON 数组——包含 id、domains、pattern、severity、correction}
</hot_antibodies>
<cold_summary>
休眠模式(不详细,仅供了解):{逗号分隔的冷关键词}
</cold_summary>
<cheatsheet_applied>
{步骤 0 中注入的策略 ID 和模式列表,如果是 scan-only 模式则为 "none"}
</cheatsheet_applied>
</scan_request>
日志:[免疫系统] 扫描中...({n_hot} 个活跃抗体)
等待结果。
如果应用了修正:
日志:[免疫系统] 匹配 {antibody_id}:{original} → {corrected}
如果检测到新威胁:
日志:[免疫系统] 新威胁:{pattern}
如果检测到新策略:
日志:[免疫系统] 新策略:{pattern}
步骤 3 — 更新免疫记忆(带冷去重)
3a. 匹配的热抗体: 对于扫描器匹配的每个抗体,通过适配器更新:
node ~/.claude/skills/immune/immune-adapter.js update-antibody --id {antibody_id} --increment_seen true --last_seen {today}
3b. 新威胁——通过相似度评分去重:
对于 new_threats_detected 中的每个新威胁:
- 使用多标准相似度(Jaccard + 子字符串 + 域)检查重复:
node ~/.claude/skills/immune/immune-adapter.js check-duplicate --pattern "{pattern}" --domains '{domains_json}' --type antibody
返回 { duplicate: true/false, best_match: { id, score, pattern }, threshold: 0.7 }
- 如果重复为 true(分数 >= 0.7,相同域 + 相似模式)→ 重新激活:
- 更新匹配的抗体:
update-antibody --id {matched_id} --increment_seen true --last_seen {today} - 日志:
[免疫系统] 重新激活冷抗体 {id}:{pattern} - 不要创建新抗体(防止重复)
- 更新匹配的抗体:
- 如果无匹配 且
auto_add_threats为 true → 创建新抗体:
node ~/.claude/skills/immune/immune-adapter.js add-antibody --json '{"id":"AB-{next_number}","domains":{domains},"pattern":"{pattern}","severity":"{severity}","correction":"{correction}","seen_count":1,"first_seen":"{today}","last_seen":"{today}"}'
- 日志:
[免疫系统] + 新抗体 {id}:{pattern}
3c. 获取更新后的统计信息:
node ~/.claude/skills/immune/immune-adapter.js stats
日志:[免疫系统] 记忆:{total} 个抗体({n_hot} 个热,{n_cold} 个冷) | +{new} 新增 | 已重新激活:{reactivated}
步骤 3b — 更新 Cheatsheet 记忆(积极模式)
如果 mode == "scan-only" 或扫描结果中没有 new_strategies_detected,则跳过。
3b-i. 通过相似度评分去重:
对于 new_strategies_detected 中的每个新策略:
- 使用多标准相似度检查重复:
node ~/.claude/skills/immune/immune-adapter.js check-duplicate --pattern "{pattern}" --domains '{domains_json}' --type strategy
- 如果重复为 true(分数 >= 0.7,重叠域 + 相似模式)→ 加强:
- 计算新有效性:
new_eff = old_eff * 0.8 + reported_eff * 0.2(指数移动平均) - 更新:
update-strategy --id {matched_id} --increment_seen true --last_seen {today} --effectiveness {new_eff} - 日志:
[免疫系统] 加强策略 {id}:{pattern}(有效性:{old}→{new})
- 计算新有效性:
- 如果无匹配 且
auto_add_strategies为 true → 创建新策略:
node ~/.claude/skills/immune/immune-adapter.js add-strategy --json '{"id":"{prefix}-{next_number}","domains":{domains},"pattern":"{pattern}","example":"{example}","effectiveness":{eff},"seen_count":1,"first_seen":"{today}","last_seen":"{today}"}'
- 日志:
[免疫系统] + 新策略 {id}:{pattern}
3b-ii. 修剪低有效性策略:
如果任何策略的 effectiveness < 0.2 且 seen_count >= 5,则将其标记为需要人工审查。
日志:[免疫系统] Cheatsheet:{total} 个策略 | +{new} 新增 | 已加强:{reinforced}
步骤 4 — 评分
通过适配器计算通用评分:
node ~/.claude/skills/immune/immune-adapter.js score --domains '{domains_json}' --severities '[{"severity":"critical","count":N},{"severity":"warning","count":N},{"severity":"info","count":N}]'
适配器返回:score(0-100)、pass(布尔值)、z(相对于域基线的 z 分数)、baseline(均值、标准差、阈值、n)、deductions。
步骤 5 — 输出
如果无异常:
───
免疫系统 v5.1 | domains={domains} | 分数:{score}/100({PASS|FAIL}) | z={z}
基线({domain}):mean={mean} std={std} threshold={threshold}
Cheatsheet:已应用 {n_strategies} 个策略 | 抗体:{n_hot}/{max} 个热,{n_cold} 个冷
未检测到问题
───
如果发现修正或威胁:
───
免疫系统 v5.1 | domains={domains} | 分数:{score}/100({PASS|FAIL}) | z={z}
基线({domain}):mean={mean} std={std} threshold={threshold}
已应用的修正:
[AB-XXX] {pattern} → {correction}
检测到的新威胁:
[{severity}] {pattern} — {suggested_correction}
已重新激活:
[AB-XXX] {pattern}(之前为冷,现在为热)
已学习的新策略:
[CS-XXX] {pattern}(有效性:{effectiveness})
───
修正后的输出:
{修正后的内容,按域格式化}
───
记忆:{total_ab} 个抗体 + {total_cs} 个策略 | +{new_ab} 个抗体 | +{new_cs} 个策略
───
然后以适合该域的人类可读格式呈现修正后的输出。
步骤 6 — 会话日志
将会话结果记录到日志中以供将来上下文使用:
node ~/.claude/skills/immune/immune-adapter.js log-session --date {today} --domains '{domains_json}' --result {clean|corrected|flagged} --summary "{已扫描内容的简短摘要以及发现的内容}" --score {score}
这将写入 context/YYYY-MM-DD.md + SQLite session_logs + FTS4 索引,以便将来进行 get-context 搜索。
步骤 7 — 触发预压缩(可选)
如果对话上下文即将压缩,请保存任何尚未提交的待处理抗体/策略:
node ~/.claude/skills/immune/immune-adapter.js flush-pending --json '{"antibodies":[...],"strategies":[...]}'
质量门验证:
- 模式必须 >= 20 个字符
- 抗体需要:id、pattern、severity、correction
- 策略需要:id、pattern
- FTS4 重复检查防止重新创建现有模式
- 刷新记录被标记为
quality_gate=1
日志:[免疫系统] 预压缩刷新:+{n} 个抗体,+{n} 个策略(quality_gate=true)
错误处理
- 如果适配器 CLI 失败:直接回退到读取 JSON 文件(
immune_memory.json、cheatsheet_memory.json)——它们通过双重写入保持同步。 - 如果
immune_memory.json不存在:适配器自动创建带有空抗体的文件。 - 如果
cheatsheet_memory.json不存在:适配器自动创建带有空策略的文件。 - 如果
immune_memory.json中"version": 2:适配器自动将"domain"迁移为"domains": ["domain_value"]。 - 如果代理返回无效的 JSON:重试一次。如果仍然无效,则报告原始输出并发出警告。
- 如果未提供输入且没有最近的输出:询问用户要扫描什么。
- 如果所有抗体都是冷的(没有符合热条件的):仍然发送扫描,但使用空的
hot_antibodies数组和完整的cold_summary。Haiku 仍然可以通过阶段 2 检测新威胁。