← 返回周目标完成情况

本机演示数据

seed_home_workbench.py 给创业平台首页工作台造一套演示数据:只经 HTTP 接口(假登录头 Fake <subject>),不直接写库,可重复运行。只接受 127.0.0.1/localhost 的后端,其余地址直接退出 2。

运行前提

本机栈要和 apps/web/playwright.config.ts 的 webServer 段一样接仓库内的假服务。区别只有一处:库用开发库 venture_os,不用 venture_os_e2e(端到端每轮会清空那个库)。

  1. 库:仓库根 make db-up,然后在 apps/api 下执行 uv run alembic upgrade head。
  2. 假服务(都在 apps/api 下,各开一个终端):
  3. 后端:.env 里要有 APP_ENV=local、FAKE_LOGIN_ENABLED=true、DATABASE_URL 指向 venture_os、CS_HOST=http://127.0.0.1:9800,积分一组照抄 .env.test(AGENTIA_CREDITS_ENABLED=true、AGENTIA_CREDITS_BASE_URL 与 BTS_BASE_URL 指向 http://127.0.0.1:9801,以及同一份假密钥),然后 uv run uvicorn app.main:app --port 8000。档里不能有公司凭据或 CLOUD_CONFIG_*。
  4. 管理员:脚本用 uc-demo-admin 发任务、建认证、公开作品。第一次运行会让它先登录一次,然后停下,提示执行 uv run python -m app.cli grant-admin uc-demo-admin;授予后重跑即可。

运行

uv run --directory apps/api python -m tests.demo.seed_home_workbench \
  --base-url http://127.0.0.1:8000 --demo-at 2026-10-16T14:00:00+08:00

必须在 apps/api 里运行(这里用 --directory):tests 包从当前目录导入,只写 --project apps/api 找不到它。--demo-at 是演示时刻,必须带时区;截止时间都按它算。一次完整运行约 50 秒,大部分时间在等假积分发放预付和尾款。

造出什么

对象 内容
官方认证 迁移自带的「AI漫剧制作流程」,加上按名字新建的「AI 分镜脚本认证」「AI 配音与音效认证」「数字人直播认证」
公开任务 9 条 截止取演示日 −1、当天、+2、+5、+10 天的北京时间 18:00(演示时刻已过 18:00 时,当天那单改为 23:59)。认证要求混合:老用户现在能接、只差一个(含任务专属的「福州文旅品牌规范认证」)、差两个
uc-demo-worker 有两项官方认证;四单进行中(截止分别是当天、+2、+5、+10 天);两单已提交交付,尾款 succeeded
uc-demo-peer 一单已完成,用来凑够第三件公开作品
公开作品 3 件 上面三单完成后生成,由管理员设为公开
uc-demo-newbie 全新,无承接,首页拿起步布局

不造团团项目:项目归团团那一路,首页本批也不读项目。

重复运行与边界

冷启动内置数据

seed_cold_start.py 给平台放一批「别人做的作品」、几条开着等人接的任务和可以去学的官方认证:新用户自己还没有单时,首页「看看别人在做什么」与发现页「作品」页签里也有东西可看,「我能接的单」里有单可接,认证目录里有可学的认证。看板卡 AIC-3277。和上面的首页演示数据不同,这批内容会放到测试环境给真实新用户看,所以标题与说明写成真实需求的口吻,不出现「演示」「测试」字样。

放了什么

