"""手册生成入口:优先调用 AI,失败则回退到离线模板。""" import os import requests from handbook.templates import render_offline_handbook SYSTEM_PROMPT = ( "你是一名专业的文档撰写助手,擅长编写结构清晰、条理分明的登记手册。" "请使用 Markdown 输出,包含封面信息、目录、正文(总则、登记范围、登记流程、" "登记信息字段、附则)以及附录。语言简洁、专业、可执行。" ) def _call_openai(topic: str) -> str: api_key = os.environ.get("OPENAI_API_KEY") base_url = os.environ.get("OPENAI_BASE_URL", "https://api.openai.com/v1").rstrip("/") model = os.environ.get("OPENAI_MODEL", "gpt-4o-mini") if not api_key: raise RuntimeError("未配置 OPENAI_API_KEY") resp = requests.post( f"{base_url}/chat/completions", headers={ "Authorization": f"Bearer {api_key}", "Content-Type": "application/json", }, json={ "model": model, "messages": [ {"role": "system", "content": SYSTEM_PROMPT}, { "role": "user", "content": f"请为主题「{topic}」生成一份完整的登记手册。", }, ], "temperature": 0.7, }, timeout=60, ) resp.raise_for_status() payload = resp.json() return payload["choices"][0]["message"]["content"].strip() def generate_handbook(topic: str) -> str: """生成登记手册 Markdown 文本。""" try: return _call_openai(topic) except Exception: # noqa: BLE001 return render_offline_handbook(topic)