TravelContentCreator/docs/FIELD_MAPPING.md

10 KiB
Raw Blame History

字段映射与规范

更新日期: 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 保留问题 (兼容性考虑)

字段命名不一致

现状:

  • object vs scenic_spot_id (景区)
  • targetAudience vs audience_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 测试

  • 完整链路测试 (选题 → 内容 → 海报)
  • 多风格/人群组合测试
  • 性能测试
  • 异常场景测试