ai-business-write/技术文档/字段与提示词规则说明.md

383 lines
16 KiB
Markdown
Raw 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.

# 字段与提示词规则对应关系说明
## 一、概述
本文档详细说明系统中所有字段的定义、存储位置,以及大模型抽取规则(提示词)的构建方式和存储位置。
## 二、字段存储位置
### 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_organization | 被核查人员单位 | `f_polic_field` 表 |
| 被核查人员职务 | target_position | 被核查人员职务 | `f_polic_field` 表 |
| 被核查人员性别 | target_gender | 被核查人员性别(男/女) | `f_polic_field` 表 |
| 被核查人员出生年月 | target_date_of_birth | 被核查人员出生年月YYYYMM格式 | `f_polic_field` 表 |
| 被核查人员年龄 | target_age | 被核查人员年龄(数字,单位:岁) | `f_polic_field` 表 |
| 被核查人员文化程度 | target_education_level | 被核查人员文化程度(如:本科、大专、高中等) | `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` 表 |
### 3.3 谈话前安全风险评估表字段(带默认值)
| 字段名称 | 字段编码 (field_code) | 说明 | 默认值 | 存储位置 |
|---------|---------------------|------|--------|---------|
| 被核查人员家庭情况 | target_family_situation | 被核查人员家庭情况 | 家庭关系和谐稳定 | `f_polic_field` 表 |
| 被核查人员社会关系 | target_social_relations | 被核查人员社会关系 | 社会交往较多,人机关系基本正常 | `f_polic_field` 表 |
| 被核查人员健康状况 | target_health_status | 被核查人员健康状况 | 良好 | `f_polic_field` 表 |
| 被核查人员性格特征 | target_personality | 被核查人员性格特征 | 开朗 | `f_polic_field` 表 |
| 被核查人员承受能力 | target_tolerance | 被核查人员承受能力 | 较强 | `f_polic_field` 表 |
| 被核查人员涉及问题严重程度 | target_issue_severity | 被核查人员涉及问题严重程度 | 较轻 | `f_polic_field` 表 |
| 被核查人员涉及其他问题的可能性 | target_other_issues_possibility | 被核查人员涉及其他问题的可能性 | 较小 | `f_polic_field` 表 |
| 被核查人员此前被审查情况 | target_previous_investigation | 被核查人员此前被审查情况 | 无 | `f_polic_field` 表 |
| 被核查人员社会负面事件 | target_negative_events | 被核查人员社会负面事件 | 无 | `f_polic_field` 表 |
| 被核查人员其他情况 | target_other_situation | 被核查人员其他情况 | 无 | `f_polic_field` 表 |
| 风险等级 | risk_level | 风险等级 | 低 | `f_polic_field` 表 |
## 四、字段默认值机制
### 4.1 默认值配置存储
**字段默认值存储在配置文件中,方便快速修改和调整。**
存储位置:`config/field_defaults.json`
### 4.2 默认值说明
**重要说明**系统在AI提取阶段不会自动应用默认值。如果AI未提取到字段值系统会返回空字符串。
默认值信息提供给前端开发人员,前端可以根据业务需求决定是否在界面上显示默认值或应用默认值。
### 4.2.1 默认值应用规则(前端参考)
1. **AI提取阶段**系统首先尝试使用AI从输入文本中提取字段值
2. **空值处理**如果AI提取的字段值为空或未提取到系统返回空字符串
3. **前端应用**:前端可以根据业务需求,在用户界面中显示默认值提示,或允许用户选择应用默认值
4. **优先级**AI提取的值优先于默认值
### 4.3 默认值配置示例
```json
{
"field_defaults": {
"target_family_situation": "家庭关系和谐稳定",
"target_social_relations": "社会交往较多,人机关系基本正常",
"target_health_status": "良好",
"target_personality": "开朗",
"target_tolerance": "较强",
"target_issue_severity": "较轻",
"target_other_issues_possibility": "较小",
"target_previous_investigation": "无",
"target_negative_events": "无",
"target_other_situation": "无",
"risk_level": "低"
}
}
```
### 4.4 默认值相关代码位置
默认值相关代码在以下位置(供前端参考,系统不会自动应用):
1. **默认值加载**`services/field_service.py``_load_field_defaults` 方法
2. **默认值获取**`services/field_service.py``get_field_default_value` 方法前端可通过API获取
3. **默认值配置**`config/field_defaults.json` 配置文件
**注意**:系统在 `/ai/extract` 接口中不会自动应用默认值如果AI未提取到值返回空字符串。
## 五、提示词规则Prompt存储位置
### 5.1 存储方式
**提示词规则存储在配置文件中,方便快速修改和调整。**
存储位置:`config/prompt_config.json`
### 5.2 配置文件说明
配置文件采用 JSON 格式,包含以下部分:
- `prompt_template`: 提示词模板结构(介绍文本、标签、要求列表等)
- `field_formatting`: 字段格式化规则(输入/输出字段的显示格式)
- `business_type_rules`: 业务类型特定规则(可为不同业务类型设置特殊规则)
详细配置说明请参考:`config/README.md`
### 5.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. 日期格式统一为YYYYMM198005表示1980年5月
4. 性别统一为"男"或"女"
5. 政治面貌使用标准表述(如:中共党员、群众等)
6. 只返回JSON对象不要包含markdown代码块标记
"""
```
### 5.4 完整提示词示例
假设输入数据为:
```json
{
"fieldCode": "clue_info",
"fieldValue": "被举报用户名称是张三年龄30岁某公司总经理"
}
```
输出字段为14个字段生成的提示词如下
```
请从以下输入文本中提取结构化信息。
输入文本:
clue_info: 被举报用户名称是张三年龄30岁某公司总经理
需要提取的字段:
- 被核查人姓名 (字段编码: target_name)
- 被核查人员单位及职务 (字段编码: target_organization_and_position)
- 被核查人员单位 (字段编码: target_organization)
- 被核查人员职务 (字段编码: target_position)
- 被核查人员性别 (字段编码: target_gender)
- 被核查人员出生年月 (字段编码: target_date_of_birth)
- 被核查人员年龄 (字段编码: target_age)
- 被核查人员文化程度 (字段编码: target_education_level)
- 被核查人员政治面貌 (字段编码: target_political_status)
- 被核查人员职级 (字段编码: target_professional_rank)
- 线索来源 (字段编码: clue_source)
- 主要问题线索 (字段编码: target_issue_description)
- 初步核实审批表承办部门意见 (字段编码: department_opinion)
- 初步核实审批表填表人 (字段编码: filler_name)
请严格按照以下JSON格式返回结果只返回JSON不要包含其他文字说明
{
"target_name": "",
"target_organization_and_position": "",
"target_organization": "",
"target_position": "",
"target_gender": "",
"target_date_of_birth": "",
"target_age": "",
"target_education_level": "",
"target_political_status": "",
"target_professional_rank": "",
"clue_source": "",
"target_issue_description": "",
"department_opinion": "",
"filler_name": ""
}
要求:
1. 仔细分析输入文本,准确提取每个字段的值
2. 如果某个字段在输入文本中找不到对应信息,该字段值设为空字符串""
3. 日期格式统一为YYYYMM198005表示1980年5月
4. 性别统一为"男"或"女"
5. 政治面貌使用标准表述(如:中共党员、群众等)
6. 只返回JSON对象不要包含markdown代码块标记
```
## 六、字段与提示词规则的对应关系
### 6.1 对应关系图
```
业务类型 (businessType: "INVESTIGATION")
查询文件配置 (f_polic_file_config.name = "初步核实审批表")
查询输出字段 (通过 f_polic_file_field 关联)
获取字段列表 (从 f_polic_field 表)
构建提示词 (在代码中动态构建)
调用AI服务 (services/ai_service.py)
```
### 6.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` 路由
## 七、系统限制与扩展说明
### 7.1 当前限制
1. **业务类型支持**:目前只支持 `businessType: "INVESTIGATION"`(调查核实)
2. **文件模板支持**:目前只支持"初步核实审批表"
3. **提示词规则**:提示词规则硬编码在代码中,无法通过配置修改
### 7.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. **字段默认值**:字段默认值存储在 `config/field_defaults.json` 配置文件中如果AI未提取到值系统会自动应用默认值
4. **对应关系**:通过 `business_type` → 文件配置 → 输出字段 → 从配置文件读取规则 → 动态构建提示词的流程建立对应关系
5. **扩展性**:当前系统设计支持扩展新的业务类型和字段,提示词规则和默认值可通过配置文件灵活调整,无需修改代码