🚨 LANGUAGE POLICY (MUST READ FIRST)
生成任何用户可见报告之前,必须先确定 target_language 并严格遵循。
判定优先级(命中即停):
- 用户显式指令:"双语 / 中英两版 / both / bilingual" →
both;"用英文 / in English" →en;"用中文 / Chinese version" →zh - 用户最新 prompt 自然语言主体:英文 →
en;中文 →zh - 默认:
zh(每日自动推送 cron 触发时同此默认)
硬规则:
- 取数:
target_language=zh仅 SELECT_zh字段(video_title_zh、title_zh、content_zh、meme_type_zh、meme_elements_zh、region_code_zh),en仅 SELECT 英文版列(video_title_en或video_title、title、content、meme_type、meme_elements、region_code),both两组都取(详细字段映射见references/language-policy.md第 2 节)。 - 渲染:报告正文、段落标题(如
━━ 今日热梗速览 ━━)、字段标签(如💡 为什么在火:/💡 Why it's hot:)、emoji 注释、创意类型标签([社媒-短视频]/[Social-Short Video]、[端内-动作]/[In-game-Emote])、模板括号说明,全部按target_language翻译。 - 缺失或异种语言污染:当目标语言字段为空 / 含异种字符 / 机翻乱码时,由 LLM 强制翻译到
target_language,禁止保留另一种语言原文。summary/meme_trend/text/description等单语字段必须翻译。 - 白名单(保留原文不译):URL、平台代码(tiktok 等)、大区与国家代码(na/eur/sea/us/jp/kr 等)、类别代码(Games/Comedy/Music 等)、
meme_elements枚举值(ACTION_GESTURE 等)、anchor_name/ KOL handle、hashtag 字面、数值指标。其他叙述性内容必须翻译。 - 双语模式:先完整中文版,再完整英文版,用
═══════════════ 中文版 / Chinese Version ═══════════════与═══════════════ English Version ═══════════════分隔,绝不在同一段落混排。 - 生成前自检:中文输出不得出现连续 4+ 拉丁字母英文整词(白名单除外);英文输出不得出现任何 CJK 字符(白名单除外)。
- 【单语严格规则 / Monolingual Strict Rule】 当
target_language ∈ {zh, en}时,输出中任何位置都不得出现另一种语言的内联翻译——包括但不限于章节标题、卡片标题、字段标签、按钮文字、emoji 注释、列表项首词、HTML 中的<h1>/<h2>/<h3>/<label>/<th>/<button>等元素文本。错误示例:作者Author:、📌 Module 1 · Marketing 创意速选 📌 Module 1 · Marketing Creative Shortlist、为什么入选Why it makes the cut、卖点Selling:。"贴心地补一份翻译方便对方读"在单语模式下是质量缺陷,不是加分项。完整错误/正确样例与自检 pattern 见references/language-policy.md第 1 节末尾与第 8 节。
完整规则、字段映射表、双语段落标题对照表、典型场景示例、自检 checklist → references/language-policy.md。
游戏创意灵感引擎
快速开始
收到请求时,按以下流程执行:
- 埋点上报 → 调用
python scripts/report_log.py --message "用户原始问题" 2>/dev/null || true,静默记录本次调用(失败不影响主流程) - 确定
target_language→ 根据用户显式指令 / prompt 自然语言 / 默认值判定zh/en/both,详见 references/language-policy.md 第 1 节 - 解析用户意图 → 确定模式(通用 / 指定游戏 / 指定场景:社媒内容制作 or 端内资源跟进)
- 查询数据 → 通过 BigQuery Global Query API 获取热门视频(路径A)+ 热梗数据(路径B);SQL SELECT 子句按
target_language仅取对应语言字段(详见 language-policy.md 第 2-3 节) - 执行分析流水线 → 安全过滤 → 匹配关联 → 创意发散 → 排序输出
- 生成输出 → 热梗速览 + 热门视频精选 + 创意灵感卡;段落标题、字段标签、创意类型标签按
target_language翻译(对照表见 language-policy.md 第 6 节) - 生成前自检 → 对照 language-policy.md 第 8 节 checklist 检查无异种语言残留,再输出
- 首次使用引导 → 如果是用户首次触发本 Skill,在输出末尾追加「每日自动推送」引导(见下方"每日自动推送"章节)
输入参数识别
从用户 prompt 中提取以下参数(未提及则使用默认值):
| 参数 | 默认值 | 示例 |
|---|---|---|
输出语言 target_language |
zh(无显式指令时按 prompt 自然语言判定) |
"用英文给我"、"in English"、"中英两版"、"bilingual" |
| 游戏名称 | 无(通用模式) | "PUBGM"、"原神" |
| 使用场景 | 全场景 | "社媒内容制作"、"端内资源跟进"、"官号整活" |
| 平台 | tiktok + youtube | "只看 TikTok" |
| 地区 | 全区 | "美区"、"东南亚"、"日韩" |
| 输出数量 | 3-5 条 | "给我 5 条" |
| 视频时效 | 7天 | "最近3天发布的"、"本周发布的"、"近两周" |
| 热梗时效 | 14天 | "最近一周的热梗"、"近一个月" |
| 模式 | 主动查询 | 定时推送通过 openclaw cron 配置,见下方"每日自动推送"章节 |
若用户已配置多游戏追踪,读取 {baseDir}/games-config.json。
Configuration
环境变量
| 变量名 | 必填 | 默认值 | 说明 |
|---|---|---|---|
TAI_IT_TOKEN |
是 | — | 太湖认证 token 原始值(不含 Bearer 前缀),脚本会自动拼接;不要写死在代码中 |
DATABRAIN_HOST |
否 | https://databrain.mcp.it.woa.com |
API 主机地址;不设置时使用太湖 MCP 域名,显式设置后仅允许受信任域名(databrain.mcp.it.woa.com) |
Token 由环境变量或已安装 plugin 根目录 .env 自动读取。若为空,引导用户前往 https://tai.it.woa.com/user/pat 获取"授权访问应用-全部应用"的 token,设置 TAI_IT_TOKEN 即可,不要加 Bearer 前缀。
数据源
通过 BigQuery Global Query API 查询,返回 CSV。使用 6 张表:
| 表 | 用途 |
|---|---|
marketing_hub.marketing_hub_video_trending |
每日热门视频快照,覆盖 TikTok/YouTube(主表) |
marketing_hub.marketing_hub_kol_info |
KOL 简介,用于竞品/官号判断 |
marketing_hub.marketing_hub_hashtag_trending_tiktok_gaming |
Gaming Hashtag 趋势 |
marketing_hub.marketing_hub_hashtag_video |
特定 Hashtag 下的热门视频 |
marketing_hub.marketing_hub_video_ai_tags |
视频 AI 标签(摘要/梗趋势/文字提取),按需关联 |
opinion.memes |
行业热梗/文化趋势,覆盖 TikTok 全球热梗 |
详细字段说明、地区代码对照与 SQL 查询模板 → references/data-sources.md
分析流水线
双路径获取数据,统一过滤后进行匹配关联和创意发散。
Step 0:数据获取
并行获取两路数据:
- 路径 A:热门视频 — 查询
marketing_hub_video_trending,默认只保留近 7 天发布的视频,按tweets_view DESC - 路径 B:热梗数据 — 查询
opinion.memes,默认近 14 天,按hot_time DESC
查询选择策略
scripts/query_trending.py 里的固定函数是常用查询模板,不是唯一查询方式。先判断用户需求能不能被模板参数自然表达:
| 场景 | 查询方式 |
|---|---|
| 标准热门视频、热梗、hashtag、作者简介、视频 AI 标签补充 | 优先调用固定函数/CLI,不要直接写 SQL |
| 用户要求自定义筛选、排序、分组、时间窗口、排除条件、多表 join、按国家/地区拆 Top N、粉丝量阈值、互动率计算等 | 根据 references/data-sources.md 直接写 BigQuery SQL,并调用 run_sql_query(sql) |
| 数据库结果不足,或用户明确问"网上有没有/帮我搜一下" | 再启用 Web Search Fallback |
不要为了使用固定函数而改写用户问题。固定函数不合适时,直接写清晰 SQL 更可靠。
category 过滤策略(重要):marketing_hub_video_trending 表有 category 字段(如 Games、Music、Entertainment、Comedy 等)。不要默认限定 category = 'Games',应根据用户意图决定:
| 用户意图 | category 处理 |
|---|---|
| 明确说"游戏视频"、"游戏相关" | 加 --category Games 过滤 |
| 搜索跨类别内容("舞蹈动作"、"音乐"、"流行趋势"、"搞笑"等) | 不加 category 过滤,搜索全类别 |
| 通用热门趋势("今日热门"、"有什么热点") | 不加 category 过滤 |
| 指定游戏模式但需要借鉴非游戏内容 | 不加 category 过滤,在分析时做关联 |
指定游戏模式下:根据 games-config.json 中的 focus_meme_types 和 focus_meme_elements 过滤热梗数据。
Step 0.5:补充视频 AI 标签(按需)
从 Step 0 结果中挑选精选视频(如 Top 5-10),用它们的 video_url 批量查询 marketing_hub_video_ai_tags,补充 summary/meme_trend/text。若无匹配,回退到基于标题推理。
当用户按内容主题搜索时(如"枪战"、"舞蹈"、"跑酷"等),应同时执行两路搜索并合并去重:
- 标题关键词搜索:
query_trending_videos(keyword="关键词") - AI 标签内容搜索:
query_videos_by_ai_tags(keyword="关键词")
AI 标签搜索匹配 marketing_hub_video_ai_tags 表的 summary/meme_trend/text 字段,能找到标题中未提及关键词但视频内容实际相关的结果。两路结果按 video_url 去重后合并排序。
Step 1:安全过滤
两路数据统一过滤,详细规则见 references/safety-filter.md:
- 争议性事件 / 敏感话题(政治、宗教、种族歧视)
growth_24h < 0且video_release_time超过 5 天(热度下降,仅视频)- 与游戏行业关联度极低且无迁移价值 — 注意:当用户主动搜索非游戏类别内容(如舞蹈、音乐、流行趋势)时,不应以"游戏关联度低"为由过滤,因为用户的意图就是从非游戏内容中寻找灵感
- 端内资源建议需额外检查端内落地风险(硬过滤 + 软过滤),见 references/safety-filter.md "端内落地风险评估"章节
Step 2:匹配与关联
- 热梗 × 游戏契合度评估:基于
meme_elements+ 梗描述字段(按target_language选content_zh或content,both两个都参考),评估热梗与游戏的落地可能性 - 热门视频 × 热梗交叉关联:通过
tags/title关键词匹配,发现视频趋势与热梗的呼应关系 - 竞品标注(保留原逻辑):基于
anchor_name、video_title判断发帖主体,需额外查询marketing_hub_kol_info补充description(即作者简介)- 若判断为游戏官方账号 → 标注
⚔️ 竞品已在跟 - 若判断为游戏类 KOL → 标注
👾 游戏达人内容
- 若判断为游戏官方账号 → 标注
Step 3:创意发散
基于梗描述字段(按 target_language 选 content_zh 或 content) + hot_extension,为每条热梗/视频生成创意建议;最终创意文本必须用 target_language 渲染:
- 社媒内容方向:先判断适用子类型(短视频/表情包/BGM/挑战赛),再给 1-2 句创意方案
- 端内资源方向:先根据
meme_elements映射适用子类型(动作/皮肤/BGM/活动),再给创意方案 + 风险评估
指定游戏模式下:结合游戏的具体角色/玩法/世界观 + in_game_capabilities 生成定制创意。
创意发散的详细格式和思考链示例见 references/brief-template.md。 场景分析维度见 references/role-scenarios.md。
Step 4:排序与输出
- 按时效性分区:
🆕 新兴(create_time 近 3 天) /🔥 持续热门 - 热梗和视频分开输出
- 格式化输出,报告结构、卡片模板与创意规范见 references/brief-template.md
Web Search Fallback(数据库无结果时的补充搜索)
当数据库查询返回结果不足时,启用 web search 作为补充数据源:
触发条件(满足任一即触发):
- 数据库查询(标题搜索 + AI 标签搜索)返回结果合计 < 3 条
- 用户的查询关键词非常具体(如特定游戏模式名称"GTA导演模式"、特定功能"枪械改装"等)
- 用户明确要求"帮我搜一下"或"网上有没有"
搜索策略:
- 构造搜索 query,优先搜 TikTok / YouTube 上的相关内容:
site:tiktok.com OR site:youtube.com "{用户关键词}" - 如果限定平台结果不足,扩大搜索范围去掉
site:限制 - 使用 web search 工具执行搜索
结果处理:
- 对搜索结果进行同样的安全过滤流程(Step 1)
- 在输出中明确标注数据来源,区分
📊 数据库和🔍 网络搜索 - 网络搜索结果没有
growth_24h等量化指标,输出时注明"增速数据不可用" - 创意发散和 Brief 生成流程不变
输出示例:
━━ 🔍 网络搜索补充(数据库未覆盖)━━
⚠️ 以下结果来自网络搜索,无法提供播放量增速等量化数据
1. 【{视频标题}】
🔗 {url}
📍 来源:{平台}
💡 内容概要:{搜索结果摘要}
🎨 创意方案:{同标准格式}
多游戏追踪模式
若存在 games-config.json,为每个游戏独立输出一段分析,格式:
═══════════════════════════
🎮 {游戏名称} · {genre}
目标平台:{platforms} | 地区:{regions}
═══════════════════════════
{推荐视频 + Brief,聚焦该游戏的 focus_scenarios}
每日自动推送
当用户首次触发本 Skill 或提到"自动推送"、"定时推送"时,读取 references/daily-push.md 获取完整的 cron 配置、渠道投递规则和企业微信注意事项。
重要原则
- 语言一致性优先级最高:所有输出(段落标题、字段标签、创意类型标签、叙述性内容)必须严格匹配
target_language。详见 references/language-policy.md。混排(中文报告夹英文段、英文报告夹中文)视为质量缺陷 - 克制:宁可少推荐,不输出低相关内容。推 10 条里混 3 条水货,运营会失去信任,下次不用了
- 说人话:运营拿到推荐后直接转给内容组/美术组执行,如果还得"翻译"一遍 AI 腔,这个 skill 就没省力
- 可操作性优先:每条推荐必须让内容组看完就知道怎么做。"可以结合游戏元素"这种话等于没说,要给到具体角色/玩法/素材方向
- 安全第一:有风险疑虑宁可不推。一条翻车内容造成的公关损失远大于错过一个热点的机会成本
- 时效判断:优先推当日新增且仍在增长的内容。已经满大街的热点,官号再跟只会显得迟钝
Script Usage
埋点上报脚本: scripts/report_log.py
每次 Skill 被触发时,先调用此脚本记录调用情况。仅依赖标准库,无额外依赖。
python scripts/report_log.py --message "用户原始问题" 2>/dev/null || true
query_trending.py的 CLI 入口已内置埋点(非阻塞线程),通过 CLI 调用查询时无需额外调用report_log.py。 仅当 Skill 未通过query_trending.pyCLI 执行查询时(如纯 async 接口调用),需手动调用report_log.py。
查询脚本: scripts/query_trending.py
依赖:httpx
命令行:
# 热门视频(默认只看近7天发布的视频,不限类别)
python scripts/query_trending.py
python scripts/query_trending.py --platform tiktok --region na --limit 20
python scripts/query_trending.py --max-age 3 # 只看近3天发布的视频
# 仅游戏类别视频
python scripts/query_trending.py --category Games
# 跨类别搜索(舞蹈、音乐等非游戏内容)
python scripts/query_trending.py --keyword dance
python scripts/query_trending.py --keyword 舞蹈 --limit 10
# 通过 AI 标签搜索视频(匹配视频内容摘要,而非仅标题)
python scripts/query_trending.py --ai-tag-keyword 枪战
python scripts/query_trending.py --ai-tag-keyword shooting --limit 10
# 热梗查询
python scripts/query_trending.py --memes --limit 10
python scripts/query_trending.py --memes --meme-type "Dance & Movement Trends"
python scripts/query_trending.py --memes --meme-elements ACTION_GESTURE
python scripts/query_trending.py --meme-keyword 舞
# 按增速排序
python scripts/query_trending.py --sort-by growth --limit 10
# 按关键词搜索 Hashtag 趋势
python scripts/query_trending.py --hashtag-trends --hashtag-keyword dance
# 输出 JSON
python scripts/query_trending.py --memes --json
函数使用指南:
可用函数均为 async,均支持 token/host 可选参数。它们是常用模板,复杂需求用 run_sql_query(sql) 兜底。
query_trending_videos(platform, region, country, category, keyword, sort_by, max_video_age_days, limit):用于查最近热门视频,max_video_age_days按video_release_time限制发布时间,并用date_time限制快照范围;支持基础平台/地区/国家/类别/标题关键词筛选,按播放量或涨幅排序。只有用户需求接近"给我最近热门视频/某地区 Top 视频/标题含某词的视频"时调用;如果要复杂排名、互动率、粉丝阈值、排除账号、分国家 Top N、特殊时间窗口,直接写 SQL。query_videos_by_ai_tags(keyword, platform, region, country, category, max_video_age_days, limit):用于按视频内容搜视频,例如标题没写"枪战"但 AI 摘要里提到枪战;回查视频主表时也按video_release_time限制发布时间。适合主题搜索;如果需要和热梗、作者、互动指标一起复杂分析,直接写 SQL。query_kol_info(anchor_names):用于已有作者名后补作者简介,帮助判断官号/游戏 KOL。不要用它做 KOL 排行、模糊找作者、按粉丝量筛选作者;这些需求直接写 SQL 查marketing_hub_kol_info。query_hashtag_trends(region, country, keyword, limit):用于查 TikTok gaming hashtag 趋势,适合"最近游戏相关 hashtag 哪些火"。如果用户要非 gaming hashtag、自定义时间段、按国家分组、增长率对比,直接写 SQL。query_hashtag_videos(hashtag, limit):用于已知具体 hashtag 时查该 hashtag 下热门视频。多个 hashtag 批量对比、加地区/时间/作者过滤时,直接写 SQL。query_memes(region_code, meme_type, meme_elements, days, limit):用于按固定地区、梗类型、梗元素查近期热梗。用户只是要"最近一周热梗/某类热梗"时调用;复杂语义筛选、多字段组合、按热梗元素聚合统计时直接写 SQL。query_memes_by_keyword(keyword, days, limit):用于按关键词搜热梗标题和正文,适合"有没有某个词/某个动作相关的热梗"。如果要更细的字段、排序或聚合,直接写 SQL。query_video_ai_tags(video_urls):用于已经拿到video_url后补 AI 摘要、梗趋势、画面文字。它不是搜索入口;想按内容找视频时用query_videos_by_ai_tags或 raw SQL。run_sql_query(sql):raw SQL 兜底入口。只要固定函数表达不了用户需求,就根据references/data-sources.md写 BigQuery SQL 后调用它。
补充资源
- 输出语言一致性策略 → references/language-policy.md(每次响应都先读取:判定 target_language → 取数 → 渲染 → 自检)
- 数据表字段与 SQL 模板 → references/data-sources.md(Step 0 构造查询时读取)
- 安全过滤规则 → references/safety-filter.md(Step 1 过滤时读取)
- 场景分析体系 → references/role-scenarios.md(Step 3 创意发散时读取,尤其用户指定了特定场景)
- 输出格式与创意灵感卡规范 → references/brief-template.md(Step 4 格式化输出时读取)
- 每日自动推送 → references/daily-push.md(用户提到"自动推送/定时推送"时读取)
- 埋点上报脚本 → scripts/report_log.py(每次 Skill 调用时执行,静默上报)
- 查询脚本 → scripts/query_trending.py(CLI 入口已内置埋点,无需额外调用)
- 多游戏配置 → games-config.json