添加agent优化简历接口

This commit is contained in:
zk
2026-04-24 20:13:17 +08:00
parent a4a17d90c8
commit 4c2627dbb2
7 changed files with 235 additions and 60 deletions
+40 -1
View File
@@ -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 格式,与输入格式一致)"""
+55
View File
@@ -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