CMDC Skill 自进化引擎 — 对标 OpenSpace Skill Evolution 机制,对齐 Agentic Design Patterns 第 9 章(Learning and Adaptation)。
定位
cmdc_skill_engine 在 CMDC 外部运行:
- 订阅事件:通过
CMDCSkillEngine.Analyzer(@behaviour CMDC.Plugin) 监听session_end/after_tool,产出ExecutionAnalysis。 - 质量沉淀:
CMDCSkillEngine.QualityTracker维护每个 Skill 的 applied/completion/effective/fallback 四项指标。 - 持久化:
CMDCSkillEngine.Store提供 SkillRecord 的 CRUD、 版本 DAG、原子计数器(默认 ETS 后端,可插拔 SQLite)。 - 自进化:
CMDCSkillEngine.Evolver执行 FIX / DERIVED / CAPTURED 三类动作。 - 智能选择:
CMDCSkillEngine.SkillRanker实现CMDC.Skill.Selectorbehaviour,按effective_rate排序注入最有效 Skill。
快速上手
# 1) 在 Application 启动 Store GenServer
children = [CMDCSkillEngine.Store]
# 2) 在 CMDC Agent 配置里接入 Analyzer + SkillRanker
CMDC.create_agent(
model: "qwen3-max",
plugins: [{CMDCSkillEngine.Analyzer, [analysis_model: "qwen3-max"]}],
skills_dirs: ["./skills"],
skill_selector: CMDCSkillEngine.SkillRanker
)
# 3) 会话结束后,查看 Skill 质量
{:ok, record} = CMDCSkillEngine.get_record(skill_id)
CMDCSkillEngine.Types.SkillRecord.effective_rate(record)自进化闭环(SICA-style)
Agent run ──▶ session_end ──▶ Analyzer ──▶ ExecutionAnalysis
│
▼
QualityTracker ──▶ Store.save_record
│
▼
EvolutionSuggestions ──▶ Evolver ──▶ 新版 SkillRecord
(is_active=true)
│
▼
下次 SkillRanker 自动选中高质量版本详见 docs/source/agentic-design-patterns/chapters/Chapter 9_ Learning and Adaptation.md
与 docs/source/OpenSpace/README_CN.md。
Summary
Functions
按 skill_id 取回档案。
按 skill_id 列表批量取回档案,返回 %{skill_id => record}。
返回所有 is_active = true 的 Skill 档案。
注册一个 CMDC 发现到的 %CMDC.Skill{} 到引擎,若 skill_id 未曾入库则
自动创建 :imported origin 的初始 SkillRecord。
查询 Skill 四项质量指标 + 趋势。
追溯某个 Skill 的完整版本链(按 generation 升序)。
Functions
@spec get_record(String.t()) :: {:ok, CMDCSkillEngine.Types.SkillRecord.t()} | {:error, :not_found}
按 skill_id 取回档案。
@spec get_records([String.t()]) :: {:ok, %{required(String.t()) => CMDCSkillEngine.Types.SkillRecord.t()}}
按 skill_id 列表批量取回档案,返回 %{skill_id => record}。
@spec list_active() :: {:ok, [CMDCSkillEngine.Types.SkillRecord.t()]}
返回所有 is_active = true 的 Skill 档案。
@spec register_skill(map()) :: {:ok, CMDCSkillEngine.Types.SkillRecord.t()}
注册一个 CMDC 发现到的 %CMDC.Skill{} 到引擎,若 skill_id 未曾入库则
自动创建 :imported origin 的初始 SkillRecord。
适合在应用启动后一次性装载:
CMDC.Skill.discover(["./skills"])
|> Enum.each(&CMDCSkillEngine.register_skill/1)
@spec stats(String.t(), non_neg_integer()) :: {:ok, %{ applied_rate: float(), completion_rate: float(), effective_rate: float(), fallback_rate: float(), trend: :improving | :stable | :declining }} | {:error, :not_found}
查询 Skill 四项质量指标 + 趋势。
@spec version_chain(String.t()) :: {:ok, [CMDCSkillEngine.Types.SkillRecord.t()]}
追溯某个 Skill 的完整版本链(按 generation 升序)。