1 line
2.5 KiB
JSON
1 line
2.5 KiB
JSON
{"repo": "2199731512/my-learning-space", "files": {"generator.py": {"2f4d7fb20abac7480b34c590d5b38392262c1131": {"t": 1785674308.9142385, "n": 1818, "h": "d880ff0d9d8eb09a", "c": "import json\nimport os\nfrom openai import OpenAI\nfrom template import DailyReport, JSON_SCHEMA\n\n\n# MiMo API 配置\nAPI_KEY = os.getenv(\"MIMO_API_KEY\", \"sk-cnycjj4li94hk465tlbv5hudr24h51btlzprtuqjakl32a3q\")\nBASE_URL = \"https://api.xiaomimimo.com/v1\"\nMODEL = \"mimo-v2.5-pro\"\n\n\ndef generate_report(project_name: str, date: str, description: str) -> DailyReport:\n \"\"\"调用 MiMo API 生成施工日报\"\"\"\n client = OpenAI(api_key=API_KEY, base_url=BASE_URL)\n\n prompt = f\"\"\"你是一位专业的施工日报撰写人员。根据以下信息生成一份规范的中文施工日报。\n\n项目名称:{project_name}\n日期:{date}\n今日工地情况描述:\n{description}\n\n请严格按照以下JSON格式输出,不要输出其他内容:\n{json.dumps(JSON_SCHEMA, ensure_ascii=False, indent=2)}\n\n注意:\n1. 天气情况要合理推断或标注\"待补充\"\n2. 人员情况要根据工作内容合理估算\n3. 机械设备要与工作内容匹配\n4. 安全文明施工要写出具体措施\n5. 图片占位符用简短描述,如\"基坑开挖现场\"、\"钢筋绑扎完成\"\n\"\"\"\n\n response = client.chat.completions.create(\n model=MODEL,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n temperature=0.7,\n max_tokens=2000,\n )\n\n content = response.choices[0].message.content.strip()\n\n # 尝试提取JSON(处理模型可能输出的markdown代码块)\n if \"```json\" in content:\n content = content.split(\"```json\")[1].split(\"```\")[0].strip()\n elif \"```\" in content:\n content = content.split(\"```\")[1].split(\"```\")[0].strip()\n\n data = json.loads(content)\n\n # 构建 DailyReport 对象\n report = DailyReport(\n project_name=project_name,\n date=date,\n weather=data.get(\"weather\", \"\"),\n construction_location=data.get(\"construction_location\", \"\"),\n main_work=data.get(\"main_work\", \"\"),\n personnel=data.get(\"personnel\", \"\"),\n machinery=data.get(\"machinery\", \"\"),\n safety=data.get(\"safety\", \"\"),\n issues=data.get(\"issues\", \"\"),\n tomorrow_plan=data.get(\"tomorrow_plan\", \"\"),\n photo_placeholders=data.get(\"photo_placeholders\", []),\n )\n\n return report\n"}}}} |