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