CMDCSkillEngine (cmdc_skill_engine v0.3.0)

Copy Markdown View Source

CMDC Skill 自进化引擎 — 自动捕获 / 衍生 / 修复 Skill,按质量指标自动停用 低效版本,形成 Agent learning & adaptation 闭环。

定位

cmdc_skill_engine 在 CMDC 外部运行:

快速上手

# 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

get_record(skill_id, opts \\ [])

@spec get_record(
  String.t(),
  keyword()
) :: {:ok, CMDCSkillEngine.Types.SkillRecord.t()} | {:error, :not_found}

按 skill_id 取回档案。

选项

  • :scope — 数据切片维度(默认 "global"

get_records(skill_ids, opts \\ [])

@spec get_records(
  [String.t()],
  keyword()
) :: {:ok, %{required(String.t()) => CMDCSkillEngine.Types.SkillRecord.t()}}

按 skill_id 列表批量取回档案,返回 %{skill_id => record}

选项

  • :scope — 数据切片维度(默认 "global"

list_active(opts \\ [])

@spec list_active(keyword()) :: {:ok, [CMDCSkillEngine.Types.SkillRecord.t()]}

返回所有 is_active = true 的 Skill 档案。

选项

  • :scope — 数据切片维度(默认 "global"

register_skill(skill, opts \\ [])

@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

stats(skill_id, window \\ 10, opts \\ [])

@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"

version_chain(skill_id, opts \\ [])

@spec version_chain(
  String.t(),
  keyword()
) :: {:ok, [CMDCSkillEngine.Types.SkillRecord.t()]}

追溯某个 Skill 的完整版本链(按 generation 升序)。

选项

  • :scope — 数据切片维度(默认 "global"