@aipack-ai/eval 1.1.6 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/index.d.ts +6 -1
  2. package/dist/index.js +5 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/cli.d.ts +9 -3
  5. package/dist/src/cli.js +361 -26
  6. package/dist/src/cli.js.map +1 -1
  7. package/dist/src/core/compare.d.ts +28 -0
  8. package/dist/src/core/compare.js +101 -0
  9. package/dist/src/core/compare.js.map +1 -0
  10. package/dist/src/core/embedding.d.ts +33 -0
  11. package/dist/src/core/embedding.js +68 -0
  12. package/dist/src/core/embedding.js.map +1 -0
  13. package/dist/src/core/history.d.ts +39 -0
  14. package/dist/src/core/history.js +134 -0
  15. package/dist/src/core/history.js.map +1 -0
  16. package/dist/src/core/import.d.ts +30 -0
  17. package/dist/src/core/import.js +111 -0
  18. package/dist/src/core/import.js.map +1 -0
  19. package/dist/src/core/judge-llm.d.ts +13 -0
  20. package/dist/src/core/judge-llm.js +47 -0
  21. package/dist/src/core/judge-llm.js.map +1 -0
  22. package/dist/src/core/live.d.ts +111 -0
  23. package/dist/src/core/live.js +187 -0
  24. package/dist/src/core/live.js.map +1 -0
  25. package/dist/src/core/report.d.ts +9 -2
  26. package/dist/src/core/report.js +30 -5
  27. package/dist/src/core/report.js.map +1 -1
  28. package/dist/src/core/runner.d.ts +10 -5
  29. package/dist/src/core/runner.js +174 -41
  30. package/dist/src/core/runner.js.map +1 -1
  31. package/dist/src/core/scorer/index.d.ts +20 -2
  32. package/dist/src/core/scorer/index.js +36 -9
  33. package/dist/src/core/scorer/index.js.map +1 -1
  34. package/dist/src/core/scorer/llm-judge.d.ts +43 -0
  35. package/dist/src/core/scorer/llm-judge.js +111 -0
  36. package/dist/src/core/scorer/llm-judge.js.map +1 -0
  37. package/dist/src/core/scorer/semantic.d.ts +27 -0
  38. package/dist/src/core/scorer/semantic.js +74 -0
  39. package/dist/src/core/scorer/semantic.js.map +1 -0
  40. package/dist/src/core/types.d.ts +65 -4
  41. package/dist/src/core/validate.js +9 -3
  42. package/dist/src/core/validate.js.map +1 -1
  43. package/package.json +4 -3
@@ -1,41 +1,91 @@
1
1
  /**
2
2
  * packages/eval/src/core/runner.ts - Eval Runner
3
3
  *
4
- * mock 模式:每个用例构造独立 Runtime(createMockStreamFn 注入
5
- * streamFn + createMockTools 提供工具),run() 后经 getMessages()
6
- * 重建完整轨迹,再交给规则评分器。
4
+ * 两种模式共用同一条执行链路(Runtime → 轨迹 → 评分器):
5
+ * mock —— fixture replay:createMockStreamFn 注入脚本化 LLM 响应
6
+ * live —— 真实 LLM:createLiveLlm 装配 provider streamFn(M3)
7
7
  *
8
8
  * 工程保障:
9
9
  * - 用例间完全隔离(独立 runtime / 独立 fs 副本 / 独立 sessionKey)
10
10
  * - 墙钟超时(Promise.race)
11
11
  * - 步数上限(映射 RuntimeOptions.maxTurns)
12
- * - 预算熔断(usage.total 超 case.metadata.maxTokens 判失败)
13
- * - repeats 消随机性(live 模式用;mock 模式缺省 1)
12
+ * - 预算熔断(case.metadata.maxTokens + RunConfig.maxTotalTokens 全局)
13
+ * - repeats 消随机性:mock 1;live 默认 3 并取 pass@k(适配层不支持 seed)
14
14
  * - 并发受控(简单队列实现)
15
15
  */
16
- import { createRuntime, createRequest, } from '@aipack-ai/agent';
16
+ import { createRuntime, createRequest } from '@aipack-ai/agent';
17
17
  import { createMockStreamFn } from './mock-stream.js';
