7.0 KiB
7.0 KiB
StoryForge 现状审计
日期:2026-03-18 更新:2026-03-20
结论
当前应以 /Users/kris/code/StoryForge-gitea 作为主工作区继续推进,而不是 /Users/kris/code/Fastgpt。后者更像一次不完整的导入快照,前者才是可持续开发的真实仓库。
现有功能归位
1. collector-service 之前承担的功能
- 账号注册、登录、审批
- 本地模型配置
- 知识库、智能体、任务管理
- 视频链接/上传视频/文本三类入口
- 下载器、ffmpeg、whisper.cpp 风格的本地处理调用
- Android OTA 查询/发布
2. FastGPT 实际承担的功能
- 仅承担“数据集/文档同步”的外部依赖角色
- 代码痕迹集中在:
collector-service/app/fastgpt.pydocker-compose.yml- 若干
fastgpt_*字段
结论:FastGPT 并不是业务内核,适合迁移后整体删除。
3. n8n 适合接管的功能
- 任务触发
- 工作流分流
- 外部能力编排入口
- 任务执行顺序控制
不适合承载:
- 用户、项目、Agent、知识库、任务、历史记录的主数据
- 业务状态唯一真相源
结论:应采用“业务状态在 collector-service,流程编排在 n8n”的分层。
多用户与数据边界
当前已明确采用:
accountsprojectsknowledge_basesassistantscontent_sourcesjobsjob_events
推荐模型:user + project。
理由:
- 只做
user级隔离,会导致一个用户内部不同内容工作流难以再分边界 project可以自然承接“一个创作者方向 / 一个客户 / 一个账号矩阵 / 一个内容实验”assistant、knowledge_base、job、content_source都能挂到project,便于后续扩展协作空间
外部链路审计
1. 下载器
- 已存在,不需要重写
- 现阶段通过
yt-dlp命令集成 - 账号级内容源同步同样复用
yt-dlp --flat-playlist,不额外维护抓取器
2. ASR
- 现有实现已部署,入口现已标准化为“两级优先级”:
- 优先调用 HTTP ASR 服务
- HTTP 不可用或返回空结果时,回退到
whisper.cpp命令行
- 本次已按
mac-whisper-service的/transcribe协议完成接入,并用任务job_e95f9b5579fd4c5aa40f04de611e9fd0验证artifacts.asr_backend=http - 进一步联调发现真实长视频转写耗时约 44 秒,因此
collector侧ASR_HTTP_TIMEOUT_SEC默认值已提升到 120 秒;本机mac-whisper-service运行时也需要把WHISPER_TIMEOUT_MS提升到120000 - 修复后再次验证成功,任务
job_bb405e2e878849e38c4bb31f7781e1e3已写入真实 HTTP ASR 文本并记录artifacts.asr_http_payload collector运行镜像已补上ffmpeg和yt-dlp,避免容器内缺依赖导致音频抽取或下载失效
2.1 内容源账号同步
- 已新增
content_source_sync_pipeline - 用户可通过
POST /v2/pipelines/content-source-sync提交创作者账号 URL - 后端会创建父任务,使用
yt-dlp --flat-playlist抓取最近 N 条视频 URL,再自动派生用户自己的video_link子分析任务 jobs.parent_job_id已加入数据模型,父子任务关系可持久化查询- 已用 bilibili 账号 URL 联调验证:
- 父任务:
job_b02109cf9e8244fbb5b86f184a7c7574 - 子任务:
job_7f169db61af441f8a7f186d03db2d91c、job_28c47774028441378a3974860c375ab7
- 父任务:
结论:账号级调度不再是空白能力,但目前只验证了 bilibili URL 形态,抖音 / 小红书仍需真链路核实。
3. Windows cutvideo
- 仓库:
/Users/kris/code/cutvideo - 具备清晰 API:
POST /api/jobsPOST /api/uploadsGET /api/tasks/{task_id}GET /api/runs/{run_id}
- 适合集成为“由 StoryForge 后端授权调用的局域网剪辑能力”
当前状态:
- StoryForge 已支持把
upload_video或已完成的video_link源素材自动上传到cutvideo real-cut任务可直接传source_job_id,由后端完成 staging 后再提交到剪辑服务- Windows 机器已部署带
POST /api/uploads的cutvideo版本,并完成局域网联调
3.1 douyin 工作台
collector-service已具备/v2/douyin/*工作台接口- 已补充两类关键联调增强:
- 分享文案中的 URL 自动提取与归一化
- public 页面命中抖音反爬挑战时的显式诊断返回
- 真实 smoke 结果表明,纯 public 主页抓取会落到
byted_acrawler挑战页,而不是正常 profile 数据页 - 同时,
manual_profile_payload + manual_work_payloads已验证可完成账号入库、分析报告生成、相似账号搜索和对标关系写入
结论:douyin 方向不再是“接口存在但不可用”,当前状态是“public 直抓受反爬限制,但人工采集兜底链已跑通”。
4. huobao-drama
- 旧改版位置:
/Users/kris/code/huobaoduanju/huobao-drama-master - 最新 upstream:
/Users/kris/code/huobao-drama-upstream - 旧改版主要多了一套
ad_workflow方向,和当前 StoryForge MVP 不完全对齐 - 最新版已具备:
POST /api/v1/dramasPOST /api/v1/imagesGET /api/v1/images/{id}POST /api/v1/videosGET /api/v1/videos/{id}reference_mode=first_last
本次真实联调里,旧改版为了兼容 qnaigc 需要补 4 个点:
pkg/image/openai_image_client.goapplication/services/image_generation_service.gopkg/video/openai_sora_client.goapplication/services/video_generation_service.go
核对结果:
- 以上 4 个文件与本机 upstream 同名文件在补丁前没有明显结构分叉
- 当前差异基本就是
qnaigc图片异步查询、Kling 视频 JSON 协议、结果 URL 解析、远程首尾帧 URL 保留这几处兼容逻辑
结论:这批补丁是可移植补丁,MVP 已在旧改版实例上验证通过;下一步应把同样补丁迁到最新版 huobao-drama-upstream,而不是继续在旧目录长期演进。
当前已完成迁移面
- FastGPT 运行时依赖已从
collector-service主代码中剥离 - 数据库已支持
project/content_source/job_events collector-service已增加:n8n触发cutvideo集成 clienthuobao-drama集成 client- 内部编排接口
docker-compose.yml已改为collector + n8n + cli-proxy-apin8n工作流导出文件已纳入仓库collector-service的 live 运行态已回归到StoryForge-gitea自身源码构建,不再依赖/Users/kris/code/Fastgpt/collector-service/app的临时 bind mountcollector-service现已在 live8081提供/v2/douyin/*接口,并保留原有real-cut / ai-video / content-source-sync路由
当前主要风险
- 小红书账号级内容源还未做真实平台验证
douyinpublic 直抓仍受反爬限制,生产落地还需要补 cookie 或人工页面采集协作链huobao-drama已在本机旧改版实例上跑通,但兼容补丁尚未迁到 upstream 仓库并形成正式提交douyin新接口已上线 live,但还需要补一轮真实账号级回归,确认手工 payload 和相似账号分析都稳定