层次结构
由于参考领域本身也是通过入口点系统注册的,它们并无任何特殊之处——你的插件与之完全平等,是一等公民。
入口点分组
在你的包的pyproject.toml 中声明入口点,即可注册插件。引擎通过 importlib.metadata.entry_points(clousight_bench.core.registry)发现它们:
新增一个 benchmark = 实现
BenchmarkSuite + Evaluator(可选 Metric / judge),注册这些入口点,用 csbench run --benchmark <id> 运行。这是唯一对外的 benchmark 契约——开源与商业套件一视同仁(商业套件从私有包发布同样的入口点)。自插件 API 2.0 起,suite/evaluator 就是唯一的基准轨道——旧的内部 Task 契约已删除。当前插件 API 为 3.0(OTel 原生追踪的破坏性变更;注册表拒绝钉在 2.x 范围的插件)。
打分器三角——三个打分器,三种职责:
Evaluator——套件的官方判定(artifacts → measurements),never-re-score 的载体。每套件一个,命名空间<suite_id>.*。Metric——叠加的、可组合的逐条维度,作用在 evaluator 的items()上,产出<suite_id>.<metric_id>。Judge——Metric可选用的实现手段(经clousight_bench.judges接缝的 LLM 裁判),绝不是第三条打分路径。
status 字面量(skeleton / reference / …)不会因安装插件而改变:一个 skeleton 适配器在真实模式下变为可运行,纯粹是因为 get_runtime_provider(<provider>) 现在返回了非 None 的插件——也就是说,安装 provider 插件即可完成连接,无需修改适配器。
编写你自己的插件
主要的扩展是一个 benchmark——一个BenchmarkSuite + Evaluator,用
csbench run --benchmark <id> 运行。它有独立的、可直接复制的完整走查:
新增一个 benchmark
实现一个 Suite + Evaluator,注册两个入口点,运行它。
clousight_bench.metrics / .judges 下的入口点)。
一切都从你自己包的 pyproject.toml 入口点发布——你从不改动已安装的 clousight-bench。
一个商业套件/指标/判定/数据集,就是一个注册了同样入口点的私有包;装上它,csbench list
即可发现,由 requires_plugin_api 守护兼容性。
DomainPack + ProviderAdapter 仍是新增一整个产品类别及其 platform 适配器(如一个新云)
的方式;benchmark 本身始终以 BenchmarkSuite + Evaluator 入口点落地。
为什么参考逻辑打包在内而非仅供下载
- 开箱即用:
pip install clousight-bench后即可立即运行agent-runtime,无需拼装各部件。 - 它就是模板:参考领域本身就是结构良好的插件的最佳范例;你可以照其形态构建自己的插件。
- 统一的完整链路:数据平面探针也随核心包一同发布,因此区域内的探针 carrier 只需
pip install clousight-bench[probe],即可获得与控制平面完全一致的探针逻辑。 - 源码已在 GitHub 上完全开放,可供阅读、fork 和提交 PR——但首选的定制路径是插件包,而非编辑已安装的源码。
