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

12 KiB
Raw Permalink Blame History

智慧监督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_KEYHUAWEI_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. 访问测试页面

在浏览器中打开以下页面:

测试接口

使用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解析接口

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/extractPOST /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-documentPOST /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_KEYHUAWEI_API_ENDPOINT
  • 检查 AI_PROVIDER 设置是否正确('huawei' 或 'siliconflow'

2. 数据库连接失败

原因:数据库服务不可访问或配置错误

解决:检查 .env 文件中的数据库配置(DB_HOSTDB_PORTDB_USERDB_PASSWORDDB_NAME),确保数据库服务可访问

3. 模块导入失败

原因:依赖包未安装

解决:运行 pip install -r requirements.txt 安装所有依赖

4. 端口被占用

原因7500端口已被其他程序使用

解决:修改 app.py 中的端口号,或设置环境变量 PORT=其他端口号

5. MinIO连接失败

原因MinIO服务不可访问或配置错误

解决:检查 .env 文件中的MinIO配置MINIO_ENDPOINTMINIO_ACCESS_KEYMINIO_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 了解所有可用的字段编码
  • 技术文档: 查看 技术文档/ 目录了解更多技术细节