ai-business-write/启动说明.md

481 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 智慧监督AI文书写作服务 - 启动说明
## 快速启动步骤
### 1. 创建虚拟环境(推荐)
**Windows系统**
```bash
# 运行安装脚本
setup_env.bat
```
**Linux/Mac系统**
```bash
# 运行安装脚本
chmod +x setup_env.sh
./setup_env.sh
```
**手动创建虚拟环境:**
```bash
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
```
### 2. 配置环境变量
复制 `.env.example``.env`
```bash
# Windows:
copy .env.example .env
# Linux/Mac:
cp .env.example .env
```
编辑 `.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. 启动服务
确保虚拟环境已激活,然后运行:
```bash
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测试页面
1. 访问 http://localhost:7500/
2. 在"AI解析"标签页中:
- 在"输入数据"区域填写输入字段
- 在"输出字段"区域填写需要提取的字段编码
- 点击"开始解析"按钮
- 查看解析结果
3. 在"文档生成"标签页中:
- 填写字段数据
- 选择要生成的文件fileId
- 点击"生成文档"按钮
- 查看生成的文档信息(包含下载链接)
### 使用Swagger API文档测试
1. 访问 http://localhost:7500/api-docs
2. 找到要测试的接口(如 `/api/ai/extract`
3. 点击 "Try it out" 按钮
4. 填写请求参数
5. 点击 "Execute" 执行请求
6. 查看响应结果
### 使用curl命令测试
**AI解析接口**
```bash
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\"}
]
}"
```
**文档生成接口:**
```bash
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解析接口**
```python
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())
```
**文档生成接口:**
```python
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`
**功能**: 从输入的非结构化文本中提取结构化字段数据
**请求参数**:
```json
{
"inputData": [
{
"fieldCode": "clue_info",
"fieldValue": "被举报用户名称是张三年龄30岁"
}
],
"outputData": [
{"fieldCode": "target_name"},
{"fieldCode": "target_gender"}
]
}
```
**响应格式**:
```json
{
"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模板并生成文档
**请求参数**:
```json
{
"inputData": [
{
"fieldCode": "target_name",
"fieldValue": "张三"
}
],
"fpolicFieldParamFileList": [
{
"fileId": 1765273961563507,
"fileName": "请示报告卡.docx"
}
]
}
```
**响应格式**:
```json
{
"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
**响应格式**:
```json
{
"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`
**功能**: 获取指定业务类型的输入和输出字段配置
**响应格式**:
```json
{
"code": 0,
"data": {
"fields": {
"input_fields": [...],
"output_fields": [...]
}
},
"isSuccess": true
}
```
### 5. 模板字段关联管理接口
**接口地址**:
- `GET /api/template-field-relations` - 获取所有模板和字段的关联关系
- `POST /api/template-field-relations` - 保存模板和字段的关联关系
**功能**: 管理模板和字段的关联关系
## 验证服务
运行测试脚本验证服务是否正常:
```bash
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 # 服务测试脚本
```
## 下一步
1. 配置API密钥后服务即可正常使用
2. 访问测试页面进行功能测试
3. 使用Swagger API文档查看完整的接口说明
4. 使用模板字段管理页面配置模板和字段的关联关系
5. 根据实际需求调整字段配置和AI提示词
## 更多资源
- **Swagger API文档**: http://localhost:7500/api-docs - 查看完整的API接口文档
- **占位符与字段对照表**: 查看 `占位符与字段对照表.md` 了解所有可用的字段编码
- **技术文档**: 查看 `技术文档/` 目录了解更多技术细节