版本号:v0.1.0 最后更新:2026-04-04
本文档用于定义本项目中实验执行器的职责、输入输出、运行流程和记录机制。
实验执行器的作用是把 AI分析员生成的实验计划真正落地为可运行、可校验、可记录、可复现的实验过程。
实验执行器不是算法仓库,也不是 AI 决策器。
它在系统中的位置是:
可以把实验执行器理解为:
自动化实验运行底座
实验执行器至少应承担以下职责:
如果没有独立实验执行器,系统会退化成:
独立实验执行器的意义在于:
实验执行器的核心输入是:
ObservationExperimentPlan表示本次实验所针对的样本。
表示 AI分析员提出的一次具体实验计划。
建议结构如下:
type ExperimentPlan = {
id: string
observationId: string
hypothesisId?: string
pipeline: PlannedNode[]
budget?: ExecutionBudget
notes?: string[]
}
type PlannedNode = {
moduleId: string
params: Record<string, unknown>
}
type ExecutionBudget = {
maxLatencyMs?: number
maxMemoryMb?: number
preferLocal?: boolean
}
实验执行器在运行前必须做计划校验。
至少包括:
observationId 是否存在moduleId 是否已注册如果任何一项失败,应直接拒绝执行,并生成结构化错误返回。
第一版建议支持两类执行模式:
适用于:
适用于:
实验执行器不一定自己完成所有计算,但必须负责协调这些执行位置。
建议标准执行流程如下:
ObservationExperimentPlanExperiment为了支持模块间协作,执行器应维护统一运行上下文。
建议结构:
type ExecutionContext = {
observationId: string
inputRef: string
workingSet: Record<string, unknown>
intermediateOutputs: StageOutput[]
evidenceBuffer: Evidence[]
warnings: string[]
}
其中:
workingSet 用于保存当前执行状态intermediateOutputs 记录阶段输出evidenceBuffer 累积本次实验证据warnings 记录非致命问题每个节点执行后,执行器应记录输出,而不是只保留最后结果。
建议结构:
type StageOutput = {
stage: string
moduleId: string
format: string
payloadRef: string
metadata?: Record<string, unknown>
}
这有三个重要用途:
实验执行器应负责从模块输出中收集标准化证据。
第一版建议由模块返回两类内容:
执行器将这些内容统一整理为 Evidence。
建议 Evidence 至少包含:
实验执行器不一定拥有最复杂的评分逻辑,但必须支持标准评分接口。
建议评分至少包括:
建议结构:
type ScoreCard = {
total: number
components: Record<string, number>
penalties?: Record<string, number>
notes?: string[]
}
评分器可以是执行器内部组件,也可以是被调用的独立服务,但结果必须由执行器统一归档。
实验执行器不能只返回“失败”。
必须尽可能输出结构化失败原因,供 AI分析员后续决策使用。
建议分为三类失败:
例如:
module_not_registeredformat_mismatchparam_out_of_range例如:
remote_worker_unavailablemodule_runtime_errorresource_budget_exceeded例如:
no_clear_periodicityunstable_segmentationclassifier_confidence_collapsedinsufficient_signal_structure这类失败尤其重要,因为它们会直接影响 AI 的下一轮选择。
执行完成后,实验执行器应生成标准化 Experiment 对象。
建议结构:
type Experiment = {
id: string
observationId: string
parentId?: string
hypothesisId?: string
pipeline: PipelineNode[]
status: "pending" | "running" | "done" | "failed" | "cancelled"
outputs: StageOutput[]
evidenceIds: string[]
score: ScoreCard
failureReasons: string[]
runtimeStats?: RuntimeStats
createdAt: string
startedAt?: string
finishedAt?: string
}
type RuntimeStats = {
elapsedMs: number
cpuMs?: number
peakMemoryMb?: number
location?: "local_mobile" | "remote_host" | "mixed"
}
实验执行器必须支持实验之间的继承关系。
这是因为 AI分析员不会只跑一次实验,而会基于上一次结果继续调整。
例如:
因此 Experiment.parentId 非常关键,它能帮助系统形成实验树。
实验执行器与 AI分析员之间应形成闭环:
AI 不应直接调用模块。 AI 应始终通过实验执行器来使用算法能力。
实验执行器本身不决定最终何时停止分析,但应支持停止条件相关信息的输出。
例如:
这些信息可以帮助 AI分析员更理性地结束或切换分析路径。
第一版实验执行器建议先做成简单、稳定、可复现的形式。
建议优先支持:
第一版可以暂不支持:
实验执行器是本项目从“有算法模块”走向“可自动化实验分析系统”的关键一步。
它的核心价值在于:
没有实验执行器,AI 无法真正替代使用者完成系统化分析流程。