37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
"""简历段落润色 AI 引擎:仅做格式/错字/表达层面的优化"""
|
|
|
|
import json
|
|
|
|
from langchain_core.output_parsers import StrOutputParser
|
|
from langchain_core.prompts import ChatPromptTemplate
|
|
|
|
from app.ai.model_config import ResumePolisherModel
|
|
from app.ai.resume_polisher.prompts import POLISH_PROMPT
|
|
from app.core.logger import log
|
|
from app.tool.json_helper import parse_llm_json
|
|
|
|
# 润色链(StrOutputParser 拿原始文本,再手动解析 JSON,避免 markdown 代码块导致解析失败)
|
|
_polish_chain = (
|
|
ChatPromptTemplate.from_messages([("system", POLISH_PROMPT), ("human", "请开始润色。")])
|
|
| ResumePolisherModel.POLISH
|
|
| StrOutputParser()
|
|
)
|
|
|
|
|
|
async def polish_paragraphs(content: list[str]) -> list[str]:
|
|
"""对段落数组做表达层面的润色,返回与输入等长的数组;失败兜底原样返回"""
|
|
if not content:
|
|
return []
|
|
|
|
inp = {"content": json.dumps(content, ensure_ascii=False)}
|
|
try:
|
|
raw = await _polish_chain.ainvoke(inp)
|
|
result = parse_llm_json(raw)
|
|
if isinstance(result, list) and len(result) == len(content):
|
|
return [str(item) for item in result]
|
|
log.warning(f"AI润色返回结果不符合预期, 原样返回: {result}")
|
|
return content
|
|
except Exception as e:
|
|
log.warning(f"AI润色失败: {e}")
|
|
return content
|