自建 AI 教学流水线跑了半年,单人边际成本真降到分级了
去年这时候还在为公司新员工入职培训发愁:买 SaaS 课程库一年十几万,外包录制内部课更是无底洞,还得专人运营学习平台。后来心一横,把那套「必须买现成服务」的思路扔了,花两周搭了一套完全本地化的自动化教学流水线,跑到现在单人次边际成本稳定在 0.3 元以内——基本就是电费钱。
最磨人的不是模型,是批改一致性。
早期直接塞系统提示词让大模型打分,同一份代码提交三次能给出 60/85/72 三个分。后来改成 「少样例 + 结构化输出 + 规则校验」 三件套:
1. 每道题预置 3 份人工标注的「标准答案-扣分点-得分」三元组示例
2. 强制模型输出 JSON:
3. Python 端做硬性校验:扣分项总和必须等于满分减最终分,行号不能超文件长度,不合格直接重跑一次(设
下一篇
跑了一圈国内主流开源模型,发现差距真没传说那么大了 →
栈很简单,全是开源件拼的:
- 模型层:Ollama 跑量化后的 Llama 3.1 8B(4-bit),显存占 6.5G,单张 3090 就能跑并发 4 路
- 编排:LangGraph 定义「课程生成 → 知识点拆解 → 习题出题 → 批改反馈」四个节点的有向图,状态存在 SQLite
- 检索:Chroma 存切好的内部文档向量,Chunk size 512、overlap 50,混合检索(BM25 + 向量)Top-K 取 5
- 前端:Streamlit 临时搭的管理后台,HR 自己能改提示词、看进度
最磨人的不是模型,是批改一致性。
早期直接塞系统提示词让大模型打分,同一份代码提交三次能给出 60/85/72 三个分。后来改成 「少样例 + 结构化输出 + 规则校验」 三件套:
1. 每道题预置 3 份人工标注的「标准答案-扣分点-得分」三元组示例
2. 强制模型输出 JSON:
{"score": int, "issues": [{"line": int, "desc": str, "deduct": int}]}3. Python 端做硬性校验:扣分项总和必须等于满分减最终分,行号不能超文件长度,不合格直接重跑一次(设
max_retries=2)# grading_node.py 关键片段
from pydantic import BaseModel, field_validator
from typing import List
class Issue(BaseModel):
line: int
desc: str
deduct: int
class GradeResult(BaseModel):
score: int
issues: List[Issue]
@field_validator("score")
@classmethod
def check_sum(cls, v, info):
if "issues" in info.data:
total_deduct = sum(i.deduct for i in info.data["issues"])
if v + total_deduct != 100: # 假设满分 100
raise ValueError("扣分项总和与最终分不一致")
return v加上这层守卫后,批改方差从 ±12 降到 ±2,基本能替代初级助教了。
再一个坑是长上下文课程生成。
直接让 8B 模型一次吐出 2 小时课程大纲+讲稿,中间必幻觉、断章。拆成「大纲生成 → 分节扩写 → 交叉引用检查 → 合并」四步,中间加一道 人工确认节点(LangGraph 的 interrupt),HR
免费 AI 工具箱 · 全部完全免费
