这篇文章记录了我从立项、设计、开发、排障到部署的完整过程,包括每个阶段需要准备什么、用了哪些提示词、踩了哪些坑、最后怎么解决的。


目录

  1. 为什么做这个项目
  2. 项目定位:给谁用、解决什么问题
  3. 制作这个项目需要什么
  4. 完整制作流程(7 个阶段)
  5. 遇到的问题与解决方法
  6. 页面演示截图
  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 类文档:

  1. 数据库 ER 图
  2. 系统架构图(Mermaid)
  3. 产品原型线框图
  4. 高保真页面描述清单
  5. API 接口文档
  6. 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 密码填错

  • 现象:.envDB_PASSWORDDB_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 的图床,再替换图片链接。


七、经验总结

  1. 先想清楚产品边界再写代码:单用户还是多组织,决定了后面所有表结构和权限设计。
  2. 详细的分阶段提示词 = 一次完成:把目标、文件路径、字段、接口、降级、验收写成“后端/前端/测试”三段式,AI 交付质量最高。
  3. 降级策略是 MVP 的保底:大模型超时/失败时自动回退规则引擎、规则摘要、关键词检索,主流程永远可用。
  4. 排障要看真实数据:截图 + DevTools Network 状态码 + 后端日志,比反复猜测快得多。
  5. 前后端超时一定要对齐:大模型接口慢,前端 axios 超时、后端 LLM timeout 要同步配置。
  6. 文档和截图随过程沉淀:每个阶段、每个坑都及时记录,最后写博客时基本不用重新回忆。

如果你也想做类似的 AI 垂直应用,建议从“一个真实用户愿意付费的小场景”开始,先用规则引擎保证下限,再用大模型提升上限。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