303 lines
11 KiB
Markdown
303 lines
11 KiB
Markdown
# 字段与提示词规则对应关系说明
|
||
|
||
## 一、概述
|
||
|
||
本文档详细说明系统中所有字段的定义、存储位置,以及大模型抽取规则(提示词)的构建方式和存储位置。
|
||
|
||
## 二、字段存储位置
|
||
|
||
### 2.1 数据库表结构
|
||
|
||
字段信息存储在 **MySQL数据库** 中,涉及以下三个表:
|
||
|
||
#### 1. `f_polic_field` - 字段定义表
|
||
- **存储内容**:所有字段的基本定义信息
|
||
- **关键字段**:
|
||
- `id`: 字段ID
|
||
- `tenant_id`: 租户ID(固定值:615873064429507639)
|
||
- `name`: 字段名称(中文显示名)
|
||
- `filed_code`: 字段编码(注意:表中字段名拼写为 `filed_code`,不是 `field_code`)
|
||
- `field_type`: 字段类型(1=输入字段,2=输出字段)
|
||
- `state`: 状态(0=未启用,1=启用)
|
||
|
||
#### 2. `f_polic_file_config` - 文件模板配置表
|
||
- **存储内容**:文档模板的基本配置信息
|
||
- **关键字段**:
|
||
- `id`: 文件配置ID
|
||
- `name`: 文件名称(如:"初步核实审批表")
|
||
- `input_data`: JSON格式的配置数据,包含 `template_code` 和 `business_type`
|
||
- `file_path`: MinIO存储路径
|
||
|
||
#### 3. `f_polic_file_field` - 文件和字段关联表
|
||
- **存储内容**:文件模板与输出字段的关联关系
|
||
- **关键字段**:
|
||
- `file_id`: 文件配置ID(关联 `f_polic_file_config.id`)
|
||
- `filed_id`: 字段ID(关联 `f_polic_field.id`)
|
||
|
||
### 2.2 数据库连接信息
|
||
|
||
- **IP地址**: 152.136.177.240
|
||
- **端口**: 5012
|
||
- **用户名**: finyx
|
||
- **密码**: 6QsGK6MpePZDE57Z
|
||
- **数据库名称**: finyx
|
||
|
||
### 2.3 字段查询逻辑
|
||
|
||
字段查询代码位置:`services/field_service.py`
|
||
|
||
#### 输入字段查询(field_type=1)
|
||
```python
|
||
# 位置:services/field_service.py 第82-92行
|
||
sql_input = """
|
||
SELECT f.id, f.name, f.filed_code as field_code, f.field_type
|
||
FROM f_polic_field f
|
||
WHERE f.tenant_id = %s
|
||
AND f.field_type = 1
|
||
AND (f.filed_code = 'clue_info' OR f.filed_code = 'target_basic_info_clue')
|
||
ORDER BY f.id
|
||
"""
|
||
```
|
||
|
||
#### 输出字段查询(field_type=2)
|
||
```python
|
||
# 位置:services/field_service.py 第44-53行
|
||
sql = """
|
||
SELECT f.id, f.name, f.filed_code as field_code, f.field_type
|
||
FROM f_polic_field f
|
||
INNER JOIN f_polic_file_field ff ON f.id = ff.filed_id
|
||
INNER JOIN f_polic_file_config fc ON ff.file_id = fc.id
|
||
WHERE f.tenant_id = %s
|
||
AND f.field_type = 2
|
||
AND fc.name = '初步核实审批表'
|
||
ORDER BY f.id
|
||
"""
|
||
```
|
||
|
||
**注意**:目前系统只支持"初步核实审批表",输出字段通过文件名称关联查询。
|
||
|
||
## 三、当前所有字段列表
|
||
|
||
### 3.1 输入字段(field_type=1)
|
||
|
||
| 字段名称 | 字段编码 (field_code) | 说明 | 存储位置 |
|
||
|---------|---------------------|------|---------|
|
||
| 线索信息 | clue_info | 线索信息(用于AI解析) | `f_polic_field` 表 |
|
||
| 被核查人员工作基本情况线索 | target_basic_info_clue | 被核查人员工作基本情况线索(用于AI解析) | `f_polic_field` 表 |
|
||
|
||
### 3.2 输出字段(field_type=2)
|
||
|
||
| 字段名称 | 字段编码 (field_code) | 说明 | 存储位置 |
|
||
|---------|---------------------|------|---------|
|
||
| 被核查人姓名 | target_name | 被核查人姓名 | `f_polic_field` 表 |
|
||
| 被核查人员单位及职务 | target_organization_and_position | 被核查人员单位及职务(包括兼职) | `f_polic_field` 表 |
|
||
| 被核查人员性别 | target_gender | 被核查人员性别(男/女) | `f_polic_field` 表 |
|
||
| 被核查人员出生年月 | target_date_of_birth | 被核查人员出生年月(YYYYMM格式) | `f_polic_field` 表 |
|
||
| 被核查人员政治面貌 | target_political_status | 被核查人员政治面貌(中共党员、群众等) | `f_polic_field` 表 |
|
||
| 被核查人员职级 | target_professional_rank | 被核查人员职级(如:正处级) | `f_polic_field` 表 |
|
||
| 线索来源 | clue_source | 线索来源 | `f_polic_field` 表 |
|
||
| 主要问题线索 | target_issue_description | 主要问题线索描述 | `f_polic_field` 表 |
|
||
| 初步核实审批表承办部门意见 | department_opinion | 初步核实审批表承办部门意见 | `f_polic_field` 表 |
|
||
| 初步核实审批表填表人 | filler_name | 初步核实审批表填表人 | `f_polic_field` 表 |
|
||
|
||
## 四、提示词规则(Prompt)存储位置
|
||
|
||
### 4.1 存储方式
|
||
|
||
**提示词规则存储在配置文件中,方便快速修改和调整。**
|
||
|
||
存储位置:`config/prompt_config.json`
|
||
|
||
### 4.2 配置文件说明
|
||
|
||
配置文件采用 JSON 格式,包含以下部分:
|
||
- `prompt_template`: 提示词模板结构(介绍文本、标签、要求列表等)
|
||
- `field_formatting`: 字段格式化规则(输入/输出字段的显示格式)
|
||
- `business_type_rules`: 业务类型特定规则(可为不同业务类型设置特殊规则)
|
||
|
||
详细配置说明请参考:`config/README.md`
|
||
|
||
### 4.3 提示词构建逻辑
|
||
|
||
提示词由以下部分组成:
|
||
|
||
1. **输入文本部分**:将用户输入的 `inputData` 转换为文本格式
|
||
```python
|
||
# 位置:services/field_service.py 第144-149行
|
||
input_text = ""
|
||
for item in input_data:
|
||
field_code = item.get('fieldCode', '')
|
||
field_value = item.get('fieldValue', '')
|
||
input_text += f"{field_code}: {field_value}\n"
|
||
```
|
||
|
||
2. **输出字段说明部分**:从数据库查询的输出字段,生成字段列表说明
|
||
```python
|
||
# 位置:services/field_service.py 第151-156行
|
||
output_fields_desc = ""
|
||
for field in output_fields:
|
||
field_name = field['name']
|
||
field_code = field['field_code']
|
||
output_fields_desc += f"- {field_name} (字段编码: {field_code})\n"
|
||
```
|
||
|
||
3. **JSON格式示例部分**:根据输出字段动态生成JSON示例
|
||
```python
|
||
# 位置:services/field_service.py 第158-161行
|
||
json_example = {}
|
||
for field in output_fields:
|
||
json_example[field['field_code']] = ""
|
||
```
|
||
|
||
4. **固定规则部分**:硬编码的提取要求和格式规范
|
||
```python
|
||
# 位置:services/field_service.py 第163-181行
|
||
prompt = f"""请从以下输入文本中提取结构化信息。
|
||
|
||
输入文本:
|
||
{input_text}
|
||
|
||
需要提取的字段:
|
||
{output_fields_desc}
|
||
|
||
请严格按照以下JSON格式返回结果,只返回JSON,不要包含其他文字说明:
|
||
{json.dumps(json_example, ensure_ascii=False, indent=2)}
|
||
|
||
要求:
|
||
1. 仔细分析输入文本,准确提取每个字段的值
|
||
2. 如果某个字段在输入文本中找不到对应信息,该字段值设为空字符串""
|
||
3. 日期格式统一为YYYYMM(如:198005表示1980年5月)
|
||
4. 性别统一为"男"或"女"
|
||
5. 政治面貌使用标准表述(如:中共党员、群众等)
|
||
6. 只返回JSON对象,不要包含markdown代码块标记
|
||
"""
|
||
```
|
||
|
||
### 4.4 完整提示词示例
|
||
|
||
假设输入数据为:
|
||
```json
|
||
{
|
||
"fieldCode": "clue_info",
|
||
"fieldValue": "被举报用户名称是张三,年龄30岁,某公司总经理"
|
||
}
|
||
```
|
||
|
||
输出字段为10个字段,生成的提示词如下:
|
||
|
||
```
|
||
请从以下输入文本中提取结构化信息。
|
||
|
||
输入文本:
|
||
clue_info: 被举报用户名称是张三,年龄30岁,某公司总经理
|
||
|
||
需要提取的字段:
|
||
- 被核查人姓名 (字段编码: target_name)
|
||
- 被核查人员单位及职务 (字段编码: target_organization_and_position)
|
||
- 被核查人员性别 (字段编码: target_gender)
|
||
- 被核查人员出生年月 (字段编码: target_date_of_birth)
|
||
- 被核查人员政治面貌 (字段编码: target_political_status)
|
||
- 被核查人员职级 (字段编码: target_professional_rank)
|
||
- 线索来源 (字段编码: clue_source)
|
||
- 主要问题线索 (字段编码: target_issue_description)
|
||
- 初步核实审批表承办部门意见 (字段编码: department_opinion)
|
||
- 初步核实审批表填表人 (字段编码: filler_name)
|
||
|
||
请严格按照以下JSON格式返回结果,只返回JSON,不要包含其他文字说明:
|
||
{
|
||
"target_name": "",
|
||
"target_organization_and_position": "",
|
||
"target_gender": "",
|
||
"target_date_of_birth": "",
|
||
"target_political_status": "",
|
||
"target_professional_rank": "",
|
||
"clue_source": "",
|
||
"target_issue_description": "",
|
||
"department_opinion": "",
|
||
"filler_name": ""
|
||
}
|
||
|
||
要求:
|
||
1. 仔细分析输入文本,准确提取每个字段的值
|
||
2. 如果某个字段在输入文本中找不到对应信息,该字段值设为空字符串""
|
||
3. 日期格式统一为YYYYMM(如:198005表示1980年5月)
|
||
4. 性别统一为"男"或"女"
|
||
5. 政治面貌使用标准表述(如:中共党员、群众等)
|
||
6. 只返回JSON对象,不要包含markdown代码块标记
|
||
```
|
||
|
||
## 五、字段与提示词规则的对应关系
|
||
|
||
### 5.1 对应关系图
|
||
|
||
```
|
||
业务类型 (businessType: "INVESTIGATION")
|
||
↓
|
||
查询文件配置 (f_polic_file_config.name = "初步核实审批表")
|
||
↓
|
||
查询输出字段 (通过 f_polic_file_field 关联)
|
||
↓
|
||
获取字段列表 (从 f_polic_field 表)
|
||
↓
|
||
构建提示词 (在代码中动态构建)
|
||
↓
|
||
调用AI服务 (services/ai_service.py)
|
||
```
|
||
|
||
### 5.2 关键代码位置
|
||
|
||
1. **字段查询**:`services/field_service.py` 的 `get_output_fields_by_business_type` 方法
|
||
2. **提示词构建**:`services/field_service.py` 的 `build_extract_prompt` 方法
|
||
3. **AI调用**:`services/ai_service.py` 的 `extract_fields` 方法
|
||
4. **API接口**:`app.py` 的 `/api/ai/extract` 路由
|
||
|
||
## 六、系统限制与扩展说明
|
||
|
||
### 6.1 当前限制
|
||
|
||
1. **业务类型支持**:目前只支持 `businessType: "INVESTIGATION"`(调查核实)
|
||
2. **文件模板支持**:目前只支持"初步核实审批表"
|
||
3. **提示词规则**:提示词规则硬编码在代码中,无法通过配置修改
|
||
|
||
### 6.2 扩展方式
|
||
|
||
#### 添加新的业务类型
|
||
|
||
1. 在数据库中创建新的文件配置记录(`f_polic_file_config` 表)
|
||
2. 创建对应的字段记录(`f_polic_field` 表)
|
||
3. 建立文件和字段的关联关系(`f_polic_file_field` 表)
|
||
4. 修改 `services/field_service.py` 中的查询逻辑,支持根据 `business_type` 查询不同的文件配置
|
||
5. 在 `config/prompt_config.json` 的 `business_type_rules` 中添加新业务类型的规则
|
||
|
||
#### 修改提示词规则
|
||
|
||
**现在可以直接修改配置文件,无需修改代码!**
|
||
|
||
1. 编辑 `config/prompt_config.json` 文件
|
||
2. 修改 `prompt_template` 部分来调整提示词文本和结构
|
||
3. 修改 `field_formatting` 部分来调整字段显示格式
|
||
4. 在 `business_type_rules` 中添加或修改业务类型特定规则
|
||
5. 重启服务使配置生效
|
||
|
||
详细说明请参考:`config/README.md`
|
||
|
||
#### 为不同字段添加特殊规则
|
||
|
||
可以在配置文件的 `business_type_rules` 中为不同业务类型添加特定的提取规则说明。
|
||
|
||
## 七、相关文件
|
||
|
||
- `services/field_service.py` - 字段服务和提示词构建逻辑
|
||
- `services/ai_service.py` - AI服务调用逻辑
|
||
- `app.py` - API接口定义
|
||
- `init_preliminary_verification_fields.py` - 字段初始化脚本
|
||
- `初步核实审批表数据设计说明.md` - 字段设计文档
|
||
|
||
## 八、总结
|
||
|
||
1. **字段存储**:所有字段定义存储在MySQL数据库的 `f_polic_field` 表中
|
||
2. **提示词规则**:提示词规则存储在 `config/prompt_config.json` 配置文件中,方便快速修改和调整
|
||
3. **对应关系**:通过 `business_type` → 文件配置 → 输出字段 → 从配置文件读取规则 → 动态构建提示词的流程建立对应关系
|
||
4. **扩展性**:当前系统设计支持扩展新的业务类型和字段,提示词规则可通过配置文件灵活调整,无需修改代码
|
||
|