18
18
  import { createMockTools } from './mock-tools.js';
19
19
  import { countTurns, extractTrajectory } from './trajectory.js';
20
20
  import { resolveScorers, scoreTrace } from './scorer/index.js';
21
+ import { createOpenAiCompatibleEmbedFn } from './embedding.js';
22
+ import { createJudgeDeps } from './judge-llm.js';
23
+ import { assertJudgeDistinct, assertLiveReady, describeLiveLlm, parseModelSpec, resolveJudgeLlm, resolveLiveLlm, } from './live.js';
21
24
  const DEFAULT_TIMEOUT_MS = 30_000;
22
25
  const DEFAULT_MAX_STEPS = 50;
23
26
  const DEFAULT_CONCURRENCY = 8;
27
+ /** live 模式缺省 repeats:无 seed 可用,靠多次采样消噪 */
28
+ const LIVE_DEFAULT_REPEATS = 3;
24
29
  /** sanitize sessionKey(用例 id 可能含 '/') */
25
30
  function sessionKeyFor(caseId, repeat) {
26
31
  return `eval:${caseId.replace(/[^a-zA-Z0-9_-]/g, '_')}#r${repeat}`;
27
32
  }
33
+ /** bundle.label('provider/modelId')→ spec;解析失败不阻断(mock / 注入 streamFn 场景) */
34
+ function parseModelSpecSafe(label) {
35
+ try {
36
+ return parseModelSpec(label);
37
+ }
38
+ catch {
39
+ return undefined;
40
+ }
41
+ }
42
+ /**
43
+ * 模式不匹配 → 跳过(不计入通过率,避免出现"必然失败"的噪音)。
44
+ * 返回 undefined 表示该用例在当前模式下可跑。
45
+ */
46
+ export function skipReason(c, mode) {
47
+ if (mode === 'mock' && c.mode === 'live')
48
+ return 'live-only 用例(mock 模式跳过)';
49
+ if (mode === 'live' && c.mode === 'mock')
50
+ return 'mock-only 用例(live 模式跳过)';
51
+ if (mode === 'live' && c.input.mock)
52
+ return 'fixture replay 用例(live 模式跳过)';
53
+ return undefined;
54
+ }
55
+ /** live 模式:装配真实 LLM(缺配置直接抛错,由 CLI 转 usage 错误) */
56
+ function resolveRuntimeBundle(config) {
57
+ if (config.mode !== 'live')
58
+ return undefined;
59
+ if (config.streamFn) {
60
+ return { streamFn: config.streamFn, model: config.frameworkModel };
61
+ }
62
+ const llm = resolveLiveLlm({
63
+ model: config.model,
64
+ apiKey: config.apiKey,
65
+ baseUrl: config.baseUrl,
66
+ temperature: config.temperature,
67
+ timeoutMs: config.requestTimeoutMs,
68
+ });
69
+ assertLiveReady(llm.spec);
70
+ return {
71
+ streamFn: llm.streamFn,
72
+ model: llm.model,
73
+ label: describeLiveLlm(llm.spec),
74
+ };
75
+ }
28
76
  /** 单用例单次运行:返回轨迹(失败时返回 error 字符串) */
