AI合同审查系统搭建:零基础服务器部署与配置指南
AI合同审查系统搭建的核心,是在一台可联网的 Linux 云服务器上,把合同解析、文本比对和模型调用三个环节串起来。
本文以常见的 Python + FastAPI + 大模型 API 方案为例,零基础用户按步骤执行即可完成基础部署。
先确定你的审查范围和部署方式
动手前先想清楚两件事:合同是纯文本还是扫描件、审查结果是只做关键词提示还是要生成修改建议。
纯文本合同只需解析 PDF/DOCX 文本;
扫描件则要额外部署 OCR 服务,对服务器内存要求更高。
部署方式建议选云服务器,系统用 Ubuntu 22.04 或 24.04,配置 2 核 4G 起步。
如果合同量不大,2 核 4G 足够跑通流程;
要本地加载开源模型,则至少 8G 内存并考虑 GPU 机型。
准备服务器和基础环境
登录服务器后,先更新系统并安装 Python 虚拟环境和常用工具:
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-venv python3-pip git nginx
验证 Python 版本:
python3 --version
输出应为 Python 3.10 以上。
接着创建项目目录并建立虚拟环境:
mkdir -p /opt/ai-contract && cd /opt/ai-contract
python3 -m venv venv
source venv/bin/activate
激活后命令行前会出现 (venv) 标识,后续安装依赖都在这个环境里进行。
安装依赖并配置模型接口
合同解析常用 pdfplumber 和 python-docx,服务框架用 fastapi 和 uvicorn。
在虚拟环境中执行:
pip install fastapi uvicorn pdfplumber python-docx requests
项目需要一个配置文件来存放模型 API 地址和密钥。
新建 config.py,写入:
API_URL = "https://你的模型服务地址/v1/chat/completions"
API_KEY = "你的API密钥"
不要把密钥提交到公开仓库,建议用环境变量读取。
在启动服务前设置:
export CONTRACT_API_KEY="你的API密钥"
然后在代码中用 os.getenv("CONTRACT_API_KEY") 获取。
编写最小可用的审查接口
新建 main.py,实现一个接收合同文件、提取文本并调用模型返回审查要点的接口。
核心逻辑如下:
from fastapi import FastAPI, UploadFile
import pdfplumber, requests, os
app = FastAPI()
@app.post("/review")
async def review(file: UploadFile):
text = ""
with pdfplumber.open(file.file) as pdf:
for page in pdf.pages:
text += page.extract_text() or ""
resp = requests.post(
os.getenv("API_URL"),
headers={"Authorization": f"Bearer {os.getenv('CONTRACT_API_KEY')}"},
json={"model": "你的模型名", "messages": [{"role": "user", "content": f"审查以下合同风险点:{text[:3000]}"}]},
timeout=60
)
return {"result": resp.json()}
启动服务:
uvicorn main:app --host 0.0.0.0 --port 8000
看到 Uvicorn running on http://0.0.0.0:8000 说明服务已启动。
用 curl 上传一份测试 PDF 验证:
curl -X POST http://127.0.0.1:8000/review -F "file=@test.pdf"
返回 JSON 中包含模型输出即表示链路通。
容易踩坑的几个地方
- 上传大文件超时:Nginx 默认限制请求体大小,需在站点配置中加
client_max_body_size 20m;,否则会报 413。 - PDF 提取为空:扫描件没有文本层,
extract_text()返回空字符串。需要先确认合同是否为扫描件,若是则要接入 OCR,不能直接调模型。 - 模型接口 401:优先检查密钥是否带
Bearer前缀、密钥是否过期。用curl直接请求模型接口排除代码问题。 - 服务重启后失效:
uvicorn前台启动关闭终端即停止。生产环境建议用systemd托管,或至少用nohup后台运行并记录日志。
验证部署是否真正可用
完成启动后,不要只看进程在不在,按下面三项检查:
- 本机
curl http://127.0.0.1:8000/docs能打开接口文档页面。 - 上传一份纯文本 PDF,返回结果中包含风险点描述,而不是空数组或报错。
- 查看服务日志
journalctl -u 你的服务名 -f或nohup.out,确认没有持续报错。
三项都通过,说明基础版 AI 合同审查系统已可对外提供测试。
后续再按需增加用户鉴权、审查规则库和结果存储。
常见疑问
没有 GPU 服务器能跑吗? 可以。
本文方案调用远程模型 API,服务器只负责解析和转发,2 核 4G 即可。
只有本地加载开源模型时才需要 GPU 或大内存。
合同内容会不会泄露? 取决于模型 API 提供方的数据政策。
涉及敏感合同时,应选择支持数据不落盘或私有化部署的方案,并在上传前脱敏。
支持 Word 合同吗? 支持,把 pdfplumber 换成 python-docx 读取段落文本即可,接口结构不变。
整套流程的关键是把文件解析、模型调用和结果返回拆开验证,哪一步报错就单独测哪一步,不要一上来就排查全部环节。