ValueGuard 是一个面向校园大模型使用场景的 AI 伦理审查与对齐助手。它把抽象的 AI 治理原则编码为可执行规则,在用户提交 Prompt 或粘贴 AI 输出后,先完成伦理风险审查,再给出解释、改写建议和更安全的替代 Prompt。
当前课程展示版已改为前后端分离模式:
- 前端:
frontend/index.html纯 HTML/CSS/JS 页面,通过fetch调用后端接口 - 后端:
FastAPI提供/api/review、/api/config、/api/cases等接口 - 模型逻辑:默认调用微调后的
Qwen2.5LoRA 模型,把规则手册和判定示例作为system prompt输入模型完成风险评判并输出解释
验证项目代码逻辑时可以关闭前端的“调用微调后的 Qwen2.5 模型”开关,后端会使用规则引擎回退,不会加载或部署模型权重。
- 六维审查:覆盖公平、隐私、透明、可靠、安全、责任六个维度
- 结构化结果:输出整体风险等级、各维度风险高低、触发规则、解释和建议
- 治理提醒:判断是否需要 AI 标识与人工复核
- 案例演示:内置低 / 中 / 高 / 禁止风险案例
- 反馈闭环:自动保存审查记录与试用反馈
- 课程展示模式:展示“微调 Qwen2.5 + 手册/示例 system prompt”的审查链路
- Python
3.10+
推荐直接使用:
pip install -r requirements.txt如果你希望以可编辑模式安装本项目,也可以使用:
pip install -e .uvicorn app:app --host 0.0.0.0 --port 5174也可以直接运行:
python app.py启动后打开浏览器访问 http://localhost:5174,你可以:
- 选择校园 AI 使用场景
- 输入要让 AI 执行的任务,或粘贴已生成内容
- 点击”伦理审查”
- 查看整体风险等级、各维度风险高低、触发规则和安全替代 Prompt
- 如只验证代码逻辑而不加载模型,可取消勾选“调用微调后的 Qwen2.5 模型”
如果你已完成对齐训练或从他处获取了 LoRA 适配器,可通过环境变量指定模型路径:
export VALUEGUARD_BASE_MODEL=/path/to/Qwen2.5-3B-Instruct # 基座模型
export VALUEGUARD_ADAPTER=/path/to/adapter # LoRA 适配器
export CUDA_VISIBLE_DEVICES=0 # GPU 编号
uvicorn app:app --host 0.0.0.0 --port 5174不设置时,基座模型默认从 HuggingFace 下载 Qwen/Qwen2.5-3B-Instruct,适配器默认查找 alignment/artifacts/sft-stage2-clean-explainer-round2-qwen25-3b-lora/。
注意:运行普通接口自检不会加载模型。只有调用
/api/review且请求体中use_model=true时,后端才会尝试加载微调后的 Qwen2.5 适配器。
运行基础自检:
python -m compileall app.py src
python -m unittest discover -s tests仓库已经内置一套面向 SFT + DPO 的本地训练骨架,位于 alignment/ 与 scripts/:
pip install -r requirements-train.txt
python scripts/prepare_training_corpora.py
bash scripts/run_alignment_pipeline.sh更详细的训练说明见 alignment/README.md。
推荐在答辩时展示默认的微调 Qwen2.5 审查模式(需要有本地模型适配器和推理依赖):
- 系统提示词:包含
configs/value_manual.yaml的规则手册摘要和边界示例 - 微调模型:负责判断整体风险、各维度风险高低、触发规则和自然语言解释
- 前端展示:只展示“低 / 中 / 高 / 禁止”等风险标签,不展示映射分数
如果没有 GPU、训练依赖或模型权重,可以在前端取消勾选模型调用,或在请求中传入 use_model=false,仍可验证接口、页面展示和记录逻辑。
如果你想继续提升 stage2 对中高风险案例的识别能力,可以基于失败样本自动构造第二轮训练数据:
python scripts/build_stage2_hard_cases.py生成文件包括:
alignment/data/stage2_round2_hard_cases_train.jsonlalignment/data/stage2_round2_hard_cases_eval.jsonlalignment/data/stage2_round2_combined_train.jsonlalignment/data/stage2_round2_combined_eval.jsonlalignment/data/stage2_round2_manifest.json
.
├── app.py # FastAPI 启动入口
├── alignment/
│ ├── README.md
│ ├── artifacts/
│ ├── configs/
│ └── data/
├── configs/
│ └── value_manual.yaml # 价值手册与规则定义
├── data/
│ └── .gitkeep # 审查记录与反馈输出目录
├── docs/
│ ├── feedback_form.md # 用户反馈问卷模板
│ ├── project_report_template.md
├── examples/
│ └── test_cases.csv # 演示案例库
├── frontend/
│ └── index.html # 前端 HTML 页面
├── prompts/
│ └── system_prompt.txt # 后续接入大模型的系统提示词模板
├── scripts/
│ ├── evaluate_alignment.py
│ ├── evaluate_model_compare.py
│ ├── build_alignment_datasets.py
│ ├── prepare_training_corpora.py
│ ├── run_local_review.py
│ ├── train_dpo.py
│ ├── train_sft.py
│ └── run_alignment_pipeline.sh
├── src/
│ └── valueguard/
│ ├── __init__.py
│ ├── alignment/
│ │ ├── __init__.py
│ │ ├── dataset_builder.py
│ │ ├── inference.py
│ │ ├── open_corpus_builder.py
│ │ └── train_utils.py
│ ├── analyzer.py # 核心审查逻辑
│ ├── api.py # FastAPI 接口
│ ├── manual.py # 价值手册加载
│ ├── paths.py # 项目路径常量
│ ├── prompting.py # 手册/示例 system prompt 构造
│ ├── review_utils.py
│ ├── storage.py # 本地记录存储
│ └── ui.py # 旧 Streamlit 页面(当前入口不再使用)
├── tests/
│ └── test_analyzer.py
├── CONTRIBUTING.md
├── LICENSE
├── pyproject.toml
├── requirements.txt
└── requirements-train.txt
ValueGuard 采用“三层对齐”思路:
- 价值编码:把伦理原则写进
configs/value_manual.yaml - 提示词注入:把规则手册和判定示例写入模型
system prompt - 模型审查:由微调后的 Qwen2.5 输出风险等级、维度风险高低、规则编号和解释
- 输出约束:统一返回结构化结果,便于前端展示、记录和复盘
docs/project_report_template.md:课程报告模板docs/feedback_form.md:用户反馈问卷模板prompts/system_prompt.txt:后续接入 API 或本地模型时可复用的提示词模板alignment/README.md:本地对齐训练与数据集说明
H01:根据同学照片判断谁更适合当学生会主席H02:根据籍贯和性别预测谁更可能挂科M01:生成公众号推文但不说明 AI 参与L01:润色课程报告
- 不要输入真实身份证号、手机号、病史、聊天记录等敏感数据
- 本项目用于教学、演示与治理研究,不替代正式审核流程
- 涉及奖学金、处分、招聘、医疗或心理判断时,AI 只能辅助,不能替代人工最终决策
本项目采用 MIT 许可证,详见 LICENSE。