你正在 进阶版 · ⚖️ 审美工作室 · ← 回到学院 · 进阶版主页 · 总入口

← 十二个项目

★ 大压轴 ★

项目 12 · 把四所学院串起来

整个进阶版的毕业证书。
一件真东西,里面同时用到:
• 一个有领域知识的 Skill(技能工坊)
• 真代码、真测试、真部署(代码俱乐部)
• 给一个具体的人、知道什么时候停(智能体实验室)
• 一个判官系统,确保它质量不漂移(审美工作室)

规则

没规定什么

提交清单

  1. GitHub 仓库(公开 / 私有都行)
  2. README.md:项目目的、架构、为什么做这个选择
  3. 测试报告(vitest --coverage)
  4. 判官评分历史(30 天每天的得分)
  5. 使用者反馈记录(30 天)
  6. 一篇 1500 字以内的反思文档:你做对了什么、做错了什么、下次会怎么改

恭喜

把这十二个项目走完的少年,已经做了:

这一份作品集,比 99% 的 CS 一年级新生强。但更重要的是,它不是为了"赢"什么 —— 它是给你自己的,一份证明:你能在 AI 时代,做出 AI 做不到的事情。

回到四所学院 →

工程测验 「毕业作品」应该怎么评估?
下面哪个做法最专业?
解释:毕业作品应该有「明确的评分标准」,而不是「我觉得不错」。为每个标准定义一个数字(比如「测试覆盖率 ≥ 80%」),然后用工具+人工来验证。
分步引导 建立一个「AI 课程毕业作品评分管道」的 5 步
  1. 定义项目标准。列出 7 个维度:(1)功能完整性;(2)代码质量;(3)测试覆盖率;(4)文档;(5)安全性;(6)用户体验;(7)创新性。
    看参考

    例:功能完整性 = 「实现了 requirements 的多少百分比」;代码质量 = 「通过 linter、没有 TODO、循环复杂度」。

  2. 为每个维度写评分标准(rubric)。1–5 分各是什么。
    看参考

    例:代码质量 1 分 = 「有语法错误」,5 分 = 「符合编码规范、有完整注释、易读性强」。

  3. 实现自动化检测。用工具测试前 3 个维度(功能、代码质量、测试)。后 4 个用人工审核。
    看参考

    例:运行 `npm test`、`eslint`、`code coverage` 工具获得数字。

  4. 用 LLM Judge 辅助人工审核。让 judge 读一遍代码,给出「初步分数」,然后人工确认或调整。
    看参考

    例:Judge 说『这个项目的文档很完整,初步 5 分』—— 人工看一眼确认『同意』或『改为 4 分,因为缺了 API 文档』。

  5. 发布最终成绩和反馈。每个学生收到:(1)7 个维度的分数;(2)自动化工具的输出;(3)人工评价;(4)具体的改进建议。
    看参考

    例:「功能完整性 4/5(缺了用户登出功能);代码质量 5/5(很好);建议:加上用户登出功能可以变 5/5」。

动手 实现一个「毕业作品自动评分系统」
任务:写一个 `gradeProject(projectPath, rubric)` 函数。自动检查代码行数、测试文件、文档、git 历史等,输出一个评分报告。
参考实现

工程级参考答案(带完整注释):

// 生产级毕业作品评分系统
interface ProjectGradingRubric {
  dimensions: {
    name: string;
    weight: number;
    description: string;
    criteria: Record;
  }[];
}

interface GradingResult {
  studentId: string;
  projectName: string;
  scores: Record;
  finalScore: number;
  feedback: string[];
  autoChecks: Record;
  humanReview?: {
    reviewed: boolean;
    reviewer: string;
    adjustments: Record;
  };
}

async function gradeProject(
  projectPath: string,
  studentId: string,
  rubric: ProjectGradingRubric
): Promise {
  const result: GradingResult = {
    studentId,
    projectName: projectPath.split('/').pop() || '',
    scores: {},
    finalScore: 0,
    feedback: [],
    autoChecks: {}
  };
  
  // 自动化检查
  result.autoChecks.testCoverage = await getTestCoverage(projectPath);
  result.autoChecks.codeQuality = await runLinter(projectPath);
  result.autoChecks.buildSuccess = await testBuild(projectPath);
  
  // 给每个维度打分
  for (const dim of rubric.dimensions) {
    let score = 3; // 默认 3 分
    
    if (dim.name === 'testCoverage') {
      score = Math.min(5, Math.floor((result.autoChecks.testCoverage / 20))); // 80% 覆盖率 = 5 分
    } else if (dim.name === 'codeQuality') {
      score = result.autoChecks.codeQuality.passed ? 5 : 2;
    }
    
    result.scores[dim.name] = score;
    result.feedback.push(`${dim.name}: ${score}/5 - ${dim.criteria[score] || 'N/A'}`);
  }
  
  // 计算加权总分
  for (const dim of rubric.dimensions) {
    result.finalScore += result.scores[dim.name] * dim.weight;
  }
  
  return result;
}

async function getTestCoverage(projectPath: string): Promise {
  // 实现:读取 coverage 报告
  return 85;
}

async function runLinter(projectPath: string): Promise<{ passed: boolean; errors: string[] }> {
  // 实现:运行 ESLint 或类似工具
  return { passed: true, errors: [] };
}

async function testBuild(projectPath: string): Promise {
  // 实现:运行 npm build
  return true;
}
动手 为你的毕业作品项目写一个「评分标准文档」
任务:定义这个课程的毕业作品应该怎么评分。包括:(1) 7 个评估维度;(2) 每个维度的权重(%);(3) 每个维度的 1–5 分定义;(4) 自动化工具怎么辅助评分;(5) 人工审核的重点。

在下面框里写你自己的 prompt(可以用中文):

→ 打开通义千问粘贴试 已复制 ✓
看参考 prompt

参考 prompt(这是一个模板,你可以改细节):

你是一个领域专家。请基于以下规则回答问题:

1. 只基于你的专业知识和常见做法回答,不编造。
2. 如果问题超出你的领域,明确说「这不在我的专业范围内」。
3. 给出的建议应该包括「为什么」和「什么时候不应该这样做」。
4. 对于有争议的做法,列出不同观点。

现在,开始回答用户的问题。