@deepgram/agents

中文文档
0.2.0发布于 2026/10/21MITTypeScriptESM + CJS构建来源已验证近 30 天下载 3万

Deepgram Voice Agent SDK — 有麦克风和音频回放的浏览器/节点WebSocket客户端

中文使用文档
文档目录20 节
  1. 状态
  2. 安装
  3. 快速启动
  4. 认证
  5. 代理会议
  6. 构造器
  7. 配置
  8. 方法
  9. 活动
  10. 状态
  11. 重新连接
  12. 麦克风代理
  13. 使用量
  14. 音量和频率数据
  15. 活动
  16. 代理服务器
  17. 使用量
  18. 音量和频率数据
  19. 出口
  20. 许可证

@ depgram/ 代理服务器

核心 SDK 用于 Deepgram 语音代理 API。管理WebSocket会话,麦克风抓取,以及音频回放的音量/频率分析.

状态

此包为前1.0. 界面在小版本之间可能会有变化.

安装

npm install @deepgram/agents

或与 Bun 连接 :

bun add @deepgram/agents

快速启动

import { AgentSession, AgentMicrophone, AgentPlayer } from "@deepgram/agents";

const session = new AgentSession({
  auth: { tokenFactory: () => fetch('/api/deepgram-token').then(r => r.text()) },
  agent: {
    listen: { provider: { type: 'deepgram', version: 'v1', model: 'nova-3' } },
    think: { provider: { type: 'open_ai', model: 'gpt-4o-mini' } },
    speak: { provider: { type: 'deepgram', model: 'aura-2-thalia-en' } },
  },
  audio: { output: { encoding: 'linear16', sampleRate: 24_000 } },
});

const player = new AgentPlayer();
session.on("audio", (chunk) => player.queue(chunk));
session.on("conversation-text", (msg) => {
  console.log(`${msg.role}: ${msg.content}`);
});

const mic = new AgentMicrophone((data) => session.sendAudio(data));

await session.connect();
await mic.start();

// Later:
// mic.stop();
// session.disconnect();
// player.dispose();

认证

通过两个认证模式 AgentSessionConfig.auth数字 :

// Server-side: raw API key
{ apiKey: "your-deepgram-api-key" }

// Browser-safe: token factory (recommended)
{ tokenFactory: () => fetch('/api/token').then(r => r.text()) }

在每次连接和再连接尝试之前,都叫"代币工厂". 托肯被缓存到被再连接所失效,因此工厂并不是在每个音频帧上调用.

SDK使用 Sec-WebSocket-Protocol 页眉诡计 -- -- 浏览器 WebSocket 构造器不支持自定义信头,因此该符被传递为子标值. 这是内部处理的.

代理会议

核心WebSocket会话. 环绕 @deepgram/sdk与 :

  • Token 工厂认证(每次重新连接的新证书)
  • 类型事件
  • 与 jitter 重接的指向后退
  • 自动保存Alive pings
  • 音频缓冲到 SettingsApplied
  • SDK 二进制命令正常化 Blob 信件给 ArrayBuffer

@deepgram/agents 直接取决于 @deepgram/sdk。它会禁用基本的套接字重试,并拥有应用程序级重接,这样每次尝试都可以刷新认证并恢复设置。 仅为内置代理配置而恢复累积的对话上下文;协议不能将内置上下文附加到代理 UUID上. 消费者继续收到文件 ArrayBuffer 从 audio 事件,即使基本的 SDK 发送二进制消息给它的回调为 Blob。 。 。 .

构造器

const session = new AgentSession(config: AgentSessionConfig);

配置

interface AgentSessionConfig {
  auth: { apiKey: string } | { tokenFactory: () => Promise<string> };
  agent: AgentSettingsObject | string;  // inline config or pre-built agent UUID
  audio?: {
    input?: { encoding?: AudioEncoding; sampleRate?: number };   // default: linear16 @ 16kHz
    output?: { encoding?: OutputEncoding; sampleRate?: number }; // default: linear16 @ 24kHz
  };
  keepAliveInterval?: number;  // default: 10_000ms
  reconnect?: ReconnectConfig;
  experimental?: boolean;
  tags?: string[];
}

方法

方法说明
connect()打开 WebSocket 连接
disconnect()关闭连接( 无重新连接)
clearConversationHistory()用于未来内置代理重联的清晰上下文
sendAudio(data: ArrayBuffer)发送 PCM 音频帧( 排至设置应用)
injectUserMessage(content)作为用户发送短信
injectAgentMessage(message, behavior?)插入文本为可选代理 default, (中文(简体) ), queue,或 interrupt 行为
updateListen(listen)更新会话中段的监听设置
updateSpeak(speak)更新会中 TTS 设置
updateThink(think)更新会话中段 LLM 设置
updatePrompt(prompt)更新系统提示会中
sendFunctionCallResponse(id, name, content)响应函数调用请求
getId()从欢迎返回请求ID

活动

session.on("welcome", (msg) => {});
session.on("settings-applied", (msg) => {});
session.on("conversation-text", (msg) => {});
session.on("user-started-speaking", (msg) => {});
session.on("agent-thinking", (msg) => {});
session.on("agent-started-speaking", (msg) => {});
session.on("agent-audio-done", (msg) => {});
session.on("function-call-request", (msg) => {});
session.on("function-call-response", (msg) => {});
session.on("prompt-updated", (msg) => {});
session.on("speak-updated", (msg) => {});
session.on("think-updated", (msg) => {});
session.on("listen-updated", (msg) => {});
session.on("latency-report", (msg) => {});
session.on("history", (msg) => {});
session.on("injection-refused", (msg) => {});
session.on("error", (msg) => {});
session.on("warning", (msg) => {});

