项目技术全景 · 给技术顾问的速览

全屋定制的
获客自动化引擎

从抖音评论里找到高意向客户,判意向、拟话术,再把私信真的发出去——整条获客链路自动化的多租户 SaaS。

// 面向第一次接触本项目的技术顾问 · 纯技术架构口径

NEXT.JS 16.2.4 SUPABASE · RLS FASTAPI · PLAYWRIGHT FLY.IO / NRT OPENROUTER ×3 模型 58 CRONS LANGFUSE 全链路
SCROLL / 向下滚动
01
Deployment Architecture

三件套 · Supabase 居中

三块各自独立部署、各自 CI/CD,围绕同一个数据库协作。它们之间不直接互相调用——全部经数据库或 HTTP 契约交接,任何一块挂掉重启即恢复。

Frontend▲ Vercel

Next.js 16

src/ · App Router

控制台 UI +薄 API + Vercel Cron 触发器。Supabase SSR 鉴权走 middleware.ts,是「大脑与门面」——负责想、看、审批。

Next 16.2.4 · React 19.2.4 · TS 5 · Tailwind 4
Source of Truth◈ Supabase

Postgres

supabase/migrations/

唯一事实源与中央交接台。schema 全在迁移文件里,多租户靠 行级安全(RLS)做硬隔离。前端与 worker 各自读写。

@supabase/ssr 0.10 · supabase-js 2.10
Worker✦ Fly.io

Python · FastAPI

worker/ · akke-worker-prod · nrt

FastAPI + Playwright,东京机房。抓取 / 解析 / 发送的「手脚」,后台 poller 持续拉队列。

FastAPI 0.115 · Playwright 1.49 · f2 0.0.1.7
Design

Vercel = 大脑Supabase = 仓库Fly worker = 手脚。三者无状态解耦,靠数据库对齐状态——这是整套系统能「掉一块不塌」的根因。

02
Core Business Pipeline

一条评论怎么变成一条私信

主链路六段,段与段之间用数据库里的表 + 状态机交接,各段由不同的 cron / worker 驱动,天然可重试、可断点续

CRON
入队
/api/cron/scrape 给每个活跃号源写一行 scrape_jobs
WORKER
抓取
poller 认领 job → f2 快通道签名调抖音评论 API(失败回退 Playwright)→ 落 videos / comments
LLM
打分+拟稿
/api/cron/analyze 给评论打购买意向分;高意向自动生成一条话术草稿进 message_queue,状态 pending_approval
HUMAN
审批
运营在控制台审 → 队列行翻 approved(另有绕开 Dashboard 的运营直查工作流,见下节)
真机/云端
发送
执行端认领 approved → 在真实抖音里把私信发出去 → 回执 + 回复轮询写回库,成为下一轮上下文

// 关键设计:每一棒都落库再交接——任何一段崩了都能从库里的状态捡起来重跑,不重发、不丢单。

03
LLM Layer · Channel-Split Routing

三个模型各司其职

src/lib/llm.ts 封装任意 OpenAI 兼容端点,统一走 OpenRouter。按「任务性质」而非「一个大模型包打天下」拆分——便宜的干粗活、贵的干精活,可独立灰度 / 回滚。

💬

CHAT · 对话 / 开场抖音 & 企微代聊

冷开场白、养客对话、人设「小艳」。

qwen3-235b-a22b-2507
📊

ANALYSIS · 分析意向打分

购买意向评分、决策信号检测、装修阶段分类。

deepseek-v4-flash
👁️

VISION · 读屏企微 GUI 定位

云电脑自动化「看」屏幕内容做元素定位。

qwen3-vl-30b
🛡️

输出护栏

sanitizeReply / extractLeakedToolCalls 清洗模型泄漏的 tool-call 协议字节与舞台指示;60+ 条确定性后置硬绑做信号 / 昵称规则。

🔍

全链路可观测

所有 cron / worker 任务必开 Langfuse trace;OpenRouter 返 cost=0,本地定价表手动回填成本,可按人 / 按任务追账。

04
Execution Channels · The Hard Part

为什么消息不能从云端直发

Constraint

抖音对数据中心 IP 风控极严:Fly 东京出口的 handle / search / 主页 API 一律返空,云端直发私信会被静默丢弃。于是「发」这件事必须落到带真实登录态的终端上。

📱

本机真机通道

运营本机的 iPhone(WDA)Android(ADB + uiautomator2) 驱动抖音 App 发陌生私信。号源导入靠 Cookie-Editor 导出 + 短链 302 解析——唯一绕开 IP 封锁的路径。

🖥️

阿里无影云电脑通道

云端 Windows 挂登录好的抖音 / 企业微信,VL 读屏 + 固定坐标 GUI 自动化打字发送。因国内云电脑连不上 Vercel,命令必经 Fly 东京做中转

🔀

四条触达通道

抖音 DM(一触私信)· RC(评论区反向回复)· 二触(潜在客户再触达)· 企微好友单聊 AI 代回。共用 dispatch 派单原语,节奏各自独立。

送达真伪校验

抖音 HTTP 200 + success:true 不等于送达——可能 cmd:100 静默丢(陌生 DM 限频)。真校验要 blackboxprotobuf 解包断言 status_code==0

05
Data Model · Multi-Tenancy

一个库,多个品牌,互不串数据

