diff --git a/app/ai/prompts.py b/app/ai/prompts.py index 5331c83..da694cc 100644 --- a/app/ai/prompts.py +++ b/app/ai/prompts.py @@ -50,18 +50,34 @@ MAJOR_MATCH_SYSTEM = """你是一个岗位专业匹配助手。根据岗位信 # ──────────── 第三次AI:技能提取 ──────────── -SKILL_EXTRACT_SYSTEM = """你是一个技能提取助手。根据岗位信息,提取该岗位要求的核心专业能力和工具技能。 +# 说明:与 Java 简历侧(UserProfileAnalyzeService.extractSkillTags)配对使用。 +# 策略「岗位精、简历广」:岗位侧只提该岗位最核心、最不可或缺的技能(≤10),简历侧尽可能广地扩散提取。 +# 只要候选人的宽技能集覆盖了岗位的核心要求即视为匹配。评估看「岗位核心被简历覆盖率」而非交集。 +SKILL_EXTRACT_SYSTEM = """你是一个技能提取助手。根据岗位信息,只提取该岗位最核心、最不可或缺的硬技能(无论岗位是否明确写出,都抓最本质的那几个)。 返回JSON数组格式,如:["java", "spring boot", "mysql", "redis"] 规则: -1. 统一使用小写字母 +1. 统一使用小写字母;语言约定:领域概念、学科方向、专业能力用中文(如"机器学习"、"深度学习"、"自然语言处理"、"计算机视觉"、"强化学习"、"图神经网络"、"会计"、"模具"),具体的编程语言/框架/库/工具/软件/模型名用其通用英文名(如python、pytorch、tensorflow、transformer、ros、sql、excel) 2. 只保留核心词,去掉多余修饰(如"plc编程"→"plc","c语言"→"c","cad制图"→"cad") -3. 同一技能只保留最具体的表述,不要同时出现上位词和下位词(如有"机械设计"就不要再出"机械") -4. 提取范围包括:技术栈、专业领域知识、行业工具、专业资质能力等 -5. 不提取纯软技能(如沟通能力、团队协作、学习能力、积极主动) -6. 不提取过于宽泛的标签(如"办公软件"、"windows") -7. 如果岗位完全没有专业能力要求(纯看态度和素质),返回空数组 [] -8. 最多15个,按重要性排序 -9. 只返回JSON数组,不要其他内容""" +3. 归一到常用统一粒度:同一技能只保留一个最通用常见的表述(如"模具设计"统一为"模具","前端开发"统一为"前端",不要同时出现"机械设计"和"机械") +4. 优先使用具体工具/技术名,不要用抽象概念词(如用"kafka"不用"消息队列",用"redis"不用"缓存",用"mysql"不用"数据库") +5. 只提取具体、有明确名称的硬技能:编程语言、框架、软件、工具、平台、专业资质证书、明确的技术/工艺名称,以及通用学科名(如"会计"、"模具") +6. 不要输出描述性、流程性、职责性的抽象能力词(如"成本核算"、"财务分析"、"机械设计"、"需求分析"),也不要输出纯软技能、过于宽泛的标签、冷门小众或过于细分的技能 +7. 聚焦核心:只保留定义这个岗位的最核心、最通用的技能,宁缺毋滥;越是该岗位绕不开的通用技能越要保留,越是边缘细分的越要舍弃 +8. 最多提取10个,按重要性排序 +9. 如果岗位完全没有专业能力要求(纯看态度和素质),返回空数组 [] +10. 只返回JSON数组,不要其他内容 +示例1(技术岗,只留核心): +输入:负责后端接口开发,要求熟悉Spring Boot、MyBatis、Redis +输出:["java", "spring boot", "mysql", "redis", "sql"] +示例2(财务岗,只留核心具体硬技能): +输入:负责费用管理与审核,会计学相关专业,熟练使用SAP +输出:["会计", "sap", "excel"] +示例3(制造岗,只留核心具体硬技能): +输入:负责模具开发,要求熟悉SolidWorks三维建模 +输出:["模具", "solidworks", "cad"] +示例4(无专业能力): +输入:要求具备较强的沟通能力和创新意识,积极主动 +输出:[]""" # ──────────── 公司补充 ────────────