Skip to main content
开始使用 LangChain 中的 Soniox 音频转录加载器。

设置

安装包:
npm2yarn
npm install @soniox/langchain

凭证

Soniox 控制台 获取您的 Soniox API 密钥,并将其设置为环境变量:
export SONIOX_API_KEY=your_api_key

使用

基础转录

示例如何使用 SonioxAudioTranscriptLoader 转录音频文件,并使用 LLM 生成摘要。
import { SonioxAudioTranscriptLoader } from "@soniox/langchain";
import { ChatOpenAI } from "@langchain/openai";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";

const audioFileUrl = "https://soniox.com/media/examples/coffee_shop.mp3";
const loader = new SonioxAudioTranscriptLoader(
  {
    audio: audioFileUrl,
  },
  {
    language_hints: ["en"],
    // 您可以在此处找到的任何其他转录参数
    // https://soniox.com/docs/stt/api-reference/transcriptions/create_transcription
  }
);

console.log(`正在转录 ${audioFileUrl}...`);
const docs = await loader.load();

const transcriptText = docs[0].pageContent;
console.log(`转录文本:${transcriptText}`);

// 创建用于总结转录文本的链
const prompt = ChatPromptTemplate.fromTemplate(
  "为以下语音写一个简洁的摘要:\n\n{transcript}"
);

const chain = prompt
  .pipe(new ChatOpenAI({ model: "gpt-5-mini" }))
  .pipe(new StringOutputParser());

const summary = await chain.invoke({ transcript: transcriptText });
console.log(summary);
您也可以从二进制数据转录音频:
// 获取文件
const response = await fetch("https://github.com/soniox/soniox_examples/raw/refs/heads/master/speech_to_text/assets/coffee_shop.mp3");
const audioBuffer = await response.bytes(); // Uint8Array

const loader = new SonioxAudioTranscriptLoader({
    audio: audioBuffer,
})

const docs = await loader.load();
console.log(docs[0].pageContent); // 转录文本

翻译

将任何检测到的语言翻译为目标语言:
const loader = new SonioxAudioTranscriptLoader(
  {
    audio: audioFileUrl,
  },
  {
    translation: {
      type: "one_way",
      target_language: "fr",
    },
    language_hints: ["en"],
  }
);

const docs = await loader.load();

let originalText = "";
let translatedText = "";

for (const token of docs[0].metadata.tokens) {
  if (token.translation_status === "translation") {
    translatedText += token.text;
  } else {
    originalText += token.text;
  }
}

console.log(originalText);
console.log(translatedText);
您也可以使用 two_way 翻译类型同时进行转录和两种语言之间的翻译。了解更多关于 Soniox 翻译 的信息。

语言提示

Soniox 自动检测并转录 60 多种语言 的语音。当您知道音频中可能出现哪些语言时,提供 language_hints 可以通过偏向识别这些语言来提高准确性。 语言提示 不限制 识别——它们仅 偏向 模型朝向指定的语言,同时仍允许检测其他语言(如果存在)。
const loader = new SonioxAudioTranscriptLoader(
  {
    audio: audioFileUrl,
  },
  {
    language_hints: ["en", "es"],
  }
);

const docs = await loader.load();
更多详情,请参阅 Soniox 语言提示文档

说话人分离

启用说话人识别以区分不同的说话人:
const loader = new SonioxAudioTranscriptLoader(
  {
    audio: audioFileUrl,
  },
  {
    enable_speaker_diarization: true,
  }
);

const docs = await loader.load();

// 在元数据中访问说话人信息
let currentSpeaker = null;
let output = "";
for (const token of docs[0].metadata.tokens) {
  if (currentSpeaker !== token.speaker) {
    currentSpeaker = token.speaker;
    output += `\n说话人 ${currentSpeaker}${token.text.trimStart()}`;
  } else {
    output += token.text;
  }
}
console.log(output);

// 分析对话
const prompt = ChatPromptTemplate.fromTemplate(
  `分析以下说话人之间的对话。
识别每个说话人的意图。

对话:
{conversation}`
);

const chain = prompt
  .pipe(new ChatOpenAI({ model: "gpt-5-mini" }))
  .pipe(new StringOutputParser());

const analysis = await chain.invoke({ conversation: output });
console.log(analysis);

语言识别

启用自动语言检测和识别:
const loader = new SonioxAudioTranscriptLoader(
  {
    audio: audioFileUrl,
  },
  {
    enable_language_identification: true,
  }
);

上下文以提高准确性

提供特定领域的 上下文 以提高转录准确性:
const loader = new SonioxAudioTranscriptLoader(
  {
    audio: audioBuffer,
  },
  {
    context: {
      general: [
        { key: "industry", value: "healthcare" },
        { key: "meeting_type", value: "consultation" }
      ],
      terms: ["hypertension", "cardiology", "metformin"],
      translation_terms: [
        { source: "blood pressure", target: "presión arterial" },
        { source: "medication", target: "medicamento" }
      ]
    }
  }
);
更多详情,请参阅 Soniox 上下文文档

API 参考

构造函数参数

SonioxLoaderParams(必需)

参数类型必需描述
audioUint8Array | string音频文件作为缓冲区或 URL
audioFormatSonioxAudioFormat音频文件格式
apiKeystringSoniox API 密钥(默认为 SONIOX_API_KEY 环境变量)
apiBaseUrlstringAPI 基础 URL(默认为 https://api.soniox.com/v1
pollingIntervalMsnumber轮询间隔(毫秒)(最小值:1000,默认值:1000)
pollingTimeoutMsnumber轮询超时(毫秒)(默认值:180000)

SonioxLoaderOptions(可选)

参数类型描述
modelSonioxTranscriptionModelId使用的模型(默认:"stt-async-v4"
translationobject翻译配置
language_hintsstring[]转录的语言提示
language_hints_strictboolean强制执行严格的语言提示
enable_speaker_diarizationboolean启用说话人识别
enable_language_identificationboolean启用语言检测
contextobject用于提高准确性的上下文
浏览 文档 以获取支持的完整选项列表。

支持的音频格式

  • aac - 高级音频编码
  • aiff - 音频交换文件格式
  • amr - 自适应多速率
  • asf - 高级系统格式
  • flac - 免费无损音频编解码器
  • mp3 - MPEG 音频层 III
  • ogg - Ogg Vorbis
  • wav - 波形音频文件格式
  • webm - WebM 音频

返回值

load() 方法返回一个包含单个 Document 对象的数组:
type Document {
  pageContent: string, // 转录文本
  metadata: SonioxTranscriptResponse // 包含元数据的完整转录
}
元数据包括转录文本、说话人信息(如果启用了分离)、语言信息(如果启用了识别)、翻译数据(如果启用了翻译)以及时间信息。
type SonioxTranscriptResponse = {
  id: string;
  text?: string | null;
  tokens?: SonioxTranscriptToken[] | null;
}
令牌类型:
type SonioxTranscriptToken = {
  text: string;
  start_ms?: number | null;
  end_ms?: number | null;
  confidence?: number | null;
  speaker?: number | string | null;
  language?: string | null;
  translation_status?: string | null;
};
您可以在 Soniox REST API 参考 中了解更多关于 SonioxTranscriptResponse 类型的信息。

相关