// Binary audio from the agent
session.on("audio", (chunk: ArrayBuffer) => {});

// SDK lifecycle
session.on("connecting", () => {});
session.on("connected", () => {});
session.on("reconnecting", (attempt, delayMs) => {});
session.on("disconnected", (reason) => {});
session.on("sdk-error", (err) => {});

状态

session.state; // "idle" | "connecting" | "connected" | "reconnecting" | "disconnected"

重新连接

自动重联是默认启用的,带有指数回放+jitter. 之后 SettingsApplied,每个运行时间设置的最新值(即时,听取,说话,思考)会被重放,按每次设置最后一次更新时排序,再连接时的音频队列被冲出. 仅为内置代理配置恢复已累积的文本和已完成的函数调用上下文. 在意外的关闭或出错后发送的音频会停留在尝试中队列并仅在替换连接收到后才恢复 SettingsApplied。连续尝试计数器也在 SettingsApplied不仅仅是在运输开通时 通过 reconnect数字 :

{
  enabled: true,       // default
  maxAttempts: 8,      // default
  baseDelay: 500,      // ms, default
  maxDelay: 30_000,    // ms, default
  jitter: true,        // default: +/-20%
}

麦克风代理

通过AudioWorklet从用户的麦克风中捕获PCM音频.

使用量

const mic = new AgentMicrophone(
  (data: ArrayBuffer) => session.sendAudio(data),
  {
    sampleRate: 16_000,         // default
    echoCancellation: true,     // default
    noiseSuppression: true,     // default
    autoGainControl: true,      // default
  },
);

await mic.start();
mic.mute();
mic.unmute();
mic.stop();

音量和频率数据

mic.getInputVolume();            // 0-1, RMS-based
mic.getInputByteFrequencyData(); // Uint8Array of frequency bin magnitudes (0-255)

活动

mic.on("audio-frame", (data: ArrayBuffer) => {});
mic.on("error", (err: Error) => {});

代理服务器

解码并播放原始 PCM Int16 ()linear16) 代理的音频. 提供可视化的体积/频率分析,并支持通过 interrupt()。 。 。 . AgentPlayer 不解码压缩输出; 使用 linear16 输出或提供单独的解码器/播放器.

使用量

const player = new AgentPlayer({ sampleRate: 24_000 }); // default

// Queue audio from the session
session.on("audio", (chunk) => player.queue(chunk));

// Barge-in: interrupt when the user starts speaking
session.on("user-started-speaking", () => player.interrupt());

// Volume control
player.setVolume(0.8);
player.mute();
player.unmute();

// Cleanup
player.dispose();

音量和频率数据

player.getOutputVolume();            // 0-1, RMS-based
player.getOutputByteFrequencyData(); // Uint8Array of frequency bin magnitudes (0-255)
player.getRemainingPlaybackTime();   // seconds of queued audio remaining

出口

// Classes
export { AgentSession, AgentMicrophone, AgentPlayer };

// Types
export type {
  AgentState,
  AgentSessionConfig, AuthConfig, TokenFactory, ReconnectConfig,
  AgentSessionEvents,
  MicrophoneOptions,
  PlayerOptions,
  AgentSettingsObject, ListenSettings, ThinkSettings, SpeakSettings,
  AgentMessageBehavior,
  // Server messages
  WelcomeMessage, SettingsAppliedMessage, ConversationTextMessage,
  UserStartedSpeakingMessage, AgentThinkingMessage,
  FunctionCallRequestMessage, FunctionCallResponseMessage, FunctionCallItem,
  AgentStartedSpeakingMessage, AgentAudioDoneMessage,
  PromptUpdatedMessage, SpeakUpdatedMessage, ThinkUpdatedMessage,
  ListenUpdatedMessage, LatencyReportMessage, HistoryMessage,
  AgentErrorMessage, AgentWarningMessage,
  InjectionRefusedMessage, ServerMessage,
};

许可证

麻省理工学院

版本与发布记录

@deepgram/agents 共发布 3 个版本,首次发布于 2026/05/01;过去 12 个月发布了 3 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.2.0latest2026/10/2121 天前
0.1.22026/09/042 个月前
0.1.12026/05/016 个月前

关于 @deepgram/agents 的常见问题

@deepgram/agents 是什么?

Deepgram Voice Agent SDK — 有麦克风和音频回放的浏览器/节点WebSocket客户端

如何安装 @deepgram/agents?

在项目目录运行 npm install @deepgram/agents,或使用 pnpm add / yarn add / bun add。

@deepgram/agents 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@deepgram/agents 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@deepgram/agents 可以商用吗?

@deepgram/agents 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@deepgram/agents 的下载量有多少?

根据 npm 官方下载统计,@deepgram/agents 在 2026/10/12 – 2026/11/10 这 30 天内被下载 30,091 次,日均约 1,003 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@deepgram/agents 还在维护吗?

最新版本 0.2.0 发布于 2026/10/21(21 天前);至今共发布 3 个版本,其中过去 12 个月发布了 3 个;首次发布于 2026/05/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。