添加agent优化简历接口
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
"""求职助手 Agent 对话 Prompt 模板"""
|
||||
"""求职助手 Agent 对话 Prompt 模板 + 岗位简历优化 Prompt"""
|
||||
|
||||
SYSTEM_PROMPT = """你是 OfferPie 求职助手,帮助用户找到合适的工作。
|
||||
|
||||
@@ -32,3 +32,42 @@ tool 可选值:
|
||||
5. 偏好描述要准确概括用户的岗位偏好,如"更偏技术方向的产品岗"、"大厂优先"
|
||||
6. 如果用户没有明确偏好,preference 填"无特殊偏好"
|
||||
"""
|
||||
|
||||
|
||||
# ===== 岗位简历优化 Prompt =====
|
||||
|
||||
RESUME_SUMMARY_OPTIMIZE_PROMPT = """你是一个求职投递助手。用户即将投递目标岗位,请针对该岗位优化用户的个人概述。
|
||||
|
||||
【目标岗位】
|
||||
{job_title}
|
||||
|
||||
【岗位职责与要求】
|
||||
{job_description}
|
||||
|
||||
【原始个人概述】
|
||||
{original_summary}
|
||||
|
||||
规则:
|
||||
1. 保持原文风格和主体内容不变
|
||||
2. 突出与目标岗位最相关的经验和能力
|
||||
3. 适当融入岗位要求中的关键词,但不要生硬堆砌
|
||||
4. 避免过度优化和编造内容,改动越少越好
|
||||
5. 直接输出优化后的文本,不要其他内容"""
|
||||
|
||||
RESUME_EXPERIENCE_OPTIMIZE_PROMPT = """你是一个求职投递助手。用户即将投递目标岗位,请针对该岗位微调用户的经历描述。
|
||||
|
||||
【目标岗位】
|
||||
{job_title}
|
||||
|
||||
【岗位职责与要求】
|
||||
{job_description}
|
||||
|
||||
【原始经历数据】
|
||||
{original_module_data}
|
||||
|
||||
规则:
|
||||
1. 基本保持原文不变,只在可以优化的地方做轻微调整
|
||||
2. 突出与目标岗位最匹配的经历和成果
|
||||
3. 适当使用岗位要求中的关键词润色描述,但不要编造内容
|
||||
4. description 字段是 [{{"id": "xxx", "text": "xxx"}}] 格式:修改时保留原 id 只改 text,新增段落生成随机8位字符串作为 id,删除段落直接移除
|
||||
5. 返回修改后的完整模块数据(JSON 格式,与输入格式一致)"""
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
"""求职助手 - 岗位简历优化 AI 引擎
|
||||
|
||||
针对目标岗位并发优化简历(summary + 经历子表)。
|
||||
依赖:LLM 枚举、job_agent/prompts、parse_llm_json
|
||||
"""
|
||||
|
||||
from langchain_core.output_parsers import StrOutputParser
|
||||
from langchain_core.prompts import ChatPromptTemplate
|
||||
|
||||
from app.ai.job_agent.prompts import RESUME_SUMMARY_OPTIMIZE_PROMPT, RESUME_EXPERIENCE_OPTIMIZE_PROMPT
|
||||
from app.ai.models import LLM
|
||||
from app.core.logger import log
|
||||
from app.tool.json_helper import parse_llm_json
|
||||
|
||||
# ===== summary 优化 =====
|
||||
|
||||
_summary_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", RESUME_SUMMARY_OPTIMIZE_PROMPT), ("human", "请开始优化。")])
|
||||
| LLM.JIAYU_CLAUDE_SONNET_4_5.create(temperature=0.3)
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
|
||||
async def optimize_summary(job_title: str, job_description: str, original_summary: str) -> str:
|
||||
"""针对岗位优化个人概述"""
|
||||
try:
|
||||
return await _summary_chain.ainvoke({
|
||||
"job_title": job_title, "job_description": job_description or "",
|
||||
"original_summary": original_summary or "暂无",
|
||||
})
|
||||
except Exception as e:
|
||||
log.warning(f"岗位简历summary优化失败: {e}")
|
||||
return original_summary
|
||||
|
||||
|
||||
# ===== 经历优化 =====
|
||||
|
||||
_experience_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", RESUME_EXPERIENCE_OPTIMIZE_PROMPT), ("human", "请开始优化。")])
|
||||
| LLM.JIAYU_CLAUDE_SONNET_4_5.create(temperature=0.3)
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
|
||||
async def optimize_experience(job_title: str, job_description: str, module_data: str) -> list | dict | None:
|
||||
"""针对岗位优化经历模块描述,返回修改后的完整模块数据"""
|
||||
try:
|
||||
raw = await _experience_chain.ainvoke({
|
||||
"job_title": job_title, "job_description": job_description or "",
|
||||
"original_module_data": module_data,
|
||||
})
|
||||
return parse_llm_json(raw)
|
||||
except Exception as e:
|
||||
log.warning(f"岗位简历经历优化失败: {e}")
|
||||
return None
|
||||
Reference in New Issue
Block a user