CMDCSkillEngine.SkillRanker.Semantic (cmdc_skill_engine v0.2.1)

Copy Markdown View Source

语义 Skill 排序器 —— v0.2 新增。

结合 BM25(关键词相关性)与 effective_rate(质量反馈)做加权排序, 并可选接入 ReqLLM.embed/3 的语义向量相似度。

评分组成

final = bm25_weight   * normalize(BM25(query, skill_doc))
      + quality_weight * effective_rate(record)
      + semantic_weight * cosine(query_emb, skill_emb)   # 仅配置了 embedding_model

权重默认:bm25=0.4quality=0.4semantic=0.2。若未配置 :embedding_modelsemantic_weight 会被重新分配给 bm25quality

使用

{CMDC.Skills,
  skills: all_skills,
  selector: CMDCSkillEngine.SkillRanker.Semantic,
  selector_opts: [
    max_skills: 10,
    bm25_weight: 0.5,
    quality_weight: 0.5,
    embedding_model: nil
  ]}

在 Plugin 上下文 :ctx.config.skill_selector_opts 里也可以透传选项。

容错

  • BM25 不依赖任何外部服务,永远可算。
  • embedding_model 调用失败(HTTP/超时/异常),语义维度权重会被静默丢弃, 继续使用 BM25 + effective_rate 排序。
  • Store 不可用时,effective_rate 默认 0,回退为纯 BM25。

CMDCSkillEngine.SkillRanker 的关系

SkillRanker 只按 effective_rate 排序,不考虑 query 相关性; SkillRanker.Semantic 是对其的增强版。两者可以共存,由项目在 Selector 配置时选择。

Summary

Functions

按给定的 skills + query + opts 纯函数排序,不依赖 Selector ctx。

Functions

rank(skills, query, opts \\ [])

@spec rank([CMDC.Skill.t()], String.t(), keyword()) :: [CMDC.Skill.t()]

按给定的 skills + query + opts 纯函数排序,不依赖 Selector ctx。

主要用于单元测试和离线调优。