AI 法律助手系统设计文档
版本: 1.0
日期: 2026-05-01
作者: AI 开发团队
1. 背景与目标
1.1 背景
法律服务行业正经历数字化转型,传统法律工作模式存在效率低、知识管理困难、合同流程繁琐等问题。AI 技术的发展为法律工作自动化提供了可能。
1.2 目标
构建一个 AI 法律助手系统,提供以下核心能力:
- 法律法规智能检索与问答
- 深度法律研判分析
- 案件评审辅助
- 合同全生命周期管理
- 电子签名服务
1.3 成功标准
| 指标 |
目标值 |
| 法律检索响应时间 |
< 3 秒 |
| 合同审查效率提升 |
> 50% |
| 系统可用性 |
> 99% |
| 单机支持并发用户 |
20 人 |
2. 范围与非范围
2.1 范围(MVP)
- 法律法规检索与智能问答
- 基础法律研判(法条引用、案例分析)
- 案件信息管理与评审记录
- 合同模板管理与在线编辑
- 电子签名(简化版,无 CA 证书)
- 用户权限管理
2.2 非范围(二期)
- 多租户支持
- 高可用集群部署
- 移动端 APP
- 对接国家法律法规数据库 API
- CA 证书集成
- 语音交互
3. 系统架构
3.1 整体架构
┌────────────────────────────────────────────────────────────────┐
│ 前端层 (Vue 3 SPA) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐│
│ │ 法律检索 │ │ 法律研判 │ │ 案件评审 │ │ 合同管理 │ │电子签名││
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └────────┘│
└────────────────────────────────────────────────────────────────┘
│ HTTP/WebSocket
┌────────────────────────────────────────────────────────────────┐
│ API 网关层 (FastAPI) │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 认证中间件 │ 请求限流 │ 日志记录 │ 异常处理 │ │
│ └──────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────┘
│
┌────────────────────────────────────────────────────────────────┐
│ 业务服务层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 法律服务 │ │ 研判服务 │ │ 案件服务 │ │ 合同服务 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 签名服务 │ │ 用户服务 │ │ 文件服务 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└────────────────────────────────────────────────────────────────┘
│
┌────────────────────────────────────────────────────────────────┐
│ AI 能力层 │
│ ┌──────────────────────┐ ┌──────────────────────────────┐ │
│ │ LLM 服务 (外部 API) │ │ Embedding 服务 (外部 API) │ │
│ │ - 对话补全 │ │ - 文本向量化 │ │
│ │ - 法律问答 │ │ - 相似度检索 │ │
│ └──────────────────────┘ └──────────────────────────────┘ │
└────────────────────────────────────────────────────────────────┘
│
┌────────────────────────────────────────────────────────────────┐
│ 数据存储层 │
│ ┌──────────────────────┐ ┌──────────────────────────────┐ │
│ │ SQLite (关系数据) │ │ sqlite-vss (向量检索) │ │
│ │ - 用户/权限 │ │ - 法律法规向量 │ │
│ │ - 合同/案件 │ │ - 案例向量 │ │
│ │ - 签名记录 │ │ - 合同条款向量 │ │
│ └──────────────────────┘ └──────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 文件存储 (本地文件系统) │ │
│ │ - 合同 PDF/Word │ │
│ │ - 签名文件 │ │
│ └──────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────┘
3.2 技术栈
| 层级 |
技术选型 |
版本 |
说明 |
| 前端 |
Vue 3 + TypeScript + Vite |
3.4+ |
SPA 单页应用 |
| UI 组件 |
Element Plus |
2.5+ |
企业级 UI 组件库 |
| 后端框架 |
FastAPI |
0.110+ |
高性能异步 Python 框架 |
| ORM |
SQLAlchemy |
2.0+ |
异步 ORM 支持 |
| 数据库 |
SQLite |
3.40+ |
关系型数据库 |
| 向量检索 |
sqlite-vss |
0.1+ |
SQLite 向量扩展 |
| LLM |
OpenAI API 兼容接口 |
- |
支持多厂商切换 |
| Embedding |
text-embedding-3-small |
- |
或国内等效模型 |
| 文件存储 |
本地文件系统 |
- |
可选 MinIO |
| 容器化 |
Docker + docker-compose |
- |
一键部署 |
4. 核心模块设计
4.1 法律法规引擎
4.1.1 功能描述
- 法律法规数据导入与管理
- 智能检索(关键词 + 语义相似度)
- 法条问答
4.1.2 数据模型
class Law(Base):
"""法律法规表"""
id: int # 主键
title: str # 标题
law_type: str # 类型:法律/法规/规章/司法解释
promulgation_date: date # 颁布日期
effective_date: date # 生效日期
status: str # 状态:有效/废止/修订
issuing_authority: str # 颁布机关
content: str # 全文内容
embedding: List[float] # 向量嵌入(存储在向量表)
created_at: datetime
updated_at: datetime
class LawArticle(Base):
"""法条表"""
id: int
law_id: int # 所属法律
article_number: str # 条号
content: str # 条款内容
embedding: List[float] # 向量嵌入
4.1.3 检索流程
用户查询 → 文本向量化 → 向量相似度检索 → Top-K 法条 → LLM 生成回答
4.2 法律研判引擎
4.2.1 功能描述
4.2.2 数据模型
class LegalAnalysis(Base):
"""法律研判记录"""
id: int
user_id: int
title: str # 研判主题
case_description: str # 案情描述
legal_basis: JSON # 法律依据(法条列表)
analysis_content: str # 研判内容
conclusion: str # 结论
created_at: datetime
class Case(Base):
"""案例库"""
id: int
title: str # 案例标题
case_number: str # 案号
court: str # 审理法院
case_type: str # 案由类型
judgment_date: date # 判决日期
facts: str # 事实认定
judgment: str # 判决结果
reasoning: str # 裁判理由
embedding: List[float] # 向量嵌入
4.3 案件评审系统
4.3.1 功能描述
4.3.2 数据模型
class CaseReview(Base):
"""案件评审"""
id: int
case_id: int # 关联案例
reviewer_id: int # 评审人
review_type: str # 类型:初审/复审/终审
opinion: str # 评审意见
score: int # 评分(可选)
status: str # 状态:待审/通过/驳回
created_at: datetime
class CaseReviewFlow(Base):
"""评审流程"""
id: int
case_id: int
current_step: int # 当前步骤
total_steps: int # 总步骤
status: str # 流程状态
4.4 合同管理系统
4.4.1 功能描述
- 合同模板管理
- 合同创建与编辑
- 合同审批流程
- 合同归档与检索
4.4.2 数据模型
class ContractTemplate(Base):
"""合同模板"""
id: int
name: str
contract_type: str # 合同类型
content: str # 模板内容(支持变量占位符)
variables: JSON # 变量定义
created_by: int
created_at: datetime
class Contract(Base):
"""合同"""
id: int
template_id: int # 模板来源
title: str
contract_number: str # 合同编号
party_a: str # 甲方
party_b: str # 乙方
content: str # 合同内容
status: str # 状态:草稿/审批中/已签署/已归档
effective_date: date
expiry_date: date
file_path: str # 文件存储路径
created_by: int
created_at: datetime
class ContractApproval(Base):
"""合同审批"""
id: int
contract_id: int
approver_id: int
status: str # 待审/通过/驳回
comment: str
approved_at: datetime
4.5 电子签名服务
4.5.1 功能描述
4.5.2 数据模型
class SignatureRequest(Base):
"""签名请求"""
id: int
contract_id: int
requester_id: int # 发起人
signer_name: str # 签署人姓名
signer_email: str # 签署人邮箱
status: str # 待签/已签/已拒绝/已过期
token: str # 签名令牌(唯一)
expires_at: datetime # 过期时间
created_at: datetime
class Signature(Base):
"""签名记录"""
id: int
request_id: int
signer_name: str
signature_data: str # 签名数据(Base64 图片或坐标)
ip_address: str # 签署 IP
user_agent: str # 浏览器信息
signed_at: datetime
verification_hash: str # 验证哈希(文档指纹)
class SignatureAudit(Base):
"""签名审计日志"""
id: int
signature_id: int
action: str # 动作类型
details: JSON
created_at: datetime
4.5.3 签名流程
发起签名请求 → 生成签名令牌 → 发送邮件通知 → 签署人打开链接 →
绘制签名 → 计算文档哈希 → 保存签名记录 → 通知发起人
5. API 设计
5.1 RESTful API 规范
基础路径:/api/v1
认证方式:JWT Bearer Token
5.2 核心 API 列表
法律法规模块
| 方法 |
路径 |
描述 |
| GET |
/laws |
法律法规列表 |
| POST |
/laws |
创建法律法规 |
| GET |
/laws/{id} |
获取详情 |
| POST |
/laws/search |
智能检索 |
| POST |
/laws/qa |
法律问答 |
法律研判模块
| 方法 |
路径 |
描述 |
| POST |
/analyses |
创建研判 |
| GET |
/analyses |
研判列表 |
| GET |
/analyses/{id} |
研判详情 |
| POST |
/analyses/generate |
AI 生成研判 |
案件评审模块
| 方法 |
路径 |
描述 |
| GET |
/cases |
案件列表 |
| POST |
/cases |
创建案件 |
| POST |
/cases/{id}/reviews |
提交评审 |
| GET |
/cases/{id}/reviews |
评审记录 |
合同管理模块
| 方法 |
路径 |
描述 |
| GET |
/contracts |
合同列表 |
| POST |
/contracts |
创建合同 |
| PUT |
/contracts/{id} |
更新合同 |
| POST |
/contracts/{id}/submit |
提交审批 |
| POST |
/contracts/{id}/approve |
审批合同 |
电子签名模块
| 方法 |
路径 |
描述 |
| POST |
/signatures/request |
发起签名 |
| GET |
/signatures/{token} |
获取签名页 |
| POST |
/signatures/{token}/sign |
执行签名 |
| GET |
/signatures/{id}/verify |
验证签名 |
6. 用户权限设计
6.1 角色定义
| 角色 |
权限范围 |
| admin |
系统管理员,全部权限 |
| lawyer |
律师,法律法规检索、研判、案件评审、合同管理 |
| reviewer |
评审人,仅案件评审 |
| client |
客户,查看自己的合同、执行签名 |
6.2 权限矩阵
| 功能模块 |
admin |
lawyer |
reviewer |
client |
| 用户管理 |
✓ |
✗ |
✗ |
✗ |
| 法律检索 |
✓ |
✓ |
✓ |
✗ |
| 法律研判 |
✓ |
✓ |
✗ |
✗ |
| 案件管理 |
✓ |
✓ |
✓ |
✗ |
| 合同管理 |
✓ |
✓ |
✗ |
查看 |
| 电子签名 |
✓ |
✓ |
✗ |
✓ |
7. 错误处理
7.1 错误码规范
| 错误码 |
含义 |
| 10001 |
参数校验失败 |
| 10002 |
资源不存在 |
| 20001 |
认证失败 |
| 20002 |
权限不足 |
| 30001 |
LLM 服务异常 |
| 30002 |
向量检索异常 |
| 40001 |
签名已过期 |
| 40002 |
签名已失效 |
7.2 统一响应格式
{
"code": 0,
"message": "success",
"data": { ... }
}
错误响应:
{
"code": 20001,
"message": "认证失败,请重新登录",
"data": null
}
8. 测试策略
8.1 单元测试
- 覆盖所有业务逻辑层
- 使用 pytest + pytest-asyncio
- Mock 外部 API 调用
- 目标覆盖率 > 80%
8.2 集成测试(二期)
8.3 测试命令
# 运行所有单元测试
pytest tests/unit -v
# 运行覆盖率报告
pytest tests/unit --cov=app --cov-report=html
9. 部署架构
9.1 单机部署
┌─────────────────────────────────────┐
│ 物理机/虚拟机 │
│ ┌───────────────────────────────┐ │
│ │ Nginx (反向代理) │ │
│ │ :80/:443 │ │
│ └───────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────────┐ │
│ │ FastAPI 应用 (Uvicorn) │ │
│ │ :8000 │ │
│ └───────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────────┐ │
│ │ SQLite + 向量扩展 + 文件存储 │ │
│ └───────────────────────────────┘ │
└─────────────────────────────────────┘
9.2 Docker 部署
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- ./data:/app/data
- ./uploads:/app/uploads
environment:
- DATABASE_URL=sqlite:///./data/legal_assistant.db
- LLM_API_KEY=${LLM_API_KEY}
- LLM_API_BASE=${LLM_API_BASE}
- EMBEDDING_API_KEY=${EMBEDDING_API_KEY}
10. 安全设计
10.1 认证与授权
- JWT Token 认证,有效期 24 小时
- Refresh Token 有效期 7 天
- 敏感操作需要二次验证
10.2 数据安全
- 密码使用 bcrypt 加密存储
- 敏感配置通过环境变量注入
- 文件上传类型白名单限制
10.3 API 安全
- 请求频率限制(每分钟 60 次)
- SQL 注入防护(ORM 参数化查询)
- XSS 防护(输入过滤 + 输出编码)
11. 目录结构
legal-assistant/
├── backend/ # 后端代码
│ ├── app/
│ │ ├── api/ # API 路由
│ │ │ ├── v1/
│ │ │ │ ├── laws.py
│ │ │ │ ├── analyses.py
│ │ │ │ ├── cases.py
│ │ │ │ ├── contracts.py
│ │ │ │ └── signatures.py
│ │ ├── models/ # 数据模型
│ │ ├── schemas/ # Pydantic 模型
│ │ ├── services/ # 业务逻辑
│ │ ├── core/ # 核心配置
│ │ │ ├── config.py
│ │ │ ├── security.py
│ │ │ └── database.py
│ │ └── main.py # 应用入口
│ ├── tests/ # 测试代码
│ │ └── unit/
│ ├── alembic/ # 数据库迁移
│ ├── requirements.txt
│ └── Dockerfile
├── frontend/ # 前端代码
│ ├── src/
│ │ ├── views/
│ │ ├── components/
│ │ ├── api/
│ │ ├── stores/
│ │ └── router/
│ ├── package.json
│ └── Dockerfile
├── docker-compose.yml
├── .env.example
└── README.md
12. 风险与缓解
| 风险 |
影响 |
缓解措施 |
| LLM API 不可用 |
法律问答功能不可用 |
增加重试机制和降级策略(返回检索结果) |
| 向量检索性能 |
检索响应慢 |
数据量增大后考虑迁移到专业向量库 |
| 签名法律效力 |
用户误解 |
明确告知用户本系统签名不具备法律效力 |
| 数据丢失 |
业务中断 |
定期备份 SQLite 数据库文件 |
13. 里程碑
| 阶段 |
内容 |
预计时间 |
| MVP |
核心功能实现 + 单元测试 |
2 周 |
| 二期 |
高级功能 + 性能优化 |
2 周 |
设计文档完成,等待用户批准后进入实现计划阶段。