从 0 到 1:我用 AI 做了一个“合同风险审查”网站(法盾智审 LegalShield AI)
这篇文章记录了我从立项、设计、开发、排障到部署的完整过程,包括每个阶段需要准备什么、用了哪些提示词、踩了哪些坑、最后怎么解决的。
目录
- 为什么做这个项目
- 项目定位:给谁用、解决什么问题
- 制作这个项目需要什么
- 完整制作流程(7 个阶段)
- 遇到的问题与解决方法
- 页面演示截图
- 经验总结
一、为什么做这个项目
2026 年 AI 应用进入落地期,市面上大量产品都在做“聊天机器人”,但真正能解决具体业务问题的垂直工具反而更稀缺。合同审查就是这样一个场景:
- 普通人看不懂合同里的“坑”;
- 小微企业没有专职法务;
- 律师看合同贵、慢;
- 合同里的预付款、知识产权、违约金、争议解决条款,往往藏着大风险。
所以我决定做一款 AI 合同风险审查工具:用户上传或粘贴合同,AI 自动拆条款、识别风险、生成报告,还能追问“这条怎么改对我有利”。
二、项目定位:给谁用、解决什么问题
目标用户
- 个人开发者 / 自由职业者:审查自己的服务合同、外包合同;
- 小微企业主:看采购、销售、保密协议;
- 刚工作的法务助理:快速出风险初稿。
产品边界
一开始我差点把项目做“重”,想加组织、多成员、权限、审批流。后来明确为 单用户使用:
- ✅ 登录 / 注册 / 忘记密码
- ✅ 上传文件 / 粘贴文本
- ✅ 异步审查 + 进度展示
- ✅ 条款结构化 + 风险详情
- ✅ 风险报告 + PDF / Word 导出
- ✅ AI 追问 + 知识库
- ✅ 修改版生成 + 谈判建议
- ❌ 不做多组织、成员邀请、审批流、复杂计费
产品定位越早想清楚,后面开发越省力。我在 P0 阶段专门做了一个“项目收口”,把所有非 MVP 需求全部砍掉。
三、制作这个项目需要什么
3.1 技术栈
| 模块 | 技术 |
|---|---|
| 前端 | Vue 3 + TypeScript + Element Plus + Vite |
| 后端 | Python + FastAPI + SQLAlchemy |
| 数据库 | MySQL 8 |
| 缓存 | Redis |
| 大模型 | DeepSeek(对话)+ Qwen Embedding(向量检索),OpenAI 兼容接口 |
| 短信 | 阿里云号码认证服务 |
| 部署 | Docker Compose + Nginx,腾讯云 2 核 2G |
3.2 本地开发环境
- Node.js 22+
- Python 3.10+
- MySQL 8
- Redis
- DeepSeek / DashScope API Key
- 阿里云 AccessKey + 短信签名 + 模板 Code
3.3 启动命令
后端:
cd back-end
python -m venv venv
venv\Scripts\activate # Windows
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
前端:
cd front-end
npm install
npm run dev
访问:http://localhost:5173,后端接口:http://localhost:8000/api/v1。
四、完整制作流程
阶段 0:项目选择与立项
我在 34 个候选项目里选了“AI 合同审查”,理由很简单:
- 有真实付费场景;
- 合同文本是现成的训练/规则素材;
- 规则引擎 + 大模型可以双保险;
- MVP 不需要复杂硬件。
随后让 AI 在 GitHub 上找了同类项目做竞品参考,产出了《0-项目立项文档.md》。
你作为资深的 AI 项目总经理,让你根据 2026 年 AI 应用行业的发展情况来挑选一个项目去开发,你会怎么选
阶段 1:需求与设计文档
基于 PRD,我让 AI 一次性生成 6 类文档:
- 数据库 ER 图
- 系统架构图(Mermaid)
- 产品原型线框图
- 高保真页面描述清单
- API 接口文档
- MVP 技术方案
基于该PRD文档,以md格式编写一下文档:
设计详细的数据库ER图md文档;
绘制详细的系统架构图,用mermaid语法生成可视化架构图;
生成详细的产品原型线框图的md文档;
生成详细的所有的页面的高保真页面描述清单;
制作详细的API接口的md文档;
编写详细的技术方案的md文档,针对MVP的技术实现方案。
阶段 2:前端设计
前端是用户第一印象,我让 AI 严格按高保真清单还原界面,并且反复强调“只改视觉、不动业务逻辑”。
关键页面:
- 登录 / 注册 / 忘记密码(密码、短信两种登录)
- 工作台首页
- 新建审查(上传 / 粘贴)
- 审查进度
- 审查详情(条款 + 风险)
- 风险报告
- AI 追问
- 知识库
- 数据洞察
- 设置
[$design-taste-frontend] 基于"D:\Code_Work\LegalShield AI\项目开发文档\5-高保真页面描述清单.md",优化下当前前端代码front-end界面