29
- async function runCaseOnce(c, config, repeat) {
30
- if (!c.input.mock) {
31
- return { error: 'mock 模式要求 input.mock 脚本(live 模式 M3 接入)' };
77
+ async function runCaseOnce(c, config, repeat, bundle) {
78
+ const isLive = config.mode === 'live';
79
+ if (!isLive && !c.input.mock) {
80
+ return { error: 'mock 模式要求 input.mock 脚本(live 模式用 --mode live)' };
32
81
  }
33
82
  const timeoutMs = c.metadata?.timeoutMs ?? config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
34
83
  const maxSteps = c.metadata?.maxSteps ?? config.maxSteps ?? DEFAULT_MAX_STEPS;
35
84
  const tools = createMockTools(c.input.fs ?? {}, c.input.tools);
36
85
  const runtime = createRuntime({
37
86
  systemPrompt: c.input.systemPrompt ?? '',
38
- streamFn: createMockStreamFn(c.input.mock),
87
+ streamFn: isLive ? bundle.streamFn : createMockStreamFn(c.input.mock),
88
+ ...(isLive && bundle?.model ? { model: bundle.model } : {}),
39
89
  tools,
40
90
  maxTurns: maxSteps,
41
91
  traceIdGenerator: () => sessionKeyFor(c.id, repeat),
@@ -96,57 +146,123 @@ async function runCaseOnce(c, config, repeat) {
96
146
  await runtime.close().catch(() => undefined);
97
147
  }
98
148
  }
149
+ /**
150
+ * M5:按需装配评分器依赖(lazy 检测——只有用例真的用了 semantic /
151
+ * llm-judge 才装配,配置缺失时抛可操作错误,由 CLI 转为用法错误)。
152
+ */
153
+ function resolveScorerDeps(config, needs, targetSpec) {
154
+ const deps = {};
155
+ if (needs.judge) {
156
+ const judge = config.judgeStreamFn
157
+ ? { streamFn: config.judgeStreamFn, model: config.judgeFrameworkModel }
158
+ : (() => {
159
+ const llm = resolveJudgeLlm({
160
+ model: config.judgeModel,
161
+ apiKey: config.judgeApiKey,
162
+ baseUrl: config.judgeBaseUrl,
163
+ timeoutMs: config.requestTimeoutMs,
164
+ });
165
+ assertJudgeDistinct(targetSpec, llm.spec);
166
+ return llm;
167
+ })();
168
+ deps.judge = createJudgeDeps(judge.streamFn, judge.model, config.judgeStreamFn ? 'injected-judge' : undefined);
169
+ }
170
+ if (needs.embed) {
171
+ deps.embed = createOpenAiCompatibleEmbedFn({
172
+ model: config.embedModel,
173
+ apiKey: config.embedApiKey,
174
+ baseUrl: config.embedBaseUrl,
175
+ });
176
+ }
177
+ return deps;
178
+ }
99
179
  /** 单用例(含 repeats) */
100
- async function runCase(c, config) {
101
- const repeats = config.mode === 'mock' ? (config.repeats ?? 1) : (config.repeats ?? 1);
180
+ async function runCase(c, config, bundle, budget, scorerDeps) {
181
+ const isLive = config.mode === 'live';
182
+ const repeats = c.metadata?.repeats ?? config.repeats ?? (isLive ? LIVE_DEFAULT_REPEATS : 1);
102
183
  const scorers = resolveScorers(c.expected, c.scorers);
103
- const startedAt = Date.now();
104
- let passed = true;
105
- let score = 0;
184
+ // 全局预算熔断:已超限时剩余用例直接判失败,不再烧钱
185
+ if (config.maxTotalTokens !== undefined && budget.spent > config.maxTotalTokens) {
186
+ return {
187
+ caseId: c.id,
188
+ suite: c.suite,
189
+ origin: c.origin,
190
+ passed: false,
191
+ score: 0,
192
+ scores: [],
193
+ error: `总预算熔断:累计 usage.total=${budget.spent} > maxTotalTokens=${config.maxTotalTokens}`,
194
+ durationMs: 0,
195
+ steps: 0,
196
+ usageTotal: 0,
197
+ repeats,
198
+ passCount: 0,
199
+ };
200
+ }
201
+ let scoreSum = 0;
106
202
  let scoreCount = 0;
107
- const scoreResults = [];
203
+ let passCount = 0;
204
+ const failedScores = [];
108
205
  let runError;
109
206
  let steps = 0;
110
207
  let usageTotal = 0;
111
208
  let durationMs = 0;
209
+ let lastTraceUsage = 0;
112
210
  for (let r = 0; r < repeats; r++) {
113
- const { trace, error } = await runCaseOnce(c, config, r);
114
- durationMs += Date.now() - startedAt;
211
+ const t0 = Date.now();
212
+ const { trace, error } = await runCaseOnce(c, config, r, bundle);
213
+ durationMs += Date.now() - t0;
115
214
  if (error || !trace) {
116
- passed = false;
117
- runError = error;
118
- scoreResults.push({
119
- scorer: 'success',
120
- score: 0,
121
- passed: false,
122
- reason: `运行失败: ${error ?? '未知错误'}`,
123
- });
124
- break;
215
+ runError = runError ?? error;
216
+ continue;
125
217
  }
126
218
  steps = trace.trajectory.length;
219
+ lastTraceUsage = trace.usageTotal;
127
220
  usageTotal += trace.usageTotal;
128
- const caseScore = scoreTrace(trace, scorers);
129
- passed = passed && caseScore.passed;
130
- score += caseScore.score;
221
+ budget.spent += trace.usageTotal;
222
+ const caseScore = await scoreTrace(trace, scorers, scorerDeps);
223
+ scoreSum += caseScore.score;
131
224
  scoreCount += 1;
132
- if (!caseScore.passed) {
133
- scoreResults.push(...caseScore.scores.filter((s) => !s.passed).map((s) => ({
134
- ...s,
135
- reason: s.reason,
136
- })));
137
- }
225
+ if (caseScore.passed)
226
+ passCount += 1;
227
+ else
228
+ failedScores.push(...caseScore.scores.filter((s) => !s.passed));
229
+ }
230
+ if (scoreCount === 0 && runError) {
231
+ return {
232
+ caseId: c.id,
233
+ suite: c.suite,
234
+ origin: c.origin,
235
+ passed: false,
236
+ score: 0,
237
+ scores: [
238
+ { scorer: 'success', score: 0, passed: false, reason: `运行失败: ${runError}` },
239
+ ],
240
+ error: runError,
241
+ durationMs,
242
+ steps,
243
+ usageTotal,
244
+ repeats,
245
+ passCount: 0,
246
+ };
247
+ }
248
+ // live:pass@k(k 次里至少过一次);mock:每次都必须过
249
+ const passed = isLive ? passCount > 0 : passCount === scoreCount && scoreCount > 0;
250
+ if (scoreCount < repeats) {
251
+ runError = runError ?? `${repeats - scoreCount}/${repeats} 次运行异常`;
138
252
  }
139
253
  return {
140
254
  caseId: c.id,
141
255
  suite: c.suite,
142
256
  origin: c.origin,
143
257
  passed,
144
- score: scoreCount === 0 ? 0 : score / scoreCount,
145
- scores: scoreResults,
258
+ score: scoreCount === 0 ? 0 : scoreSum / scoreCount,
259
+ scores: passed ? [] : failedScores,
146
260
  error: runError,
147
261
  durationMs,
148
262
  steps,
149
- usageTotal,
263
+ usageTotal: usageTotal || lastTraceUsage,
264
+ repeats,
265
+ passCount,
150
266
  };
151
267
  }
152
268
  /** 简单并发队列(避免引入依赖) */
@@ -185,20 +301,36 @@ function summarize(results) {
185
301
  /** 执行一次评测 */
186
302
  export async function runEval(cases, config) {
187
303
  const startedAt = Date.now();
188
- const filtered = config.suites && config.suites.length > 0
304
+ const bundle = resolveRuntimeBundle(config);
305
+ const bySuite = config.suites && config.suites.length > 0
189
306
  ? cases.filter((c) => config.suites.includes(c.suite))
190
307
  : cases;
308
+ const skipped = [];
309
+ const runnable = bySuite.filter((c) => {
310
+ const reason = skipReason(c, config.mode);
311
+ if (reason) {
312
+ skipped.push({ caseId: c.id, suite: c.suite, reason });
313
+ return false;
314
+ }
315
+ return true;
316
+ });
191
317
  const concurrency = config.concurrency ?? DEFAULT_CONCURRENCY;
192
- const results = await runAllConcurrent(filtered, concurrency, (c) => runCase(c, config));
318
+ const budget = { spent: 0 };
319
+ // M5:只有用例真的使用 semantic / llm-judge 才装配对应依赖(配置缺失抛错 → CLI 用法错误)
320
+ const usesScorer = (type) => runnable.some((c) => resolveScorers(c.expected, c.scorers).some((s) => s.type === type));
321
+ const scorerDeps = resolveScorerDeps(config, { judge: usesScorer('llm-judge'), embed: usesScorer('semantic') }, bundle?.label ? parseModelSpecSafe(bundle.label) : undefined);
322
+ const results = await runAllConcurrent(runnable, concurrency, (c) => runCase(c, config, bundle, budget, scorerDeps));
193
323
  const casesPassed = results.filter((r) => r.passed).length;
194
324
  return {
195
325
  runId: `run_${new Date().toISOString().replace(/[:.]/g, '-')}`,
196
326
  startedAt: new Date(startedAt).toISOString(),
197
327
  durationMs: Date.now() - startedAt,
198
328
  mode: config.mode,
329
+ model: bundle?.label ?? (config.mode === 'live' ? config.model : undefined),
199
330
  totals: {
200
331
  cases: results.length,
201
332
  passed: casesPassed,
333
+ skipped: skipped.length,
202
334
  passRate: results.length === 0 ? 0 : casesPassed / results.length,
203
335
  avgScore: results.length === 0
204
336
  ? 0
@@ -208,6 +340,7 @@ export async function runEval(cases, config) {
208
340
  bySuite: summarize(results),
209
341
  byOrigin: summarize(results.map((r) => ({ ...r, suite: r.origin }))),
210
342
  results,
343
+ skipped,
211
344
  };
212
345
  }
213
346
  //# sourceMappingURL=runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/core/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/core/runner.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,26 @@
2
2
  * packages/eval/src/core/scorer/index.ts - 评分入口与 expected 归一化
3
3
  *
4
4
  * - expected(声明式)→ ScorerConfig[](与显式 scorers 合并)
5
- * - scoreCase:依次执行规则评分器,加权合成用例总分
5
+ * - scoreCase:按类型分发评分器(rule 同步 / semantic & llm-judge 异步),
6
+ * 加权合成用例总分
7
+ * - M5:semantic / llm-judge 需要外部装配(embed / judge),缺装配时
8
+ * 评分器跳过(不判用例失败,见各实现文件)
6
9
  */
7
10
  import type { ExpectedResult, RunTrace, ScoreResult, ScorerConfig } from '../types';
11
+ import { type EmbedFn } from './semantic';
12
+ import { type JudgeDeps } from './llm-judge';
8
13
  export { RULE_SCORER_TYPES, runRuleScorer, partialMatch } from './rule';
14
+ export { cosineSimilarity, runSemanticScorer, type EmbedFn, type SemanticParams } from './semantic';
15
+ export { buildJudgePrompt, parseJudgeResponse, runLlmJudge, JUDGE_PROMPT_VERSION, type JudgeDeps, type JudgeParams, type JudgeVerdict, } from './llm-judge';
16
+ /** 全量评分器类型(rule 8 种 + semantic + llm-judge) */
17
+ export declare const ALL_SCORER_TYPES: readonly [...string[], "semantic", "llm-judge"];
18
+ /** 评分器外部装配(M5):缺省时 semantic / llm-judge 跳过 */
19
+ export interface ScorerDeps {
20
+ /** semantic 评分器的 embedding 函数 */
21
+ embed?: EmbedFn;
22
+ /** llm-judge 的异源 judge 装配 */
23
+ judge?: JudgeDeps;
24
+ }
9
25
  /** 声明式 expected → 评分器配置 */
10
26
  export declare function expectedToScorers(expected: ExpectedResult): ScorerConfig[];
11
27
  /** 合并用例的 expected + scorers */
@@ -14,6 +30,8 @@ export interface CaseScore {
14
30
  passed: boolean;
15
31
  score: number;
16
32
  scores: ScoreResult[];
33
+ /** 因缺装配 / judge 解析失败而跳过的评分器(不判用例失败) */
34
+ skippedScorers: string[];
17
35
  }
18
36
  /** 对一次运行轨迹执行全部评分器 */
19
- export declare function scoreTrace(trace: RunTrace, scorers: ScorerConfig[]): CaseScore;
37
+ export declare function scoreTrace(trace: RunTrace, scorers: ScorerConfig[], deps?: ScorerDeps): Promise<CaseScore>;
@@ -2,10 +2,19 @@
2
2
  * packages/eval/src/core/scorer/index.ts - 评分入口与 expected 归一化
3
3
  *
4
4
  * - expected(声明式)→ ScorerConfig[](与显式 scorers 合并)
5
- * - scoreCase:依次执行规则评分器,加权合成用例总分
5
+ * - scoreCase:按类型分发评分器(rule 同步 / semantic & llm-judge 异步),
6
+ * 加权合成用例总分
7
+ * - M5:semantic / llm-judge 需要外部装配(embed / judge),缺装配时
8
+ * 评分器跳过(不判用例失败,见各实现文件)
6
9
  */
7
- import { runRuleScorer } from './rule.js';
10
+ import { RULE_SCORER_TYPES, runRuleScorer } from './rule.js';
11
+ import { runSemanticScorer } from './semantic.js';
12
+ import { runLlmJudge } from './llm-judge.js';
8
13
  export { RULE_SCORER_TYPES, runRuleScorer, partialMatch } from './rule.js';
14
+ export { cosineSimilarity, runSemanticScorer } from './semantic.js';
15
+ export { buildJudgePrompt, parseJudgeResponse, runLlmJudge, JUDGE_PROMPT_VERSION, } from './llm-judge.js';
16
+ /** 全量评分器类型(rule 8 种 + semantic + llm-judge) */
17
+ export const ALL_SCORER_TYPES = [...RULE_SCORER_TYPES, 'semantic', 'llm-judge'];
9
18
  /** 声明式 expected → 评分器配置 */
10
19
  export function expectedToScorers(expected) {
11
20
  switch (expected.type) {
@@ -39,18 +48,36 @@ export function expectedToScorers(expected) {
39
48
  export function resolveScorers(expected, explicit) {
40
49
  return [...(expected ? expectedToScorers(expected) : []), ...(explicit ?? [])];
41
50
  }
51
+ /** 执行单个评分器(按类型分发);返回 undefined = 跳过 */
52
+ async function runScorer(trace, s, deps) {
53
+ if (s.type === 'semantic') {
54
+ return runSemanticScorer(trace, s.params, deps.embed);
55
+ }
56
+ if (s.type === 'llm-judge') {
57
+ return runLlmJudge(trace, s.params, deps.judge);
58
+ }
59
+ return runRuleScorer(trace, s.type, s.params);
60
+ }
42
61
  /** 对一次运行轨迹执行全部评分器 */
43
- export function scoreTrace(trace, scorers) {
44
- const scores = scorers.map((s) => runRuleScorer(trace, s.type, s.params));
45
- const totalWeight = scorers.reduce((acc, s) => acc + (s.weight ?? 1), 0);
62
+ export async function scoreTrace(trace, scorers, deps = {}) {
63
+ const results = await Promise.all(scorers.map((s) => runScorer(trace, s, deps)));
64
+ // 跳过的评分器(缺装配 / scorer 自身错误)不参与判定
65
+ const skippedScorers = scorers
66
+ .filter((_, i) => results[i] === undefined)
67
+ .map((s) => s.type);
68
+ const effective = scorers
69
+ .map((s, i) => ({ s, r: results[i] }))
70
+ .filter((x) => x.r !== undefined);
71
+ const totalWeight = effective.reduce((acc, { s }) => acc + (s.weight ?? 1), 0);
46
72
  const weighted = totalWeight === 0
47
73
  ? 0
48
- : scores.reduce((acc, r, i) => acc + r.score * (scorers[i].weight ?? 1), 0) /
74
+ : effective.reduce((acc, { s, r }) => acc + r.score * (s.weight ?? 1), 0) /
49
75
  totalWeight;
50
76
  return {
51
- passed: scores.length > 0 && scores.every((r) => r.passed),
52
- score: scorers.length === 0 ? 0 : weighted,
53
- scores,
77
+ passed: effective.length > 0 && effective.every(({ r }) => r.passed),
78
+ score: effective.length === 0 ? 0 : weighted,
79
+ scores: effective.map(({ r }) => r),
80
+ skippedScorers,
54
81
  };
55
82
  }
56
83
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/scorer/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/scorer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * packages/eval/src/core/scorer/llm-judge.ts - LLM-as-judge 评分器(M5)
3
+ *
4
+ * 开放性回答的终审(EVAL_PLAN.md 4.2 硬性约束):
5
+ * - judge 模型与被测模型异源(装配层校验,见 live.ts assertJudgeDistinct)
6
+ * - 输出强制 JSON(score + reason + evidence),解析失败视为 scorer
7
+ * 自身错误 → 跳过该评分器而非判用例失败
8
+ * - judge prompt 版本纳入元数据(JUDGE_PROMPT_VERSION / params.promptVersion),
9
+ * 改 rubric 不 invalidate 全部历史结果
10
+ */
11
+ import type { RunTrace, ScoreResult, ToolCallRecord } from '../types';
12
+ export interface JudgeParams {
13
+ /** rubric 条目(逐条评判) */
14
+ criteria: string[];
15
+ /** rubric 版本(缺省 JUDGE_PROMPT_VERSION) */
16
+ promptVersion?: number;
17
+ }
18
+ export interface JudgeDeps {
19
+ /** prompt → assistant 文本(由 live judge 模型装配,见 core/judge-llm.ts) */
20
+ complete(prompt: string): Promise<string>;
21
+ /** 报告展示的 judge 模型标识 */
22
+ modelLabel?: string;
23
+ }
24
+ export declare const JUDGE_PROMPT_VERSION = 1;
25
+ /** 单条 rubric 评判的 JSON 结构 */
26
+ export interface JudgeVerdict {
27
+ score: number;
28
+ reason: string;
29
+ evidence?: string;
30
+ }
31
+ /** 组装 judge prompt(版本化:改 rubric / 格式不影响历史结果的含义) */
32
+ export declare function buildJudgePrompt(params: JudgeParams, output: string, trajectory: ToolCallRecord[]): string;
33
+ /**
34
+ * 解析 judge 输出。宽容处理:截取首个 '{' 到最后一个 '}'。
35
+ * 解析失败返回 undefined(scorer 自身错误 → 跳过,不判用例失败)。
36
+ */
37
+ export declare function parseJudgeResponse(raw: string): JudgeVerdict | undefined;
38
+ /**
39
+ * 执行 LLM-as-judge。
40
+ * 返回 undefined = 评分器跳过(缺 judge 装配 / judge 输出解析失败 / judge 调用失败),
41
+ * 不判用例失败(EVAL_PLAN.md 4.2)。
42
+ */
43
+ export declare function runLlmJudge(trace: RunTrace, params: JudgeParams, deps?: JudgeDeps): Promise<ScoreResult | undefined>;
@@ -0,0 +1,111 @@
1
+ /**
2
+ * packages/eval/src/core/scorer/llm-judge.ts - LLM-as-judge 评分器(M5)
3
+ *
4
+ * 开放性回答的终审(EVAL_PLAN.md 4.2 硬性约束):
5
+ * - judge 模型与被测模型异源(装配层校验,见 live.ts assertJudgeDistinct)
6
+ * - 输出强制 JSON(score + reason + evidence),解析失败视为 scorer
7
+ * 自身错误 → 跳过该评分器而非判用例失败
8
+ * - judge prompt 版本纳入元数据(JUDGE_PROMPT_VERSION / params.promptVersion),
9
+ * 改 rubric 不 invalidate 全部历史结果
10
+ */
11
+ export const JUDGE_PROMPT_VERSION = 1;
12
+ function truncate(s, n) {
13
+ return s.length <= n ? s : `${s.slice(0, n)}…`;
14
+ }
15
+ function formatTrajectory(calls) {
16
+ if (calls.length === 0)
17
+ return '(无工具调用)';
18
+ return calls
19
+ .map((c, i) => `${i + 1}. ${c.name}(${JSON.stringify(c.args ?? {})})${c.isError ? ' [error]' : ''}`)
20
+ .join('\n');
21
+ }
22
+ /** 组装 judge prompt(版本化:改 rubric / 格式不影响历史结果的含义) */
23
+ export function buildJudgePrompt(params, output, trajectory) {
24
+ const version = params.promptVersion ?? JUDGE_PROMPT_VERSION;
25
+ const criteria = params.criteria.map((c, i) => `${i + 1}. ${c}`).join('\n');
26
+ return [
27
+ `你是严格的评测 judge(prompt v${version})。请逐条依据以下 rubric 评判 agent 回答的质量:`,
28
+ '',
29
+ criteria,
30
+ '',
31
+ '── Agent 最终输出 ──',
32
+ output,
33
+ '',
34
+ '── 工具调用轨迹(时间序) ──',
35
+ formatTrajectory(trajectory),
36
+ '',
37
+ '要求:',
38
+ '- score 为 0~1 的数字(全部 rubric 满足 = 1,完全不满足 = 0)',
39
+ '- reason 必须给出理由并引用证据',
40
+ '- 只输出一个 JSON 对象,不要输出其他任何文本:',
41
+ ' {"score": <0~1>, "reason": "<理由>", "evidence": "<命中的原文片段或调用序号>"}',
42
+ ].join('\n');
43
+ }
44
+ /**
45
+ * 解析 judge 输出。宽容处理:截取首个 '{' 到最后一个 '}'。
46
+ * 解析失败返回 undefined(scorer 自身错误 → 跳过,不判用例失败)。
47
+ */
48
+ export function parseJudgeResponse(raw) {
49
+ const start = raw.indexOf('{');
50
+ const end = raw.lastIndexOf('}');
51
+ if (start < 0 || end <= start)
52
+ return undefined;
53
+ let parsed;
54
+ try {
55
+ parsed = JSON.parse(raw.slice(start, end + 1));
56
+ }
57
+ catch {
58
+ return undefined;
59
+ }
60
+ if (!parsed || typeof parsed !== 'object')
61
+ return undefined;
62
+ const { score, reason, evidence } = parsed;
63
+ if (typeof score !== 'number' || !Number.isFinite(score))
64
+ return undefined;
65
+ const clamped = Math.min(Math.max(score, 0), 1);
66
+ return {
67
+ score: clamped,
68
+ reason: typeof reason === 'string' && reason ? reason : '(judge 未给出理由)',
69
+ evidence: typeof evidence === 'string' ? evidence : undefined,
70
+ };
71
+ }
72
+ /**
73
+ * 执行 LLM-as-judge。
74
+ * 返回 undefined = 评分器跳过(缺 judge 装配 / judge 输出解析失败 / judge 调用失败),
75
+ * 不判用例失败(EVAL_PLAN.md 4.2)。
76
+ */
77
+ export async function runLlmJudge(trace, params, deps) {
78
+ if (!deps)
79
+ return undefined;
80
+ if (!Array.isArray(params.criteria) || params.criteria.length === 0) {
81
+ return {
82
+ scorer: 'llm-judge',
83
+ score: 0,
84
+ passed: false,
85
+ reason: "评分器参数缺少非空数组字段 'criteria'",
86
+ };
87
+ }
88
+ const prompt = buildJudgePrompt(params, trace.result.content, trace.trajectory);
89
+ let raw;
90
+ try {
91
+ raw = await deps.complete(prompt);
92
+ }
93
+ catch (e) {
94
+ console.error('[eval] llm-judge 调用失败(跳过):', e.message);
95
+ return undefined;
96
+ }
97
+ const verdict = parseJudgeResponse(raw);
98
+ if (!verdict) {
99
+ console.error('[eval] llm-judge 输出解析失败(跳过):', truncate(raw, 120));
100
+ return undefined;
101
+ }
102
+ const passed = verdict.score >= 0.5;
103
+ return {
104
+ scorer: 'llm-judge',
105
+ score: verdict.score,
106
+ passed,
107
+ reason: `[${deps.modelLabel ?? 'judge'} v${params.promptVersion ?? JUDGE_PROMPT_VERSION}] ${verdict.reason}`,
108
+ evidence: verdict.evidence,
109
+ };
110
+ }
111
+ //# sourceMappingURL=llm-judge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-judge.js","sourceRoot":"","sources":["../../../../src/core/scorer/llm-judge.ts"],"names":[],"mappings":"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"}