# 字段与提示词规则对应关系说明 ## 一、概述 本文档详细说明系统中所有字段的定义、存储位置,以及大模型抽取规则(提示词)的构建方式和存储位置。 ## 二、字段存储位置 ### 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. **扩展性**:当前系统设计支持扩展新的业务类型和字段,提示词规则可通过配置文件灵活调整,无需修改代码