这个项目能做什么

## 它是什么 ChatGPT Subtitle Translator 是一个围绕 OpenAI ChatGPT API(或任何兼容 OpenAI 的聊天补全端点,包括本地 Ollama 实例)构建的翻译工具。它的重点是按行翻译,尤其是 SRT 字幕,因为保持输入与输出行之间的对应关系对于维持字幕时间轴完整非常重要。 ## 工作原理 在发送给模型之前,SRT 索引和时间戳会被剥离或简化,以减少 token 使用量。多行会被分组到单个提示中的批次里,从而消除重复的逐条开销,并允许翻译任意长度的文件而不会消耗过多 token。默认系统指令是最简形式 `Translate to <language>`。 可通过 `--structured` 选择五种结构化模式: - `array`(默认):行以 JSON 数组发送,模型返回匹配的数组。 - `object`:源行成为响应模式中的键,因此不会发送显式的用户消息。 - `timestamp`:使用紧凑的 Toon 格式在文本旁保留时间信息,包含批次偏移以及每条目的毫秒级偏移/长度;模型可以合并相邻条目。仅当输出时间跨度边界与输入不匹配时才会重试。 - `agent`:带有默认选项的 agent 子命令别名。 - `none`:不带结构化输出的旧模式。 ## 功能 - 网页 UI(托管在 GitHub Pages 上)和 CLI - 支持结构化输出,并在两个界面中默认启用 - 支持提示缓存,通过 `-c, --context` 控制(仅 CLI) - 可与任何兼容 OpenAI API 的提供商配合使用,例如本地 Ollama - 基于行的批处理,并根据上下文 token 预算自动确定批次大小 - 可选的 OpenAI Moderation 检查(`--use-moderator`,仅 CLI),以避免在可能被拒绝的内容上浪费 token - 流式处理输出 - 每分钟请求数速率限制 - 进度恢复(仅 CLI) - 流式传输期间的重复循环检测(`--guard-repetition`) ## Agent 模式 `agent` 子命令在翻译前会运行多轮处理:概览轮会抽样文件以识别内容、时长、类型/语气和角色名称,并检测源语言;规划轮会以受 token 限制的窗口扫描文件,生成批次摘要,并将其整合为精炼后的翻译指令;随后翻译轮使用该增强指令,并在第一批之后验证目标语言。选项包括 `--no-refine`、`--no-fitting` 和 `--context-summary`。 ## 设置与用法 需要 Node.js >= 20。克隆后,运行 `npm install`,使 `cli/translator.mjs` 可执行,将 `.env.example` 复制为 `.env` 并添加 API key。典型调用包括 `cli/translator.mjs --input subtitles.srt --from Japanese --to English`、通过 `--plain-text` 输入纯文本,以及通过 `--system-instruction` 提供自定义指令。模型、temperature、top_p、penalties 和 logit bias 可通过标准 OpenAI 参数配置。