Files
ai-registration-handbook/handbook/generator.py
T

54 lines
1.7 KiB
Python

"""手册生成入口:优先调用 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)