# AIGC 服务 API 指南 > 更新时间: 2024-12-10 ## 概述 AIGC 服务提供三个核心功能: 1. **选题生成** (`topic_generate`) - 生成营销选题 2. **内容生成** (`content_generate`) - 生成小红书风格文案 3. **海报生成** (`poster_smart_v2`) - AI 文案 + 预览图 + Fabric JSON --- ## 统一调用入口 ``` POST /api/v2/aigc/execute ``` ### 请求格式 ```json { "engine": "引擎ID", "params": { ... }, "async_mode": false } ``` ### 响应格式 ```json { "success": true, "data": { ... }, "error": null } ``` --- ## 1. 选题生成 (topic_generate) ### 功能 根据景区/产品信息 + 风格/人群 + 热点事件,生成多个营销选题。 ### 请求参数 | 参数 | 类型 | 必填 | 说明 | |-----|------|------|------| | `num_topics` | int | 否 | 生成数量,默认 5 | | `month` | string | 是 | 目标日期,如 "2024-12" | | `subject` | object | 否 | 主体信息 (景区/酒店等) | | `style` | object | 否 | 风格 {id, name} | | `audience` | object | 否 | 受众 {id, name} | | `hot_topics` | object | 否 | 热点 {events, festivals, trending} | ### subject 结构 ```json { "id": "景区ID", "name": "景区名称", "type": "scenic_spot", "description": "景区描述", "location": "广州天河", "products": [ { "id": "产品ID", "name": "产品名称", "price": "199元", "description": "产品描述" } ] } ``` ### 请求示例 ```json { "engine": "topic_generate", "params": { "num_topics": 5, "month": "2024-12", "subject": { "id": "123", "name": "长隆野生动物世界", "description": "亚洲最大的野生动物主题公园", "location": "广州番禺", "products": [ {"name": "成人票", "price": "299元"} ] }, "style": {"id": "xiaohongshu", "name": "小红书种草"}, "audience": {"id": "family", "name": "亲子家庭"} } } ``` ### 返回数据 ```json { "success": true, "data": { "topics": [ { "index": 1, "date": "12月15日", "title": "周末带娃去长隆,这份攻略请收好!", "subject_name": "长隆野生动物世界", "product_name": "成人票", "style": "小红书种草", "audience": "亲子家庭", "hook": "周末遛娃好去处", "subject_id": "123", "style_id": "xiaohongshu", "audience_id": "family" } ], "count": 5 }, "metadata": { "input_tokens": 1200, "output_tokens": 800, "time_cost": 3.5 } } ``` --- ## 2. 内容生成 (content_generate) ### 功能 根据选题生成完整的小红书风格文案(标题 + 正文 + 标签)。 ### 请求参数 | 参数 | 类型 | 必填 | 说明 | |-----|------|------|------| | `topic` | object | 是 | 选题信息 (来自 topic_generate) | | `subject` | object | 否 | 主体信息 | | `style` | object | 否 | 风格 | | `audience` | object | 否 | 受众 | | `reference` | object | 否 | 参考内容 {mode, title, content} | | `enable_judge` | bool | 否 | 是否启用审核,默认 true | ### reference.mode 说明 | mode | 说明 | |------|------| | `none` | 不使用参考,使用内置范文库 | | `reference` | 参考风格,原创内容 | | `rewrite` | 保留框架,换主体改写 | ### 请求示例 ```json { "engine": "content_generate", "params": { "topic": { "index": 1, "date": "12月15日", "title": "周末带娃去长隆", "subject_name": "长隆野生动物世界", "style": "小红书种草", "audience": "亲子家庭" }, "subject": { "name": "长隆野生动物世界", "description": "亚洲最大的野生动物主题公园", "location": "广州番禺" }, "enable_judge": true } } ``` ### 返回数据 ```json { "success": true, "data": { "content": { "title": "广州遛娃天花板!长隆动物园超全攻略", "content": "姐妹们!这个周末带娃去长隆...", "tag": "#长隆野生动物世界 #广州亲子游 #周末遛娃" }, "original_content": { ... }, "topic": { ... }, "judged": true, "judge_analysis": "标题吸引力强,正文结构清晰..." }, "metadata": { "input_tokens": 2000, "output_tokens": 1200, "time_cost": 5.2 } } ``` --- ## 3. 海报生成 (poster_smart_v2) ### 功能 AI 生成文案 + 渲染预览图 + 输出 Fabric.js JSON(供前端编辑)。 ### 请求参数 | 参数 | 类型 | 必填 | 说明 | |-----|------|------|------| | `category` | string | 是 | 类型: 景点/美食/酒店/民宿/活动/攻略 | | `name` | string | 是 | 名称 | | `description` | string | 否 | 描述 | | `price` | string | 否 | 价格 | | `location` | string | 否 | 地点 | | `features` | string | 否 | 特色/卖点,逗号分隔 | | `image_url` | string | 否 | 背景图 URL | | `override_layout` | string | 否 | 强制布局 | | `override_theme` | string | 否 | 强制主题 | | `skip_ai` | bool | 否 | 跳过 AI 生成 | ### 可用布局 | 布局 | 说明 | 适用场景 | |-----|------|----------| | `hero_bottom` | 底部文字,图片铺满 | 景点、攻略 | | `overlay_center` | 文字居中叠加 | 活动、大标题 | | `overlay_bottom` | 底部毛玻璃 | 美食探店 | | `split_vertical` | 左图右文 | 民宿、酒店 | | `card_float` | 悬浮卡片 | 酒店、精品推荐 | ### 可用主题 | 主题 | 色系 | |-----|------| | `ocean` | 海洋蓝 | | `sunset` | 日落橙 | | `peach` | 蜜桃粉 | | `mint` | 薄荷绿 | | `latte` | 拿铁棕 | ### 请求示例 ```json { "engine": "poster_smart_v2", "params": { "category": "景点", "name": "正佳极地海洋世界", "description": "位于广州正佳广场的大型海洋馆", "price": "199元/人", "location": "广州天河", "features": "企鹅馆, 海豚表演, 儿童乐园", "image_url": "https://example.com/ocean.jpg" } } ``` ### 返回数据 ```json { "success": true, "data": { "preview_base64": "iVBORw0KGgoAAAANSUhEUg...", "fabric_json": { "version": "5.3.0", "canvas": { "width": 1080, "height": 1440, "backgroundColor": "#E8F4F8" }, "layout": "hero_bottom", "theme": "ocean", "objects": [ { "id": "background_image", "type": "image", "src": "https://example.com/ocean.jpg", "left": 0, "top": 0, "width": 1080, "height": 1440 }, { "id": "title", "type": "textbox", "text": "带娃必去正佳极地海洋世界", "left": 48, "top": 1085, "fontSize": 96, "fontFamily": "PingFang SC" }, { "id": "price", "type": "text", "text": "¥199", "left": 48, "top": 1260 } ] }, "layout": "hero_bottom", "theme": "ocean", "content": { "title": "带娃必去正佳极地海洋世界", "subtitle": "室内恒温海洋馆,亲子互动超轻松", "highlights": ["企鹅馆", "海豚表演", "儿童乐园"], "price": "¥199", "price_suffix": "/人" } } } ``` ### 前端使用 Fabric JSON ```javascript // 加载到 Fabric.js 画布 const canvas = new fabric.Canvas('canvas'); canvas.loadFromJSON(response.data.fabric_json, () => { canvas.renderAll(); }); // 用户编辑后导出 const editedJson = canvas.toJSON(); const finalImage = canvas.toDataURL('image/png'); ``` --- ## 数据流 ``` ┌─────────────────────────────────────────────────────────────┐ │ Java 端 (调用方) │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ POST /api/v2/aigc/execute │ │ │ │ { │ │ "engine": "topic_generate" | "content_generate" | │ │ "poster_smart_v2", │ │ "params": { ... } │ │ } │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ EngineExecutor │ │ │ │ 1. 查找引擎 │ │ 2. 验证参数 │ │ 3. 执行引擎 │ │ 4. 返回结果 │ └─────────────────────────────────────────────────────────────┘ │ ┌────────────────────┼────────────────────┐ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────────┐ ┌─────────────────┐ │topic_generate│ │content_generate │ │poster_smart_v2 │ │ │ │ │ │ │ │ PromptRegistry │ PromptRegistry │ AI + Poster_v2 │ │ + LLM │ │ + LLM + Judge │ │ + Fabric JSON │ └─────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 返回结果 │ │ │ │ topic_generate: {topics: [...], count: N} │ │ content_generate: {content: {title, content, tag}} │ │ poster_smart_v2: {preview_base64, fabric_json, ...} │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 运行服务 ```bash cd /root/TravelContentCreator PYTHONPATH=. uvicorn api.main:app --host 0.0.0.0 --port 8001 ``` ## 查看可用引擎 ```bash curl http://localhost:8001/api/v2/aigc/engines ``` ## 测试脚本 ```bash # 测试选题生成 python scripts/test_topic_generate.py # 测试内容生成 python scripts/test_content_generate.py # 测试海报生成 V2 python scripts/test_poster_smart_v2.py ``` --- ## 版本历史 | 版本 | 日期 | 变更 | |-----|------|------| | 2.0.0 | 2024-12-10 | 新增 poster_smart_v2,双输出 | | 2.1.0 | 2024-12-09 | content_generate 内置参考文献库 | | 2.0.0 | 2024-12-08 | V2 引擎,无数据库依赖 |