其疾如风 · 进化(wind)
风 = 基于山的自进化插件:把「用户拐点」炼成带权重的偏好经验,按项目词触发即索引,按权重自动升降级。
> 顶层契约见《总体设计.md》§2(接口 / 事件 / 数据根 / 发现机制);设计见 其疾如风开发文档.md(设计稿 r11)。
何时用
| 触发场景 | 调用 |
|---|---|
| 用户明确纠正 / 拐点出现(由林转达) | wind.distill(candidate) → 草稿 |
| 用户让「记下这个偏好」 | wind.commit(experience) |
计划前取经验(林 plan 自动调) |
wind.query(project_term) |
| 任务成功后加权重 | wind.weight_update(exp_id, 0, "outcome:success") |
| 用户纠正 / 任务失败 | wind.weight_update(exp_id, 0, "user_correction") |
| 心跳 / CLI 扫描拐点 | wind.scan_tick(inflections=...) |
不做什么:不执行动作(归火)、不编排(归林)、不读写记忆(归山)、不订阅任何事件、不自判 confirm/conflict(信号只由林给)。
快速使用
from scripts.core import Wind
w = Wind() # 数据根按 §2.9 自动探测
eid = w.commit({ # ① 提交偏好
"topic": "文案处理",
"preference": "周报用纯文本,禁用 markdown 表格",
"evidence_turn_id": ["turn_001"],
"applicable_actions": ["msg.send"], # 两段式,必须落在 §2.8 白名单
"scope": "project:德鑫周报",
})
hits = w.query("德鑫周报") # ② 触发即索引(不触发不加载)
w.weight_update(eid, 0.0, "confirmed") # ③ +0.1(delta=0 时按 reason 判方向)
命令行(WorkBuddy 无钩子 → CLI 是协定级兜底):
python -m scripts.cli scan # 心跳扫描(= fenglinhuoshan-scan)
python -m scripts.cli query 德鑫周报 --top-k 5
python -m scripts.cli weight exp_xxxxxxxx --reason confirmed
python -m scripts.cli promote draft_xxxxxxxx
python -m scripts.cli demote exp_xxxxxxxx --reason user_correction
python -m scripts.cli flush # 重放待写队列
python -m scripts.cli decay # 时间衰减巡检(>30 天每周 -0.05)
python -m scripts.cli failures --limit 10 # 查看失败留痕(LLM/低置信度,不静默)
python -m scripts.cli synonyms --add "dx周报:德鑫周报" # 项目词同义词
python -m scripts.cli verify-llm # 用 5 个真实拐点跑通 LLM 抽取(无 LLM 时明说)
python -m scripts.cli info # 数据根 + 四字在场 + 失败计数
python -m scripts.cli selftest # W-01~W-10 + D-1~D-4 + X-1~X-10(24/24)
7 个接口
| 方法 | 说明 |
|---|---|
commit(experience) |
经验入库(自动冲突检测)→ exp_id |
distill(candidate) |
拐点 → 偏好草稿 → draft_id |
promote(draft_id) |
草稿晋升 general/ |
demote(exp_id, reason) |
降回 project/<原项目>/,weight 重置 0.5 |
query(project_term) |
按项目词触发即索引(核心入口) |
scan_tick(inflections=None, allow_mountain_read=False) |
心跳扫描;拐点默认由林传入 |
weight_update(exp_id, delta=0.0, reason="") |
权重升降,自动触发升/降级 |
维护接口:sweep_decay()(>30 天未用,每周 -0.05)、flush_pending()(待写队列)、peers()(四字在场)。
返回约定(失败时不静默)
| 调用 | 成功 | 失败 / 空 |
|---|---|---|
commit(exp) |
exp_xxxxxxxx |
抛 ValueError(附逐条校验原因,如"applicable_actions 非两段式") |
distill(candidate) |
draft_xxxxxxxx |
"" —— 必留痕:查 wind.last_error 或 failures 命令 |
promote(draft_id) |
True |
False(草稿不存在) |
demote(exp_id, reason) |
exp_id(保持原 id,证据链不断) |
""(经验不存在) |
query(term) |
list[Experience](weight 降序) |
[](无命中;不抛异常) |
weight_update(id, delta, reason) |
新 weight | 原 weight(reason 不在三类信号内 → 拒绝更新) |
scan_tick(...) |
拐点列表 | [](无输入且未开 --from-mountain → fail-open) |
失败原因一律可查:python -m scripts.cli failures,或代码里 wind.last_error / wind.failures()。
失败类型:llm_failure(no_llm / timeout / parse / empty / no_action)、low_confidence、pending_writes。
已知限制
- 找不到 LLM 时抽不出经验——
distill返回""并留痕;需注入llm_fn或由宿主提供current_llm()。 - WorkBuddy 上无法自动扫描——无工具钩子,
scan_tick只能由林/CLI 显式触发(OpenClaw 可强制)。 - 同义词只做别名映射——
synonyms.yaml是别名: 标准项目词的精确/包含匹配,不做语义相似。 - v0.2 不做:经验合并去重(同一偏好的不同表述靠冲突检测处理)、跨项目经验推荐、LLM 调用预算控制。
- 冲突判定依赖 LLM——拿不到 LLM 时冲突检测自动跳过(宁不判,不误判),不会误扣权重。
硬边界(违反 = 打回)
- 不订阅任何事件——输入只来自 ①林在控制路径上的派发 ②Agent 直接调用。
- 风不直接和火通信(§3.2.1);不直写山;跨字一律
shared.load(role),禁止跨包 import。 - 风不自判信号——只按
reason加减:confirmed/outcome:success→ +0.1;conflict/user_correction/outcome:fail→ -0.2;其余不更新。 - 数据只落数据根
state/wind/;skill 目录只放代码。 - 失败哲学:读/编排 fail-open;写 fail-safe(拿不到锁 → 待写队列,不丢);执行(校验)fail-closed。
依赖
- Python ≥ 3.9,零第三方依赖(标准库实现)。
- 同系列:
mountain(只读拐点,经林转达)/forest(唯一跨字通道)/fire(经验只作为 input 由林并入)——缺字只提醒 + 降级,不阻塞。 - 共享层:
fenglinhuoshan_base/host_adapter(platform()/skill_root()/load(role)/current_llm())——已统一实现并随本包附带(fenglinhuoshan_base/);scripts/shared.py现为薄 shim。
数据落点
~/.fenglinhuoshan/state/wind/
├── experience/general/ # 通用库(weight≥0.8 且 confirm≥3 晋升而来)
├── experience/project/<项目词>/ # 项目专属(含 status=draft 的草稿)
├── weight_index.json # 全局权重索引(写时加锁)
├── failures/pending_writes.jsonl# 待写队列
└── scan_state.json # 扫描游标(去重)
经验格式 JSON Lines,单条 ≤100 token。事件落 events/<日期>/<id>.yaml(只发布、不订阅)。
同义词表:state/wind/synonyms.yaml(别名: 标准项目词)。失败留痕:state/wind/failures/*.jsonl。
更多
- FAQ(常见问题 16 条) —— 现象 / 原因 / 怎么办
- weight-schema(权重机制)
- 设计与契约索引 | 过程记录 CL.md
- 样本:经验样本 | 拐点样本