统一抽象 封装 模型配置配置管理
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
"""
|
||||
|
||||
from app.ai.browser_plug.prompts import FORM_FILL_SYSTEM_PROMPT
|
||||
from app.ai.models import LLM
|
||||
from app.ai.model_config import BrowserPlugModel
|
||||
from app.core.logger import log
|
||||
|
||||
|
||||
@@ -27,8 +27,7 @@ async def generate_form_answer(resume_text: str, job_text: str, agent_config_tex
|
||||
messages = [("system", system_content), ("human", user_message)]
|
||||
|
||||
try:
|
||||
llm = LLM.DOUBAO_PRO_32K.create(temperature=0.3)
|
||||
result = await llm.ainvoke(messages)
|
||||
result = await BrowserPlugModel.FORM_FILL.ainvoke(messages)
|
||||
return result.content.strip()
|
||||
except Exception as e:
|
||||
log.error(f"表单填写AI调用失败: {e}")
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"""
|
||||
|
||||
from app.ai.job_agent.prompts import SYSTEM_PROMPT
|
||||
from app.ai.models import LLM
|
||||
from app.ai.model_config import JobAgentModel
|
||||
from app.core.logger import log
|
||||
from app.tool.json_helper import parse_llm_json
|
||||
|
||||
@@ -32,8 +32,7 @@ async def agent_chat(resume_text: str, message: str, history: list[dict],
|
||||
|
||||
# 3. 调 LLM
|
||||
try:
|
||||
llm = LLM.ZM_GPT_5_4.create(temperature=0.7)
|
||||
result = await llm.ainvoke(messages)
|
||||
result = await JobAgentModel.CHAT.ainvoke(messages)
|
||||
raw = result.content
|
||||
except Exception as e:
|
||||
log.error(f"求职助手AI调用失败: {e}")
|
||||
|
||||
@@ -10,7 +10,7 @@ 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.ai.model_config import JobAgentModel
|
||||
from app.core.logger import log
|
||||
from app.tool.json_helper import parse_llm_json
|
||||
|
||||
@@ -18,7 +18,7 @@ from app.tool.json_helper import parse_llm_json
|
||||
|
||||
_summary_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", RESUME_SUMMARY_OPTIMIZE_PROMPT), ("human", "请开始优化。")])
|
||||
| LLM.ZM_GPT_5_4_MINI.create(temperature=0.3)
|
||||
| JobAgentModel.SUMMARY
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
@@ -42,7 +42,7 @@ async def optimize_summary(job_title: str, job_description: str, original_summar
|
||||
|
||||
_experience_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", RESUME_EXPERIENCE_OPTIMIZE_PROMPT), ("human", "请开始优化。")])
|
||||
| LLM.ZM_GPT_5_4_MINI.create(temperature=0.3)
|
||||
| JobAgentModel.EXPERIENCE
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
"""AI 模型场景配置
|
||||
|
||||
集中管理各业务模块的模型选择与参数,修改模型只需改此文件。
|
||||
"""
|
||||
|
||||
from app.ai.models import LLM
|
||||
|
||||
|
||||
class SkillGapModel:
|
||||
"""技能差距分析模块"""
|
||||
# 技能差距识别:对比简历与岗位技能标签,输出缺失技能列表
|
||||
ANALYSIS = LLM.DOUBAO_LITE_32K.create(temperature=0)
|
||||
# 个人概述优化:将缺失技能关键词融入 summary
|
||||
SUMMARY = LLM.DOUBAO_LITE_32K.create(temperature=0.3)
|
||||
# 经历描述优化:针对目标岗位优化单条经历的 description
|
||||
EXPERIENCE = LLM.DOUBAO_LITE_32K.create(temperature=0.3)
|
||||
# Agent规划:解析用户自然语言指令,拆解为原子编辑操作列表
|
||||
AGENT_PLAN = LLM.ZM_GPT_5_4.create(temperature=0)
|
||||
# Agent执行-修改:按指令修改简历中的单条记录
|
||||
AGENT_EDIT = LLM.ZM_GPT_5_4.create(temperature=0.3)
|
||||
# Agent执行-新增:按指令生成一条新的简历记录
|
||||
AGENT_ADD = LLM.ZM_GPT_5_4.create(temperature=0.3)
|
||||
|
||||
|
||||
class JobAgentModel:
|
||||
"""求职助手Agent模块"""
|
||||
# 多轮对话:理解用户求职意图,返回结构化回复(message+tool调用)
|
||||
CHAT = LLM.ZM_GPT_5_4.create(temperature=0.7)
|
||||
# 岗位简历-summary优化:针对具体岗位JD优化个人概述
|
||||
SUMMARY = LLM.ZM_GPT_5_4_MINI.create(temperature=0.3)
|
||||
# 岗位简历-经历优化:针对具体岗位JD优化单条经历描述
|
||||
EXPERIENCE = LLM.ZM_GPT_5_4_MINI.create(temperature=0.3)
|
||||
|
||||
|
||||
class NovaChatModel:
|
||||
"""Nova智能聊天模块"""
|
||||
# 通用对话:基于简历和岗位上下文的自由问答,返回Markdown文本
|
||||
CHAT = LLM.ZM_GPT_5_2.create(temperature=0.7)
|
||||
|
||||
|
||||
class ResumeExtractorModel:
|
||||
"""简历解析模块"""
|
||||
# 简历结构化提取:两阶段并行提取简历文本为JSON结构
|
||||
PARSE = LLM.DOUBAO_LITE_32K.create(temperature=0)
|
||||
|
||||
|
||||
class DiagnoserModel:
|
||||
"""简历诊断模块"""
|
||||
# 模块诊断:逐条分析经历记录的问题(错别字/无量化/弱相关等)
|
||||
MODULE = LLM.ZM_GPT_5_4_MINI.create(temperature=0)
|
||||
# 整体评价:汇总所有诊断结果生成总结性评语
|
||||
SUMMARY = LLM.ZM_GPT_5_4_MINI.create(temperature=0.3)
|
||||
# 内容润色:用户编辑后的文本做专业润色
|
||||
POLISH = LLM.JIAYU_CLAUDE_SONNET_4_5.create(temperature=0.3)
|
||||
|
||||
|
||||
class BrowserPlugModel:
|
||||
"""浏览器插件模块"""
|
||||
# 表单自动填写:根据简历+岗位信息生成招聘网站表单字段的回答
|
||||
FORM_FILL = LLM.DOUBAO_PRO_32K.create(temperature=0.3)
|
||||
@@ -4,7 +4,7 @@
|
||||
依赖:LLM 枚举、nova_chat/prompts
|
||||
"""
|
||||
|
||||
from app.ai.models import LLM
|
||||
from app.ai.model_config import NovaChatModel
|
||||
from app.ai.nova_chat.prompts import SYSTEM_PROMPT
|
||||
from app.core.logger import log
|
||||
|
||||
@@ -24,8 +24,7 @@ async def nova_chat(resume_text: str, message: str, history: list[dict],
|
||||
messages.append(("human", message))
|
||||
|
||||
try:
|
||||
llm = LLM.ZM_GPT_5_2.create(temperature=0.7)
|
||||
result = await llm.ainvoke(messages)
|
||||
result = await NovaChatModel.CHAT.ainvoke(messages)
|
||||
return result.content.strip()
|
||||
except Exception as e:
|
||||
log.error(f"Nova Chat AI 调用失败: {e}")
|
||||
|
||||
@@ -5,7 +5,7 @@ import asyncio
|
||||
from langchain_core.output_parsers import StrOutputParser
|
||||
from langchain_core.prompts import ChatPromptTemplate
|
||||
|
||||
from app.ai.models import LLM
|
||||
from app.ai.model_config import DiagnoserModel
|
||||
from app.ai.resume_diagnoser.prompts import DIAGNOSE_MODULE_PROMPT, SUMMARY_PROMPT, POLISH_PROMPT
|
||||
from app.core.logger import log
|
||||
from app.tool.json_helper import parse_llm_json
|
||||
@@ -14,14 +14,14 @@ from app.tool.json_helper import parse_llm_json
|
||||
# 诊断链(StrOutputParser 拿原始文本,再手动解析 JSON,避免 markdown 代码块导致解析失败)
|
||||
_diagnose_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", DIAGNOSE_MODULE_PROMPT), ("human", "请开始诊断。")])
|
||||
| LLM.ZM_GPT_5_4_MINI.create(temperature=0)
|
||||
| DiagnoserModel.MODULE
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
# 汇总评价链(纯文本输出)
|
||||
_summary_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", SUMMARY_PROMPT), ("human", "请生成整体评价。")])
|
||||
| LLM.ZM_GPT_5_4_MINI.create(temperature=0.3)
|
||||
| DiagnoserModel.SUMMARY
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
@@ -55,7 +55,7 @@ async def generate_summary(grade: str, urgent_total: int, important_total: int,
|
||||
|
||||
_polish_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", POLISH_PROMPT), ("human", "请开始优化。")])
|
||||
| LLM.JIAYU_CLAUDE_SONNET_4_5.create(temperature=0.3)
|
||||
| DiagnoserModel.POLISH
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import time
|
||||
from langchain_core.output_parsers import StrOutputParser
|
||||
from langchain_core.prompts import ChatPromptTemplate
|
||||
|
||||
from app.ai.models import LLM
|
||||
from app.ai.model_config import ResumeExtractorModel
|
||||
from app.ai.resume_extractor.prompts import (
|
||||
OVERVIEW_PROFILE_PROMPT, OVERVIEW_EDUCATION_PROMPT, OVERVIEW_WORK_PROMPT,
|
||||
OVERVIEW_PROJECT_PROMPT, OVERVIEW_COMPETITION_PROMPT,
|
||||
@@ -21,14 +21,12 @@ from app.ai.resume_extractor.prompts import (
|
||||
from app.core.logger import log
|
||||
from app.tool.json_helper import parse_llm_json
|
||||
|
||||
_LLM_MODEL = LLM.DOUBAO_LITE_32K
|
||||
|
||||
|
||||
# ==================== LLM 调用工具 ====================
|
||||
|
||||
def _build_chain(prompt: str):
|
||||
"""构建提取链:prompt → LLM → 文本输出"""
|
||||
return ChatPromptTemplate.from_messages([("system", prompt), ("human", "{text}")]) | _LLM_MODEL.create(temperature=0) | StrOutputParser()
|
||||
return ChatPromptTemplate.from_messages([("system", prompt), ("human", "{text}")]) | ResumeExtractorModel.PARSE | StrOutputParser()
|
||||
|
||||
|
||||
async def _safe_invoke(chain, inp: dict, label: str):
|
||||
|
||||
@@ -10,7 +10,7 @@ import time
|
||||
from langchain_core.output_parsers import StrOutputParser
|
||||
from langchain_core.prompts import ChatPromptTemplate
|
||||
|
||||
from app.ai.models import LLM
|
||||
from app.ai.model_config import SkillGapModel
|
||||
from app.ai.skill_gap_analyzer.prompts import (
|
||||
SKILL_GAP_PROMPT, SUMMARY_OPTIMIZE_PROMPT, EXPERIENCE_OPTIMIZE_PROMPT,
|
||||
AGENT_PLAN_PROMPT, AGENT_MODULE_EDIT_PROMPT, AGENT_MODULE_ADD_PROMPT, MODULE_SCHEMAS,
|
||||
@@ -23,7 +23,7 @@ from app.tool.json_helper import parse_llm_json
|
||||
|
||||
_skill_gap_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", SKILL_GAP_PROMPT), ("human", "请开始分析。")])
|
||||
| LLM.DOUBAO_LITE_32K.create(temperature=0)
|
||||
| SkillGapModel.ANALYSIS
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
@@ -45,7 +45,7 @@ async def analyze_skill_gap(skill_tags: list[str], resume_json: str) -> list[str
|
||||
|
||||
_summary_optimize_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", SUMMARY_OPTIMIZE_PROMPT), ("human", "请开始优化。")])
|
||||
| LLM.DOUBAO_LITE_32K.create(temperature=0.3)
|
||||
| SkillGapModel.SUMMARY
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
@@ -69,7 +69,7 @@ async def optimize_summary(job_title: str, add_skills: list[str], original_summa
|
||||
|
||||
_experience_optimize_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", EXPERIENCE_OPTIMIZE_PROMPT), ("human", "请开始优化。")])
|
||||
| LLM.DOUBAO_LITE_32K.create(temperature=0.3)
|
||||
| SkillGapModel.EXPERIENCE
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
@@ -94,7 +94,7 @@ async def optimize_module(job_title: str, job_description: str, module_data: str
|
||||
|
||||
_plan_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", AGENT_PLAN_PROMPT), ("human", "请分析用户指令。")])
|
||||
| LLM.ZM_GPT_5_4.create(temperature=0)
|
||||
| SkillGapModel.AGENT_PLAN
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
@@ -119,7 +119,7 @@ async def plan_edit(job_title: str, job_description: str, resume_json: str,
|
||||
|
||||
_record_edit_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", AGENT_MODULE_EDIT_PROMPT), ("human", "请执行修改。")])
|
||||
| LLM.ZM_GPT_5_4.create(temperature=0.3)
|
||||
| SkillGapModel.AGENT_EDIT
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
@@ -144,7 +144,7 @@ async def execute_record_edit(job_title: str, job_description: str, instruction:
|
||||
|
||||
_record_add_chain = (
|
||||
ChatPromptTemplate.from_messages([("system", AGENT_MODULE_ADD_PROMPT), ("human", "请生成新记录。")])
|
||||
| LLM.ZM_GPT_5_4.create(temperature=0.3)
|
||||
| SkillGapModel.AGENT_ADD
|
||||
| StrOutputParser()
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user