danielbot23/ai-hospitality-project-
GitHub: danielbot23/ai-hospitality-project-
展示临床 AI 助手面临的 Prompt injection 攻击风险并提供输入扫描、Prompt 加固、输出验证和告警队列四层防御方案的医疗 AI 安全演示项目。
Stars: 0 | Forks: 0
# Clinical AI Guard
针对处理患者病历的 AI 工具的 Prompt injection 演示及有效防御方案。
## 存在的问题
各家医院正在快速推出基于 LLM 的临床助手——用于总结病历、建议剂量调整和标记随访事项。其中大多数应用的构建方式仅仅是直接将患者文本粘贴到 prompt 中。这就是一个 Prompt injection 漏洞:只需在病历中隐藏一条指令,“助手”就会执行该指令,而不是单纯地总结内容。
近期对临床 AI 工具的测试发现,Prompt injection 攻击在大多数情况下都能成功。其中包括一些案例,隐藏的指令诱使助手建议将药物剂量增加两倍。
## 本仓库包含的内容
|文件 |功能 |
|-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
|`vulnerable_assistant.py`|简易版本——患者病历被直接拼接到 prompt 中,没有任何边界隔离。这是攻击演示。 |
|`defended_assistant.py` |功能相同,但增加了输入扫描、强化的 prompt 边界,并在任何输出呈现给人类之前进行输出验证。 |
|`payloads.py` |5 个测试病历——1 个正常基准,4 个 injection 攻击(直接命令、转诊记录中的隐藏指令、伪造的权威公告、不可见字符技巧)。|
|`offline_sim.py` |预设响应,使演示无需实时 API 访问即可运行——不依赖会场 WiFi。 |
|`requirements.txt` |Python 依赖项。 |
## 防御机制原理
1. **输入扫描** — 在文本进入模型之前,检查传入文本中是否存在 injection 特征模式(例如“ignore previous instructions”、隐藏的零宽字符、伪造的策略公告)。
2. **Prompt 加固** — 使用明确的分隔符包裹患者文本,并指示其中的内容仅为数据,绝不能作为命令。
3. **输出验证** — 即使有漏网之鱼,在返回响应之前,也会检查其中是否存在危险信号(例如绕过医生审查的剂量更改、自动应用的更改)。
4. **告警队列** — 任何被拦截的内容都会被记录以供人工审查,而不是被静默丢弃或默默执行。
## 运行说明
```
pip install -r requirements.txt
# 离线模式(无需 API key)— 开箱即用
python3 vulnerable_assistant.py
python3 defended_assistant.py
# 实时模式 — 请先设置你的 key
export ANTHROPIC_API_KEY=your_key_here
python3 vulnerable_assistant.py
python3 defended_assistant.py
```
依次运行这两个文件以查看对比效果:易受攻击的版本会被 injection payload 劫持,而防御版本能够捕获并记录每一次攻击。
## 后续优化方向
- 使用真实的处方集/EHR 范围检查来替代简化的模式匹配
- 使用 Web 仪表板替代控制台输出
- 扩展输入扫描器的功能,使其超越关键词模式(例如使用小型分类器模型而非 regex)
## 开发背景
[Hackathon name] — 医疗网络安全赛道,独立开发。
标签:C2, Python, 医疗人工智能, 大语言模型安全, 提示词注入攻击, 无后门, 机密管理, 输入校验, 逆向工具