Files
campus_spider/app/ai/extract/announcement_extract.py
T
2026-07-28 11:36:05 +08:00

43 lines
1.3 KiB
Python

"""招聘公告信息提取:调用 CONTENT_EXTRACT 模型,输出结构化字典。"""
from __future__ import annotations
from langchain_core.messages import HumanMessage, SystemMessage
from app.ai.extract.prompt import EXTRACT_SYSTEM_PROMPT
from app.ai.model_config import SpiderModel
from app.core.logger import log
from app.tool.json_helper import parse_llm_json
def extract_announcement(content: str) -> dict | None:
"""从公告全文中提取结构化信息。
Args:
content: 公告全文(正文 + 图片 OCR 文字 + 二维码内容拼接)。
Returns:
提取出的字段字典;内容为空、模型调用失败或结果不是字典时返回 None。
"""
if not content or not content.strip():
return None
messages = [
SystemMessage(content=EXTRACT_SYSTEM_PROMPT),
HumanMessage(content=content),
]
try:
response = SpiderModel.CONTENT_EXTRACT.invoke(messages)
except Exception as exc:
log.error(f"公告信息提取失败: {exc}")
return None
result = parse_llm_json(str(response.content))
if not isinstance(result, dict):
log.warning(f"公告信息提取结果不是 JSON 对象: {type(result).__name__}")
return None
log.info(f"公告信息提取完成(字段 {len(result)} 个): {result.get('title')}")
return result