用于维护 Chrome / Edge 标注辅助扩展、统一 Node.js 后端,以及四个平台的稳定页面与 Network 参考资料。
当前正式版本为 1.2.0;本仓库维护四个平台的六个脚本。AI 结果默认用于人工辅助;任务流转例外包括台州话 mark-v3 与两类检查包中由用户显式启动的原生“押后”,以及数加加泸州话脚本由用户持久开启、受绝对目标序号限制的原生“提交进入下一条”。两者均不直接调用平台写接口。
首次安装或重置设置时,六个脚本全部默认关闭,必须由使用者在脚本中心显式启用;已有安装中明确保存的启停状态继续保留。
| 项目 | 当前入口 |
|---|---|
| 扩展运行时 | extension/ |
| Vue Options 源码 | frontend/options-app/ |
| 平台资料与脚本后端 | platform-resources/ |
| 统一后端入口 | platform-resources/backend/server.js |
| 自动化测试 | tests/ |
| ZIP 打包脚本 | scripts/package-extension-zip.js |
| 当前版本来源 | extension/manifest.json |
| 平台 | 脚本 | 脚本 ID | 主要能力 |
|---|---|---|---|
| DataBaker CVPC | 柳州话脚本 | dataBakerCvpcLiuzhouAssistant |
音频获取、两阶段 AI、分段建议、批量识别、字段辅助写入 |
| ByteDance AIDP | 苏州话脚本 | bytedanceAidpSuzhouHelper |
分段建议、两阶段 AI、行内/批量识别、暂存写回 |
| ByteDance AIDP | 金华话脚本 | bytedanceAidpJinhuaHelper |
单次 Omni 可编辑转写 Prompt、分段建议、行内/批量识别 |
| ByteDance AIDP | 台州话脚本 | bytedanceAidpTaizhouHelper |
原始听音直填诊断、完整题目录音导入、返修当前页批量导入与审核结果人工回填、显式启动的自动押后 |
| Magic Data | 杭州话脚本 | magicDataHangzhouAssistant |
AI 质检、单双模型方案、词表参考、结果填入与快捷键 |
| 数加加 | 泸州话脚本 | shujiajiaLuzhouHelper |
零分段整段划分、单阶段 AI 识别、严格填入与目标序号全自动提交 |
ByteDance AIDP 的苏州话、金华话与台州话三套脚本互斥启用;关闭当前脚本时不会自动启用另一个脚本。
台州话 Options“基础设置”可填写录音平台可见任务编号(例如 T000001)。只有该值同时存在于服务器私密配置 allowedTaskCodes 时,mark-v3 详情页与检查包路由 /management/task-v2/{taskId}/scan-v3/{nodeId}/{itemId}、/management/task-v2/{taskId}/mark-package/{packageId}/{nodeId}?itemID={itemId} 才可导入当前完整题目;当前 nodeId 仅白名单 14、17,不表示任意节点开放。mark-v3 使用同题、未过期的 Search Item;检查包同样优先使用 Search Item,缺失时才回退同题、未过期的 GetWorkItem/Receive,并且只提取 asr_text、audio、video。扩展只把参考文字及公网 HTTPS 音视频 URL 交给脚本中心,由后端固定绑定 BYTEDANCE_AIDP + ItemID 后转发,不下载媒体、不接收机器 API Key,也不传递 AIDP Cookie、Authorization 或 Session。人工再次点击“添加数据”时,脚本中心会核验旧映射;录音平台明确返回 TASK_ITEM_NOT_FOUND 才轮换幂等操作键并重新创建,其他查询故障保留映射。
上述三类台州话页面均支持必须由用户点击“开始”的“全自动导入并押后”:只在当前页面类型、任务与检查包范围内连续处理,范围变化立即停止;仅当录音结果为 AVAILABLE(待领取)或 SUBMITTED(待审核领取)时操作页面真实“押后”控件并填写原因 1,永不点击“提交”、领取或直接调用 AIDP 写接口。每次自动点击前都要等待页面 fetch/XHR 全部结算并静默 1 秒,20 秒未满足即停止。刷新页面、重载扩展或用户停止也会结束流程。检查包仍禁止文本写回、分段修改、暂存、提交、领取和扩展直接切题;页面进入、结果查询和手动刷新仍只读。完整边界见录音任务平台接入规范。
台州话返修列表 /management/task-v2/{taskId}/node/14/revise?page={page} 可逐条串行添加当前已加载的最多 10 条数据,并提供停止和成功、复用、跳过、失败统计;不会翻页。返修详情 /management/task-v2/{taskId}/modify-v2/4/{itemId} 支持当前题添加、刷新结果,并仅在 COMPLETED、ItemID 一致且页面只有一个可写转写框时,由用户点击“填入审核结果”换行追加文本。返修不提供自动押后,不会自动暂存、审核、切题或调用 AIDP 写接口。
本地开发至少需要:
- Node.js 与 npm
- Python 3(CVPC 画段、可选的 Python AI provider)
- Chrome 或 Edge
- Windows PowerShell;Linux/macOS 打包时需要系统
zip/unzip
服务器运行建议准备:
- Node.js
- Python 3、
venv与pip - PM2
- Nginx
- HTTPS 证书
- 忽略提交的
config/env/backend.env与config/env/ai.env
安装 Options 开发依赖:
npm --prefix frontend/options-app install根目录 package.json 只提供统一测试命令,不需要执行根级依赖安装。
在仓库根目录执行:
node scripts/build-options-app.js构建结果写入 extension/options/。修改 frontend/options-app/ 后,需要重新执行该命令再加载扩展。
Chrome:
- 打开
chrome://extensions/。 - 开启“开发者模式”。
- 点击“加载已解压的扩展程序”。
- 选择
C:\Projects\annotation-script-center\extension。
Edge:
- 打开
edge://extensions/。 - 开启“开发人员模式”。
- 点击“加载解压缩的扩展”。
- 选择
C:\Projects\annotation-script-center\extension。
扩展重新加载后,已经打开的业务页可能出现 Extension context invalidated。这是旧扩展上下文失效,需要刷新业务页面后再验证。
复制公开模板:
Copy-Item config/env/backend.env.example config/env/backend.env
Copy-Item config/env/ai.env.example config/env/ai.env然后在本机填写:
config/env/backend.env:管理员密码哈希、管理员 JWT 密钥,以及可选的 AI 日志下载独立凭据。config/env/ai.env:确实需要覆盖的非密钥 AI 参数。config/secrets/dashscope-key.env:唯一的 DashScope 密钥文件,只保存一行DASHSCOPE_API_KEY=...。
上述私有文件均被 Git 忽略。AI provider 严格只读取 dashscope-key.env,不会回退 config/env/ai.env、进程环境变量或旧双密钥文件。服务器迁移时先创建该文件并限制权限,部署、重启并确认 AI 调用成功后,再由服务器管理员自行删除两个旧 Key 文件、活动状态 JSON 和 PM2/系统环境中的旧变量;不要把真实值复制到 README、日志、测试或提交中。
CVPC 画段会调用后端 Python 音频分析脚本;Fun-ASR 或 Qwen 选择 Python provider 时也复用同一个虚拟环境。该环境固定放在 platform-resources/backend/.venv,并已被 Git 忽略。
Windows PowerShell:
Set-Location platform-resources/backend
py -m venv .venv
.venv\Scripts\python.exe -m pip install --upgrade pip
.venv\Scripts\python.exe -m pip install -r ai\python\requirements.txt
.venv\Scripts\python.exe -c "import dashscope, opencc, miniaudio; print('Python dependencies OK')"
Set-Location ../..如果系统没有 py 命令,可以把第一条创建命令改为 python -m venv .venv。不要提交 .venv/。
node platform-resources/backend/server.js默认监听:
http://127.0.0.1:3333
扩展 Options 支持两套后端根地址:
Server:默认https://annotation-script-center.xiangtianzhen.storeLocal:默认http://127.0.0.1:3333
在仓库根目录运行全部测试:
npm test按分区执行:
npm run test:frontend
npm run test:runtime
npm run test:extension
npm run test:backend
npm run test:release常用完整检查:
npm test
node scripts/build-options-app.js
node --check scripts/package-extension-zip.js
git diff --check长期测试统一位于 tests/。生产目录不放置 *.test.* 或 *.spec.*。
在仓库根目录执行:
node scripts/package-extension-zip.js该命令会:
- 重新构建 Vue Options。
- 保留
dist/中的历史版本 ZIP;仅覆盖当前版本的同名 ZIP。 - 打包完整
extension/。 - 统一 ZIP 包内路径为标准
/分隔符。 - 校验 ZIP 非空、根目录包含
manifest.json,且 manifest 引用的所有脚本均已打入 ZIP。 - 生成
dist/annotation-script-center-v1.2.0.zip,不删除已有历史版本包。
安装 ZIP:
- 解压 ZIP 到独立目录。
- 打开 Chrome / Edge 扩展管理页。
- 开启开发者模式。
- 选择“加载已解压的扩展程序”。
- 选择解压后的扩展根目录,而不是 ZIP 文件本身。
ZIP 同时会以标准路径格式接受目标 Edge 版本的拖拽导入验收;“解压后加载”仍是项目保留的标准安装方式。
以下示例假设仓库位于 /var/www/annotation-script-center,后端仍只监听 127.0.0.1:3333。
首次部署时,在启动 PM2 前创建统一虚拟环境并安装依赖:
cd /var/www/annotation-script-center/platform-resources/backend
python3 -m venv .venv
.venv/bin/python -m pip install --upgrade pip
.venv/bin/python -m pip install -r ai/python/requirements.txt
.venv/bin/python -c "import dashscope, opencc, miniaudio; print('Python dependencies OK')"
cd /var/www/annotation-script-center如果 python3 -m venv .venv 提示缺少 venv,先按服务器发行版安装 Python 3 的 venv 与 pip 软件包,再重新执行。后端会自动识别 .venv/bin/python;无需激活虚拟环境,也不需要修改 PM2 的 Node.js 启动命令。
cd /var/www/annotation-script-center
pm2 start platform-resources/backend/server.js \
--name annotation-script-center \
--cwd /var/www/annotation-script-center \
--time
pm2 save
pm2 status annotation-script-center需要开机自启时执行 pm2 startup,再执行该命令输出的系统级命令,最后重新执行 pm2 save。
server {
listen 80;
listen [::]:80;
server_name annotation-script-center.xiangtianzhen.store;
client_max_body_size 100m;
location = / {
default_type text/plain;
return 200 "annotation-script-center\n";
}
location /downloads/ {
alias /var/www/annotation-script-center/dist/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
add_header Access-Control-Allow-Origin * always;
add_header Cache-Control "public, max-age=300" always;
types { application/zip zip; }
default_type application/octet-stream;
}
location /api/ {
proxy_pass http://127.0.0.1:3333;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 120s;
proxy_send_timeout 120s;
}
}配置完成后先检查再重载:
sudo nginx -t
sudo systemctl reload nginxHTTPS 由服务器证书工具与 Nginx 配置维护;证书和私钥不得进入仓库。
cd /var/www/annotation-script-center
git status --short
git pull --ff-only origin main
platform-resources/backend/.venv/bin/python -m pip install -r platform-resources/backend/ai/python/requirements.txt
pm2 restart annotation-script-center --update-env
pm2 status annotation-script-center如果 git status --short 显示未知修改,先停止更新,不要覆盖服务器私密配置。重复安装 requirements 是幂等的;依赖没有变化时,pip 会直接复用已安装版本。
curl -fsS http://127.0.0.1:3333/api/data-baker-cvpc/liuzhou-helper/ai/recommend/health
curl -fsS https://annotation-script-center.xiangtianzhen.store/api/magic-data/hangzhou-helper/ai/defaults
curl -I https://annotation-script-center.xiangtianzhen.store/downloads/
platform-resources/backend/.venv/bin/python -c "import dashscope, opencc, miniaudio; print('Python dependencies OK')"
pm2 logs annotation-script-center --lines 100| 目录 | 职责 |
|---|---|
extension/ |
Manifest V3 扩展成品、popup、Options 与六脚本运行时 |
frontend/options-app/ |
Vue Options 源码与 SCSS |
platform-resources/ |
平台资料、页面结构、Network 参考与脚本后端 |
platform-resources/backend/ |
统一后端、管理员能力、公共 AI 与路由注册 |
config/ |
环境模板、模型价格和本地私密配置说明 |
scripts/ |
Options 构建、ZIP 打包和本地工具 |
tests/ |
frontend、runtime、extension、backend、release 测试 |
docs/ |
平台索引和外部官方文档入口 |
dist/ |
当前版本与历史版本 ZIP 产物 |
- 不提交 API Key、管理员密码、JWT、cookie、authorization、签名 URL、完整音频 URL 或真实业务数据。
- AI 建议默认只供人工确认,不自动领取、自动审核或自动流转。
- Options 保存不会触发业务页保存、提交或切题。
- 批量能力只作用于当前页、当前任务或当前音频,并保留停止与失败统计。
- 页面写入遵守各脚本 README 的契约,不绕过平台原生
disabled/readonly限制。