12 KiB
智慧监督AI文书写作服务 - 启动说明
快速启动步骤
1. 创建虚拟环境(推荐)
Windows系统:
# 运行安装脚本
setup_env.bat
Linux/Mac系统:
# 运行安装脚本
chmod +x setup_env.sh
./setup_env.sh
手动创建虚拟环境:
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
2. 配置环境变量
复制 .env.example 为 .env:
# Windows:
copy .env.example .env
# Linux/Mac:
cp .env.example .env
编辑 .env 文件,填入你的配置:
# ========== AI服务提供商配置 ==========
# 选择使用的AI服务提供商
# 可选值: 'huawei' 或 'siliconflow'
# 默认值: 'siliconflow'
AI_PROVIDER=siliconflow
# ========== 华为大模型API配置(当 AI_PROVIDER=huawei 时使用) ==========
HUAWEI_API_ENDPOINT=http://10.100.31.26:3001/v1/chat/completions
HUAWEI_API_KEY=sk-PoeiV3qwyTIRqcVc84E8E24cD2904872859a87922e0d9186
HUAWEI_MODEL=DeepSeek-R1-Distill-Llama-70B
HUAWEI_API_TIMEOUT=180
HUAWEI_API_MAX_TOKENS=12000
# ========== 硅基流动API配置(当 AI_PROVIDER=siliconflow 时使用) ==========
SILICONFLOW_URL=https://api.siliconflow.cn/v1/chat/completions
SILICONFLOW_API_KEY=你的硅基流动API密钥
SILICONFLOW_MODEL=deepseek-ai/DeepSeek-V3.2-Exp
SILICONFLOW_API_TIMEOUT=120
SILICONFLOW_API_MAX_TOKENS=2000
# ========== 数据库配置 ==========
DB_HOST=152.136.177.240
DB_PORT=5012
DB_USER=finyx
DB_PASSWORD=6QsGK6MpePZDE57Z
DB_NAME=finyx
# ========== MinIO配置 ==========
MINIO_ENDPOINT=minio.datacubeworld.com:9000
MINIO_ACCESS_KEY=JOLXFXny3avFSzB0uRA5
MINIO_SECRET_KEY=G1BR8jStNfovkfH5ou39EmPl34E4l7dGrnd3Cz0I
MINIO_SECURE=true
MINIO_BUCKET=finyx
AI服务提供商选择说明:
- 华为大模型:设置
AI_PROVIDER=huawei,并配置HUAWEI_API_KEY和HUAWEI_API_ENDPOINT - 硅基流动:设置
AI_PROVIDER=siliconflow(默认值),并配置SILICONFLOW_API_KEY
如果配置的AI服务不完整,系统会自动尝试使用另一个可用的服务。
3. 启动服务
确保虚拟环境已激活,然后运行:
python app.py
服务启动后,你会看到:
服务启动在 http://localhost:7500
测试页面: http://localhost:7500/
模板字段管理页面: http://localhost:7500/template-field-manager
Swagger API文档: http://localhost:7500/api-docs
4. 访问测试页面
在浏览器中打开以下页面:
- 测试页面: http://localhost:7500/ - 用于测试AI解析和文档生成功能
- 模板字段管理页面: http://localhost:7500/template-field-manager - 用于管理模板和字段的关联关系
- Swagger API文档: http://localhost:7500/api-docs - 查看完整的API接口文档并在线测试
测试接口
使用Web测试页面
- 访问 http://localhost:7500/
- 在"AI解析"标签页中:
- 在"输入数据"区域填写输入字段
- 在"输出字段"区域填写需要提取的字段编码
- 点击"开始解析"按钮
- 查看解析结果
- 在"文档生成"标签页中:
- 填写字段数据
- 选择要生成的文件(fileId)
- 点击"生成文档"按钮
- 查看生成的文档信息(包含下载链接)
使用Swagger API文档测试
- 访问 http://localhost:7500/api-docs
- 找到要测试的接口(如
/api/ai/extract) - 点击 "Try it out" 按钮
- 填写请求参数
- 点击 "Execute" 执行请求
- 查看响应结果
使用curl命令测试
AI解析接口:
curl -X POST http://localhost:7500/api/ai/extract \
-H "Content-Type: application/json" \
-d "{
\"inputData\": [
{
\"fieldCode\": \"clue_info\",
\"fieldValue\": \"被举报用户名称是张三,年龄30岁,某公司总经理\"
},
{
\"fieldCode\": \"target_basic_info_clue\",
\"fieldValue\": \"张三,男,汉族,1980年5月出生,山西太原人,本科学历\"
}
],
\"outputData\": [
{\"fieldCode\": \"target_name\"},
{\"fieldCode\": \"target_gender\"},
{\"fieldCode\": \"target_age\"}
]
}"
文档生成接口:
curl -X POST http://localhost:7500/api/ai/generate-document \
-H "Content-Type: application/json" \
-d "{
\"inputData\": [
{
\"fieldCode\": \"target_name\",
\"fieldValue\": \"张三\"
},
{
\"fieldCode\": \"target_gender\",
\"fieldValue\": \"男\"
}
],
\"fpolicFieldParamFileList\": [
{
\"fileId\": 1765273961563507,
\"fileName\": \"请示报告卡.docx\"
}
]
}"
使用Python脚本测试
AI解析接口:
import requests
url = "http://localhost:7500/api/ai/extract"
data = {
"inputData": [
{
"fieldCode": "clue_info",
"fieldValue": "被举报用户名称是张三,年龄30岁,某公司总经理"
},
{
"fieldCode": "target_basic_info_clue",
"fieldValue": "张三,男,汉族,1980年5月出生,山西太原人,本科学历"
}
],
"outputData": [
{"fieldCode": "target_name"},
{"fieldCode": "target_gender"},
{"fieldCode": "target_age"},
{"fieldCode": "target_organization_and_position"}
]
}
response = requests.post(url, json=data)
print(response.json())
文档生成接口:
import requests
url = "http://localhost:7500/api/ai/generate-document"
data = {
"inputData": [
{
"fieldCode": "target_name",
"fieldValue": "张三"
},
{
"fieldCode": "target_gender",
"fieldValue": "男"
}
],
"fpolicFieldParamFileList": [
{
"fileId": 1765273961563507,
"fileName": "请示报告卡.docx"
}
]
}
response = requests.post(url, json=data)
print(response.json())
API接口说明
1. AI字段提取接口
接口地址: POST /api/ai/extract 或 POST /ai/extract
功能: 从输入的非结构化文本中提取结构化字段数据
请求参数:
{
"inputData": [
{
"fieldCode": "clue_info",
"fieldValue": "被举报用户名称是张三,年龄30岁"
}
],
"outputData": [
{"fieldCode": "target_name"},
{"fieldCode": "target_gender"}
]
}
响应格式:
{
"code": 0,
"data": {
"outData": [
{
"fieldCode": "target_name",
"fieldValue": "张三"
},
{
"fieldCode": "target_gender",
"fieldValue": "男"
}
]
},
"msg": "ok",
"isSuccess": true
}
2. 文档生成接口
接口地址: POST /api/ai/generate-document 或 POST /ai/generate-document
功能: 根据输入数据填充Word模板并生成文档
请求参数:
{
"inputData": [
{
"fieldCode": "target_name",
"fieldValue": "张三"
}
],
"fpolicFieldParamFileList": [
{
"fileId": 1765273961563507,
"fileName": "请示报告卡.docx"
}
]
}
响应格式:
{
"code": 0,
"data": {
"documentId": "DOC202411260001",
"documentName": "请示报告卡_张三.docx",
"fpolicFieldParamFileList": [
{
"fileId": 1765273961563507,
"fileName": "请示报告卡_张三.docx",
"filePath": "/615873064429507639/20251205090700/请示报告卡_张三.docx",
"downloadUrl": "https://minio.datacubeworld.com:9000/finyx/..."
}
]
},
"msg": "ok",
"isSuccess": true
}
3. 获取文件配置列表接口
接口地址: GET /api/file-configs
功能: 获取所有可用的文件配置列表,用于查询可用的fileId
响应格式:
{
"code": 0,
"data": {
"fileConfigs": [
{
"fileId": 1765273961563507,
"fileName": "1.请示报告卡(XXX)",
"filePath": "/615873064429507639/TEMPLATE/2025/12/1.请示报告卡(XXX).docx"
}
]
},
"isSuccess": true
}
4. 获取字段配置接口
接口地址: GET /api/fields?businessType=INVESTIGATION
功能: 获取指定业务类型的输入和输出字段配置
响应格式:
{
"code": 0,
"data": {
"fields": {
"input_fields": [...],
"output_fields": [...]
}
},
"isSuccess": true
}
5. 模板字段关联管理接口
接口地址:
GET /api/template-field-relations- 获取所有模板和字段的关联关系POST /api/template-field-relations- 保存模板和字段的关联关系
功能: 管理模板和字段的关联关系
验证服务
运行测试脚本验证服务是否正常:
python test_scripts/test_service.py
常见问题
1. 提示"未配置AI服务"
原因:.env 文件中没有正确设置AI服务配置
解决:
- 如果使用硅基流动,确保设置了
SILICONFLOW_API_KEY - 如果使用华为大模型,确保设置了
HUAWEI_API_KEY和HUAWEI_API_ENDPOINT - 检查
AI_PROVIDER设置是否正确('huawei' 或 'siliconflow')
2. 数据库连接失败
原因:数据库服务不可访问或配置错误
解决:检查 .env 文件中的数据库配置(DB_HOST、DB_PORT、DB_USER、DB_PASSWORD、DB_NAME),确保数据库服务可访问
3. 模块导入失败
原因:依赖包未安装
解决:运行 pip install -r requirements.txt 安装所有依赖
4. 端口被占用
原因:7500端口已被其他程序使用
解决:修改 app.py 中的端口号,或设置环境变量 PORT=其他端口号
5. MinIO连接失败
原因:MinIO服务不可访问或配置错误
解决:检查 .env 文件中的MinIO配置(MINIO_ENDPOINT、MINIO_ACCESS_KEY、MINIO_SECRET_KEY),确保MinIO服务可访问
6. 文档生成失败
原因:模板文件不存在或字段数据不完整
解决:
- 检查
fileId是否正确(可通过/api/file-configs接口查询) - 确保
inputData中包含模板所需的所有字段 - 检查模板文件是否存在于MinIO中
项目结构
.
├── app.py # Flask主应用
├── requirements.txt # Python依赖
├── .env.example # 环境变量配置示例
├── .env # 环境变量配置(需自行创建)
├── services/ # 服务层
│ ├── ai_service.py # AI服务(大模型调用)
│ ├── field_service.py # 字段服务(数据库操作)
│ └── document_service.py # 文档生成服务
├── utils/ # 工具类
│ └── response.py # 响应格式化
├── static/ # 静态文件
│ ├── index.html # 测试页面
│ └── template_field_manager.html # 模板字段管理页面
└── test_scripts/ # 测试脚本
└── test_service.py # 服务测试脚本
下一步
- 配置API密钥后,服务即可正常使用
- 访问测试页面进行功能测试
- 使用Swagger API文档查看完整的接口说明
- 使用模板字段管理页面配置模板和字段的关联关系
- 根据实际需求调整字段配置和AI提示词
更多资源
- Swagger API文档: http://localhost:7500/api-docs - 查看完整的API接口文档
- 占位符与字段对照表: 查看
占位符与字段对照表.md了解所有可用的字段编码 - 技术文档: 查看
技术文档/目录了解更多技术细节