ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

“不是 Jira,是 Linear”:我用一段技术口述测试 Typeoff 的自动纠正

“不是 Jira,是 Linear”:我用一段技术口述测试 Typeoff 的自动纠正 1. 技术口述转写为什么总在专有名词上翻车语音输入写工作消息最怕的不是识别不出普通话而是把一句话里的技术名词和临时改口搅在一起。你说“发给 Jira等等不是 Jira是 Linear”普通转写会老老实实把两个项目名都记下来最后你还得手动删掉前半句。打字写错按退格就行说话却很少一次成稿停顿、重复、改主意都是常态。Typeoff 这类工具处理的是转写之后的 AI Enhancement 层先出原始文字再让模型判断哪些内容被后面的说法推翻了只保留最终确认的版本。这个能力对写群消息、任务说明、邮件初稿特别有用因为这类内容需要完整表达又允许发送前再看一遍。但代码、命令、文件路径和金额不在这个范围内它们对字符和符号要求太高键盘输入更可靠。我这次测试的目标很明确用一段包含 Supabase、Prisma、PostgreSQL、Redis、MCP Server、Sentry、Jira、Linear 的连续口述模拟真实开发任务说明观察 Typeoff 对专有名词的识别和对改口关系的处理。测试语料里故意混进了五种常见口头修改替换数值、撤销动作、缩小范围、否定错误对象、保留原方案。理想结果不是逐字一致而是五个最终决定必须保住三次、十五秒、三十、staging、Linear。被撤回的五次、十秒、四十、production 和 Jira 不应该继续混在最终任务里。如果你也在评估语音输入能不能用于技术工作口述这套测试方法可以直接复现。下面我会给出完整语料、对照记录表、验证步骤以及用 TaoToken 接入模型做批量验证的配置方式。TaoToken 在这里的角色是提供统一的模型调用入口方便你把同一段口述丢给不同模型做纠正效果对比而不是只靠肉眼听一遍。2. TaoToken 前置准备把模型调用统一到一个入口做这类测试最麻烦的不是写语料而是你想对比不同模型对同一段口述的纠正效果时每个模型都要单独申请 Key、单独配环境。TaoToken 解决的就是这个问题它提供一个兼容 OpenAI 风格的 API 入口你可以在一个控制台里管理多个模型的调用Base URL 统一Key 统一切换模型只改一个 Model ID。先明确三件套后面所有配置都围绕它们展开项目值Base URLhttps://taotoken.net/apiAPI Key在控制台创建形如sk-xxxxModel ID按需选择例如claude-sonnet-4-20250514、gpt-4o等控制台地址是https://taotoken.net/consoleAPI Key 管理在https://taotoken.net/api-keys。如果你只是想在网页里快速试一段口述的纠正效果可以直接用模型对话页面https://taotoken.net/chat不用写代码。但要做批量对比和记录还是走 API 更可控。我试过用 Claude Code 做这类文本处理它的长上下文和指令遵循比较稳适合把“保留最终决定、删除被推翻内容”这种规则写进系统提示。Claude Code 的接入文档在https://taotoken.net/doc/claudecode里面给了完整的 Base URL 和 Key 配置方式。如果你用的是 Cline 或 Roo Code 这类编辑器插件MCP 配置里同样填 TaoToken 的 Base URL 和 KeyModel ID 选你需要的那个。这里要提醒一点TaoToken 不是替代编辑器的工具它只负责模型调用。你的语料整理、结果对照、准确率统计还是要在本地做。把模型调用统一之后你可以写一个脚本把同一段口述分别发给三个模型把返回结果存成表格再人工核对五个最终决定是否保住。这样比一个个网页粘贴快得多。长期做编码或 Agent 任务的话可以看 Coding Plan 页面https://taotoken.net/coding-plan它更适合高频调用场景。但本篇的重点是口述纠正测试用按量计费的 API Key 就够了。先把 Key 建好下一步我们写可复制的配置。3. 可复制配置JSON 与 settings 片段这一节给出可以直接粘贴的配置片段。路径和字段名保持和官方文档一致你只需要把sk-xxxx换成自己在https://taotoken.net/api-keys创建的 Key。先看最通用的 OpenAI 兼容配置很多工具和脚本都认这个格式。新建一个taotoken.json{ base_url: https://taotoken.net/api, api_key: sk-xxxx, model: claude-sonnet-4-20250514, temperature: 0.2, max_tokens: 2048 }temperature设成 0.2 是为了让纠正结果稳定减少模型自由发挥。做口述纠正测试时你希望它严格按规则删改而不是帮你润色成另一段话。如果你用 Claude Code配置文件通常放在用户目录下的.claude/settings.json或者项目根目录的.claude/settings.json。写入下面这段{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-xxxx, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }注意ANTHROPIC_BASE_URL后面不要加/v1TaoToken 的入口已经处理了路径。Key 用你在控制台创建的那把Model ID 按需替换。配好之后在终端里跑claude命令能正常对话就说明接入成功。如果你用 Cline 或 Roo Code 这类 VS Code 插件在插件的 API 配置里选 “OpenAI Compatible”然后填{ provider: openai-compatible, baseURL: https://taotoken.net/api, apiKey: sk-xxxx, modelId: claude-sonnet-4-20250514 }MCP 相关的配置里如果某个 Server 需要调用模型同样把 Base URL 指向 TaoTokenKey 用同一把。这里不展开 MCP Server 的具体写法因为不同插件的字段名有差异你以插件文档为准核心就是三件套Base URL、Key、Model ID。Codex 用户如果用的是auth.json方式配置结构类似{ api_key: sk-xxxx, base_url: https://taotoken.net/api, model: claude-sonnet-4-20250514 }配好之后建议先跑一个最小请求验证不要直接上长语料。下一节给出验证步骤和成功结果的判断标准。4. 验证请求与成功结果用一段口述跑通全流程配置写完之后先用一段短口述验证链路是否通。我用的测试语料就是摘要里那段技术任务说明你可以直接复制请把 Supabase 的 Webhook 重试次数从三次改成五次不对先保持三次Prisma 的事务超时时间设为十秒改一下是十五秒PostgreSQL 连接池从二十调到四十等等生产环境先调到三十Redis 缓存只清理 staging 环境不是 productionMCP Server 继续使用 Streamable HTTP不要改成 SSE。最后把 Sentry 的错误报告发到 Jira不是 Jira是 Linear 的 Backend 项目。系统提示写清楚规则你是一个口述纠正助手。用户会给你一段包含口头改口的转写文本。 你的任务是识别“不对”“改成”“等等”“不是 A是 B”这类改口关系 删除被推翻的旧内容只保留最终确认的版本。 不要添加原文没有的信息不要改变技术名词的拼写。 输出只保留纠正后的文本不要解释。用 curl 发一个请求curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-xxxx \ -d { model: claude-sonnet-4-20250514, temperature: 0.2, messages: [ {role: system, content: 你是一个口述纠正助手。识别改口关系删除被推翻的旧内容只保留最终确认的版本。不要添加原文没有的信息。}, {role: user, content: 请把 Supabase 的 Webhook 重试次数从三次改成五次不对先保持三次Prisma 的事务超时时间设为十秒改一下是十五秒PostgreSQL 连接池从二十调到四十等等生产环境先调到三十Redis 缓存只清理 staging 环境不是 productionMCP Server 继续使用 Streamable HTTP不要改成 SSE。最后把 Sentry 的错误报告发到 Jira不是 Jira是 Linear 的 Backend 项目。} ] }成功返回的choices[0].message.content应该接近下面这段请把 Supabase 的 Webhook 重试次数保持为三次。Prisma 的事务超时时间设为十五秒。生产环境的 PostgreSQL 连接池调到三十。Redis 缓存只清理 staging 环境。MCP Server 继续使用 Streamable HTTP。最后把 Sentry 的错误报告发到 Linear 的 Backend 项目。判断成功的标准不是逐字一致而是五个最终决定有没有保住三次、十五秒、三十、staging、Linear。被撤回的五次、十秒、四十、production 和 Jira 不应该出现在结果里。如果这五个点全对说明模型对改口关系的判断是可靠的。如果只对了三四个就要看是专有名词识别错了还是改口关系判断错了。我建议做一个对照记录表每次测试填一行测试轮次模型三次十五秒三十stagingLinear误留旧内容备注1claude-sonnet-4对对对对对无全对2gpt-4o对对对对错JiraLinear 未识别3claude-sonnet-4对对对对对无复测稳定这样跑几轮你就能看出哪个模型在专有名词和改口关系上更稳。Typeoff 官方把这项能力放在 AI Enhancement 里语音先转写AI 增强再处理标点和改口。你用 TaoToken 调模型相当于自己复现了这个增强层方便做对比。5. 常见报错排查401、local proxy failed、reading choices、OAuth接入过程中最容易碰到四类报错我按实际遇到的顺序说。第一类是 401 Unauthorized。返回体通常是{error:{message:Invalid API key,type:invalid_request_error}}。原因一般是 Key 复制时带了空格或者用了已经删除的 Key。去https://taotoken.net/api-keys重新复制一次注意不要带首尾空格。如果是在 Claude Code 里报 401检查ANTHROPIC_API_KEY字段名有没有写错有些版本要求用ANTHROPIC_AUTH_TOKEN以https://taotoken.net/doc/claudecode的文档为准。第二类是local proxy failed或连接被拒绝。这种通常出现在你本地开了某个代理工具但代理规则没把taotoken.net放行。解决办法是检查本地网络配置确保 API 请求能正常到达https://taotoken.net/api。如果你在容器里跑脚本确认容器能访问外网DNS 解析正常。这类报错和 Key 无关先排除网络层。第三类是reading choices相关错误比如Cannot read properties of undefined (reading choices)。这说明请求发出去了但返回结构和你代码里取值的路径不一致。常见原因是 Base URL 多写了或漏写了/v1。TaoToken 的入口是https://taotoken.net/api如果你在代码里又拼了/v1/chat/completions完整路径是https://taotoken.net/api/v1/chat/completions这是对的。但如果你在 Base URL 里已经写了/v1再拼一次就变成/v1/v1返回 404解析时自然取不到choices。检查你的 Base URL 配置保持和文档一致。第四类是 OAuth 相关报错比如OAuth token exchange failed。这类一般出现在你用某些 CLI 工具做登录授权时。如果你只是用 API Key 调用不会碰到 OAuth。碰到的话确认你用的是 API Key 模式而不是账号授权模式。Claude Code 和 Codex 都支持 API Key 直连不需要走 OAuth。排查顺序建议先看 HTTP 状态码401 查 Key404 查路径连接失败查网络解析失败查返回结构。把每次报错的完整信息记下来对照上面的分类基本能定位到具体环节。如果三件套Base URL、Key、Model ID都确认无误还是报错去https://taotoken.net/doc看对应工具的接入文档里面通常有最新的字段名和示例。6. 把测试跑成习惯从单次验证到持续评估单次跑通不代表稳定。口述纠正这种任务模型对改口关系的判断会受语料长度、改口密度、专有名词数量的影响。我建议你把测试语料固定下来每次换模型或换参数时都跑同一段填同一张对照表。跑够十轮你就能看出哪个模型在“不是 Jira是 Linear”这种否定式改口上更少出错。Typeoff 本身提供了 Auto、Professional、Casual、Concise、Detailed 等写作风格。测试自动纠正时先用 Auto 或 Concise减少语气润色对观察结果的干扰。官方说明把“保留原意”列为 AI 增强的原则但自动处理仍然需要人工检查。纠正关系说得含糊或者一句话里连续推翻三四个值结果可能和你的最终决定不一致。更稳妥的说法是给出明确提示词比如“不对”“改成”“等等”“不是 A是 B”一次只纠正一个对象。如果你要把这套流程用在团队里可以把语料和对照表放进版本库每次模型更新后跑一遍回归。TaoToken 的 API Key 和 Base URL 不变只改 Model ID 就能切换模型回归成本很低。需要长期高频跑的话Coding Plan 页面https://taotoken.net/coding-plan有更合适的方案。快速试单段口述用模型对话https://taotoken.net/chat就够批量对比走 APIKey 在https://taotoken.net/api-keys管理接入细节看https://taotoken.net/doc。语音输入可以容纳不完美的表达但前提是你知道哪些内容适合口述、哪些适合键盘。技术名词和临时改口经常同时出现用这套测试方法跑几轮你就能判断 Typeoff 的自动纠正是否适合自己的工作流。直接读一遍文中的技术测试段落再逐项检查五个最终决定比只说一句“今天天气不错”更接近真实场景。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进