ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AI Skill实战:把TikTok竞品分析做成可复用的分析流水线

AI Skill实战:把TikTok竞品分析做成可复用的分析流水线 最近身边做跨境生意的朋友问了我一个问题能不能用 AI 帮我做 TikTok 竞品分析一开始我以为是让我开个对话、丢几个账号链接让它“看看”但真跑起来发现完全不是这么回事——没有稳定的分析框架、没有指标口径、连输出格式都每次不一样。折腾了一段时间之后我干脆把整个分析流程做成了一个 skill一次性解决了“每次重新组织提示词”“输出没法沉淀”“分析深度全看运气”这三个最头疼的问题。这篇文章不是教你去网上复制某个现成的 skill而是带你把“TikTok 竞品分析”这个任务从零拆解、定义、实现成一个可复用的 skill并附上我在真实账号上跑过的案例和踩坑记录。无论你用的是 Claude Code、Codex、Cursor 还是其它支持 skill 的 Agent 工具思路都是通用的。1. 为什么是 Skill竞品分析不是一次性提问而是一条流水线1.1 直接用对话分析竞品问题出在哪我在刚开始尝试的时候走了绝大多数人都会走的弯路直接在对话框里说“帮我看一下 xxx 这个账号分析一下它的内容策略”。看起来没什么问题AI 也确实能给出洋洋洒洒一大篇分析。但当你把同一个问题抛给不同人看或者隔几天再跑一次问题就暴露了每次都要重新描述指标第一次说“看视频时长”第二次忘了提第三次提了又换了另一种说法输出的口径完全不一致。输出格式不稳定上次是表格这次是分点下次是段落。你想拿去做周报对比根本没法横向对齐。深度全靠运气好的时候能分析爆款逻辑差的时候就是一通“内容质量不错、节奏把握很好”的废话。数据边界不清晰AI 不知道哪些数据是你提供的、哪些是它编的经常一本正经地给出“预估互动率 8%”这种没有任何依据的数字。这些问题深挖下来本质上是一个共同原因你让一个聪明的助手去做一件流程还没有被定义清楚的事。而 skill 解决的正是“把流程定义清楚”这件事。1.2 Skill 和普通提示词到底差在哪我用一个类比帮你理解普通提示词像你叫实习生“你去看看竞争对手在干嘛给我说说”skill 像你递给他一本操作手册里面写清楚了“看哪几个页面、每个页面记录什么字段、填到什么表格里、最终报告长什么样”再配上几个现成的数据处理脚本。两者的效率和可控性差了一个数量级。具体差异可以看这张表维度普通提示词Skill复用方式每次复制粘贴容易变形固定文件一次加载随时调用输出结构不固定随对话上下文变化SKILL.md 中定义死的 JSON Markdown 报告数据接入依赖模型自行想象可配置脚本读取公开数据或人工导出表格执行步骤自由发挥不可控按 SKILL.md 中的步骤顺序工作清晰可见指标口径每次对话可能不一致由 reference 中的指标表统一定义团队协作私有对话难以共享一个目录复制即用版本可管理这也是为什么我后来坚定地把这套分析流程做成 skill它本质上是一条“分析流水线”不是一段“聊天话术”。1.3 为什么竞品分析场景天然适合做成 Skill不是所有任务都适合封装成 skill但 TikTok 竞品分析几乎是为 skill 量身定做的输入边界清晰目标账号、对比账号、观察周期三样东西说出来就行。指标稳定粉丝量、发布频率、均播量、点赞中位数、选题类型、是否挂车……这些口径在一个阶段内不会频繁变化。重复频率高只要你的账号还在运营竞品分析就是每月甚至每周都要做的事情。决策链路长分析结果要反复被比对、引用因此输出格式必须稳定。这四点凑齐后把分析流程固化进 skill 带来的收益会非常大。我之前帮朋友手动做一次完整竞品分析至少要半天现在跑一遍 skill 加人工核验大概一个小时内就能拿到可以拿去开会的报告。2. 分析框架先行把指标、输入源和报告模板先钉死很多教程上来就让写 SKILL.md我建议反过来先把业务分析框架定清楚再谈怎么用 skill 实现。框架错了AI 再聪明也只是把错误框架执行得很快。2.1 输入层skill 需要哪些信息在提笔写代码之前我先给 skill 定义了三种输入来源目标账号必填要分析的那个账号的公开主页地址或用户名。这是整个分析的起点。竞品账号列表可选一批用来横向对比的账号。如果没有提供skill 会根据目标账号所在领域的常见关键词给出推荐对比对象。观察周期可选默认回看最近 30 天。如果你在做大促前后对比可能需要设置 60 天或 90 天。这里有一个很关键的设计原则输入必须最少化口径必须最大化地放在 skill 内部。你给一个人用的时候不需要让他每次都选一堆参数不给数据的时候skill 应该知道按默认口径工作。2.2 指标层什么数据值得记什么数据忽略我把 TikTok 竞品分析需要的指标分成三个层级层级指标采集方式说明基础层粉丝总量、获赞总量、视频总数公开主页可见判断账号体量级内容层发布频率条/周、均播量、点赞中位数、评论数、转发数公开视频数据判断内容受欢迎程度选题层内容主题类型、标题句式、开头三秒钩子类型、BGM/话题标签使用人工或脚本拆解视频判断内容策略套路商业层是否挂电商链接、是否挂车、主页是否导流到独立站、有无广告合作痕迹公开页面可见判断变现路径不是我故意啰嗦而是经过几次失败后发现缺少统一指标表是 skill 输出不专业的头号原因。模型自己“觉得重要”的指标经常会变而业务方关心的其实就那几个。所以我在 skill 中加了一个reference/metrics_table.csv把每个指标的名称、定义、取值规则、数据来源全部列进去。模型执行时先读这张表再按表里定义的字段去采集数据。这样无论运行多少次指标口径都不会漂移。2.3 输出层固定成 JSON Markdown 双格式分析类 skill 最常见的坑是只输出一段文字报告导致后续没法做数据汇总。我做了个决定skill 同时输出两种东西。第一份是标准化 JSON字段固定为{ target_handle: fashion_test, analysis_period: 2025-03-01_to_2025-03-31, basic_metrics: { followers: 1520000, total_likes: 8900000, total_videos: 512 }, content_metrics: { videos_published: 22, avg_view_per_video: 310000, median_likes: 8800, median_comments: 310, median_shares: 1400 }, topic_breakdown: [ {topic: 搭配教程, count: 9, share: 0.41, best_view: 1200000}, {topic: 开箱试穿, count: 7, share: 0.32, best_view: 860000}, {topic: 日常Vlog, count: 6, share: 0.27, best_view: 450000} ], business_clues: { has_shop_link: true, has_product_tagging: true, external_link: https://example-store.com }, summary: …… }第二份是给人写的 Markdown 报告。JSON 负责“数据入表”Markdown 负责“人看懂”。你完全可以把 JSON 直接丢给下一个环节做周报聚合也可以把 Markdown 丢给老板看。两边数据都来自同一套字段不会出现“表格一个数、报告另一个数”的尴尬。我当时写这个结构考虑过要不要加“评分卡”比如给竞品打一个综合竞争力分。后来放弃了原因稍后放在避坑部分细说——因为你没法给这个分数给出一个经得起追问的解释而竞品分析里最怕的就是不解释的结论。3. 编写这个 SkillSKILL.md 结构和配套脚本框架定好了接下来进入写代码环节。下面给出的是我在本地跑通的完整结构你拿去可以直接改造。3.1 Skill 的目录结构我把这个 skill 放在 Agent 的 skills 目录下路径大概是tiktok-competitor-analysis/ ├── SKILL.md ├── scripts/ │ ├── collect_data.py │ ├── build_report.py │ └── utils.py └── reference/ ├── metrics_table.csv └── example_report.md每个文件的作用SKILL.md技能说明书包含触发条件、输入参数、执行步骤、输出要求。这是 Agent 读到的第一份文件。reference/模型在运行时可以查阅的静态参考资料。metrics_table.csv定义指标口径example_report.md是一份示例报告让模型知道“写成什么样才算合格”。scripts/真正干活的代码。collect_data.py负责数据采集或者读取人工导出的表格build_report.py负责把 JSON 渲染成 Markdown 报告。这里要特别说一下为什么把指标表单独放到reference而不是写死在SKILL.md里。早期版本我确实写死了后来发现一个实际问题指标表经常要调整比如新增“直播场次”指标如果写死在 SKILL.md 里每次都要改技能说明还容易改出格式错误。拆成 CSV 之后运营同学拿 Excel 改表就行不用动技能主文件整个 skill 稳定也不容易被碰坏。3.2 SKILL.md 的核心写法SKILL.md 不需要多宏大关键是让模型一眼看清三件事什么时候用这个技能、每一步做什么、输出什么样。一个简化但可用的版本是--- name: tiktok-competitor-analysis description: 对 TikTok 目标账号及竞品账号做内容与商业策略分析产出结构化报告。 input_schema: type: object properties: target_handle: type: string description: 目标账号公开主页的用户名例如 fashion_test competitor_handles: type: array items: type: string description: 要一起对比的竞品账号用户名列表可选 period_days: type: integer description: 分析时间窗口默认 30 天 required: - target_handle ---TikTok 竞品分析 Skill执行步骤读取 reference/metrics_table.csv确认本次需要采集的指标口径根据 target_handle 和 competitor_handles 采集公开可见数据数据来源以人工导出表格或公开页面为准将数据换算为统一 JSON 格式basic_metrics基础账号指标content_metrics内容表现指标topic_breakdown选题分布business_clues商业变现线索使用 scripts/build_report.py 生成 Markdown 报告检查输出中每个字段是否有数据来源没有来源的字段标注 unavailable禁止编造输出要求必须同时输出 JSON 数据和 Markdown 报告不允许只输出其中一种。JSON 字段必须与 metrics_table.csv 中定义一致报告结尾需要写明数据来源与时间范围。在实际使用的 agent 工具中skill 会被自动目录扫描发现。它识别 SKILL.md 的规则各不相同但都很简单把 skill 目录放到约定的 skills 文件夹下即可不用改代码。值得花几分钟看一下自己用的 agent 认为哪个字段是 name、哪个是 description以免技能无法被自动加载。3.3 数据采集两条路先走简单的放弃“从公开页面强行抓取所有数据”之后我其实给 skill 设计了两个数据通道。通道 A人工导出表格推荐首发请运营或商务同事把竞品账号的公开数据导到一个 Excel 里字段和 metrics_table.csv 对应。这样做有三个好处数据来源最准确人工对着公开页面填数字不存在模型臆造空间。执行最快不需要维护爬虫不需要处理页面改版。最合规完全依赖平台公开信息。有人在群里问“那不还是要人工吗”我说对但人工只承担“搬运工”角色分析、归纳、写报告这种烧脑的活儿全交给 skill。以前人工搬运完之后还得自己想怎么分析现在搬完就完成任务了人效提升是很明显的。通道 B公开页面解析脚本进阶如果账号数量多、人工成本高可以尝试用脚本解析公开主页。注意只处理用户登录前就能看到的公开信息并且控制请求频率。下面是一个脚本雏形# scripts/collect_data.py # 仅获取公开主页的普通用户可见信息。 # 用途为 skill 提供结构化数据源不依赖任何非公开接口。 import json import time import requests USER_AGENT Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36 def fetch_public_profile(handle: str) - dict: # 只请求公开主页的普通可见内容。 url fhttps://www.tiktok.com/{handle} resp requests.get(url, headers{User-Agent: USER_AGENT}, timeout15) resp.raise_for_status() html resp.text # 页面结构可能随时调整这一段仅示意需要按实际结构调整容错逻辑 profile { handle: handle, followers: 0, total_likes: 0, total_videos: 0, } # 从公开 HTML 中解析关键字段找不到就保持 0 并做标记。 # 实际项目中我会用结构化数据解析库而不是手撸正则 # 这里省略细节保留主流程。 return profile def main(target_handle: str, competitor_handles: list[str]) - dict: result {} for handle in [target_handle] competitor_handles: result[handle] fetch_public_profile(handle) time.sleep(2) # 控制请求频率别给公开页面造成访问压力 return result if __name__ __main__: demo main(fashion_test, [competitor_a, competitor_b]) print(json.dumps(demo, ensure_asciiFalse, indent2))这段代码我特意不写“直接用 JavaScript 渲染后的完整数据”因为那部分需要依赖无头浏览器牵扯到的技术和维护成本比较高不推荐大家在小项目里硬上。优先级永远是人先走通流程脚本做辅助而不是反过来。3.4 报告生成用脚本把 JSON 渲染成漂亮报告数据拿到之后build_report.py负责做一件事读 JSON渲染 Markdown。核心逻辑简单清晰# scripts/build_report.py import json import sys def render_markdown(data: dict) - str: lines [] lines.append(f# TikTok 竞品分析报告{data[target_handle]}) lines.append(f统计周期{data[analysis_period]}) lines.append() lines.append(## 基础账号指标) bm data[basic_metrics] lines.append(f- 粉丝 {bm[followers]:,}总获赞 {bm[total_likes]:,}视频总数 {bm[total_videos]}) lines.append() lines.append(## 内容表现) cm data[content_metrics] lines.append(f- 周期内发布 {cm[videos_published]} 条视频均播 {cm[avg_view_per_video]:,}) lines.append(f- 点赞中位数 {cm[median_likes]:,}评论中位数 {cm[median_comments]:,}) lines.append() lines.append(## 选题分布) for topic in data.get(topic_breakdown, []): lines.append(f- {topic[topic]}{topic[count]} 条{topic[share]:.0%}最高播放 {topic[best_view]:,}) lines.append() lines.append(## 商业线索) bc data[business_clues] lines.append(f- 独立站链接{bc.get(external_link, 无)}) lines.append(f- 视频挂商品{是 if bc.get(has_product_tagging) else 否}) lines.append() lines.append(f## 小结) lines.append(data.get(summary, 暂无)) return \n.join(lines) if __name__ __main__: report_data json.load(open(sys.argv[1], encodingutf-8)) print(render_markdown(report_data))这个脚本看着简单但它在实际使用中有个很重要的作用它让“报告结构”这个事不再依赖于模型的临场发挥。模型负责分析和提炼脚本负责排版。两边分工明确谁也不会越界。4. 用三个真实账号验证这个 Skill写完之后我拿手头真实在运营的几个账号跑了测试。为了不涉及隐私信息这里统一用类目代替具体账号名但数据字段和分析逻辑都是真的。4.1 案例一服装快时尚类账号这是一个粉丝量在百万级的服装类账号。我提供了它的公开主页链接和最近 30 天数据表skill 跑出来的核心结论是该账号周期内发布 22 条视频均播 31 万但播放量波动极大中位数仅有 8.8 万。选题分布中“搭配教程”类占比 41%贡献了大多数高播放内容。商业线索主页挂独立站链接、视频有商品标记说明是一条完整的“内容种草 独立站转化”路径。内容规律高播放视频的共性集中在“前三秒直接展示搭配前后对比”而非剧情或口播。这条结论直接指导了运营决策——选题重心从 Vlog 转回搭配教程并统一强化开头对比的钩子。用这个 skill 跑一次的价值完全超过了写 skill 本身花费的时间。4.2 案例二探店/本地生活类账号第二个案例是粉丝量 40 万左右、主要发布城市探店内容的账号。跑出来的结论有几个亮点发布频率从每周 7 条降到每周 3 条但单条均播反而上升说明运营在从量转向质。高互动视频的共性不是“食物拍得好看”而是“价格信息明确 环境实拍 地址指引”。商业层没有挂车也没有独立站链接变现大概率依赖线下的商家合作。对比建议模型给出如果考虑做本地商家引流可以在视频中挂店铺定位增强可追踪性。这类账号的亮点在于**“商业线索弱”并不能简单等同于“变现能力差”**。skill 在输出里专门标注了“未发现线上导流痕迹”避免了分析报告对用户产生误导。4.3 案例三美妆教程类账号第三个案例是一个中腰部美妆教程账号粉丝量十几万。这个账号比较特殊点赞中位数与粉丝量比值明显高于前两个案例说明粉丝粘性很强。选题高度垂直“日常通勤妆”一条下方留言区常有“求链接”“求教程”等关键词。评论区高频词被 skill 提取出来后发现大量用户主动询问产品来源但该账号还没有挂商品链接。输出给了两条可落地建议一是把高频询问产品整理成合集视频二是考虑接入电商链接承接存量需求。这三个案例跑下来我对 skill 的判断是它不能替代人的业务判断但能把“该看什么、该记什么、该对比什么”这些事固定下来让人专注在真正需要经验的环节。这才是做这个 skill 最大的回报。5. 运行中踩过的坑与边界处理再好的 skill 也是在真实数据里滚出来的。测试中我确实踩了不少坑有几个值得写下来希望帮你少走弯路。5.1 “AI 臆造数据”是最危险的坑第一个版本跑完分析报告后我拿结果和原始数据做核对发现模型竟然在没有数据的情况下写出了“预计互动率 7.2%”还分析了“为什么互动率下降”。这个数字完全没有任何来源是模型顺着语气推出来的。把它直接给业务方看会造成很大的误导。后来我在 SKILL.md 里加了一条硬性规则任何字段如果数据源中没有对应值一律写“unavailable”不允许通过预测或估算补位。没有数据填没有比填一个漂亮数字重要一百倍。5.2 冷启动账号根本无数据可分析有个朋友兴冲冲地拿一个新账号给我跑结果 skill 一顿操作后输出全是“unavailable”因为该账号只有 5 条视频、粉丝几百“分析”无从谈起。后来我调整了处理策略当数据量小于 10 条视频时skill 自动切换为“单条视频拆解模式”逐帧拆解视频结构输出的重点从“账号规律”变成“单条视频的可借鉴点”。宁可少给结论也不要硬编规律。5.3 时间窗口不同对比结果就完全没意义同样是月级别数据如果两个账号的统计周期一个是大促期一个是日常期放在一起对比会得出完全离谱的结论。我在 SKILL.md 中强调必须明示每个账号的数据时间范围对比矩阵中一并呈现由人来决定是否做“同期对比”。5.4 合规边界只碰公开可见的数据最后这一点很重要。做竞品分析很容易滑向“抓取一切能抓的数据”的思路但平台条款对自动化数据采集有明确限制。我的原则是只处理登录前就能看到的公开信息。不鼓励、不支持任何绕过平台限制的抓取方式。优先使用人工导出表格脚本只用于减少重复劳动。控制请求频率不给公开页面造成访问压力。遵守这个边界不只是为了合规也是为了让分析结果更加稳定可靠。绕过限制获取的数据随时可能失效还容易带来法律风险真犯不上为一次竞品分析搭进去。测完这三个案例之后我又把这个 skill 分享给了两个做电商的朋友。一个人拿去分析自己的竞品类目另一个把它改成了 YouTube 版本——把解析脚本里的公开页面地址换掉就跑了。这也是我认为做这类 skill 最有意思的地方分析框架一旦沉淀下来换平台、换品类都只是换数据源的问题。后续我还在考虑把“视频标题句式提取”和“评论区高频词聚类”加进去让基于文本的分析更深一步。如果你也在做类似的事情不妨从最核心的指标表开始先把分析口径定住再慢慢往里面加能力。
返回列表