- Define system architecture with FastAPI + SQLite + sqlite-vss - Design 5 core modules: laws, analyses, cases, contracts, signatures - Specify API design, data models, and permission system - Outline deployment and security strategies Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
607 lines
21 KiB
Markdown
607 lines
21 KiB
Markdown
# 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 数据模型
|
||
|
||
```python
|
||
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 数据模型
|
||
|
||
```python
|
||
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 数据模型
|
||
|
||
```python
|
||
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 数据模型
|
||
|
||
```python
|
||
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 数据模型
|
||
|
||
```python
|
||
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 统一响应格式
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": { ... }
|
||
}
|
||
```
|
||
|
||
错误响应:
|
||
```json
|
||
{
|
||
"code": 20001,
|
||
"message": "认证失败,请重新登录",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 8. 测试策略
|
||
|
||
### 8.1 单元测试
|
||
|
||
- 覆盖所有业务逻辑层
|
||
- 使用 pytest + pytest-asyncio
|
||
- Mock 外部 API 调用
|
||
- 目标覆盖率 > 80%
|
||
|
||
### 8.2 集成测试(二期)
|
||
|
||
- API 端到端测试
|
||
- 数据库集成测试
|
||
|
||
### 8.3 测试命令
|
||
|
||
```bash
|
||
# 运行所有单元测试
|
||
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 部署
|
||
|
||
```yaml
|
||
# 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 周 |
|
||
|
||
---
|
||
|
||
**设计文档完成,等待用户批准后进入实现计划阶段。**
|