docs/workspace/compare-evaluation-analysis/history/current-analysis-feature-map.md
本文档只描述 当前代码实现事实。 已按 2026-03-16 的工作区代码重新核对。 如果后续代码与本文冲突,应以代码为准,并同步更新本文。 2026-03-17 补充说明:本文中的“功能入口 / 语义分层 / 模式差异”仍可视为当前事实;但涉及 compare payload、
workspacePrompt + variants[]、resolvedPrompt、或旧阶段字段名的细节段落,可能保留了阶段性推导痕迹。若与real-api-samples/*/rendered-messages.json冲突,应优先以真实样例和 builders.ts 为准。
当前 packages/core/src/services/evaluation/types.ts 里的 EvaluationType 已经是:
| 类型 | 当前语义 | 是否依赖输出 |
|---|---|---|
prompt-only | 左侧提示词分析 | 否 |
prompt-iterate | 左侧带迭代要求的提示词分析 | 否 |
result | 右侧单结果评估 | 是 |
compare | 右侧多结果对比评估 | 是 |
这意味着:
original / optimized 这两个评估类型。result。originalPrompt + optimizedPrompt + originalTestResult + optimizedTestResult 协议。type PromptAnalysisRequest =
| {
type: 'prompt-only'
originalPrompt?: string
optimizedPrompt: string
proContext?: ProEvaluationContext
}
| {
type: 'prompt-iterate'
originalPrompt?: string
optimizedPrompt: string
iterateRequirement: string
proContext?: ProEvaluationContext
}
关键点:
originalPrompt 只是可选参考;如果和当前提示词相同,UI 会主动压掉。interface ResultEvaluationRequest {
type: 'result'
prompt: string
testResult: string
testContent?: string
resultLabel?: string
proContext?: ProEvaluationContext
}
关键点:
variantId 分桶 的。interface CompareEvaluationRequest {
type: 'compare'
workspacePrompt?: string
variants: CompareEvaluationVariant[]
proContext?: ProEvaluationContext
}
interface CompareEvaluationVariant {
id: string
label: string
prompt: string
output: string
reasoning?: string
modelKey?: string
versionLabel?: string
input?: {
label: string
content: string
summary?: string
}
}
关键点:
variants[]。inputs[] + variants[] 去重模型,目前还没有落地。| 工作区 | 左侧输入区分析按钮 | 左侧 PromptPanel 分析按钮 | 右侧单结果评估 | 顶部对比评估 | 当前输入边界结论 |
|---|---|---|---|---|---|
basic-user | 有 | 有 | 有,覆盖所有 active variants | 有,>= 2 个 ready variants 即可 | 左侧不吃右侧测试文本;右侧评估/对比评估吃测试文本 |
basic-system | 有 | 有 | 有,覆盖所有 active variants | 有,>= 2 个 ready variants 即可 | 同上 |
context-user | 有 | 有 | 有,覆盖所有 active variants | 有,>= 2 个 ready variants 即可 | 左侧只看变量结构;右侧单结果评估已按 variant 单独构造变量上下文;右侧 compare 已带每列渲染后输入快照 |
context-system | 无单独输入区分析按钮 | 有 | 有,覆盖所有 active variants | 有,>= 2 个 ready variants 即可 | 左侧分析会带会话上下文;右侧单结果评估已按 variant 单独构造会话上下文;compare 已带 Conversation Snapshot |
basic-user 为例,按钮分别在哪,输入分别是什么这是最容易把“分析”和“评估”混在一起的模式,所以单独拆开。
位置:
BasicUserWorkspace.vue 顶部 InputPanelUI行为:
prompt-only。输入:
analysisOptimizedPrompt = 当前左侧工作区提示词analysisOriginalPrompt = 当前原始输入testContent语义:
位置:
PromptPanel.vue行为:
evaluation.evaluatePromptOnly() / evaluation.evaluatePromptIterate()。iterationNote,走 prompt-iterate;否则走 prompt-only。输入:
originalPrompt = PromptPanel 当前展示的原始参考optimizedPrompt = PromptPanel 当前展示的工作区版本iterateRequirement 仅在 prompt-iterate 时存在testContent语义:
位置:
EvaluationScoreBadge / FocusAnalyzeButton行为:
result。输入:
prompt = 该列当前实际选中的版本文本(workspace / v0 / vN)testContent = 右侧测试文本testResult = 该列输出resultLabel = A/B/C/D语义:
位置:
显示条件:
输入:
workspacePrompt = 左侧当前工作区提示词variants[]input = 右侧测试文本语义:
workspace 但当前工作区为空,UI 会直接阻止测试并报错。basic-user左侧分析:
右侧结果评估:
prompt + testContent + output右侧对比评估:
workspacePrompt + variants[]testContent 作为 inputbasic-system与 basic-user 结构相同,只是 prompt 语义变成 system prompt。
左侧分析:
右侧结果评估:
system prompt + testContent + output右侧对比评估:
workspacePrompt + variants[]testContent 作为 inputcontext-user这是这次改造里最关键、也最需要谨慎理解的一个模式。
左侧分析:
analysisContext{
variables: buildUsedVariables(usedVarNames, { includeValues: false }),
rawPrompt: currentWorkspacePrompt,
}
也就是:
这条边界已经按目标纠正了。
右侧结果评估:
resultTargets 会按 variantId 提供:
promptoutputlabelproContext当前单结果评估用的 proContext 已经改成按当前列动态构造:
{
variables: buildUsedVariables(usedVarNames, {
includeValues: true,
predefinedOverrides: {
currentPrompt: rawPrompt,
userQuestion: rawPrompt
}
}),
rawPrompt,
resolvedPrompt: buildPromptExecutionContext(rawPrompt, executionVariables).renderedContent
}
这里要特别注意:
右侧对比评估:
variants[]context-user 的 compare payload 已经会给每个 variant 带:
input.label = Rendered Contentinput.content = 当前列真正发送给模型的渲染后输入input.summary = 当前列变量值摘要所以当前状态应理解为:
workspacePrompt + variants[],还没继续演进到 inputs[] + variants[]context-system左侧分析:
PromptPanel 顶部分析proContext当前 proContext 会包含:
targetMessageconversationMessages这类上下文本身属于设计态输入的一部分,所以左侧分析带它是合理的。
右侧结果评估:
resultTargets 当前会按 variantId 提供:
proContext同样要注意:
proContext 现在会按当前列:
conversationMessages右侧对比评估:
context-user 更完整input = Conversation Snapshot因此当前 context-system 的 compare 比 result 更接近目标结构。
basic-user / basic-system 的测试文本当前结论很明确:
所以:
context-user 的测试变量值当前结论也明确:
但实现上要分两层理解:
inputinputs[] + variants[]context-system 的右侧变量/会话输入这里要区分两类东西:
当前实现基本符合这条边界;单结果评估的 per-variant 会话上下文也已经独立,后续如果还要继续收紧,重点会落在 compare 协议是否继续去 shared-context 化。
result / compare / prompt-only / prompt-iterate。>= 2 个 ready variants,不再只限 A/B 或 2 列模式。context-user 左侧分析已经纠正为“只看变量结构,不看变量值”。context-user / context-system 的右侧单结果评估都已经按 variant 单独构造 proContext。workspacePrompt + variants[];这属于可选的后续规范化项,不再作为当前主链路 blocker。prompt-only 分析模板,没有右侧 result / compare 模板与接线。COMPARE_BASELINE_VARIANT_ID / COMPARE_CANDIDATE_VARIANT_ID 这样的旧常量做 tool-call 分桶,这属于后续可清理的内部残留,不影响当前对外语义。当前文本 workspace 的主语义已经基本收拢成:
当前真正还没完全收干净的,主要是:
inputs[] + variants[],但这已降级为可选后续优化