2026-04 起多租户化。所有业务表挂 org_id,靠 Postgres 行级安全(RLS)做硬隔离,而不是在应用层写 WHERE 兜底。

业务域

  • 租户 organizations / memberships / brand_profile
  • 号池 accounts(发送账号)
  • 抓取 source_accounts / videos / comments / scrape_jobs
  • 会话 conversations 状态机 / messages / message_queue
  • 知识 + 统计 knowledge / daily_stats

隔离机制

  • RLS 策略 tenant_scope
  • 键于 app.accessible_org_ids()
  • 角色 Staff / Owner / Operator
  • 路由层再加 src/lib/auth/ 守卫
  • org_id 永不接受客户端传入

工程约定

  • 迁移唯一事实源=SQL 文件
  • 时间戳前缀 YYYYMMDDHHMMSS_
  • 回滚 SQL 单独存目录
  • 三种客户端 SSR / 服务端 / bypass-RLS
  • 租户读走 SSR+RLS,不用 service role
为什么用 RLS 而不是应用层过滤

把隔离下沉到数据库:任何一条查询漏写租户条件,也不会跨租户串数据——安全边界只有一层、且由数据库强制,而不是散落在几百个 API 里靠人记得加 WHERE org_id=

06
Automation · Observability · Gates

整个系统靠定时任务串起来

没有常驻队列服务,主链路由 58 个 Vercel Cron + worker 后台 poller 驱动,每一环都可独立监控和降级。

⏱️

58 个 Cron

入队 / 抓取 / 打分 / 回复轮询 / 日报 / 健康自检 / 号源治理 / 云电脑看门狗……时刻表全在 vercel.json,是唯一事实源。

💓

双指标心跳

每个后台任务同时落存活心跳(挂了可检测)+业务 delta(跑了但 0 行更新也告警)——「退出码 0」不等于「业务有效」。

📈

可观测 + 告警

Langfuse trace 全覆盖;LLM 余额 / 成本 / 达标率异常推 Lark 红牌到告警群;每日 LLM 健康监控。

🚦

CI + 高危路径门禁

tsc+lint+Claude 自动评审跑在每个 PR;llm.ts / cron / migrations / auth 等高危路径强制走 PR,两道闸拦直推 main。

设计取向

确定性判断交给代码,模糊判断才交给模型——路由、重试、状态码、去重走代码;分类、起草、摘要、抽取走 LLM。能用状态码回答的,不让模型在 prompt 里抖 if-else。

07
Current Status · Engineering View

已跑通 / 进行中 / 硬骨头

纯工程里程碑口径——「能力上有没有打通」,不含运营数字。

✅ 已上线 / 跑通

  • 多租户 RLS 隔离
  • 抓取:Cookie 接入+短链解析+f2 快通道+Playwright 回退
  • VIP 视频分类+小时级复扫+活跃池互动 Δ 追踪
  • 意向打分+草稿管线+评分校准闭环
  • 四通道触达(DM / RC / 二触 / 企微代回)
  • 云电脑 GUI 自动化端到端真发+DM 自动回复
  • 对外看板(时效 / 账单 / 客户旅程 / 业务流地铁图)
  • 图文自动发布+视频解构复刻产线 v0

🚧 进行中 / 未完

  • 企微 kf 官方 API(方案 A)冻结,待 ICP 备案
  • analyze 吞吐并发化(当前串行、尾部易饿死)
  • 高意向覆盖率提升(瓶颈在派单分配)
  • 抖音获客沉淀企微(短信+获客助手链接,未拍板)
  • 金牌销售对话灌库(decision_rules)

🧗 技术硬骨头 / 边界

  • 抖音 IP 风控:机房 IP 一律返空 / 静默丢
  • DM 假成功:需 protobuf 解包验 status_code
  • 云电脑连不上 Vercel → 必经 Fly 中转
  • 单 2GB Fly VM = 单 Chromium 单例
  • Cookie 15–30 天过期;httpx 锁死 0.27.2
08
Tech Stack · Latest Versions

一页看全用了什么

技术版本 / 部署
前端 / APINext.js · React · TypeScript · Tailwind16.2.4 / 19.2.4 / 5 / 4 · Vercel
数据库Supabase Postgres(RLS 多租户)ssr 0.10 · js 2.10
状态管理Zustand(useChatV2Store 分片)前端会话状态
WorkerPython · FastAPI · Uvicorn0.115 / 0.34 · Fly.io 东京
抓取 / 自动化Playwright · f2 签名 · uiautomator2 · WDAPW 1.49 · f2 0.0.1.7 → httpx 0.27.2
LLM 接入OpenRouter(openai SDK)· 分通道路由openai 6.34
· ChatQwen3-235B-A22Bqwen3-235b-a22b-2507
· AnalysisDeepSeek V4 Flashdeepseek-v4-flash
· VisionQwen3-VL-30Bqwen3-vl-30b-a3b-instruct
可观测Langfuse · Sentrytrace 全覆盖 · sentry-sdk 2.20
调度 / CIVercel Cron · GitHub Actions58 crons · tsc+lint+Claude 评审
执行端阿里无影云电脑 · iPhone/Android 真机GUI 自动化 · 本机 WDA/ADB
一句话总括:一套无状态解耦的三件套(Vercel 大脑 / Supabase 仓库 / Fly 手脚),用分通道 LLM 判意向、拟话术,最后落到真机与云电脑把私信真发出去——难点全在绕过抖音风控验证真实送达