外观
安全 API
安全接口提供内容安全检查、用户风险评估、安全指南、事件报告、运动建议和知识库内容验证。当前 router 未挂统一 JWT dependency;调用方不得把这些接口视为患者诊断能力。
Endpoint 索引
| Method | Path | 鉴权 | 用途 |
|---|---|---|---|
| POST | /api/safety/check | 无 | 检查内容安全风险。 |
| POST | /api/safety/risk-assessment | 无 | 评估用户运动风险。 |
| GET | /api/safety/guidelines | 无 | 读取安全指南。 |
| POST | /api/safety/report-incident | 无 | 上报安全事件。 |
| POST | /api/safety/exercise-recommendations | 无 | 生成运动安全建议。 |
| POST | /api/safety/validate-knowledge | 无 | 验证知识库内容。 |
Endpoint 契约
POST /api/safety/check
| 项 | 内容 |
|---|---|
| Request | content、user_context |
| Response | is_safe、risk_level、flags、warnings、requires_human_review、safety_disclaimer |
| Errors | 500 安全服务不可用 |
| Consumer | safety 调用链、chat 前置检查参考 |
| Handler | safety.safety_check |
| DB Touchpoints | 不读写 DB |
| Tests | tests/api/test_safety.py、tests/core/test_safety_public_surface.py |
POST /api/safety/risk-assessment
| 项 | 内容 |
|---|---|
| Request | user_profile、current_query、dialogue_history |
| Response | 总体风险、风险因素、限制、是否需 medical clearance |
| Errors | 500 |
| Consumer | 风险评估调试/服务链 |
| Handler | safety.assess_risk |
| DB Touchpoints | 不读写 DB |
| Tests | tests/api/test_safety_risk_assessment_response.py |
GET /api/safety/guidelines
| 项 | 内容 |
|---|---|
| Request | query user_age、user_diseases |
| Response | general、personalized、emergency_contacts |
| Errors | 500 |
| Consumer | 安全指南入口 |
| Handler | safety.get_safety_guidelines |
| DB Touchpoints | RAG 读 knowledge_chunks |
| Tests | tests/api/test_rag_local_assembly.py |
POST /api/safety/report-incident
| 项 | 内容 |
|---|---|
| Request | user_id、dialogue_id、incident_type、description、ai_response |
| Response | message、incident_id |
| Errors | 500 |
| Consumer | 安全事件上报入口 |
| Handler | safety.report_incident |
| DB Touchpoints | 写 safety_incidents;当 dialogue_id 属于该用户时关联 dialogue_logs;保存脱敏审计摘要,不保存完整描述或 AI 回复原文 |
| Tests | tests/api/test_safety.py |
POST /api/safety/exercise-recommendations
| 项 | 内容 |
|---|---|
| Request | user_profile、exercise_type |
| Response | 运动建议结构 |
| Errors | 500 |
| Consumer | 运动建议调试入口 |
| Handler | safety.get_exercise_recommendations |
| DB Touchpoints | 不读写 DB |
| Tests | risk assessment tests |
POST /api/safety/validate-knowledge
| 项 | 内容 |
|---|---|
| Request | query/body 参数 content |
| Response | 知识库内容验证结果 |
| Errors | 500 |
| Consumer | 内部知识库验证 |
| Handler | safety.validate_knowledge_content |
| DB Touchpoints | RAG 校验链路,可能读取知识库索引 |
| Tests | tests/api/test_rag_local_assembly.py |
医疗安全边界
| 项 | 当前实现 |
|---|---|
| 内容检查 | safety_filter.check_content_safety 返回风险级别、flags、warnings 和人工复核需求。 |
| 风险评估 | risk_assessment_engine.assess_user_risk 基于用户 profile、当前 query、历史对话计算风险因素。 |
| RAG 安全指南 | /guidelines 经 RAG engine 获取安全指南。 |
| 事件报告 | 写入 safety_incidents 最小审计记录,记录风险类型、严重度、对话归属关系和待复核状态;不保存完整用户描述或 AI 回复原文。 |
| 诊断边界 | 返回内容用于运动安全提示和风险分层,不构成医生诊断。 |
Request 示例
json
{
"content": "运动时胸闷还能继续吗",
"user_context": {
"treatment_stage": "rehabilitation",
"has_bone_metastasis": false
}
}来源锚点
- Router:
apps/backend_service/app/api/safety.py - Safety filter:
apps/backend_service/app/core/safety_filter.py - Risk engine:
apps/backend_service/app/services/risk_assessment.py - RAG:
apps/backend_service/app/core/rag_engine.py - Tests:
apps/backend_service/tests/api/test_safety.py、apps/backend_service/tests/api/test_safety_risk_assessment_response.py