项目 11 · 构建你自己的判官
用本地 Qwen / DeepSeek 做 LLM-as-judge 系统。给它你的评分标准(项目 10 的 schema),让它对一组作品自动打分。这是把审美外化成系统的核心。
怎么算"成"?
判官评 20 件作品,与你自己的直觉评分相关性 ≥ 0.7。差距大的那部分,要么帮你发现 schema 的盲点,要么挑战你自己的直觉。
步骤 1 · 实现判官
// src/judge.ts
import { ask } from './ollama';
export interface Verdict {
scores: Record<string, number>;
reasons: Record<string, string>;
total: number;
}
export async function judge(work: string, rubric: any): Promise<Verdict> {
const prompt = `
你是一个审美评判系统。
评分标准如下(JSON Schema):
${JSON.stringify(rubric, null, 2)}
请对下面这件作品按每条 0–10 打分,每条给一句话理由。
作品:
"""
${work}
"""
只输出 JSON,格式:
{ "scores": { ... }, "reasons": { ... } }
`;
const raw = await ask(prompt);
const parsed = JSON.parse(raw); // 要做错误处理
parsed.total = Object.values(parsed.scores).reduce((a:any,b:any)=>a+b, 0) as number;
return parsed;
}
步骤 2 · 用 20 件作品测试
选 20 件作品 —— 既有你觉得好的,也有你觉得普通的。先自己盲打一遍分(不让判官影响你)。然后让判官跑。
步骤 3 · 算相关性
function correlation(yours: number[], judges: number[]): number {
// Pearson 相关系数
const n = yours.length;
const sumYours = yours.reduce((a,b)=>a+b);
const sumJudge = judges.reduce((a,b)=>a+b);
// ...(标准实现)
}
0.7 以上算判官比较吻合你;0.7 以下,需要分析为什么不一致。
步骤 4 · 改 rubric 或改自己的直觉
不一致的地方,是最有信息量的。两种可能:
- 判官打高你打低 —— 判官按 schema 打了,但 schema 没捕捉到你心里某条标准。改 schema。
- 判官打低你打高 —— 你打分时把"我喜欢"和"客观好"混了。改你的直觉。