Files
offerpai_python_ai/app/ai/resume_extractor/prompts.py
T
2026-06-24 16:16:37 +08:00

105 lines
9.1 KiB
Python

"""简历两阶段提取 Prompt
第一阶段(概览):5路并行,只提取主表短字段和子表标识名。
第二阶段(详情):N路并行,每条子表记录单独提取短字段;description/summary 不照抄原文,
只返回「行号区间字符串」,由代码按行号从原文单元数组切片还原。
输入文本格式:每行形如 `[行号] 内容`,行号从 0 开始连续递增。
行号区间字符串格式:`"起-止,起-止"`,0 开始、闭区间(含两端)。
- 逗号分隔的每一段代表「一个段落」。
- 单行可简写为 `"5"`(等价 `"5-5"`)。
- 没有内容则返回空字符串 ""。
- 行号必须是上面输入文本中真实出现过的编号,严禁编造不存在的行号。
花括号用 {{ }} 转义,避免被 ChatPromptTemplate 当作变量。{name} 为运行时替换的记录标识名。
"""
# ==================== 第一阶段:概览提取 ====================
OVERVIEW_PROFILE_PROMPT = """严格根据简历原文提取,不要猜测或编造,没有的填null。
输入为带行号的简历文本(每行 `[行号] 内容`)。从中仅提取个人基本信息(不含技能、证书、自我评价),输出JSON:
```json
{{ "name": "姓名", "email": "邮箱", "mobileNumber": "手机号", "city": "所在城市", "wechatNumber": "微信号", "portfolioUrl": "作品集链接" }}
```
规则:只提取以上6个字段,不提取skills/certificates/summary/经历。没有的填null。只输出JSON。"""
OVERVIEW_EDUCATION_PROMPT = """严格根据简历原文提取,不要猜测或编造。
输入为带行号的简历文本。从中仅提取教育经历的学校名称列表,输出JSON数组:
```json
["北京大学", "清华大学"]
```
规则:只提取学校名称,不提取其他字段。没有输出[]。只输出JSON。"""
OVERVIEW_WORK_PROMPT = """严格根据简历原文提取,不要猜测或编造。
输入为带行号的简历文本。从中仅提取工作经历和实习经历的公司名称列表,输出JSON:
```json
{{ "work": ["阿里巴巴", "腾讯"], "internship": ["字节跳动"] }}
```
规则:标注"实习"的归internship,其余归work。只提取公司名称。没有填[]。只输出JSON。"""
OVERVIEW_PROJECT_PROMPT = """严格根据简历原文提取,不要猜测或编造。
输入为带行号的简历文本。从中仅提取项目经历的项目名称列表,输出JSON数组:
```json
["订单系统重构", "支付网关"]
```
规则:
1. 只提取作为**独立项目条目标题**出现的项目名(通常单独成行、常带"项目X:"前缀或【】标题、并配有自己的起止时间/角色/描述)。
2. **绝对不要**把出现在某段职责/产品描述句子内部、被"如/包括/例如/【】"等列举的功能点、模块、子功能当作项目(这些是描述内容,不是项目)。
3. 没有输出[]。只输出JSON。"""
OVERVIEW_COMPETITION_PROMPT = """严格根据简历原文提取,不要猜测或编造。
输入为带行号的简历文本。从中仅提取竞赛/获奖经历的竞赛名称列表,输出JSON数组:
```json
["ACM区域赛", "数学建模大赛"]
```
规则:只提取竞赛名称,不提取其他字段。没有输出[]。只输出JSON。"""
# ==================== 第二阶段:详情提取 ====================
DETAIL_EDUCATION_PROMPT = """严格根据简历原文提取,不要猜测或编造。输入为带行号的简历文本(每行 `[行号] 内容`)。
请提取"{name}"这条教育经历的详细信息,输出JSON:
```json
{{ "school": "学校", "major": "专业", "degree": "学历", "studyType": "全日制/非全日制", "startDate": "2020.09", "endDate": "2024.06", "descriptionRange": "起-止,起-止" }}
```
规则:短字段直接填值。descriptionRange 只填该校的额外描述正文(如主修课程、在校成就、排名等成段文字)所在行号区间;学校/专业/学历/时间等已在上面字段提取,不要纳入;若无额外描述正文则填""。区间规则:0开始、闭区间,行号必须真实存在,排除明显的乱码/水印碎片行;同一段落被折成的连续多行用一个区间(如3-5,会拼接为一段),不同段落/每条bullet之间用逗号分开(如3-5,6,7-9,每个逗号段成为一个独立段落,不要把多条bullet塞进同一个区间)。时间格式YYYY.MM。没有的填null。只输出JSON。"""
DETAIL_WORK_PROMPT = """严格根据简历原文提取,不要猜测或编造。输入为带行号的简历文本(每行 `[行号] 内容`)。
请提取"{name}"这条工作经历的详细信息,输出JSON:
```json
{{ "companyName": "公司", "position": "职位", "startDate": "2024.07", "endDate": "2025.03", "descriptionRange": "起-止,起-止" }}
```
规则:短字段直接填值。descriptionRange 只填直接描述该公司/岗位的概述性正文行号区间;若该经历下的内容都属于具体项目(项目会单独提取),则填"",不要把项目明细并入工作描述。区间规则:0开始、闭区间,行号必须真实存在,排除明显的乱码/水印碎片行;同一段落被折成的连续多行用一个区间(如3-5,会拼接为一段),不同段落/每条bullet之间用逗号分开(如3-5,6,7-9,每个逗号段成为一个独立段落,不要把多条bullet塞进同一个区间)。时间格式YYYY.MM。没有的填null。只输出JSON。"""
DETAIL_INTERNSHIP_PROMPT = """严格根据简历原文提取,不要猜测或编造。输入为带行号的简历文本(每行 `[行号] 内容`)。
请提取"{name}"这条实习经历的详细信息,输出JSON:
```json
{{ "companyName": "公司", "position": "职位", "startDate": "2023.06", "endDate": "2023.09", "descriptionRange": "起-止,起-止" }}
```
规则:短字段直接填值。descriptionRange 只填直接描述该公司/岗位的概述性正文行号区间;若该经历下的内容都属于具体项目(项目会单独提取),则填"",不要把项目明细并入实习描述。区间规则:0开始、闭区间,行号必须真实存在,排除明显的乱码/水印碎片行;同一段落被折成的连续多行用一个区间(如3-5,会拼接为一段),不同段落/每条bullet之间用逗号分开(如3-5,6,7-9,每个逗号段成为一个独立段落,不要把多条bullet塞进同一个区间)。时间格式YYYY.MM。没有的填null。只输出JSON。"""
DETAIL_PROJECT_PROMPT = """严格根据简历原文提取,不要猜测或编造。输入为带行号的简历文本(每行 `[行号] 内容`)。
请提取"{name}"这条项目经历的详细信息,输出JSON:
```json
{{ "companyName": "所属公司", "projectName": "项目名", "role": "角色名称", "startDate": "2023.03", "endDate": "2023.12", "descriptionRange": "起-止,起-止" }}
```
规则:role只填简短角色名。短字段直接填值。descriptionRange 填该项目描述所在的行号区间,没有描述填""。区间规则:0开始、闭区间,行号必须真实存在,排除明显的乱码/水印碎片行;同一段落被折成的连续多行用一个区间(如3-5,会拼接为一段),不同段落/每条bullet之间用逗号分开(如3-5,6,7-9,每个逗号段成为一个独立段落,不要把多条bullet塞进同一个区间)。时间格式YYYY.MM。没有的填null。只输出JSON。"""
DETAIL_COMPETITION_PROMPT = """严格根据简历原文提取,不要猜测或编造。输入为带行号的简历文本(每行 `[行号] 内容`)。
请提取"{name}"这条竞赛/获奖经历的详细信息,输出JSON:
```json
{{ "competitionName": "竞赛名", "award": "获奖情况", "awardDate": "2023.07", "descriptionRange": "起-止,起-止" }}
```
规则:短字段直接填值。descriptionRange 填该竞赛/获奖的额外描述所在行号区间,没有描述填""。区间规则:0开始、闭区间,行号必须真实存在,排除明显的乱码/水印碎片行;同一段落被折成的连续多行用一个区间,不同段落用逗号分开(每个逗号段成为一个独立段落)。时间格式YYYY.MM。没有的填null。只输出JSON。"""
DETAIL_PROFILE_PROMPT = """严格根据简历原文提取,不要猜测或编造。输入为带行号的简历文本(每行 `[行号] 内容`)。
从中提取技能标签、证书和自我评价/个人概述,输出JSON:
```json
{{ "skills": ["技能1"], "certificates": ["证书1"], "summaryRange": "起-止,起-止" }}
```
规则:
- skills:仅当简历中有明确的"技能"/"专业技能"等独立模块时才提取,原文有什么填什么,最多5个;如果简历没有专门的技能模块,填[],不要从经历中归纳。
- certificates:填证书数组,没有填[]。
- summaryRange:填自我评价/个人概述**正文**所在的行号区间字符串(0开始、闭区间,行号必须真实存在),不要包含板块标题行(如"个人优势"、"自我评价"等),排除明显的乱码/水印碎片行;同一段落被折成的连续多行用一个区间,不同段落用逗号分开(每个逗号段是一个独立段落,段间会以换行连接),没有填""。
只输出JSON。"""