10 KiB
10 KiB
字段映射与规范
更新日期: 2024-12-09
版本: 2.0.0
状态: 重构中
重要更新: 详细的字段重构设计请参考 FIELD_REFACTOR_DESIGN.md
1. 测试结果总结
1.1 已验证功能
| 功能 | 状态 | 耗时 | 备注 |
|---|---|---|---|
| 配置查询 API | ✅ 通过 | <1s | 风格 2 个,人群 3 个 |
| 选题生成 | ✅ 通过 | ~40s | LLM 调用正常 |
| 内容生成 | ✅ 通过 | ~25s | LLM 调用正常 |
| 海报生成 | ⚠️ 待修复 | - | 依赖旧模块 |
1.2 生成示例
选题生成结果:
{
"index": "1",
"date": "2025-02-10",
"logic": "春节假期期间,针对周边家庭游客推出团圆主题宣传",
"object": "上海迪士尼",
"product": "双人票",
"productLogic": "双人票满足夫妻/情侣陪同长辈或子女的春节出游需求",
"style": "极力推荐风",
"styleLogic": "通过强烈号召性语言突出春节限定体验价值",
"targetAudience": "周边游",
"targetAudienceLogic": "辐射长三角地区家庭客群,利用高铁/自驾3小时可达优势",
"scenic_spot_id": 1,
"product_id": 20,
"style_id": "tuijian",
"audience_id": "zhoubianyou"
}
内容生成结果:
{
"title": "天津亲子玩水首选!全家畅玩冒险湾🎢👶",
"content": "还在为带娃找消暑去处发愁?\n天津冒险湾直接给你安排全套解暑方案~\n✅大人小孩都能嗨:\n刺激控冲浪屋水上过山车\n宝妈安心区3000㎡儿童戏水乐园\n还有超治愈的漂流河和海浪池\n一家三口总能找到心头好...",
"tag": "#天津旅游 #天津周边游 #滨海新区游玩 #天津冒险湾 #冒险湾攻略"
}
2. 字段映射
2.1 输入字段 (Java → Python)
scenic_spot (景区)
| 字段 | 类型 | 必填 | 说明 | Java 来源 |
|---|---|---|---|---|
| id | int/str | ✅ | 景区 ID | ScenicSpot.id |
| name | str | ✅ | 景区名称 | ScenicSpot.name |
| description | str | ❌ | 景区描述 | ScenicSpot.description |
| address | str | ❌ | 详细地址 | ScenicSpot.address |
| location | str | ❌ | 所在城市 | ScenicSpot.location |
| traffic_info | str | ❌ | 交通信息 | ScenicSpot.trafficInfo |
| highlights | list | ❌ | 亮点列表 | ScenicSpot.highlights |
| opening_hours | str | ❌ | 营业时间 | ScenicSpot.openingHours |
| ticket_info | str | ❌ | 票价信息 | ScenicSpot.ticketInfo |
| tips | str | ❌ | 游玩提示 | ScenicSpot.tips |
product (产品)
| 字段 | 类型 | 必填 | 说明 | Java 来源 |
|---|---|---|---|---|
| id | int/str | ✅ | 产品 ID | Product.id |
| name | str | ✅ | 产品名称 | Product.name |
| price | number | ❌ | 现价 | Product.price |
| original_price | number | ❌ | 原价 | Product.originalPrice |
| description | str | ❌ | 产品描述 | Product.description |
| includes | list | ❌ | 包含内容 | Product.includes |
| valid_period | str | ❌ | 有效期 | Product.validPeriod |
| usage_rules | str | ❌ | 使用规则 | Product.usageRules |
style (风格)
| 字段 | 类型 | 必填 | 说明 | Java 来源 |
|---|---|---|---|---|
| id | str | ✅ | 风格 ID | 从配置 API 获取 |
| name | str | ✅ | 风格名称 | 从配置 API 获取 |
可用值: gonglue (攻略风), tuijian (极力推荐风)
audience (人群)
| 字段 | 类型 | 必填 | 说明 | Java 来源 |
|---|---|---|---|---|
| id | str | ✅ | 人群 ID | 从配置 API 获取 |
| name | str | ✅ | 人群名称 | 从配置 API 获取 |
可用值: qinzi (亲子向), zhoubianyou (周边游), gaoshe (高奢酒店)
2.2 输出字段 (Python → Java)
topic (选题)
| 字段 | 类型 | 说明 | Java 映射 |
|---|---|---|---|
| index | str | 选题序号 | Topic.index |
| date | str | 发布日期 (YYYY-MM-DD) | Topic.date |
| object | str | 景区名称 | Topic.object |
| product | str | 产品名称 | Topic.product |
| style | str | 风格名称 | Topic.style |
| targetAudience | str | 人群名称 | Topic.targetAudience |
| logic | str | 选题逻辑 | Topic.logic |
| productLogic | str | 产品逻辑 | Topic.productLogic |
| styleLogic | str | 风格逻辑 | Topic.styleLogic |
| targetAudienceLogic | str | 人群逻辑 | Topic.targetAudienceLogic |
| scenic_spot_id | int | 景区 ID (引擎增强) | Topic.scenicSpotId |
| product_id | int | 产品 ID (引擎增强) | Topic.productId |
| style_id | str | 风格 ID (引擎增强) | Topic.styleId |
| audience_id | str | 人群 ID (引擎增强) | Topic.audienceId |
content (内容)
| 字段 | 类型 | 说明 | Java 映射 |
|---|---|---|---|
| title | str | 文案标题 | Content.title |
| content | str | 文案正文 | Content.content |
| tag | str | 标签 (空格分隔) | Content.tag |
3. 字段问题与改进建议
3.1 已修复问题 ✅
问题 1: 缺少 title 字段 → 已修复
修复: 在 Prompt 中添加了 title 字段要求
问题 2: index 类型不一致 → 已修复
修复: Prompt 示例中 index 改为整数
3.2 保留问题 (兼容性考虑)
字段命名不一致
现状:
objectvsscenic_spot_id(景区)targetAudiencevsaudience_id(人群)- 驼峰命名 vs 下划线命名混用
决定: 保持现有命名以兼容 Java 端,通过 Java 端适配层处理
// 改进后
{
"index": 1,
"date": "2025-02-10",
"scenic_spot_name": "上海迪士尼",
"scenic_spot_id": 1,
"product_name": "双人票",
"product_id": 20,
"style_name": "极力推荐风",
"style_id": "tuijian",
"audience_name": "周边游",
"audience_id": "zhoubianyou",
"logic": "...",
"product_logic": "...",
"style_logic": "...",
"audience_logic": "..."
}
问题 2: index 类型不一致
现状: LLM 返回 "index": "1" (字符串)
建议: 在引擎中转换为整数
问题 3: 缺少 title 字段
现状: 选题没有生成标题,只有 object (景区名)
建议: 在 Prompt 中要求生成 title 字段
3.2 Prompt 改进建议
# 改进后的输出格式
## JSON 输出示例
```json
[
{
"index": 1,
"date": "2024-07-01",
"title": "暑假遛娃首选!天津冒险湾全家畅玩攻略",
"scenic_spot_name": "天津冒险湾",
"product_name": "家庭套票",
"style_name": "攻略风",
"audience_name": "亲子向",
"logic": "暑假初期,针对家庭出游进行预热宣传",
"product_logic": "结合住宿和导览,提供便捷的家庭游解决方案",
"style_logic": "强调家庭共享时光和文化体验",
"audience_logic": "满足家长带娃出游,寓教于乐的需求"
}
]
3.3 Java 端适配建议
// TopicGenerateResponse.java 字段映射
public class Topic {
private Integer index; // 选题序号
private String date; // 发布日期
private String title; // 选题标题 (新增)
// 名称字段 (LLM 生成)
private String object; // 景区名称 (兼容旧字段)
private String scenicSpotName; // 景区名称 (新字段)
private String product; // 产品名称 (兼容旧字段)
private String productName; // 产品名称 (新字段)
private String style; // 风格名称
private String styleName; // 风格名称 (新字段)
private String targetAudience; // 人群名称 (兼容旧字段)
private String audienceName; // 人群名称 (新字段)
// ID 字段 (引擎增强)
private Long scenicSpotId;
private Long productId;
private String styleId;
private String audienceId;
// 逻辑字段
private String logic;
private String productLogic;
private String styleLogic;
private String targetAudienceLogic;
// 兼容方法
public String getScenicSpotName() {
return scenicSpotName != null ? scenicSpotName : object;
}
}
4. API 调用示例
4.1 选题生成
curl -X POST http://localhost:8001/api/v2/aigc/execute \
-H "Content-Type: application/json" \
-d '{
"engine": "topic_generate",
"params": {
"month": "2025-02",
"num_topics": 3,
"scenic_spot": {
"id": 1,
"name": "上海迪士尼",
"description": "全球第六座迪士尼乐园",
"location": "上海市浦东新区"
},
"product": {
"id": 20,
"name": "双人票",
"price": 798
},
"style": {"id": "tuijian", "name": "极力推荐风"},
"audience": {"id": "zhoubianyou", "name": "周边游"}
}
}'
4.2 内容生成
curl -X POST http://localhost:8001/api/v2/aigc/execute \
-H "Content-Type: application/json" \
-d '{
"engine": "content_generate",
"params": {
"topic": {
"index": 1,
"date": "2025-02-10",
"title": "春节迪士尼双人游",
"object": "上海迪士尼",
"product": "双人票",
"style": "极力推荐风",
"targetAudience": "周边游"
},
"scenic_spot": {
"id": 1,
"name": "上海迪士尼",
"description": "全球第六座迪士尼乐园"
},
"product": {
"id": 20,
"name": "双人票",
"price": 798
},
"style": {"id": "tuijian", "name": "极力推荐风"},
"audience": {"id": "zhoubianyou", "name": "周边游"},
"enable_judge": false
}
}'
5. 待办事项
5.1 Python 端
- 修复海报生成引擎依赖
- 统一选题输出字段命名
- 添加 title 字段到选题 Prompt
- index 类型转换 (str → int)
5.2 Java 端
- 新增 AIGCConfigService
- 改造 TopicGenerateServiceImpl
- 改造 ContentGenerateServiceImpl
- 更新 Topic 实体类字段
- 添加字段兼容映射
5.3 测试
- 完整链路测试 (选题 → 内容 → 海报)
- 多风格/人群组合测试
- 性能测试
- 异常场景测试