Skip to content

LLM-as-Judge (LLM 评审)

基础评审、成对比较、Rubric 评审

3.1 基础评审

javascript
async function llmJudge(task, output, criteria) {
  const response = await llm.chat({
    messages: [{
      role: 'user',
      content: `评估以下 AI 输出的质量。

## 任务
${task}

## AI 输出
${output}

## 评估标准
${criteria.map((c, i) => `${i+1}. ${c}`).join('\n')}

## 评分要求
对每个标准打分 1-5 分,并给出简短理由。

输出 JSON:
{
  "scores": [
    { "criterion": "...", "score": 1-5, "reason": "..." }
  ],
  "overallScore": 1-5,
  "summary": "总体评价"
}`
    }],
    response_format: { type: 'json_object' }
  });

  return JSON.parse(response.content);
}

// 使用示例
const evaluation = await llmJudge(
  "生成一个 React 登录表单组件",
  generatedCode,
  [
    "代码是否功能完整(包含表单验证)",
    "代码是否类型安全(TypeScript)",
    "代码是否遵循 React 最佳实践",
    "代码是否有良好的错误处理"
  ]
);

3.2 成对比较

javascript
async function pairwiseComparison(task, outputA, outputB) {
  const response = await llm.chat({
    messages: [{
      role: 'user',
      content: `比较两个 AI 输出,选择更好的一个。

## 任务
${task}

## 输出 A
${outputA}

## 输出 B
${outputB}

## 评估维度
1. 正确性
2. 完整性
3. 代码质量
4. 可读性

## 要求
对每个维度,说明哪个更好(A/B/平局),并给出理由。
最后给出总体胜者。

输出 JSON:
{
  "dimensions": [
    { "name": "正确性", "winner": "A|B|tie", "reason": "..." }
  ],
  "overallWinner": "A|B|tie",
  "explanation": "..."
}`
    }],
    response_format: { type: 'json_object' }
  });

  return JSON.parse(response.content);
}

3.3 Rubric 评审

javascript
const CODE_REVIEW_RUBRIC = `
## 代码评审评分标准

### 功能正确性 (1-5)
1: 完全无法工作
2: 有严重 bug
3: 基本功能正确,有小问题
4: 功能完整正确
5: 功能完整,有额外的边界处理

### 代码质量 (1-5)
1: 代码混乱,无法维护
2: 代码结构差,命名不清
3: 基本可读,有改进空间
4: 清晰整洁,遵循规范
5: 优秀,可作为示例

### 类型安全 (1-5)
1: 大量 any,无类型
2: 类型不完整
3: 基本类型覆盖
4: 完整类型,少量类型断言
5: 完美类型推断,泛型使用得当

### 性能考量 (1-5)
1: 明显性能问题
2: 有潜在性能问题
3: 基本合理
4: 考虑了常见优化
5: 深度优化,最佳实践
`;

async function rubricEvaluation(code, rubric = CODE_REVIEW_RUBRIC) {
  const response = await llm.chat({
    messages: [{
      role: 'user',
      content: `使用以下评分标准评估代码:

${rubric}

## 待评估代码
\`\`\`typescript
${code}
\`\`\`

输出 JSON:
{
  "scores": {
    "functionality": { "score": 1-5, "details": "..." },
    "quality": { "score": 1-5, "details": "..." },
    "typeSafety": { "score": 1-5, "details": "..." },
    "performance": { "score": 1-5, "details": "..." }
  },
  "totalScore": 平均分,
  "strengths": ["..."],
  "improvements": ["..."]
}`
    }]
  });

  return JSON.parse(response.content);
}

前端面试知识库