from typing import Any
EXTRACT_FIELDS = [
"主体机构",
"时间周期",
"金额数值",
"财务指标",
"业务事件",
"风险因素",
"行业板块",
]
EXTRACT_FIELD_DESC = {
"主体机构": "公司、银行、基金、监管机构等分析对象",
"时间周期": "报告期、公告日期、统计时段(如 2025 年一季度、上半年)",
"金额数值": "金额、规模、市值等数值,保留原文单位",
"财务指标": "营收、净利润、同比、毛利率、ROE、估值等量化指标",
"业务事件": "并购、分红、业绩预告、产销变化、政策影响等业务动作",
"风险因素": "风险点、不利因素、不确定性描述",
"行业板块": "行业名称或细分赛道(如 新能源汽车、光伏)",
}
LEGACY_FIELD_MAP = {
"companies": "主体机构",
"dates": "时间周期",
"amounts": "金额数值",
"financial_metrics": "财务指标",
"events": "业务事件",
"risks": "风险因素",
"industries": "行业板块",
}
def build_extract_template() -> dict[str, list[Any]]:
return {field: [] for field in EXTRACT_FIELDS}
def format_extract_field_lines() -> str:
return "\n".join(
f"{field}:{EXTRACT_FIELD_DESC[field]}" for field in EXTRACT_FIELDS
)
def normalize_extract_result(result: Any) -> dict[str, list[Any]]:
if not isinstance(result, dict):
raise ValueError("抽取结果必须是 JSON 对象")
mapped: dict[str, Any] = {}
for key, value in result.items():
normalized_key = LEGACY_FIELD_MAP.get(key, key)
if normalized_key in EXTRACT_FIELDS:
mapped[normalized_key] = value
normalized: dict[str, list[Any]] = {}
for field in EXTRACT_FIELDS:
value = mapped.get(field, [])
if value is None:
value = []
if not isinstance(value, list):
raise ValueError(f"{field} 必须是数组")
normalized[field] = value
return normalized