import json import os import sys from pathlib import Path from typing importAny
from openai import OpenAI
defload_glossary(path: Path) -> list[dict[str, Any]]: data = json.loads(path.read_text(encoding="utf-8")) ifnotisinstance(data, list) ornot data: raise ValueError("术语表必须是非空数组") for item in data: if (notisinstance(item, dict) ornotisinstance(item.get("preferred"), str) ornotisinstance(item.get("aliases"), list) ornotall(isinstance(x, str) for x in item["aliases"])): raise ValueError("每条术语必须包含字符串 preferred 和 aliases") return data
allowed = { alias: item["preferred"] for item in glossary for alias in item["aliases"] } checked: list[dict[str, str]] = [] seen: set[tuple[str, str]] = set() for item in findings: ifnotisinstance(item, dict): continue fields = ("alias", "preferred", "evidence", "reason") ifnotall(isinstance(item.get(field), str) for field in fields): continue alias = item["alias"] if alias notin allowed or item["preferred"] != allowed[alias]: continue key = (alias, item["evidence"]) if key notin seen: checked.append({field: item[field] for field in fields}) seen.add(key) return checked