
会议转写最让人头疼的往往不是普通话而是“AC-42”“Responses API”这类业务词。模型可能把它们写成发音相近的普通词后续搜索和纪要就一起失效。这个教程用Java 17上传一段已录完的音频调用gpt-transcribe再用上下文、关键词和语言提示改善专有名词识别。你还会学会在上传前检查格式与大小并把“提示词可能诱导幻听”纳入验收。先选对接口文件转写还是实时转写ASRAutomatic Speech Recognition自动语音识别有两类常见输入。录音已经结束、需要最终全文时使用文件转写麦克风或电话音频仍在持续到达时使用Realtime实时转写。不要为了“看起来实时”把完整会议切成大量小文件并并发上传这会破坏上下文还可能让专有名词在每段开头反复丢失。OpenAI官方文件转写文档当前推荐普通录音从gpt-transcribe开始。单文件上限25MB支持mp3、mp4、mpeg、mpga、m4a、wav和webm。需要说话人标签、逐词时间戳、字幕或翻译时再选择相应的专用模型与响应格式。技术原理prompt提供录音背景例如“客户讨论高级套餐和账号”keywords提供可能出现的字面术语languages缩小候选语言范围。它们都是提示不是强制答案。关键词放得太多或包含未说出的品牌名反而可能让模型把噪声“听成”提示词。因此术语表应短、与会议主题相关并通过有标准答案的录音评测。是否已完成的会议录音Java检查格式与25MB上限附加主题/关键词/语言提示gpt-transcribe得到全文与语言信息术语命中与人工抽检达到门槛?进入搜索与纪要调整术语表或转人工环境准备需要Java 17、Maven和有效密钥。Maven依赖dependencygroupIdcom.openai/groupIdartifactIdopenai-java/artifactIdversion4.75.1/version/dependencyexportOPENAI_API_KEY你的密钥exportOPENAI_EXAMPLE_AUDIO_PATHmeeting.wavmvn-qcompile exec:java-Dexec.mainClassMeetingTranscriber完整代码importcom.openai.client.OpenAIClient;importcom.openai.client.okhttp.OpenAIOkHttpClient;importcom.openai.core.JsonValue;importcom.openai.models.audio.transcriptions.TranscriptionCreateParams;importjava.nio.file.Files;importjava.nio.file.Path;importjava.time.Duration;importjava.util.List;importjava.util.Set;publicclassMeetingTranscriber{privatestaticfinallongMAX_BYTES25L*1024*1024;privatestaticfinalSetStringEXTENSIONSSet.of(mp3,mp4,mpeg,mpga,m4a,wav,webm);publicstaticvoidmain(String[]args){StringkeySystem.getenv(OPENAI_API_KEY);StringaudioEnvSystem.getenv(OPENAI_EXAMPLE_AUDIO_PATH);if(keynull||key.isBlank()||audioEnvnull||audioEnv.isBlank()){System.err.println(请设置 OPENAI_API_KEY 和 OPENAI_EXAMPLE_AUDIO_PATH);System.exit(2);}PathaudioPath.of(audioEnv);try{if(!Files.isRegularFile(audio)){thrownewIllegalArgumentException(音频文件不存在: audio);}Stringnameaudio.getFileName().toString().toLowerCase();Stringextname.contains(.)?name.substring(name.lastIndexOf(.)1):;if(!EXTENSIONS.contains(ext)){thrownewIllegalArgumentException(不支持的格式: ext);}if(Files.size(audio)MAX_BYTES){thrownewIllegalArgumentException(文件超过25MB请先压缩或合理分段);}OpenAIClientclientOpenAIOkHttpClient.builder().fromEnv().timeout(Duration.ofSeconds(90)).build();TranscriptionCreateParamsparamsTranscriptionCreateParams.builder().file(audio).model(gpt-transcribe).prompt(一场中文产品会议讨论Responses API、AC-42账号和billing账单。).putAdditionalBodyProperty(keywords,JsonValue.from(List.of(Responses API,AC-42,billing))).putAdditionalBodyProperty(languages,JsonValue.from(List.of(zh,en))).build();varresultclient.audio().transcriptions().create(params);Stringtextresult.asTranscription().text();if(textnull||text.isBlank()){thrownewIllegalStateException(API返回空转写请人工检查音频);}System.out.println(text);}catch(Exceptionex){System.err.println(转写失败: ex.getMessage());System.exit(1);}}}逐段解释代码先验证两个环境变量避免把密钥写进源码或把空路径交给SDK。随后检查文件是否存在、扩展名是否受支持以及是否超过25MB。扩展名检查只能防明显误用不能证明文件内容真实生产系统还应读取媒体头、限制时长并在隔离环境中做恶意文件扫描。客户端超时设为90秒因为上传和转写音频通常比文本请求慢。参数中的prompt描述上下文keywords只列三项真正可能出现的术语languages表示中英混合。官方特别提醒gpt-transcribe使用复数languages不要再同时发送旧的单数language字段。最后读取转写文本并拒绝空结果。示例没有自动生成会议结论因为“听清楚”与“总结正确”是两个评测问题。更稳妥的做法是先保存可追溯转写再由另一个结构化步骤抽取行动项并把时间、说话人或原始音频片段作为证据。长录音如何分段而不丢上下文25MB是文件限制不是建议把音频按固定字节硬切。压缩格式的字节位置不等于语句边界随意切割可能从一个词中间断开。更稳妥的流程是先用媒体工具按静音或时间轴切分保留5到10秒重叠并为每段记录原始起止时间。拼接文本时再用时间范围去重不能简单删除所有相同句子因为会议里确实可能重复一句决定。每段的prompt可以带上会议主题和稳定术语但不要把上一段未经核验的完整转写当作事实继续传播。若确实需要衔接只提供最后一两句并明确它们是“可能的上下文”。这样能减少错误像接力棒一样传到后续所有分段。音频质量问题也应显式记录。采样率低、多人同时说话、远场回声和键盘噪声会造成不同类型错误。与其让模型给一个未经校准的总置信度不如在上传前记录声道、时长、平均响度和静音比例再把高噪声样本送人工抽检。预期输出如果录音中说“AC-42账号的billing账单需要复核”终端应看到包含这些拼写的完整转写。真实文本取决于音频内容不能预设固定答案。本次任务未提供真实录音和API密钥当前机器也没有Java运行时与Maven所以示例只依据官方Java代码和SDK 4.75.1接口做了静态审阅没有编译或调用线上API。上线前必须在目标JDK和真实测试录音上执行。常见错误完整录音误用实时接口增加状态管理复杂度已结束文件直接用文件转写。文件刚好25MB仍发送代理和封装可能带来额外限制最好留出余量或先压缩。关键词越多越好无关词会诱导误识别应只保留会议中确有可能出现的词。同时发送language和languagesgpt-transcribe应使用languages两者并用会被拒绝。转写一出就发布纪要姓名、数字、否定词和行动负责人必须抽检。适用与不适用场景适合已完成的访谈、课程、客服录音和会议资料归档。不适合需要毫秒级字幕的直播也不适合未经同意上传敏感录音。医疗、法律和人事场景还要评估数据驻留、保留期、访问控制及当事人授权。工程化改进建立一组带人工标准稿的录音按普通词、专有名词、数字和中英切换分别计算错误率对同一批录音比较“无提示”和“短术语表”确认提示确实改善而非制造词。长录音分段时保留少量重叠和会议级上下文并记录每段哈希、模型ID、SDK版本、请求ID与重试次数。失败时不要无限重试应进入人工队列。WERWord Error Rate词错误率可以衡量整体转写但中文分词方案会影响结果而且一个错数字的业务风险远大于漏掉语气词。建议再增加“关键实体准确率”姓名、日期、金额、产品名和行动负责人分别计分。对关键词提示还要统计幻听率即录音没有出现某术语时系统是否因为提示而错误写出它。隐私治理同样不能后补。录音上传前应取得授权按会议级别决定是否允许云端处理存储时把原音频、转写和摘要分开授权设置明确保留期。调试日志不要记录完整音频URL或转写正文。用户要求删除时要能定位所有派生产物而不是只删入口文件。5分钟实践题把关键词替换为你项目中的三个真实术语准备一段20秒录音其中只说出两个词。比较有无关键词时的转写特别检查第三个未说出的词是否被错误“听见”。在你的会议记录里专有名词正确率和实时速度哪一个更重要关注「蜗牛聊AI」一起看懂技术变化背后的真正机会。本文首发于 java4u.cn转载请注明出处。