移植自 mac-agent-os 的 mediacrawler_adapter:不起子进程、不开页面,用浏览器里那份
登录态直接调抖音 Web 接口。产物键名照抄 store/douyin,所以 ingest 那条链路一个字不用改。
**目前能用的(真环境实测,非推断)**:
profile/other : 200, 7075 字节 —— 博主主页指标(粉丝/获赞/作品数/昵称)
aweme/detail : 200, 45425 字节 —— 单条作品详情(含点赞/评论/收藏/分享)
**目前不能用的:作品列表 `aweme/post`。** 两个互相独立的原因:
1. 这个接口被抖音单独升级成了真校验:不带 x-tt-argus 回 403「Uifid Not Found」,
带上 dummy 值回 200 + **空 body**。也就是说「头在不在」骗得过,「真校验」过不了。
同一套头打 profile/other 和 aweme/detail 都是通的 —— 抖音是挑着接口加保护的,
挑中的恰好是「批量拉作品列表」这个最敏感的动作。
2. 改走页面截获也不行:CDP 浏览器打开博主主页会落到「验证码中间页」(当天大量探测的
代价,过几小时要重测)。
所以现在的边界是:**已知作品的指标刷新能做,自动发现新作品做不了**。
**排查中控住变量后得到的两条事实**(都写进注释了):
· `Accept` / `Accept-Language` / `Referer` 才是主页接口能返回真数据的原因 —— 只有
UA+client hints+Cookie 时是 200 但仅 121 字节的空壳,补上这三个头变 7074 字节。
(我先前猜的 sec-ch-ua 不是关键。)
· 因此 UA 与 client hints 必须**成套地取自同一个浏览器**,所以 BrowserIdentity 一次
从 CDP 取齐 cookie + UA + hints,而不是各自写死。
「200 + 空 body 必须当场报错」也是刻意写死的:放过去它会在下游变成「这个博主没作品」,
把一次失败伪装成一条正常结果 —— 爬虫那条路正是这么栽的,还被翻译成「账号被封」。
测试 +11:cookie 解析、请求头成套性(含 uifid 缺失/回退)、产物键名与 store 对齐、
以及 _get 的三条失败路径(空 body / 403 带网关原话 / 正常返回)。
19 KiB
19 KiB
Matrix v6.0 产品规划 —— 全平台社交账号智能运营系统
版本: v6.0-draft | 日期: 2026-06-12 基于: AgentOS 联邦多机协同 + PlatformOps 架构 目标: 从"养号工具"升级为"全平台账号智能运营中台"
一、现状评估
当前能力
| 模块 | 状态 | 说明 |
|---|---|---|
| 抖音养号 | ✅ 生产可用 | 浏览/点赞/收藏/评论/搜索,93% 成功率 |
| 小红书养号 | ✅ 生产可用 | 浏览/点赞/收藏/搜索/关注,100% 成功率 |
| 多账号并行 | ✅ 生产可用 | asyncio.gather + 窗口分散 |
| 蓝图编排 | ✅ 生产可用 | JSON 定义操作序列 |
| mc CLI | ✅ 生产可用 | 统一命令入口 |
| 联邦状态上报 | ✅ 运行中 | guardd → cross_machine/data/matrix/ |
| Peekaboo 截图 | ✅ 可用 | MCP 截图调试 |
缺失能力
| 缺失 | 关键程度 | 说明 |
|---|---|---|
| 短信验证码自动接收 | P0 | 登录/恢复账号必备 |
| 评论语料库 | P0 | 智能生成评论内容 |
| 定向评论任务 | P0 | 给指定 URL 视频发评论 |
| 评论互动(追评/回复) | P1 | 与作者或其他用户互动 |
| 定时错开发布 | P1 | 时间策略避免风控 |
| 账号健康度 | P1 | 限流/风控预警 |
| 数据看板 | P1 | 账号运营数据可视化 |
| 知乎/B站/微博支持 | P2 | 扩展平台 |
二、整体架构设计
┌─────────────────────────────────────────────────────────────────────┐
│ Matrix 运营中台 v6.0 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ 养号引擎 │ │ 评论系统 │ │ 任务中心 │ │ 联邦协同层 │ │
│ │ (现有) │ │ (新增) │ │ (新增) │ │ (guardd) │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────────┬─────────┘ │
│ │ │ │ │ │
│ ┌────▼─────────────▼─────────────▼──────────────────▼──────────┐ │
│ │ PlatformOps 操作层 │ │
│ │ DouyinOps │ XhsOps │ ZhihuOps(future) │ ... │ │
│ └───────────────────────────┬──────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────▼──────────────────────────────────┐ │
│ │ Camoufox 浏览器引擎 + CDP │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ SMS 验证 │ │ 语料库 │ │ 知识库 │ │ L2 记忆(facts) │ │
│ │ 模块 │ │ 引擎 │ │ 策略库 │ │ 账号健康数据 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
三、模块详细设计
3.1 短信验证码模块(P0)
目标: 自动接收短信验证码,完成账号登录/恢复/验证
现有基础: 03_knowledge/40_references/matrix-sms-verification.md 已有 API 方案
养号脚本需要验证码
↓
ApiSMSHandler.wait() 启动轮询
↓ 每3秒拉一次API (wx.tyhtak.com / 其他供应商)
检测到新短信 → 提取验证码(4-6位数字)
↓
返回给登录流程自动填入
↓
登录完成后标记验证码已使用
设计要点:
- 抽象
SMSHandler基类(已存在matrix_modules/account/sms/base.py) - 支持多供应商切换(tyhtak / 其他API / 自建短信猫)
- 手机号关联账号配置(
accounts.override.yaml中的 phone 字段) - 超时 120 秒,失败告警
- 验证码消耗后标记,避免重复使用
配置示例:
# config/sms.yaml
sms:
provider: tyhtak
api_key: "gtmsg2026"
poll_interval: 3
timeout: 120
3.2 评论语料库系统(P0)
目标: 生成真实、多样、上下文相关的评论内容
现有基础: scripts/config/comment_corpus.yaml 已有基础语料
架构:
┌─────────────────────────────────────────────────────────────┐
│ 评论语料库引擎 │
│ │
│ ┌────────────┐ ┌────────────┐ ┌──────────────────────┐ │
│ │ 静态语料池 │ │ AI 生成器 │ │ 上下文追踪器 │ │
│ │ (预设模板) │ │ (本地LLM) │ │ (已发评论/已评视频) │ │
│ └─────┬──────┘ └─────┬──────┘ └──────────┬───────────┘ │
│ │ │ │ │
│ └───────┬───────┴────────┬───────────┘ │
│ ▼ ▼ │
│ ┌────────────┐ ┌────────────┐ │
│ │ 选择策略 │ │ 安全过滤 │ │
│ │ (随机/轮询)│ │ (敏感词/重复)│ │
│ └────────────┘ └────────────┘ │
└─────────────────────────────────────────────────────────────┘
语料分层:
| 层级 | 来源 | 用途 | 特点 |
|---|---|---|---|
| L1 静态模板 | 人工预设 | 日常普通评论 | "学到了"、"真不错"、"支持" |
| L2 关键词模板 | 按视频类型匹配 | 相关评论 | 科技→"技术流"、美食→"看着就好吃" |
| L3 AI 生成 | 本地 oMLX + Qwen | 精准评论 | 根据视频标题/描述生成 |
| L4 上下文延续 | 追评/回复 | 互动 | 基于已有评论内容 |
存储:
# matrix_modules/comment/corpus.yaml
corpus:
douyin:
- text: "学到了"
tags: [通用, 知识]
weight: 0.3
- text: "这个厉害了"
tags: [通用, 技术]
weight: 0.2
xiaohongshu:
- text: "好实用呀"
tags: [通用, 教程]
weight: 0.3
3.3 定向评论任务系统(P0)
目标: 接收指定 URL,让所有账号去该视频下评论,时间错开、内容不同
工作流程:
用户/智能体下发任务:
"给这些视频发评论: [url1, url2, url3]"
↓
任务中心解析 →
提取视频ID → 分析视频内容/标题 → 确定评论策略
↓
生成评论计划 →
每个账号 → 分配不同的评论内容 → 设置时间偏移
↓
任务写入 cross_machine/tasks/ →
持久化到 cross_machine/data/matrix/comment_tasks/
↓
各机器 guardd 检测到新任务 →
按计划执行评论(时间错开 5-30 分钟)
↓
完成后上报结果 →
cross_machine/data/matrix/comment_results/{uid}.json
任务格式:
{
"task_id": "comment_20260612_001",
"url": "https://www.douyin.com/video/xxx",
"platform": "douyin",
"type": "batch_comment",
"strategy": "diverse",
"accounts": ["douyin_01", "douyin_02"],
"time_window": {"start": "10:00", "end": "12:00"},
"min_interval": 300,
"assigned": {
"douyin_01": {"text": "讲得真好,学到了", "time": "10:05"},
"douyin_02": {"text": "这个角度很新颖", "time": "10:12"}
},
"context": {"video_title": "xxx", "author": "yyy"},
"status": "pending"
}
3.4 评论互动系统(P1)
目标: 追评、回复作者回复、与其他用户互动
场景:
- 发布评论后 → 如果作者回复了 → 自动追评回复
- 其他用户回复了我们的评论 → 选择性回复
技术方案:
- 评论发布后记录
{comment_id, video_id, account} - 定时检查是否有新回复(通过评论区 DOM 或 API)
- 检测到回复 → 加载回复内容 → 确定回复策略 → 回复
频率控制:
- 每天最多回复 5 条/账号
- 回复间隔至少 30 分钟
- 回复内容需与原文相关
3.5 账号健康度与反检测(贯穿全局)
风险维度:
| 风险 | 检测方式 | 应对措施 |
|---|---|---|
| 操作频率过高 | 各操作 rate limit | 按分钟/小时/天三级限速 |
| 行为模式单一 | 蓝图随机化 + wait_jitter | 操作间隔随机化 |
| 内容重复 | 语料库去重 | 同一内容不重复使用 |
| 登录地点异常 | IP 检测 | 静态住宅 IP / 代理 |
| 设备指纹一致 | BrowserForge | 每账号独立指纹 |
| 评论时间集中 | 时间策略 | 错开 5-30 分钟 |
| 评论内容异常 | AI 质量检测 | 敏感词过滤 + 长度变化 |
账号健康度评分:
class AccountHealth:
def score(self, account_id) -> dict:
return {
"overall": 85, # 0-100
"risk_level": "low", # low/medium/high
"metrics": {
"daily_ops": 45, # 今日操作数
"op_freq": 0.8, # 操作频率 vs 安全阈值
"comment_rate": 0.3, # 评论占比
"repeat_rate": 0.05, # 内容重复率
"fail_rate": 0.1, # 操作失败率
"days_active": 15, # 连续活跃天数
},
"alerts": [] # 预警列表
}
3.6 联邦协同(增强现有 guardd)
新增 State 类型:
# cross_machine/data/matrix/{uid}.json 新增字段
{
"plugin": "matrix",
"version": "6.0.0",
"machine_uid": "...",
"hostname": "...",
"timestamp": "...",
"data": {
"注册表账号": 4,
"本机": 4,
"本机已启用": 4,
"本机已登录": 4,
"各机器": {...},
"今日评论": 12, # 新增
"今日互动": 3, # 新增
"账号健康度": { # 新增
"douyin_test": {"score": 85, "alerts": []}
},
"待处理任务": 2, # 新增
"任务队列": [ # 新增
{"id": "comment_xxx", "type": "batch_comment", "status": "pending"}
]
}
}
3.7 定时策略引擎
核心规则:
- 养号时间分布:分散在 8:00-22:00,每次 15-30 分钟
- 评论间隔:同一视频不同账号间隔 5-30 分钟
- 跨视频间隔:同一账号不同视频间隔 10-60 分钟
- 账号休息日:每周 1-2 天静默
策略配置:
strategy:
daily:
time_windows: ["09:00-09:30", "14:00-14:30", "20:00-20:30"]
round_per_window: 2
interval_between_rounds: 45-90
comment:
min_interval: 300 # 同账号评论最短间隔(秒)
max_daily: 10 # 单账号每天最多评论
batch_spread: 1800 # 同一批任务最大散布时间(秒)
rest_day:
probability: 0.15 # 每天有 15% 概率静默
3.8 监控看板(P1)
在现有 10_dashboard 基础上扩展 Matrix 插件:
class MatrixPlugin(DashboardPlugin):
# 新增视图
def get_sub_views(self):
return [
{"key": "overview", "label": "总览"},
{"key": "accounts", "label": "账号管理"},
{"key": "daily_ops", "label": "今日运营"},
{"key": "comments", "label": "评论任务"},
{"key": "health", "label": "健康度"},
{"key": "blueprints", "label": "蓝图管理"},
]
四、实施路线图
Phase 1(2-3天)—— 基础能力补齐
├── SMS 验证码模块 → 对接现有 API
├── 静态语料库建立 → 从现有 comment_corpus.yaml 扩展
└── 评论任务原型 → mc comment 子命令
Phase 2(3-5天)—— 评论系统
├── 定向评论任务(指定 URL → 多账号评论)
├── 时间策略引擎(错开时间)
├── AI 生成评论(对接本地 oMLX)
└── 跨机器任务分发(cross_machine/tasks/)
Phase 3(3-5天)—— 互动系统
├── 追评(作者回复后自动回复)
├── 评论上下文追踪
├── 回复其他用户评论
└── 互动频率控制
Phase 4(持续)—— 平台扩展
├── 知乎平台接入(ZhihuOps)
├── B站平台接入(BilibiliOps)
├── 微博平台接入(WeiboOps)
└── 通用平台框架
Phase 5(持续)—— 智能优化
├── 行为策略自动调优(基于健康度反馈)
├── 评论质量评估
├── 账号休眠/恢复策略
└── 联邦协同决策(多机器共享策略)
五、现有项目参考
5.1 同类项目分析
| 项目 | 优势 | 不足 | 可借鉴 |
|---|---|---|---|
| MediaCrawler | 多平台采集,代码开源 | 无养号运营,无评论系统 | 平台适配模式 |
| 水军SaaS平台 | 评论任务分发成熟 | 云端不安全,封号风险高 | 任务队列模型 |
| OpenClaw | 浏览器自动化,反检测 | 没有养号业务逻辑 | 反检测指纹技术 |
| TikOmni | TikTok 自动化完整 | 付费,不开源 | 商业产品思路 |
5.2 AgentOS 独特优势
| 能力 | 其他项目 | AgentOS + Matrix |
|---|---|---|
| 部署方式 | 单机/云端 | 多机联邦,本机安全 |
| 账号安全 | 明文上传 | 配置在 agent-local,不同步 |
| 智能决策 | 固定规则 | 智能体+知识库+记忆系统 |
| 数据积累 | 无/外部 | L2 facts.db + 知识库沉淀 |
| 跨机协同 | 无 | guardd + cross_machine |
| 平台扩展 | 需重写 | PlatformOps 接口,新增 ops 文件 |
六、项目目录结构规划
05_tools/07_matrix/
├── mc ← CLI 入口
├── install.sh ← 新机部署
├── README.md / TOOL.md / MODULE.md
├── blueprints/ ← 任务蓝图
│
├── scripts/
│ ├── mc/ ← CLI 引擎
│ │ ├── cli.py
│ │ ├── engine.py ← 养号引擎
│ │ ├── runlog.py ← 运行日志
│ │ └── corpus.py ← 语料库(现有)
│ │
│ ├── ops/ ← 平台操作层(现有)
│ │ ├── _base.py
│ │ ├── douyin_ops.py
│ │ └── xhs_ops.py
│ │
│ ├── matrix_modules/ ← 功能模块
│ │ ├── comment/ ← 评论系统(新增)
│ │ │ ├── __init__.py
│ │ │ ├── corpus.py ← 语料库管理
│ │ │ ├── generator.py ← AI 评论生成
│ │ │ ├── task.py ← 评论任务队列
│ │ │ ├── scheduler.py ← 时间策略
│ │ │ └── tracker.py ← 评论上下文追踪
│ │ │
│ │ ├── sms/ ← 短信验证(新增)
│ │ │ ├── base.py ← 抽象基类(已有)
│ │ │ ├── tyhtak.py ← tyhtak API 实现
│ │ │ └── config.py ← 供应商配置
│ │ │
│ │ └── health/ ← 健康监控(新增)
│ │ ├── scorer.py ← 健康度评分
│ │ ├── alerts.py ← 预警
│ │ └── reporter.py ← 状态上报
│ │
│ └── config/ ← 配置(新增)
│ ├── comment_corpus.yaml ← 语料库
│ └── sms.yaml ← SMS配置
│
└── docs/
└── MATRIX_V5_GUIDE.md ← 现有文档
七、关键设计原则
7.1 反检测第一
所有操作设计优先考虑反检测:
- 频率控制: 每个操作独立 rate limit(like/comment/search/follow)
- 时间随机化: 所有等待时间加 jitter ±30%
- 内容去重: 同一内容不在 7 天内重复
- IP 分散: 多账号用不同代理出口
- 行为多样性: 每次养号随机选择蓝图组合
- 账号休息: 模拟真人作息(夜间不操作)
7.2 联邦优先
- 每台机器独立执行本地任务
- 任务通过 cross_machine 文件异步传递
- 机器间不直接通信(避免网络暴露)
- 任务结果通过 Git 被动同步
- Dashboard 统一展示联邦状态
7.3 渐进增强
- 现有功能不动(养号引擎稳定)
- 新功能先以独立模块开发
- 通过 mc CLI 子命令暴露新功能
- 每完成一个模块就做回归测试
- 保持向后兼容
八、风险与缓解
| 风险 | 影响 | 缓解 |
|---|---|---|
| 平台接口变更 | 选择器失效 | 多级选择器 fallback + 定期验证 |
| 封号 | 账号损失 | 健康度预警 + 操作上限 + 新号先养 |
| 浏览器检测 | 所有账号受影响 | Camoufox 指纹隔离 + BrowserForge |
| 短信API不可用 | 无法登录 | 多供应商切换 + 手动兜底 |
| 代理不稳定 | 操作失败 | 自动切换代理 + 超时重试 |
| 跨机冲突 | 同一任务重复执行 | 任务状态机 + TTL |