CMDC Skill 自进化引擎 — 自动捕获 / 衍生 / 修复 Skill,按质量指标自动停用 低效版本,形成 Agent learning & 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 自动选中高质量版本实现 Agent learning & adaptation 经典模式:基于会话事件流统计 + LLM-as-judge 评估 Skill 质量,自动停用低效 Skill 并演化新版本。
Telemetry
v0.3 起暴露 :telemetry 事件,详见 CMDCSkillEngine.Telemetry:
CMDCSkillEngine.Telemetry.attach_logger()集成方可挂自定义 handler 接入 Langfuse / Datadog / 自家 Phoenix Channel 把 Skill 进化 / 计数变化推到前端。
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(), keyword() ) :: {:ok, CMDCSkillEngine.Types.SkillRecord.t()} | {:error, :not_found}
按 skill_id 取回档案。
选项
:scope— 数据切片维度(默认"global")
@spec get_records( [String.t()], keyword() ) :: {:ok, %{required(String.t()) => CMDCSkillEngine.Types.SkillRecord.t()}}
按 skill_id 列表批量取回档案,返回 %{skill_id => record}。
选项
:scope— 数据切片维度(默认"global")
@spec list_active(keyword()) :: {:ok, [CMDCSkillEngine.Types.SkillRecord.t()]}
返回所有 is_active = true 的 Skill 档案。
选项
:scope— 数据切片维度(默认"global")
@spec register_skill( map(), keyword() ) :: {:ok, CMDCSkillEngine.Types.SkillRecord.t()}
注册一个 CMDC 发现到的 %CMDC.Skill{} 到引擎,若 skill_id 未曾入库则
自动创建 :imported origin 的初始 SkillRecord。
适合在应用启动后一次性装载:
CMDC.Skill.discover(["./skills"])
|> Enum.each(&CMDCSkillEngine.register_skill/1)选项
:scope— 数据切片维度(默认"global"),自动写入record.scope字段:metadata— 自由扩展字段,自动写入record.metadata
@spec stats(String.t(), non_neg_integer(), keyword()) :: {:ok, %{ applied_rate: float(), completion_rate: float(), effective_rate: float(), fallback_rate: float(), trend: :improving | :stable | :declining }} | {:error, :not_found}
查询 Skill 四项质量指标 + 趋势。
选项
:scope— 数据切片维度(默认"global")
@spec version_chain( String.t(), keyword() ) :: {:ok, [CMDCSkillEngine.Types.SkillRecord.t()]}
追溯某个 Skill 的完整版本链(按 generation 升序)。
选项
:scope— 数据切片维度(默认"global")