阶段 3:登录认证与账号隔离
这一步把前端登录页接到真实后端:
- 用户信息存 MySQL;
- 短信验证码走阿里云;
- 每个账号的资源通过
org_id隔离,互不可见; - 清空虚拟数据,首页/审查列表全部接真实接口。
[$workflow-start] [$using-superpowers] 参考这个文档,针对当前项目的登录注册等界面进行后端代码的补充,
并连接好我本机的MySQL数据库,短信认证采用阿里云短信。
阶段 4:P0-P5 分阶段开发
这是整个项目最核心的部分。我采用“详细分阶段提示词”的方式,每份提示词都包含:总目标、后端要求、前端要求、测试/验收,AI 基本能一次完成一个功能点。
P0:项目收口
把项目正式定位成“单用户合同审查 MVP”,砍掉组织、成员、审批流等重功能。
P1:打通审查主链路
- 审查异步化:
start_review只改状态,后台任务跑条款拆分、规则扫描; - 报告生成与 PDF/Word 导出;
- 历史记录分页与筛选;
- 规则库从内存常量改为数据库表,用户可新增/启停规则。
P2:条款结构化与证据链完善
- 接入大模型基础设施(LLM 配置、调用日志、AI 状态接口);
- 大模型逐条款风险分析,与规则结果合并,失败自动降级;
- AI 追问升级,支持 SSE 流式输出;
- 轻量知识库(手工条目 + 上传文档 + 分块);
- 设置与用量真实化(改昵称、改密码、注销、额度 429);
- Alembic 迁移 + CORS 配置 + Docker Compose 工程化。
P3:报告系统与历史系统
- 报告摘要生成(整体摘要、关键风险、优先处理问题);
- 风险分布可视化、律师复核提醒、免责声明;
- 历史记录可再次打开报告、继续处理任务。
P4:AI 追问系统(RAG)
- 四层检索:当前合同 → 当前风险 → 规则库 → 法条库 → 案例库;
- Chat 接入 RAG,带
【规则】【法条】【案例】引用标注; - 知识库管理页面:分类筛选、上传分类、来源层徽标。
P5:专业化增强
- 风险合并裁决:规则与模型冲突时由 LLM 裁决;
- 律师复核提醒;
- 修改版本生成:对甲方有利 / 乙方有利 / 更公平;
- 多轮谈判建议 + 话术风格;
- 用户行为知识库与数据洞察(采纳率、高频风险、AI 成本)。
[$using-superpowers] 按照下面要求实现:
[阶段名 + 总目标]
后端:文件路径、字段、接口、状态机、降级策略
前端:路由、组件、类型、交互验收点
测试/验收:一条能在页面上验证的路径



