agent-skills/skills/hologres-ad-campaign/SKILL.md
通过 Hologres AI Function 生成广告素材并模拟投放效果分析。适用于广告视频生成、素材转视频、虚拟投放模拟及 ROI 分析场景。
npx skillsauth add aliyun/hologres-ai-plugins hologres-ad-campaignInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
本 Skill 指导用户通过 Hologres AI Function,使用 hologres-cli 从 OSS 上的原始素材出发,通过全 SQL 链路完成广告视频生成、虚拟投放模拟和实时 ROI 分析。
当用户提到广告视频生成、宣传视频制作、素材转视频、Hologres AI Function 生成视频、虚拟投放模拟、ROI 分析、投放效果分析、广告素材生成等场景时使用。
每次使用本 Skill 时,启动 CLI 前必须执行以下两条命令:
pip install hologres-cli
export HOLOGRES_SKILL=hologres-ad-campaign
此外还需满足:
~/.hologres/config.json,包含有效的 profile(endpoint、port、database、access_key_id、access_key_secret、region_id、instance_id)所有 SQL 均通过 hologres-cli 执行,命令格式如下:
hologres --profile <name> sql run "<SQL>"hologres --profile <name> sql run --write "<SQL>"通过 hologres-cli 查询当前实例已部署的模型,如果缺少所需模型则自动部署。
1.1 查询已部署模型
hologres --profile <name> sql run "SELECT model_name, model_type, model_provider, task FROM list_external_models();"
1.2 确认默认模型(用户可自定义)
| 用途 | 默认模型名 | 模型类型(task) | 可自定义 |
|------|-----------|-----------------|----------|
| 图像生成 | qwen-image-2.0-pro | image-generation | 是 |
| 文本生成 | qwen3.6-plus | chat/completions | 是 |
| 视频生成 | wan2.7-i2v | video-generation | 是 |
如果用户没有指定模型,使用上表默认值;如果用户指定了其他模型,替换对应位置即可。
1.3 部署缺失模型
若查询结果中缺少任一模型,先查询 catalog 确认模型可用性:
hologres --profile <name> model catalog --search <keyword>
然后使用百炼 API Key 注册模型:
hologres --profile <name> model create --name <model_name> --type <model_type> --api-key <bailian_api_key>
注意:model_name 不能包含点号(.),如有需要用下划线替换(例如 wan2.7-i2v 需改为 wan2_7_i2v)。
注册后再次验证:
hologres --profile <name> model list
在生成 SQL 之前,向用户收集以下信息(已提供的跳过)。最后需要用户确认所有参数。
默认部署如下模型。如果客户有其他模型需求,可以更换模型名称;若没有指定,默认使用:
qwen-image-2.0-proqwen3.6-pluswan2.7-i2v| 信息项 | 说明 | 示例 | |--------|------|------| | 产品名称 | 产品/游戏/服务名称 | "箭塔守汉中" | | 产品介绍 | 2-3 句话描述 | "一款轻松休闲的策略塔防游戏" | | 用户动机 | 核心卖点/吸引用户的点 | "策略塔防,拖拽放置防御塔" | | 视觉风格 | 画面风格描述 | "中国风" |
| 信息项 | 说明 | 示例 | |--------|------|------| | OSS Bucket | 存储素材的 OSS Bucket | "<your-bucket>" | | OSS Region | OSS 所在区域内网 Endpoint | "<oss-internal-endpoint>" | | RAM Role ARN | 访问 OSS 的 RAM 角色 | "<ram-role-arn>" |
oss://bucket/game/hero1.png| 信息项 | 默认值 | 可选范围 | |--------|--------|----------| | 风格数量 | 1 种 | 最多 4 种 | | 视频时长 | 10 秒 | 5 / 10 / 15 / 30 | | 每个风格生成数量 | 1 个 | — |
输出目录规范:生成的图片和视频放在素材路径的同一父级目录下:
oss://game/base_images/hero1.pngoss://game/generated_images/<style_name>/oss://game/generated_videos/<style_name>/收集完以上信息后,向用户复述确认:
请确认以下参数:
- 模型名称:图像=
xxx,文本=xxx,视频=xxx- 产品信息:名称=
xxx,介绍=xxx,动机=xxx,风格=xxx- 行业类型:xxx
- OSS 配置:Bucket=
xxx,Region=xxx,RAM Role=xxx- 素材路径:
xxx- 生成参数:风格数量=x,视频时长=x秒
确认无误后,我将开始执行完整的广告视频生成链路。
hologres --profile <name> table create -n product_info \
-c "name TEXT NOT NULL, intro TEXT, motivation TEXT, art_style TEXT, material_list TEXT[]" \
--primary-key name --if-not-exists
hologres --profile <name> sql run --write "
INSERT INTO product_info (name, intro, motivation, art_style, material_list)
VALUES (
'产品名称',
'产品介绍',
'用户动机',
'视觉风格',
ARRAY['素材路径1']
)
ON CONFLICT (name) DO UPDATE SET
intro = EXCLUDED.intro,
motivation = EXCLUDED.motivation,
art_style = EXCLUDED.art_style,
material_list = EXCLUDED.material_list;
"
hologres --profile <name> table create -n video_style \
-c "name TEXT NOT NULL, prompt TEXT" \
--primary-key name --if-not-exists
根据行业类型从模板中随机抽取「风格数量」种风格:
游戏行业(4 种可选):
电商行业(4 种可选):
教育行业(4 种可选):
应用/其他(4 种可选):
hologres --profile <name> sql run --write "
INSERT INTO video_style VALUES
('风格1名称', '风格1提示词')
ON CONFLICT (name) DO UPDATE SET
prompt = EXCLUDED.prompt;
"
hologres --profile <name> table create -n generated_images \
-c "product_name TEXT, style_name TEXT, style_desc TEXT, material1 TEXT, material2 TEXT" \
--primary-key "product_name,style_name" --if-not-exists
hologres-cli 提供了专门的 AI 子命令(hologres ai image-gen / hologres ai gen / hologres ai i2v / hologres ai r2v / hologres ai t2v),相比 SQL ai_gen 更稳定、参数更直观。图片和视频生成必须使用 CLI 方式执行。
前置步骤:创建 OSS Volume
CLI 的 AI 命令要求输出目录使用 volume:// 格式,需先创建 volume 配置:
hologres --profile <name> volume create <volume_name> --type oss \
--endpoint <oss-internal-endpoint> \
--root oss://<bucket>/ \
--rolearn <ram-role-arn> \
--access-key <your-oss-access-key> \
--access-secret <your-oss-access-secret>
示例:
hologres --profile <name> volume create <volume_name> --type oss \
--endpoint <oss-internal-endpoint> \
--root oss://<bucket>/ \
--rolearn <ram-role-arn> \
--access-key <your-oss-access-key> \
--access-secret <your-oss-access-secret>
注意:
--root只需指定到 bucket 根目录(如oss://bucket/),不要包含过深的子路径,否则可能因 OSS ACL 权限导致创建失败。
逐个风格执行:
hologres --profile <name> ai image-gen "<风格提示词>" \
--reference-url oss://<bucket>/<素材路径> \
-o volume://<volume_name>/generated_images/<style_name>/ \
-m <图像模型名> \
--size "1280*720" \
-n 1 \
--watermark false \
--net intranet
示例(云海剑仙风格):
hologres --profile <name> ai image-gen "月白色宽袖道袍,水墨山水暗纹,儒雅仙侠气质" \
--reference-url oss://<bucket>/<素材路径> \
-o volume://<volume_name>/generated_images/<style_name>/ \
-m qwen_image_2_0_pro \
--size "1280*720" \
-n 1 \
--watermark false \
--net intranet
执行成功后,CLI 会返回生成图片的 OSS 路径。提取 oss_path 保存到 generated_images 表:
hologres --profile <name> sql run --write "
INSERT INTO generated_images (product_name, style_name, style_desc, material1, material2)
VALUES ('产品名称', '风格名称', '风格描述', '生成的图片OSS路径', '原始素材路径')
ON CONFLICT (product_name, style_name) DO UPDATE SET
style_desc = EXCLUDED.style_desc,
material1 = EXCLUDED.material1,
material2 = EXCLUDED.material2;
"
提示:每个风格单独执行一次。若有 N 个风格,重复上述命令 N 次。
使用文本模型生成分镜脚本:
hologres --profile <name> ai gen "你的任务是为游戏行业生成一份用于投放广告的5秒视频素材文案。
<产品名称>箭塔守汉中</产品名称>
<产品介绍>一款休闲的策略塔防游戏。</产品介绍>
<用户动机>策略塔防,拖拽放置防御塔</用户动机>
<画面风格>中国风</画面风格>
<图片物料>oss://<bucket>/generated_images/<文件名>.png oss://<bucket>/<素材路径></图片物料>
视频素材结构:
1. 开场2秒:选取一张图片,显示产品名称,展示视觉亮点。
2. 中段1秒:展示1个核心特性/玩法,选取2张图片,描述画面内容和效果。
3. 结尾2秒:所有元素登场,使用行动号召。
要求:围绕用户动机展开,脚本不超过5秒,使用图片全路径。" \
-m <文本模型名>
将生成的脚本保存到 generated_scripts 表(或变量中用于下一步视频生成):
hologres --profile <name> table create -n generated_scripts \
-c "product_name TEXT, style_name TEXT, script TEXT, material1 TEXT, material2 TEXT, created_at TIMESTAMP DEFAULT now()" \
--primary-key "product_name,style_name" --if-not-exists
根据模型类型选择对应的 CLI 命令:
| 模型类型 | CLI 命令 | 关键参数 |
|----------|----------|----------|
| I2V(首帧图生视频) | hologres ai i2v | --img-url <首帧图片> |
| R2V(参考图生视频) | hologres ai r2v | --reference-urls <url1,url2> |
| T2V(纯文本生视频) | hologres ai t2v | 仅需 prompt |
I2V 示例(wan2.7-i2v):
hologres --profile <name> ai i2v "<分镜脚本或视频描述>" \
--img-url oss://<bucket>/generated_images/<图片文件名>.png \
-o volume://<volume_name>/generated_videos/ \
-m <视频模型名> \
--duration <5|10|15> \
--resolution <720p|1080p> \
--watermark true \
--net intranet
实际执行示例:
hologres --profile <name> ai i2v "Chinese martial arts tower defense game advertisement, a hero in white robes standing on a castle tower, dragging and placing defense towers to stop enemy waves, epic cinematic battle scene" \
--img-url oss://<bucket>/generated_images/<图片文件名>.png \
-o volume://<volume_name>/generated_videos/ \
-m wan2_7_i2v \
--duration 5 \
--resolution 720p \
--watermark true \
--net intranet
执行成功后,CLI 返回 JSON 包含:
video.oss_path:视频 OSS 路径video.volume_path:volume 路径task_status:SUCCEEDED / FAILED将结果保存到 generated_videos 表:
hologres --profile <name> sql run --write "
INSERT INTO generated_videos (video_id, product_name, style_name, video_url, script)
VALUES ('vid_xxx', '产品名称', '风格名称', '视频完整URL(含签名)', '脚本内容')
ON CONFLICT (video_id) DO UPDATE SET
video_url = EXCLUDED.video_url,
script = EXCLUDED.script,
created_at = EXCLUDED.created_at;
"
多版本生成:若用户要求每个风格生成 N 个视频,重复执行上述 CLI 命令 N 次,每次因模型随机性产生不同内容。
视频 URL 签名:CLI 返回的视频 URL 是带签名的 OSS 临时链接,展示时必须保持完整参数。
耗时说明:hologres ai i2v 调用云端视频模型通常需要 1-3 分钟,CLI 会自动维持连接,不会出现 SQL ai_gen 的连接超时问题。
hologres --profile <name> table create -n channel_config \
-c "channel TEXT NOT NULL, base_cpm DECIMAL(10,2), base_ctr DECIMAL(5,4), base_cvr DECIMAL(5,4), avg_order_value DECIMAL(10,2)" \
--primary-key channel --if-not-exists
hologres --profile <name> sql run --write "
INSERT INTO channel_config VALUES
('wechat', 50.00, 0.025, 0.08, 150.00),
('douyin', 80.00, 0.015, 0.05, 200.00),
('xiaohongshu', 60.00, 0.030, 0.06, 180.00),
('bilibili', 40.00, 0.020, 0.04, 120.00)
ON CONFLICT (channel) DO NOTHING;
"
hologres --profile <name> table create -n ad_campaign_logs \
-c "log_id BIGINT NOT NULL, event_time TIMESTAMP, video_id TEXT, style_name TEXT, channel TEXT, event_type TEXT, cost DECIMAL(10,2), revenue DECIMAL(10,2), user_profile JSON" \
--primary-key log_id --if-not-exists
hologres --profile <name> sql run --write --no-limit-check "
WITH target_videos AS (
SELECT video_id, style_name
FROM generated_videos
WHERE video_id = CASE WHEN 'ALL' = 'ALL' THEN video_id ELSE 'ALL' END
),
simulation_params AS (
SELECT
v.video_id,
v.style_name,
c.channel,
c.base_cpm,
c.base_ctr,
c.base_cvr,
c.avg_order_value,
generate_series(1, 10000) as seq
FROM target_videos v
CROSS JOIN channel_config c
),
events AS (
SELECT
floor(random() * 9223372036854775807)::bigint as log_id,
now() - (random() * interval '7 days') as event_time,
video_id, style_name, channel,
'impression' as event_type,
(base_cpm / 1000.0) as cost,
0 as revenue,
json_build_object('age', floor(random()*5+1)) as user_profile
FROM simulation_params
UNION ALL
SELECT
floor(random() * 9223372036854775807)::bigint,
now() - (random() * interval '7 days'),
video_id, style_name, channel,
'click',
(base_cpm / 1000.0 / base_ctr) as cost,
0,
json_build_object('age', floor(random()*5+1))
FROM simulation_params
WHERE random() < base_ctr
UNION ALL
SELECT
floor(random() * 9223372036854775807)::bigint,
now() - (random() * interval '7 days'),
video_id, style_name, channel,
'conversion',
(base_cpm / 1000.0 / base_ctr / base_cvr) as cost,
avg_order_value as revenue,
json_build_object('age', floor(random()*5+1))
FROM simulation_params
WHERE random() < (base_ctr * base_cvr)
)
INSERT INTO ad_campaign_logs
SELECT * FROM events
ON CONFLICT (log_id) DO NOTHING;
"
hologres --profile <name> dt create -t dt_campaign_performance \
--freshness "1 minutes" \
--refresh-mode incremental \
--auto-refresh \
-q "SELECT channel, style_name, COUNT(CASE WHEN event_type = 'impression' THEN 1 END) as impressions, COUNT(CASE WHEN event_type = 'click' THEN 1 END) as clicks, COUNT(CASE WHEN event_type = 'conversion' THEN 1 END) as conversions, SUM(cost) as total_cost, SUM(revenue) as total_revenue, CASE WHEN SUM(cost) > 0 THEN ROUND(SUM(revenue) / SUM(cost), 2) ELSE 0 END as roi, CASE WHEN COUNT(CASE WHEN event_type = 'impression' THEN 1 END) > 0 THEN ROUND(COUNT(CASE WHEN event_type = 'click' THEN 1 END)::DECIMAL / COUNT(CASE WHEN event_type = 'impression' THEN 1 END), 4) ELSE 0 END as ctr, CASE WHEN COUNT(CASE WHEN event_type = 'click' THEN 1 END) > 0 THEN ROUND(COUNT(CASE WHEN event_type = 'conversion' THEN 1 END)::DECIMAL / COUNT(CASE WHEN event_type = 'click' THEN 1 END), 4) ELSE 0 END as cvr FROM ad_campaign_logs GROUP BY channel, style_name"
hologres --profile <name> sql run "
SELECT * FROM dt_campaign_performance ORDER BY roi DESC;
"
注意:Dynamic Table 有最多 1 分钟延迟,如果刚执行完模拟查询结果为空,请稍等 1 分钟后再执行。
方式 A:CLI 方式(推荐,更稳定)
先查询 ROI 数据,然后传给 hologres ai gen:
# 先导出 ROI 数据
DATA=$(hologres --profile <name> -f json sql run "SELECT channel, style_name, roi, ctr, cvr, total_cost, total_revenue, impressions FROM dt_campaign_performance WHERE total_cost > 0 ORDER BY roi DESC;")
# 生成 AI 分析报告
hologres --profile <name> ai gen "你是一位资深广告投放专家。以下是实时投放数据(JSON格式):$DATA
请分析:
1. **ROI 冠军**:哪个组合(渠道+风格)的 ROI 最高?具体数值是多少?
2. **潜力股**:哪个组合 CTR 很高但 CVR 偏低?可能原因是什么?
3. **止损建议**:哪个组合 ROI 低于 1.0?建议立即停止还是优化素材?
4. **预算分配**:如果我有 10,000 元额外预算,你会如何分配给各渠道?为什么?
请用 Markdown 格式输出,重点突出数据支撑的结论。" \
-m <文本模型名>
方式 B:SQL 方式(备选)
hologres --profile <name> sql run --no-limit-check "
SELECT
ai_gen('文本模型名',
json_build_object(
'prompt',
'你是一位资深广告投放专家。以下是实时投放数据:
' || json_agg(row_to_json(t)) || '
请分析 ROI 冠军、潜力股、止损建议和预算分配。',
'parameters', json_build_object('temperature', 0.7)
)::text
) as analysis_report
FROM (
SELECT channel, style_name, roi, ctr, cvr, total_cost, total_revenue, impressions
FROM dt_campaign_performance
WHERE total_cost > 0
ORDER BY roi DESC
) t;
"
0. 启动前置:pip install hologres-cli && export HOLOGRES_SKILL=hologres-ad-campaign
1. 验证并部署模型(hologres model catalog / model create / model list)
2. 收集信息并向用户确认所有参数
3. 创建 OSS volume(hologres volume create)
4. 创建 product_info / video_style / generated_images 等业务表并初始化数据
5. 逐个风格生成主题图片(hologres ai image-gen)
6. 生成分镜脚本(hologres ai gen)
7. 逐个风格合成广告视频(hologres ai i2v / r2v / t2v)
8. 保存图片/视频/脚本结果到对应业务表
9. 创建 channel_config 和 ad_campaign_logs 表
10. 执行虚拟投放模拟(SQL)
11. 创建 Dynamic Table dt_campaign_performance(hologres dt create)
12. 查询 ROI 指标并生成 AI 分析报告(hologres ai gen 或 SQL ai_gen)
hologres model create 的 --name 参数不能包含点号(.),如有需要用下划线替换。hologres ai CLI 子命令,不要使用 SQL ai_gen。ai_gen 对 I2V/R2V 等模型的参数封装不完整,会导致 Field required: input.media 等错误。--root 参数只需指定到 bucket 根目录(oss://bucket/),不要包含深层子路径,否则可能因 OSS ACL 权限失败。hologres ai 调用云端模型容易被限流,图片和视频生成必须逐个调用,不能批量执行。to_file 若使用外网 Endpoint 会导致 494 错误;CLI 中通过 --net intranet 指定内网。--write 标志区分读写,AI 命令(image-gen / gen / i2v 等)不需要 --write。hologres --profile <name> model list 确认 3 个模型均已注册hologres --profile <name> volume list 确认 volume 已创建hologres --profile <name> sql run "SELECT * FROM generated_images" 确认图片已生成hologres --profile <name> sql run "SELECT * FROM generated_videos" 确认视频已生成hologres --profile <name> sql run "SELECT * FROM dt_campaign_performance ORDER BY roi DESC" 确认 ROI 数据非空development
Hologres Knowledge Base Management: Build search & RAG knowledge bases on Hologres using full-text inverted index (Tantivy + BM25), HGraph vector index, and holo-search-sdk. Covers create knowledge base → ingest documents (with embeddings) → vector / full-text / hybrid search → Q&A with LLM. Triggers: "知识库", "knowledge base", "RAG", "向量检索", "vector search", "全文检索", "fulltext search", "倒排索引", "BM25", "HGraph", "holo-search-sdk", "embedding", "混合检索", "hybrid search", "Hologres 搜索", "Hologres search", "tantivy", "jieba", "ik 分词", "向量索引"
tools
Hologres 实例内存使用率异常诊断技能。当用户提到内存打满、OOM、内存持续高位、Worker 内存不均、内存泄漏、内存倾斜、内存归因分析等场景时使用。 以 instance_id + 时间窗口为输入,自动完成内存水位形态判定(全局高 / 局部倾斜 / 持续不回落)、业务指标对齐、内存分类初筛(Query vs System/Cache)、 并沿 Query 主线、倾斜主线、Write/后台主线、System/元数据主线四大归因维度自动下钻,输出结构化的 Markdown 诊断报告与治理行动清单。 云监控数据通过 `hologres metric query` / `hologres metric latest` 获取;元仓与 PG 系统表数据通过 `hologres sql run` 获取; 内部工具数据(OOM/Jeprof/Coredump)通过 `holo oncall common` 获取,全程享有 hologres-cli 的安全护栏、JSON 结构化输出与自动错误重试能力。
tools
Hologres 实例 CPU 使用率异常诊断技能。当用户提到 CPU 打满、CPU 持续高位、Worker CPU 不均、负载诊断、CPU 归因分析、后台 Compaction 干扰等场景时使用。 以 instance_id + 时间窗口为输入,自动完成 CPU 状态分级(持续打满 / 持续高位 / 安全平稳)、四象限归因诊断(宏观定性 / 分布定位 / 查询归因 / 后台任务干扰),并输出结构化的 Markdown 诊断报告与治理行动清单。 云监控数据通过 `hologres metric query` / `hologres metric latest` 获取;元仓与 PG 系统表数据通过 `hologres sql run` 获取,全程享有 hologres-cli 的安全护栏、JSON 结构化输出与自动错误重试能力。
data-ai
Hologres 运维诊断日报生成技能。生成一份包含"诊断结论 + 根因解释 + 行动建议"的每日巡检报告, 覆盖实例健康、可用性、计算资源、SQL性能、成本治理、容量预测六大维度。 触发词:日报、每日巡检、daily report、运维日报、诊断日报、实例巡检报告、每日健康报告。