Skip to content

Repository files navigation

Ethics Council — 多智能体科研伦理审查系统

AI 辅助伦理审查工作台 · 不构成正式伦理批准

本系统输出为 AI 辅助草案,最终决定须由具备权限的伦理委员会或合规负责人作出。

Ethics Council Header


中文

项目简介

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

快速开始

1. 安装依赖

# Python 依赖
uv sync
# 或: pip install -e .

# 前端依赖(如使用 Web UI)
cd frontend && npm ci && cd ..

2. 离线验证(Stub 模式,无需 API Key)

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

3. 运行 Web 应用

./start.sh

Web 端使用流程:提交材料 → 审查方案确认 → 审查进度(实时流) → AI 草案报告

4. CLI 审查

# 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.json

English

Overview

Ethics 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.

Pipeline

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

Quick Start

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 仅作辅助建议
  • 高风险、缺失信息、模型修复输出、未解决分歧 → 触发人工复核

REST API

基础端点

方法 路径 说明
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 模式 vs 真实 LLM

模式 用途 设置方式
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

配置文件:config/defaults.yaml

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

License

Provided as-is for inspiration and research use.


本系统基于 karpathy/llm-council 架构改造,针对受监管、高风险的科研伦理审查场景做了深度重构。

About

Multi-agent ethics review workbench for research projects

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages