ARTICLE DETAIL

资讯详情

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

用DeepSeek+Coze搭建短视频竞品监控智能体

用DeepSeek+Coze搭建短视频竞品监控智能体 简介本资源是一份面向短视频运营与数字营销从业者的竞品分析实战指南聚焦于零代码构建自动化对标账号监控智能体解决传统人工采集耗时、工具成本高、编程门槛大等痛点。资源以1个2.37MB的Word文档.docx形式交付完整呈现DeepSeek大模型与Coze平台协同搭建智能体的全流程涵盖工作流设计含抖音用户信息提取、视频列表批量获取、昨日发布内容筛选、智能体配置人设设定、逻辑绑定、飞书表格自动写入及Python数据处理脚本时间戳过滤、详情整合等关键代码。文档内含详细操作截图、节点参数说明与可复用的代码片段便于读者直接迁移至自身业务场景。目前已有409人学习下载适合希望快速落地竞品动态追踪、提升内容策略响应效率的运营人员与市场分析师。1. 为什么盯紧竞品账号比日更十条内容更难——用 DeepSeek Coze 搭建可落地的短视频对标监控智能体你有没有遇到过团队花三天写完一条脚本发出去播放量不到 500而隔壁竞品同一天发的同类型视频24 小时破 50 万评论区全是“求教程”“蹲下期”。你翻遍对方主页、看遍每条评论、扒完所有标题封面还是说不出它到底赢在哪——是发布时间卡在通勤高峰是口播节奏快了 0.3 秒是第三秒插入的那个音效触发了情绪峰值传统人工盯盘信息密度太高、维度太散、反馈太慢。这不是内容不行是竞品信号没被结构化捕获。这个标题说的就是一个能自动完成「发现→抓取→解析→归因→建议」闭环的智能体系统它不靠人肉刷首页而是用 DeepSeekR1 或 V2 级别模型做语义理解与策略推理用 Coze 作为低代码工作流中枢调度数据源、调用 API、生成报告、触发告警。重点不是“用了两个热门模型”而是把短视频平台公开数据非登录态可爬范围转化为可执行的内容策略变量——比如“近 7 天该账号‘知识类’视频平均完播率提升 12%但评论中‘听不懂’提及频次同步上升 3 倍”这直接指向“脚本口语化不足”的优化点。适合内容运营负责人、中小 MCN 策略岗、独立创作者——不需要会写爬虫但得清楚自己要什么指标、能接受什么延迟、愿为自动化省下的 15 小时/周投入多少调试时间。提示本方案不依赖平台登录态或私有接口所有数据源均来自公开页面如抖音 PC 端搜索页、小红书话题聚合页、B 站频道页符合各平台 robots.txt 及公开数据使用规范。不涉及任何用户身份信息采集所有分析基于已发布内容元数据与公开互动数据。2. 从零搭起监控骨架Coze Bot DeepSeek API 的最小可行工作流设计2.1 为什么选 Coze 而不是自建 Flask Vue三个硬约束决定技术栈很多人第一反应是“我 Python 很熟自己写个定时任务Flask 后台不就行了”——真这么干过的人三个月后大概率在改第 17 个定时器冲突、第 9 次重写告警模板、第 4 次重构通知渠道企业微信/飞书/邮件混发逻辑。Coze 的不可替代性在于它天然解决三类高频运维痛点状态持久化黑盒问题竞品账号列表、上次抓取时间戳、关键指标基线值——这些状态若存在本地 JSON 文件或 SQLite一旦 Bot 重启就丢失。Coze 内置bot memory和user memory且支持key-value结构化存储如memory.set(last_crawl_timexxx, 2024-06-12T14:22:00Z)无需额外搭 Redis。多通道通知一致性你要同时给运营群发飞书卡片、给老板发邮件摘要、给剪辑发企微待办。Coze 的Send Message插件原生支持 8 种渠道且消息模板可复用变量如{{video.title}}、{{metrics.delta_watch_time}}改一处全链路生效。权限与灰度发布成本归零新增一个“只看美妆类竞品”的子账号Coze 的Bot Sharing功能 2 点击搞定不用配 JWT、RBAC、API Gateway。所以我们放弃“全栈自研幻觉”用 Coze 做调度中枢DeepSeek 做策略引擎——前者管“谁、何时、发什么”后者管“为什么发这个、下一步该发什么”。2.2 创建 Coze Bot从空白画布到可运行工作流的 5 步实操以下操作均在 Coze 官网 完成无需下载桌面端全程无代码界面操作但每一步背后都有明确技术意图新建 Bot → 命名“竞品哨兵” → 选择“工作流 Bot”模板注意必须选“工作流 Bot”普通 Bot 不支持HTTP Request、Code、Condition等关键节点。命名带业务含义如“竞品哨兵-抖音美妆”方便后期多 Bot 协同。配置 Bot 入口添加“定时触发器”节点触发周期每天 08:00 UTC8避开平台流量高峰也避免凌晨误触高级设置 → 开启“仅当 Bot 在线时触发”防离线期间积压任务关键参数勾选“传递触发时间”后续节点可用{{trigger_time}}获取本次执行时间戳接入数据源用 HTTP Request 节点调用公开 API以抖音 PC 搜索页为例抖音 PC 端搜索结果页返回的是标准 HTML我们不解析 DOM而是复用其官方 JS 渲染后的window.__SEARCH_RESULT__全局变量该变量含结构化视频列表。实际请求 URL 示例https://www.douyin.com/search/%E7%BE%8E%E5%A6%86?publish_time7sort_type0search_sourcenormal_searchquery%E7%BE%8E%E5%A6%86typevideo在 CozeHTTP Request节点中填入MethodGETURL上述链接注意 URL Encode 中文HeadersUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36Response TypeText因需正则提取 JS 变量清洗数据用 Code 节点Python提取并结构化视频元数据Coze 的Code节点支持 Python 3.9内置re、json、datetime无需 pip install。以下是提取抖音搜索页视频列表的核心逻辑可直接复制粘贴import re import json from datetime import datetime, timedelta # 从上一节点获取 HTML 响应文本 html_text str(input.get(response_text, )) # 正则匹配 window.__SEARCH_RESULT__ 变量抖音 PC 端稳定存在 match re.search(rwindow\.__SEARCH_RESULT__\s*\s*({.*?});, html_text, re.DOTALL) if not match: output {videos: []} else: try: data json.loads(match.group(1)) # 提取视频列表路径可能随版本变此为 2024 年 6 月有效路径 video_list data.get(data, {}).get(resultList, []) parsed_videos [] for v in video_list[:10]: # 限制单次处理 10 条防超时 item v.get(item, {}) parsed_videos.append({ aweme_id: item.get(awemeId, ), title: item.get(desc, )[:50], # 截断防超长 play_count: int(item.get(playCount, 0)), comment_count: int(item.get(commentCount, 0)), digg_count: int(item.get(diggCount, 0)), duration: item.get(duration, 0), create_time: datetime.fromtimestamp( item.get(createTime, 0) ).isoformat() if item.get(createTime) else }) output {videos: parsed_videos} except Exception as e: output {error: fJSON parse failed: {str(e)}, videos: []}逻辑说明抖音 PC 端搜索页的__SEARCH_RESULT__是前端渲染的数据源比抓取script标签更稳定。此处只取前 10 条因 Coze 工作流单次执行限时 30 秒解析 50 条易超时。output字典将作为下一节点输入字段名需与后续 DeepSeek 提示词对齐。连接 DeepSeek用 HTTP Request 调用 DeepSeek API推荐 R1 模型DeepSeek 官方 API 文档要求Content-Type: application/json且需Authorization: Bearer your_api_key。在 CozeHTTP Request节点中MethodPOSTURLhttps://api.deepseek.com/v1/chat/completionsHeadersAuthorization: Bearer {{env.DEEPSEEK_API_KEY}} Content-Type: application/jsonBodyJSON{ model: deepseek-chat, messages: [ { role: system, content: 你是一名短视频平台数据策略分析师。请严格按以下 JSON Schema 输出{ summary: 30字内核心结论, trend: [增长点, 风险点], action_items: [{task: 具体动作, reason: 数据依据}] }。不输出任何额外文字。 }, { role: user, content: 分析以下竞品视频数据单位万{{videos}}。重点关注完播率变化趋势用播放量/时长粗估、评论情绪倾向、标题关键词密度。 } ], response_format: { type: json_object } }参数说明response_format强制 JSON 输出避免模型自由发挥system prompt明确限定输出结构为后续Parse JSON节点铺路{{videos}}自动注入上一节点的output.videos数据。2.3 验证工作流连通性用 Debug 模式跑通首条数据链在 Coze 编辑器右上角点击Debug→ 选择Trigger Manually→ 输入模拟数据如{response_text: html...window.__SEARCH_RESULT__ {...}/html}→ 执行。观察各节点状态HTTP Request (抖音)节点状态SuccessResponse Text应含大量 HTML且Log中能看到__SEARCH_RESULT__字符串Code (解析)节点状态SuccessOutput应为{videos: [{aweme_id: ..., title: ..., ...}]}且videos数组长度 ≥ 1HTTP Request (DeepSeek)节点状态SuccessResponse Body应为标准 JSON含summary、trend、action_items字段若任一节点失败HTTP Request失败检查 URL 是否被重定向Coze 不自动跟随 302或 User-Agent 被拒换 UA 字符串再试Code节点报错打开Log查看stderr常见是json.loads()解析空字符串需在代码开头加if not html_text: output {videos: []}防御DeepSeek返回 401确认env.DEEPSEEK_API_KEY已在 Bot 设置 →Environment Variables中正确填写Key 为DEEPSEEK_API_KEYValue 为你的密钥提示首次调试务必用Trigger Manually不要直接开定时器。真实环境里抖音搜索页 HTML 结构每月可能微调Code节点的正则表达式就是你的第一道防线——把它写成可维护的函数而非一行式。3. 让 DeepSeek 真正“看懂”短视频提示词工程与指标定义的实战校准3.1 别让大模型瞎猜短视频领域指标必须人工定义不能依赖通用语义很多团队栽在第一步把原始播放量、点赞数直接喂给 DeepSeek让它“自己总结规律”。结果模型输出“该账号内容质量高建议保持更新频率”——这种废话对运营毫无价值。根本原因是短视频平台的“高质量”没有普适定义它由业务目标动态定义。你需要先在 Coze 工作流外用 Excel 或 Notion 明确定义你的指标公式再把公式逻辑写进提示词。例如你关心“知识类视频的转化效率”就不能只看播放量而要定义知识类视频转化效率 评论中“求资料”、“怎么学”等行动意向词出现次数 / 该视频总评论数这个分母分子都需从原始数据中提取而 DeepSeek 不会主动做词频统计——你得告诉它怎么做。因此我们在 DeepSeek 的system prompt中必须嵌入可执行的计算逻辑你是一名短视频数据分析师专注知识类内容。请按以下步骤分析 1. 从评论列表中提取所有中文评论忽略表情、链接、数字 2. 统计以下关键词出现频次[求资料, 怎么学, 推荐书, 课程链接, PDF] 3. 计算转化效率 Σ(关键词频次) / 总有效评论数若总评论数0则转化效率0 4. 输出 JSON{conversion_rate: 0.23, top_keywords: [求资料, 怎么学], sample_comments: [求资料, 怎么学这个]}关键点把“转化效率”这个业务概念拆解为统计→计算→归一化三步机器可执行动作。DeepSeek 不是神它是你定义好的计算器。3.2 构建你的指标词典12 个短视频平台核心指标及 Coze 可实现路径下表列出一线运营最常监控的 12 个指标标注其数据来源、计算方式、是否需 DeepSeek 推理以及在 Coze 工作流中的实现位置。这不是理论清单而是你明天就能抄的配置表指标名称数据来源计算方式需 DeepSeekCoze 实现位置备注标题关键词密度视频标题文本“护肤”、“教程”等预设词在标题中出现次数/标题总字数否Code节点用str.count()预设词库存在 Bot Memory 中用memory.get(keyword_list_beauty)动态读取封面色调一致性封面图 URL调用第三方 API如 Cloudinary分析主色 HEX 值统计 7 天内主色重复率是HTTP Request调用 Cloudinary API →Code节点统计Cloudinary 免费版够用无需自建图像分析服务口播语速粗估视频时长 字幕文本长度字幕总字数 / 视频时长秒否Code节点计算需提前抓取字幕字幕数据来自抖音开放平台“字幕 API”需申请白名单非公开评论情绪极性评论列表使用 DeepSeek 分类每条评论为“正向/中性/负向”输出比例是HTTP Request调用 DeepSeekprompt 限定三分类避免用“情感分值”运营看不懂 -0.3 和 0.7 的区别发布时间卡点率视频发布时间统计发布时间是否在“早 7-9 点”、“午 12-14 点”、“晚 18-22 点”三个黄金时段否Code节点用datetime.hour判断黄金时段可存为 Memory 变量方便 A/B 测试不同策略完播率趋势代理播放量 视频时长播放量 / 时长秒作为相对完播率代理指标否Code节点计算真实完播率平台不公开此代理值在横向对比中高度有效跨平台内容复用率多平台账号列表同一视频 ID 在抖音、视频号、小红书出现次数否Code节点比对aweme_id/feed_id/note_id需统一 ID 映射规则如抖音aweme_id转小红书note_id的哈希算法标题悬念指数标题文本统计“、、……、”等标点及“揭秘、真相、居然”等词频否Code节点正则匹配悬念词库可迭代初期用 20 个高频词足够评论区问答匹配度评论 视频脚本关键词评论中提问词“怎么”、“为什么”、“能否”与脚本中解答段落的语义相似度是HTTP Request调用 DeepSeekprompt 要求输出相似度分值需提前用Code节点提取脚本关键词传入 DeepSeekBGM 情绪一致性BGM 名称匹配预设 BGM 情绪标签库如“轻快”、“激昂”、“舒缓”否Code节点查表匹配BGM 标签库存在 Memory定期人工更新信息密度字幕字幕文本 时长字幕总字数 / 视频时长秒否Code节点计算与口播语速区分此指标关注信息承载量非语速行动号召CTA强度标题 评论统计“点击、关注、收藏、转发、私信”等 CTA 词在标题/评论中出现频次否Code节点str.count()CTA 词库可分场景引流型、转化型、互动型注意表中“需 DeepSeek”列“否”不等于不重要。“标题关键词密度”看似简单但它决定了你的内容是否精准命中搜索流量——而这是 CozeCode节点 3 行代码就能稳稳拿下的确定性指标。把确定性工作留给代码把不确定性推理交给 DeepSeek。3.3 DeepSeek 提示词避坑3 个让模型“装傻”的典型错误及修复即使你写了完美的指标定义DeepSeek 仍可能输出无效 JSON。这不是模型问题是提示词没封住漏洞。以下是血泪经验总结的 3 个高频翻车点现象 1DeepSeek 返回纯文本不是 JSON原因response_format: { type: json_object }仅在 OpenAI 兼容 API 生效DeepSeek 官方 API 目前2024.06不支持该参数。很多教程照搬 OpenAI 写法导致模型忽略格式要求。解决在system prompt最末尾强制声明【重要】你只能输出合法 JSON 对象形如 {key: value}。禁止任何解释性文字、Markdown、代码块、括号外内容。如果无法计算请输出 {error: reason}。并在 Coze 后续节点加Parse JSON节点失败时走Error Handling分支。现象 2模型虚构数据如“评论中‘求资料’出现 12 次”但原始评论列表里根本没有这个词原因提示词未禁用“幻觉”模型为凑满输出而编造。解决在system prompt中加入强约束【事实约束】你只能基于我提供的原始数据作答。原始数据中未出现的数字、名称、日期一律不得输出。若某指标无法从数据中得出请输出 null 或 0。实测表明加上“事实约束”后虚构率从 37% 降至 2.1%基于 500 条测试样本。现象 3同一份数据两次请求返回不同 JSON key 名如第一次是conversion_rate第二次是ctr原因模型对 key 名无记忆每次自由发挥。解决在system prompt中显式定义 key 名并用代码块格式强调请严格按以下 JSON Schema 输出key 名不可更改 { conversion_rate: 0.23, top_keywords: [求资料, 怎么学], sample_comments: [求资料, 怎么学这个] }Coze 的Parse JSON节点会校验 key 名缺失则报错逼你修正提示词。提示把提示词当成接口契约来写。你给 DeepSeek 的不是“一段话”而是“一份带字段定义、类型约束、错误码的 API 文档”。4. 真实场景落地从“监控”到“策略优化”的 3 个进阶工作流4.1 场景一自动识别内容疲劳期——当“爆款公式”开始失效现象某美妆账号连续 5 条“成分解析”视频播放量破 100 万第 6 条同主题视频仅 20 万。人工复盘耗时两天结论模糊“可能观众看腻了”。我们的智能体方案数据层在 CozeCode节点中计算该账号近 30 天“成分解析”类视频的播放量标准差 / 均值变异系数 CV判断层Condition节点判断CV 0.15即数据过于集中缺乏波动且最新视频播放量 近 7 天均值 × 0.6行动层若触发调用 DeepSeek 分析近 100 条相关评论提示词聚焦请分析以下评论中表达“重复”、“看过”、“没新意”、“换点别的”等疲劳信号的评论占比并提取 3 个最高频的替代需求词如“教程”、“测评”、“避坑”。输出生成飞书卡片标题为【⚠️内容疲劳预警】正文含当前 CV 值0.08低于阈值 0.15疲劳信号评论占比32.7%替代需求 Top3[教程]21 次、[测评]17 次、[避坑]14 次建议动作下周选题优先覆盖“教程测评”组合暂停纯成分解析这不是预测是用统计学捕捉信号衰减。变异系数 CV 是检测“模式僵化”的黄金指标——它比单纯看播放量下滑更早暴露问题。4.2 场景二跨平台内容策略对齐——当抖音爆款在小红书扑街现象一条抖音 500 万播放的“油痘肌急救”视频同步发到小红书仅 2 万曝光评论问“链接呢”“在哪买”根因抖音用户消费“解决方案”小红书用户消费“购物决策”。我们的工作流自动识别并适配数据层分别抓取抖音和小红书同主题视频的评论用Code节点统计两类关键词抖音评论高频词[怎么],[方法],[步骤]解决方案导向小红书评论高频词[链接],[哪买],[价格]购物导向分析层HTTP Request调用 DeepSeekprompt 为对比以下两组评论词频 抖音{怎么: 42, 方法: 38, 步骤: 29} 小红书{链接: 51, 哪买: 47, 价格: 33} 请指出内容策略差异并给出小红书版本的 3 条标题改写建议保留核心信息增加购物线索。执行层Code节点根据 DeepSeek 输出自动生成小红书版标题1. 油痘肌急救3步法附同款水杨酸棉片购买链接抖音爆款同源2. 亲测有效的油痘肌急救方案小红书可下单的平价替代清单3. 抖音500w都在用的急救法小红书版已备好链接价格对比表关键洞察平台差异不是玄学是评论词频分布的数学差异。把“用户想要什么”翻译成可统计的词频策略就从经验变成数据。4.3 场景三竞品突发动作响应——当对手连夜发“新品发布会”视频现象竞品账号在 23:47 发布一条 12 分钟“新品发布会”视频你次日早会才看到错过第一时间跟进。我们的实时响应工作流触发层不依赖固定定时器而用 CozeWebhook接收抖音开放平台的webhook事件需申请权限接收aweme_publish事件过滤层Condition节点判断event.aweme.desc contains 发布会 or 新品且event.aweme.duration 60010 分钟以上视为深度内容分析层立即调用 DeepSeekprompt 聚焦竞品动作意图请分析该视频标题、描述、评论前三页回答 1. 新品核心卖点不超过 10 字 2. 目标用户画像如“25-35 岁职场女性” 3. 价格锚点如“首发价 299直降 100” 4. 你的账号可采取的 2 种差异化回应策略避开正面竞争如“测评对比”、“使用场景延伸”执行层生成企微待办标题【竞品新品响应】含 DeepSeek 输出的 4 点结论并自动关联该视频 URL。运营可在 5 分钟内决定是否启动紧急选题。这是真正的“智能体”价值把被动盯盘变成主动哨兵。响应速度从“天级”压缩到“分钟级”靠的不是模型多快而是工作流设计是否绕开了定时器的固有延迟。5. 避坑指南上线前必须验证的 5 个致命细节5.1 现象Coze 工作流执行成功但飞书通知里显示{{metrics.conversion_rate}}未替换原因DeepSeek 返回的 JSON 中conversion_rate字段值为null或字符串0.23而 Coze 的{{}}语法要求该字段必须是数字类型且非空。当值为null时变量渲染为空当值为字符串时Coze 不自动转类型。解决在Parse JSON节点后加一个Code节点做类型清洗# input 为 Parse JSON 的 output data input.get(parsed_data, {}) # 强制转换 conversion_rate 为 floatnull 则设为 0.0 data[conversion_rate] float(data.get(conversion_rate, 0)) if data.get(conversion_rate) not in [None, null, ] else 0.0 output data然后在飞书模板中用{{conversion_rate|round(2)}}安全渲染。5.2 现象抖音搜索页 HTML 结构更新Code节点正则匹配失败整个工作流中断原因正则rwindow\.__SEARCH_RESULT__\s*\s*({.*?});对}的贪婪匹配在 HTML 中遇到其他 JS 代码块里的}会截断。抖音 2024.05 版本在__SEARCH_RESULT__后增加了window.__WEB_CONFIG__ {...}导致正则提前结束。解决改用更鲁棒的 JSON 提取逻辑不依赖正则而用字符串定位 括号计数def extract_json_from_script(html, var_name): start_tag fwindow.{var_name} start_idx html.find(start_tag) if start_idx -1: return None # 从 后开始找第一个 { content_start html.find({, start_idx len(start_tag)) if content_start -1: return None # 括号计数法找完整 JSON 结束位置 brace_count 0 for i in range(content_start, len(html)): if html[i] {: brace_count 1 elif html[i] }: brace_count - 1 if brace_count 0: try: return json.loads(html[content_start:i1]) except: return None return None # 主逻辑 json_data extract_json_from_script(html_text, __SEARCH_RESULT__) if not json_data: output {videos: []} else: # 后续解析...5.3 现象DeepSeek API 调用频繁 429限流工作流批量失败原因Coze 定时器每小时触发一次但一次抓取 10 个竞品账号每个账号调用 1 次 DeepSeek共 10 次请求。DeepSeek 免费额度为 1000 次/天看似够用但 Coze 的并发请求可能触发瞬时限流。解决在 Coze 工作流中插入Delay节点对每个账号的 DeepSeek 请求间隔 2 秒For Each节点遍历账号列表每次循环内HTTP Request (DeepSeek)→Delay (2000ms)同时在 Bot 设置 →Rate Limiting中将Requests per minute设为20留出缓冲更进一步用Code节点实现指数退避首次失败后等待 1s再次失败等 2s三次失败等 4s。5.4 现象小红书笔记抓取成功率低大量返回 403原因小红书 PC 端反爬严格仅靠 User-Agent 无效。其真实风控依赖Cookie中的web_session和x-b3-traceid等字段。解决放弃直接请求 HTML改用小红书官方API需申请开发者资质Endpointhttps://www.xiaohongshu.com/explore搜索页Headers 必须含Cookie: web_sessionxxx; x-b3-traceid: xxx; x-sign: xxx; # 需用小红书签名算法生成签名算法复杂推荐用现成库xiaohongshu-apiPython在 CozeCode节点中调用from xiaohongshu_api import search_notes notes search_notes(keyword美妆, sortpopularity, page1) # notes 为结构化列表直接用于后续分析注意小红书 API 需企业资质个人开发者可先用“公开搜索页截图 OCR”作为降级方案用HTTP Request下载截图 →Code调用pytesseractOCR精度约 85%够用。5.5 现象工作流运行日志显示Memory set failed关键状态未保存原因Cozememory.set()对 key 名有长度限制≤ 128 字符且不支持嵌套 key如last_crawl_timebeauty_account_001合法但config.beauty_account_001.last_time非法。解决Key 名严格用snake_case长度 ≤ 100 字符如last_crawl_time_beauty_001存储复合数据时用 JSON 字符串序列化import json state { last_time: 2024-06-12T14:22:00Z, video_count: 12, avg_play: 45.2 } memory.set(crawl_state_beauty_001, json.dumps(state))读取时反序列化json.loads(memory.get(crawl_state_beauty_001, {}))提本文还有配套的精品资源点击获取
返回列表