阶段 5:部署上线
部署到腾讯云 2 核 2G Ubuntu 24.04,使用 Docker Compose 同时跑 MySQL + Redis + 后端 + 前端;同一台服务器还部署了另一个 Python Web 项目,通过 IP + 端口区分。
[$docker-compose-deployment-generator] 帮我生成一份该项目的腾讯云服务器的部署方案,
服务器配置:xxxxx
五、遇到的问题与解决方法
5.1 短信收不到验证码
- 现象:点击“获取验证码”,手机收不到短信。
- 排查:阿里云短信服务有很多入口,容易用错;AccessKey、签名、模板 Code 必须属于同一账号。
- 解决:改用“号码认证服务”的正确地址,确认签名名称与模板 Code,先让开发环境回显验证码联调,成功后再移除回显。
5.2 登录/注册显示“网络请求失败,请稍后重试”
- 现象:注册、登录页面统一报“网络请求失败”。
- 排查:只截图不够,我按提示打开 DevTools → Network,看到真实状态码和响应体。
- 解决:发现是后端 uvicorn 还是旧进程,重启后端加载最新代码后恢复正常。
5.3 报告导出下载 404
- 现象:PDF/Word 下载按钮点击后 404。
- 原因:后端返回的
download_url已经带/api/v1前缀,前端 axios 的 baseURL 也是/api/v1,拼成了/api/v1/api/v1/reports/...。 - 解决:前端不再拼接重复前缀,或后端只返回相对路径。
5.4 所有风险都挂在第一个条款下
- 现象:风险详情页所有风险都出现在第一个条款下面。
- 原因:规则扫描命中后,代码统一取
first_clause,没有按命中关键词回填条款。 - 解决:按命中关键词把风险回填到对应条款,并保存原文片段。
5.5 条款结构化不完整、证据链是空壳
- 现象:只支持“第X条”一级切分,无条款树、多级编号、页码偏移。
- 解决:扩展正则支持“第X条/章/节、一/(一)/1/1.1”等多级编号;PDF 解析保留页码,写入
page_no/start_offset/end_offset。
5.6 AI 状态误报“已就绪”
- 现象:配置了错误 API Key,页面仍显示“已就绪”。
- 解决:AI 状态接口从“看配置是否填写”改为“真实调用模型列表接口探测”,失败时显示错误信息。
5.7 两份合同生成的报告“太像”
- 现象:高风险合同和无风险合同生成的报告内容相似。
- 解决:报告与 AI 追问的上下文加入合同标题、类型、条款原文、风险结果、知识库引用,让输出按内容差异化。
5.8 风险合并合不起来、AI/规则面板空白
- 现象:规则命中与 AI 命中几乎不会合并,导致“AI 风险”“规则 + AI”面板空白、报告重复。
- 原因:合并用的是
(clause_id, risk_title)精确匹配,规则标题和模型标题通常不同。 - 解决:改为“条款 + 类别/语义相似度”合并;冲突只按等级/置信度判断;同时命中的风险写入
risk_source=both。
5.9 生成修改版“无法连接服务器”
- 现象:点击“生成修改版”,提示无法连接服务器。
- 原因:前端 axios 默认 15 秒超时,而后端调用大模型生成修改版约需 40 秒,超时被误报为“无法连接”。
- 解决:
- 生成修改版请求超时提高到 120 秒;
- axios 拦截器先判断
ECONNABORTED,显示“请求超时”而不是“无法连接”; - 后端对空结果/解析失败增加一次重试。
5.10 风险报告时间晚 8 小时
- 现象:报告里的生成时间比本地时间晚 8 小时。
- 原因:后端存的是 UTC,前端直接展示,没有转东八区。
- 解决:后端统一用中国时区格式化输出。
5.11 导出文件与页面报告不一致
- 现象:PDF/Word 内容和页面上的风险报告对不上。
- 解决:页面和导出共用同一份报告数据源,保证 summary、counts、findings 一致。
5.12 合同超过 100 条时 AI 追问 500
- 现象:长合同第 100 条以后,AI 追问直接报错。
- 原因:中文数字转换
_chinese_numeral对 100+ 越界。 - 解决:修复数字转换边界。
5.13 流式问答重试出现重复消息
- 现象:流式回答中途失败后重试,会重复写入用户问题。
- 解决:流式接口先不落库,或增加客户端消息幂等 ID。
5.14 部署后公网打不开
- 现象:
docker compose up后本机 curl 正常,公网访问不了。 - 原因:服务器安全组/防火墙没有放行对应端口。
- 解决:在腾讯云安全组放行端口(HTTP 80 和业务端口),重启后正常访问。
5.15 MySQL 密码填错
- 现象:
.env里DB_PASSWORD和DB_ROOT_PASSWORD不知道填哪个,部署失败。 - 解决:Compose 内网环境下,
DB_PASSWORD是应用连接数据库的账号密码,DB_ROOT_PASSWORD是容器内 MySQL root 密码;生产环境用openssl rand -hex生成,不要直接填本地密码。
5.16 数据洞察柱状图溢出
- 现象:14 天审查趋势柱状图超出容器。
- 解决:修复图表宽度约束,保证不超出“悬停查看明细”提示行,并兼顾美观。
六、页面演示截图汇总
| 截图点 | 内容 | 建议文件名 |
|---|---|---|
| 1 | 本地开发环境(前后端终端) | 01-本地开发环境.png |
| 2 | 项目立项文档 | 02-项目立项文档.png |
| 3 | 系统架构图 | 03-系统架构图.png |
| 4 | 数据库 ER 图 | 04-数据库ER图.png |
| 5 | 登录页面 | 05-登录页面.png |
| 6 | 注册 / 短信验证码 | 06-注册短信验证码.png |
| 7 | 工作台首页 | 07-工作台首页.png |
| 8 | 审查进度页 | 08-审查进度.png |
| 9 | 风险详情页 | 09-风险详情.png |
| 10 | AI 追问界面 | 10-AI追问.png |
| 11 | 风险报告页 | 11-风险报告.png |
| 12 | PDF/Word 导出 | 12-报告导出.png |
| 13 | 知识库页面 | 13-知识库.png |
| 14 | 数据洞察页面 | 14-数据洞察.png |
| 15 | 设置页面 | 15-设置页.png |
| 16 | 生成修改版弹窗 | 16-生成修改版.png |
| 17 | 服务器 docker compose ps | 17-服务器部署.png |
| 18 | 公网访问首页 | 18-公网访问.png |
使用说明:在
项目开发文档/博客配图/目录下按上表保存截图,然后替换文档中的博客配图/xx.png路径即可。发布到 CSDN 时,需要把图片重新上传到 CSDN 的图床,再替换图片链接。
七、经验总结
- 先想清楚产品边界再写代码:单用户还是多组织,决定了后面所有表结构和权限设计。
- 详细的分阶段提示词 = 一次完成:把目标、文件路径、字段、接口、降级、验收写成“后端/前端/测试”三段式,AI 交付质量最高。
- 降级策略是 MVP 的保底:大模型超时/失败时自动回退规则引擎、规则摘要、关键词检索,主流程永远可用。
- 排障要看真实数据:截图 + DevTools Network 状态码 + 后端日志,比反复猜测快得多。
- 前后端超时一定要对齐:大模型接口慢,前端 axios 超时、后端 LLM timeout 要同步配置。
- 文档和截图随过程沉淀:每个阶段、每个坑都及时记录,最后写博客时基本不用重新回忆。
如果你也想做类似的 AI 垂直应用,建议从“一个真实用户愿意付费的小场景”开始,先用规则引擎保证下限,再用大模型提升上限。
更多推荐


所有评论(0)