TravelContentCreator/docs/API_INTEGRATION.md

444 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AIGC 服务接口对接文档
> 本文档供 Java 后端对接 Python AIGC 服务使用
---
## 概述
### 服务地址
```
POST http://aigc-service:8080/aigc/execute
```
### 通用请求结构
```json
{
"engine": "引擎名称",
"params": { ... },
"async_mode": false,
"task_id": null,
"callback_url": null
}
```
### 通用响应结构
```json
{
"success": true,
"task_id": "xxx",
"status": "completed",
"data": { ... },
"error": null,
"error_code": null
}
```
---
## 引擎列表
| 引擎 | engine 值 | 说明 |
|-----|----------|------|
| 选题生成 | `topic_generate` | 生成营销选题 |
| 内容生成 | `content_generate` | 生成小红书文案 |
| 海报生成 | `poster_generate` | 生成海报图片 |
---
## 1. 选题生成 `topic_generate`
### 请求示例
```json
{
"engine": "topic_generate",
"params": {
"num_topics": 5,
"month": "2025-01",
"scenic_spot": {
"id": 1,
"name": "天津冒险湾",
"description": "天津最大的水上乐园...",
"address": "天津市滨海新区...",
"highlights": ["水上项目", "亲子设施"]
},
"product": {
"id": 10,
"name": "家庭套票",
"price": 299,
"original_price": 399,
"package_info": "含2大1小门票+午餐",
"usage_rules": "需提前1天预约"
},
"style": {
"id": 1,
"name": "攻略风",
"prompt_key": "gonglue"
},
"audience": {
"id": 1,
"name": "亲子向",
"prompt_key": "qinzi"
}
}
}
```
### 参数说明
| 参数 | 类型 | 必填 | 说明 |
|-----|------|-----|------|
| num_topics | int | 否 | 生成选题数量,默认 5 |
| month | string | 否 | 目标月份,如 "2025-01" |
| scenic_spot | object | 是 | 景区完整对象 |
| product | object | 是 | 产品完整对象 |
| style | object | 否 | 风格对象 |
| audience | object | 否 | 受众对象 |
### 响应示例
```json
{
"success": true,
"data": {
"topics": [
{
"index": 1,
"date": "2025-01-15",
"title": "寒假遛娃好去处",
"logic": "寒假期间亲子出游需求旺盛",
"scenic_spot": "天津冒险湾",
"product": "家庭套票",
"style": "攻略风",
"audience": "亲子向"
}
],
"count": 5
}
}
```
---
## 2. 内容生成 `content_generate`
### 请求示例
```json
{
"engine": "content_generate",
"params": {
"topic": {
"index": 1,
"date": "2025-01-15",
"title": "寒假遛娃好去处",
"logic": "寒假期间亲子出游需求旺盛"
},
"scenic_spot": {
"id": 1,
"name": "天津冒险湾",
"description": "天津最大的水上乐园...",
"address": "天津市滨海新区...",
"highlights": ["水上项目", "亲子设施"],
"traffic_info": "地铁9号线直达"
},
"product": {
"id": 10,
"name": "家庭套票",
"price": 299,
"original_price": 399,
"package_info": "含2大1小门票+午餐"
},
"style": {
"id": 1,
"name": "攻略风",
"prompt_key": "gonglue"
},
"audience": {
"id": 1,
"name": "亲子向",
"prompt_key": "qinzi"
},
"need_judge": true
}
}
```
### 参数说明
| 参数 | 类型 | 必填 | 说明 |
|-----|------|-----|------|
| topic | object | 是 | 选题对象(上一步输出) |
| scenic_spot | object | 是 | 景区完整对象 |
| product | object | 是 | 产品完整对象 |
| style | object | 否 | 风格对象 |
| audience | object | 否 | 受众对象 |
| need_judge | bool | 否 | 是否需要内容审核,默认 true |
### 响应示例
```json
{
"success": true,
"data": {
"content": {
"title": "🎢寒假遛娃|天津冒险湾超全攻略",
"content": "终于找到一个能让娃玩一整天的地方...",
"tag": "#天津旅游 #亲子游 #周末去哪儿玩"
},
"judge_result": {
"passed": true,
"score": 85,
"suggestions": []
}
}
}
```
---
## 3. 海报生成 `poster_generate`
### 请求示例
```json
{
"engine": "poster_generate",
"params": {
"template_id": "poster-template-1",
"poster_content": {
"title": "寒假特惠",
"subtitle": "天津冒险湾家庭套票",
"slogan": "一票畅玩全场",
"price_text": "¥299起",
"highlights": ["水上乐园", "亲子设施", "美食套餐"],
"cta": "立即抢购"
},
"image_urls": [
"https://oss.example.com/images/scenic1.jpg",
"https://oss.example.com/images/scenic2.jpg"
],
"scenic_spot": {
"id": 1,
"name": "天津冒险湾"
},
"product": {
"id": 10,
"name": "家庭套票"
}
}
}
```
### 参数说明
| 参数 | 类型 | 必填 | 说明 |
|-----|------|-----|------|
| template_id | string | 是 | 海报模板 ID |
| poster_content | object | 否 | 海报文案内容 |
| image_urls | array | 推荐 | 图片 URL 列表 |
| image_paths | array | 备选 | 本地图片路径 |
| scenic_spot | object | 否 | 景区对象 |
| product | object | 否 | 产品对象 |
### 图片传输方式
**推荐使用 `image_urls`**
```json
{
"image_urls": [
"https://oss.example.com/images/1.jpg",
"https://oss.example.com/images/2.jpg"
]
}
```
Python 端会自动下载图片并处理。
### 响应示例
```json
{
"success": true,
"data": {
"poster_url": "https://oss.example.com/posters/result.png",
"poster_base64": "data:image/png;base64,...",
"template_id": "poster-template-1"
}
}
```
---
## 对象结构定义
### scenic_spot 景区对象
```json
{
"id": 1,
"name": "景区名称",
"description": "景区描述",
"address": "详细地址",
"traffic_info": "交通信息",
"highlights": ["亮点1", "亮点2"],
"opening_hours": "营业时间",
"tips": "游玩贴士"
}
```
### product 产品对象
```json
{
"id": 10,
"name": "产品名称",
"price": 299,
"original_price": 399,
"package_info": "套餐内容",
"usage_rules": "使用规则",
"valid_period": "有效期",
"stock": 100
}
```
### style 风格对象
```json
{
"id": 1,
"name": "攻略风",
"prompt_key": "gonglue"
}
```
可选值:
- `gonglue` - 攻略风
- `tuijian` - 极力推荐风
### audience 受众对象
```json
{
"id": 1,
"name": "亲子向",
"prompt_key": "qinzi"
}
```
可选值:
- `qinzi` - 亲子向
- `zhoubianyou` - 周边游
- `gaoshe` - 高奢酒店
---
## 错误处理
### 错误响应格式
```json
{
"success": false,
"error": "错误描述",
"error_code": "ERROR_CODE",
"data": null
}
```
### 常见错误码
| 错误码 | 说明 | 处理建议 |
|-------|------|---------|
| VALIDATION_ERROR | 参数验证失败 | 检查必填参数 |
| ENGINE_NOT_FOUND | 引擎不存在 | 检查 engine 值 |
| AI_RATE_LIMIT | AI 服务限流 | 稍后重试 |
| AI_CONTENT_FILTER | 内容被过滤 | 调整输入内容 |
| NETWORK_ERROR | 网络错误 | 检查服务连接 |
---
## Prompt 查询接口
### 列出所有 Prompt
```
GET /prompt/v2/list
```
响应:
```json
{
"prompts": ["topic_generate", "content_generate", "content_judge", "poster_generate", "integration"],
"count": 5
}
```
### 获取 Prompt 详情
```
GET /prompt/v2/{name}?version=latest
```
### 列出 Prompt 版本
```
GET /prompt/v2/{name}/versions
```
### 渲染 Prompt
```
POST /prompt/v2/render
```
请求:
```json
{
"name": "content_generate",
"version": "latest",
"context": {
"style_content": "...",
"demand_content": "...",
"topic": { ... }
}
}
```
---
## 迁移指南
### 从旧接口迁移
| 旧参数 | 新参数 | 说明 |
|-------|-------|------|
| ppid | 移除 | 不再使用 |
| sid | scenic_spot.id | 改为完整对象 |
| pid | product.id | 改为完整对象 |
| images_base64 | image_urls | 推荐使用 URL |
### 关键变化
1. **不再使用 ppid**Java 端需要预先解析 ppid传递完整对象
2. **图片使用 URL**:推荐传递 OSS URLPython 端自动下载
3. **风格/受众使用 prompt_key**:用于匹配 Prompt 模板
---
## 联调检查清单
- [ ] 确认服务地址可访问
- [ ] 确认 scenic_spot 对象包含必要字段
- [ ] 确认 product 对象包含必要字段
- [ ] 确认 style.prompt_key 值正确
- [ ] 确认 audience.prompt_key 值正确
- [ ] 确认图片 URL 可公网访问
- [ ] 测试选题生成接口
- [ ] 测试内容生成接口
- [ ] 测试海报生成接口