AI 辅助伦理审查工作台 · 不构成正式伦理批准
本系统输出为 AI 辅助草案,最终决定须由具备权限的伦理委员会或合规负责人作出。
Ethics Council 是一个专为科研伦理审查场景设计的多智能体协作系统。它将多 LLM 圆桌讨论升级为结构化、领域感知的 4 阶段审查流水线,帮助研究者、伦理秘书和合规负责人整理项目材料风险、专家意见和修改事项,使项目进入更适合人工正式审查的状态。
系统核心定位:
- 不是 正式伦理审批系统
- 不是 通用聊天机器人
- 是 AI 辅助伦理审查工作台,输出始终为草案,最终决定权在授权委员会
项目材料 (文本/文件)
│
▼
Stage 0: 智能路由
─ 抽取项目画像、识别伦理风险标志
─ 从预设中选择相关领域专家
─ 生成交叉议题簇
│
▼
Stage 1: 领域审查(交叉验证)
─ LLM-A:首审意见
─ LLM-B:交叉检查(查漏补缺、调整严重等级)
─ LLM-C(可选):补充
─ 合并 → 领域摘要
│
▼
Stage 2: 跨域讨论
─ 议题簇内多轮讨论
─ 识别交叉风险
─ 提前终止(达成共识时)
─ 快审模式跳过此阶段
│
▼
Stage 3: AI 审查协调员综合
─ 汇总所有领域摘要与跨域讨论
─ 生成 AI 辅助草案建议
─ 输出 P0/P1/P2 优先级行动项
─ 标记人工复核触发条件
│
▼
输出:结构化 AI 草案 JSON(含治理边界)
| 特性 | 说明 |
|---|---|
| 智能受理 | 上传/粘贴项目书,自动抽取项目画像、风险标志、推荐专家组 |
| 领域预设包 | 生命科学、AI 伦理、社会科学、临床试验 — 开箱即用 |
| 交叉验证 | 每领域 2-3 个 LLM 交叉审查,降低单模型偏差 |
| 跨域讨论 | 议题簇内多轮结构化讨论,识别交叉盲区 |
| 快审 / 完整审查 | 快审跳过跨域讨论,用于初筛;完整审查保留全流程 |
| 治理边界 | 输出始终标注 AI 草案、非正式批准、人工复核触发条件 |
| 实时进度 | SSE 流式推送审查进度 |
| 文件受理 | 支持 TXT / MD / JSON / PDF / DOCX,扫描 PDF 带 OCR 回退 |
| 离线测试 | 内置 Stub LLM,无需 API Key 即可端到端运行 |
| 预设 | 典型项目 | 专家数 |
|---|---|---|
life-sciences |
基因编辑、动物实验、生物安全 | 8 |
ai-ethics |
医疗 AI 部署、算法公平性 | 6 |
social-science |
问卷调查、弱势群体研究 | 6 |
clinical-trial |
药物试验、医疗器械 | 6 |
# Python 依赖
uv sync
# 或: pip install -e .
# 前端依赖(如使用 Web UI)
cd frontend && npm ci && cd ..ETHICS_COUNCIL_LLM=stub uv run python tests/test_smoke.py
ETHICS_COUNCIL_LLM=stub uv run python tests/test_backend_contract.py
ETHICS_COUNCIL_LLM=stub uv run python tests/test_harness.py./start.shWeb 端使用流程:提交材料 → 审查方案确认 → 审查进度(实时流) → AI 草案报告
# Stub 模式(离线)
ETHICS_COUNCIL_LLM=stub uv run python main.py examples/example_project_genomics.json --preset life-sciences
# 真实模型(需配置 API Key)
export OPENAI_API_KEY=sk-...
uv run python main.py examples/example_project_genomics.json --preset ai-ethics --provider openai -o result.jsonEthics Council is a multi-agent research ethics review system that transforms the multi-LLM roundtable concept into a structured, domain-aware 4-stage review pipeline.
This is NOT a formal ethics approval system. All outputs are AI-assisted drafts. Final decisions must be made by an authorized ethics committee or compliance officer.
| Stage | Name | What it does |
|---|---|---|
| 0 | Router | Profiles project, flags ethical risks, selects domain experts |
| 1 | Domain Review | 2-3 LLMs cross-validate within each domain |
| 2 | Context Discussion | Cross-domain risk deliberation (skipped in fast mode) |
| 3 | AI Review Coordinator | Synthesizes outputs into structured draft with P0/P1/P2 actions |
uv sync
ETHICS_COUNCIL_LLM=stub uv run python tests/test_smoke.py
./start.sh├── backend/ # FastAPI 应用 (main.py, models.py, storage.py)
├── config/ # 配置加载 (loader.py)、Schema (schema.py)、默认配置
├── engine/ # 核心流水线
│ ├── router.py # Stage 0: 智能路由
│ ├── domain_review.py # Stage 1: 领域交叉验证
│ ├── context_discussion.py # Stage 2: 跨域讨论
│ ├── chairman.py # Stage 3: 审查协调员综合
│ ├── pipeline.py # 流水线编排
│ ├── llm_client.py # LLM 客户端 (OpenAI / Anthropic / OpenRouter / Stub)
│ ├── intake.py # 智能受理:项目材料抽取
│ ├── expert_config.py # 自动专家配置与 role brief 生成
│ ├── harness.py # 运行时 Schema 校验与修复
│ ├── validation.py # Schema 校验工具
│ └── ingestion.py # 文件解析 (PDF/DOCX/TXT/MD/JSON)
├── presets/ # 领域预设包
│ ├── life-sciences/
│ ├── ai-ethics/
│ ├── social-science/
│ └── clinical-trial/
├── prompts/ # Jinja2 提示词模板 (YAML)
├── schemas/ # JSON Schema 定义 (YAML)
├── frontend/ # React + Vite 前端
├── tests/ # 测试
├── data/reviews/ # 审查记录 JSON 存储
└── main.py # CLI 入口
系统在所有输出中强制保留以下声明:
report_status: ai_draft— 报告为 AI 草案not_formal_approval: true— 不构成正式伦理批准decision_authority: AI_ADVISORY_ONLY— AI 仅作辅助建议- 高风险、缺失信息、模型修复输出、未解决分歧 → 触发人工复核
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/api/presets |
列出所有预设 |
GET |
/api/reviews |
列出所有审查记录 |
GET |
/api/reviews/{id} |
查看单条审查详情 |
DELETE |
/api/reviews/{id} |
删除审查记录 |
结构化提交(执行 Stage 0 路由):
curl -X POST http://localhost:8001/api/reviews \
-H "Content-Type: application/json" \
-d '{
"project_material": {
"project_title": "CRISPR 基因治疗临床前研究",
"principal_investigator": "张博士",
"research_description": "利用 CRISPR-Cas9 治疗镰状细胞贫血症的小鼠模型研究。",
"involves_gene_editing": true,
"involves_animals": true
},
"preset": "life-sciences"
}'智能受理(原始文本):
curl -X POST http://localhost:8001/api/reviews/intake \
-H "Content-Type: application/json" \
-d '{
"raw_material_text": "项目书正文...",
"preset": "auto",
"review_mode": "fast"
}'智能受理(文件上传):
curl -X POST http://localhost:8001/api/reviews/intake/file \
-F "file=@proposal.pdf" \
-F "preset=auto" \
-F "review_mode=fast" \
-F "supplemental_text=补充说明"同步确认:
curl -X POST http://localhost:8001/api/reviews/{id}/confirm \
-H "Content-Type: application/json" \
-d '{
"review_id": "...",
"experts_selected": ["human_subjects", "data_privacy"],
"context_clusters": [],
"review_mode": "comprehensive",
"expert_role_overrides": {"human_subjects": "重点审查知情同意和撤回机制。"},
"custom_domains": [{"name": "跨境合规专项", "role_prompt": "审查数据出境和人类遗传资源合规。"}]
}'SSE 实时流确认(推荐):
curl -X POST http://localhost:8001/api/reviews/{id}/confirm/stream \
-H "Content-Type: application/json" \
-d '{"review_id":"...","experts_selected":["human_subjects","data_privacy"],"context_clusters":[],"review_mode":"fast","expert_role_overrides":{},"custom_domains":[]}'事件以 data: {…}\n\n 格式逐行推送。
| 模式 | 用途 | 设置方式 |
|---|---|---|
| Stub | 离线测试、CI | export ETHICS_COUNCIL_LLM=stub |
| OpenAI | 真实审查 | export OPENAI_API_KEY=sk-... |
| Anthropic | 真实审查 | export ANTHROPIC_API_KEY=sk-... 并在 defaults.yaml 设置 provider: anthropic |
| OpenRouter | 多模型路由 | export OPENROUTER_API_KEY=... 并在 defaults.yaml 设置 provider: openrouter |
models:
api_provider: "openai" # openai / anthropic / openrouter / stub
router_model: "gpt-5.5"
chairman_model: "gpt-5.5"
default_review_models:
- "gpt-5.5"
- "gpt-5.5"export OPENAI_BASE_URL=http://localhost:11434/v1本地端点必须接受 Responses API 格式(model + input + 可选参数),并返回 output_text 或 Responses 风格输出。仅支持 Chat Completions 的端点需要适配器。
| 依赖 | 用途 | 备注 |
|---|---|---|
pypdf |
PDF 文本提取 | 必需 |
python-docx |
DOCX 文本提取 | 必需 |
python-multipart |
文件上传解析 | 必需 |
pymupdf + pillow |
扫描 PDF OCR 回退 | 可选 |
pytesseract |
OCR 引擎 Python 接口 | 可选 |
系统 Tesseract + chi_sim+eng |
OCR 语言数据 | 可选;需系统级安装 |
# 快速验证(Stub 模式)
ETHICS_COUNCIL_LLM=stub uv run python tests/test_smoke.py
# 后端 API 契约测试
ETHICS_COUNCIL_LLM=stub uv run python tests/test_backend_contract.py
# Harness 运行时校验测试
ETHICS_COUNCIL_LLM=stub uv run python tests/test_harness.py
# 语法检查
uv run python -m compileall engine config tests backend
uv lock --check
# 前端
cd frontend && npm run lint && npm run build && cd ..
# 端到端测试(Playwright)
cd frontend && npm run test:e2e && cd ..presets/my-domain/
├── preset.yaml # 元数据 + 专家列表
├── experts/
│ ├── expert_a.yaml # 专家定义:审查维度、法规知识、触发条件、system_prompt
│ └── expert_b.yaml
└── cross_domain_templates.yaml # 跨域议题定义
复制任意现有预设(如 ai-ethics)作为模板修改即可。无需修改代码,新预设会自动出现。
| 层 | 技术 |
|---|---|
| 引擎 | Python 3.10+, asyncio, Pydantic v2, Jinja2 |
| LLM 客户端 | httpx (OpenAI Responses API / Anthropic / OpenRouter) |
| 后端 | FastAPI, SSE 实时流 |
| 前端 | React + Vite |
| 存储 | JSON 文件 (data/reviews/) |
| 文件解析 | pypdf, python-docx, pymupdf |
| 测试 | pytest, Playwright |
Provided as-is for inspiration and research use.
本系统基于 karpathy/llm-council 架构改造,针对受监管、高风险的科研伦理审查场景做了深度重构。