文件 内容
cold_start/works.toml 六件作品,以 AI 漫剧为主:《海上丝路》关键画面与分镜、亲子漫剧《小熊找月亮》分镜与角色设定、《白茶记》女主 3D 定妆与茶室场景、《星海漫游》宣传海报与片头视觉,另有三坊七巷文旅 AI 短片与武夷岩茶 AI 主视觉海报各一件,都是会做 AI 漫剧的人能接的活。所有任务只要求「AI漫剧制作流程」一项认证(10-16 策划结论)。每件写明任务标题、需求方、简介、制作与交付要求、预付与尾款积分、截止规则、要求的认证、封面与过程图、交付说明、是否公开
cold_start/open_tasks.toml 六条开放任务(白晨 10-16 要求),截止都是运行当天北京时间 18:00 再加 60 天,任务类型都是「AI 漫剧制作」。新手练习四条:用 AI 给自己做头像和 15 秒自我介绍短片、把一句家乡话做成 4 格漫剧短片、给家里的毛孩子做一段 AI 漫剧小剧场、用 15 秒 AI 漫剧记录我的一个早晨;标题以「新手练习:」开头,需求方「AI 创业平台新手营」,不要求任何认证,报酬取最小档位。AI 漫剧需求两条:都市治愈《巷口面馆》第一集分镜与 30 秒预告片(拾光短剧工作室,200/500 积分)、武侠《竹林听雨》主角设定与对决分镜(青锋动漫,300/700 积分),要求「AI漫剧制作流程」。每条写明去 Story(https://story.ndhy.com/)做、做到什么、交哪三样。详见下文「开放任务」
cold_start/certifications.toml 官方认证清单,目前只有「AI漫剧制作流程」:说明与学习材料「Story漫剧创作指南」(测试环境后台已配的真实地址)。这一项迁移自带、各环境都已存在,脚本只在它的说明或学习入口为空时补上,已有内容不改
cold_start/assets/ 24 张图(每件作品 1 张封面+2 张过程图,每条开放任务 1 张封面 starter-*-cover.jpg/comic-*-cover.jpg),用户级 imagegen 生成,1280 宽 JPEG,单张不超过 300KB;原始 PNG 在 .raw/,不入库
cold_start/page_request.js 测试环境那条路线在页面里代发请求的代码(见下文)
cold_start_plan.py 清单读取、清单自检与判重(纯函数);单测 test_cold_start_plan.py

每件作品走一遍真实业务流程,不直接写库:管理员发布任务(任务封面=作品封面)→ 承接账号先为任务要求的认证提交截图,再承接 → 交付三件套(工程包 ZIP:全部原图+交付说明;成片:脚本用 ffmpeg 把封面与两张过程图合成约 11 秒的 1280×720 MP4;过程资产:两张过程图;另传封面作为作品封面)→ 提交即系统自动验收、发尾款、生成隐藏作品 → 管理员设为公开。成片与工程包在临时目录现做,不入库。本机要装 ffmpeg。

开放任务:只发布、不承接

作品是「发布 → 承接 → 交付 → 公开」走完的成品;开放任务是另一种流程,只由管理员发布,不承接、不交付,以开放状态挂在平台上等新用户来接。两类的用意是新用户在首页「我能接的单」里两组都有单:四条新手练习进「现在就能接」,接下来去 Story 做一条 15 秒左右的短片,走一遍「接单 → 制作 → 交付 → 系统验收 → 拿到报酬」;两条 AI 漫剧需求要求「AI漫剧制作流程」,没有这项认证的人在「差 1 个认证」里看到,学习推荐因此写「学完可多接 2 单」,引他去拿认证。交付门槛和普通任务一样(工程包 ZIP 或 Story 工程二选一、一个成片视频、至少一个过程资产,见 app/deliveries/README.md),所以新手题目都设计成一两个小时能做完、三样都交得出来的练习。

本机跑

本机栈同上文「运行前提」,库换成独立的冷启动库(不要用开发库,也不要用端到端每轮清空的 venture_os_e2e):

docker exec venture-os-postgres-1 psql -U venture -d postgres -c "create database venture_os_coldstart"
cd apps/api
DATABASE_URL=postgresql+asyncpg://venture:venture@127.0.0.1:5433/venture_os_coldstart uv run alembic upgrade head
DATABASE_URL=postgresql+asyncpg://venture:venture@127.0.0.1:5433/venture_os_coldstart \
  uv run uvicorn app.main:app --host 127.0.0.1 --port 8002
# 管理员:先让它登录一次,再授权(grant-admin 读的也是 DATABASE_URL,要指向同一个库)
curl -s --noproxy '*' http://127.0.0.1:8002/me -H "Authorization: Fake uc-official-ops" >/dev/null
DATABASE_URL=postgresql+asyncpg://venture:venture@127.0.0.1:5433/venture_os_coldstart \
  uv run python -m app.cli grant-admin uc-official-ops
# 导入(仓库根)
uv run --directory apps/api python -m tests.demo.seed_cold_start local --base-url http://127.0.0.1:8002

管理员默认 uc-official-ops,承接账号默认 uc-studio-creator(--admin/--worker 可改);认证截图用仓库里的测试图片。加 --plan 只读核对、不写。一次完整运行约一分钟,多半时间在等假积分服务确认预付与尾款。

对测试环境跑

测试环境走公司 UC 登录,每个请求要 UC SDK 现算 MAC 签名,脚本自己没有签名能力,也不碰令牌。做法是在已登录的浏览器页面里发请求:脚本把每个请求写成一段代码,经 playwright-cli -s=<会话> --raw run-code --filename=… 交给那个会话执行;页面里按应用自己的规矩取后端地址(window.__VENTURE_RUNTIME_CONFIG__.VITE_API_BASE_URL,测试环境是 https://venture-os.debug.ndaeweb.com)、用运行配置里的网关与 sdp-app-id 构造 UC SDK、对「后端实际收到的绝对地址」现算签名头,再 fetch。签名头与令牌只在页面里用,不回传给脚本。文件上传把字节以 base64 带进页面再组 FormData。

前置(要白晨本人):

  1. 两个账号:管理员(白晨)与另一个公司 UC 测试账号(承接)。两人不能是同一账号,脚本开头会核对。
  2. 积分:发布任务会冻结并按奖励目录扣管理员账号的积分,六件合计预付 1,600、尾款 3,500 积分(以 works.toml 为准),开放任务里两条 AI 漫剧需求另需预付 500、尾款 1,200,四条新手练习各占预付、尾款各一个最小档位;写明积分的档位必须在测试环境的奖励目录里存在,只读核对会先报出缺的档位,并打出取到的最小档位。
  3. 认证截图:承接账号要先为「AI漫剧制作流程」提交一张截图(--cert-screenshot),提交即认证、本人不能替换,只有管理员能在后台移除;账号已有这项认证则跳过。
  4. 登录:主控开两个有界面的会话,白晨分别登录:
mkdir -p /tmp/vos-cold-start-pw && cd /tmp/vos-cold-start-pw
playwright-cli -s=cold-admin open --headed --persistent https://start.debug.ndaeweb.com/
playwright-cli -s=cold-worker open --headed --persistent https://start.debug.ndaeweb.com/

然后先只读核对(只发 GET:核对身份、认证、奖励档位、每件作品还差哪几步、每条开放任务发没发),确认无误再加 --write:

uv run --directory apps/api python -m tests.demo.seed_cold_start browser \
  --web-url https://start.debug.ndaeweb.com --admin-session cold-admin --worker-session cold-worker
uv run --directory apps/api python -m tests.demo.seed_cold_start browser \
  --web-url https://start.debug.ndaeweb.com --admin-session cold-admin --worker-session cold-worker \
  --cert-screenshot <认证截图.png> --write

--signer fake 用假登录身份代替 UC 签名,只许对本机站点用,作用是在本机把这条浏览器路线完整演练一遍:起一个指向本机后端的前端(假登录模式),开两个会话各自写好 localStorage 的 venture-os:fake-subject,--web-url 指向这个前端即可。UC 签名本身只能在白晨登录后由只读核对那一步验证;未登录时页面内构造 UC SDK 并拦下请求这一段已对测试环境核过(不发任何请求)。

重跑与失败

每一步之前先读现状再决定做不做,所以任何一步失败后排除原因原样重跑即可,只补缺的步骤:

步骤 怎么判重 中途失败的后果
认证 按名字;库里没有才新建,已有的只补为空的说明或学习入口,不覆盖后台已配的内容 无
认证截图 承接账号已有该认证就跳过 截图已上传但没提交认证:留一个孤立文件,无害
发布任务(作品与开放任务) 按任务标题(后台任务列表) 封面已传、任务没发:孤立文件;任务已发但回执丢了:重跑按标题认出,不会重复发、不会重复扣分
承接 按任务找承接账号的承接;任务被别的账号接走则这一件跳过并提示 承接已成立即有预付,重跑不再承接
交付 交付状态不是 submitted 才做 文件已传、草稿未提交:重跑重新上传并整体替换草稿,旧文件成孤立文件
设为公开 后台作品可见性不是 visible 才设 无

尾款到账由积分工作器异步确认,脚本最后最多等 90 秒,没到账只提示、不报错——作品与公开不依赖到账。 要改内容:任务一旦发布,标题、说明、截止都不会随清单变;要换就在后台处理旧任务后改标题重跑。