agents-js
agents-js 是一个基于 Node.js 的开源框架,专为构建实时、多模态的 AI 智能体而设计。它让开发者能够轻松创建具备“看、听、理解”能力的语音助手,这些智能体作为可编程参与者运行在服务器端,通过 WebRTC 技术与用户进行低延迟的自然对话。
该工具主要解决了在 Node.js 生态中难以高效搭建复杂实时语音交互系统的痛点。以往开发者可能需要自行处理繁琐的音频流传输、打断检测及多服务集成,而 agents-js 提供了一套完整的解决方案,支持灵活组合各类语音识别(STT)、大语言模型(LLM)和语音合成(TTS)服务。其独特的技术亮点包括基于 Transformer 模型的语义轮次检测,能精准判断用户何时说完,从而大幅减少对话中的不当打断;同时支持通过 RPC 机制与客户端无缝交换数据。
agents-js 非常适合后端开发者、全栈工程师以及希望将 AI 语音能力集成到现有应用中的技术团队使用。无论是开发客服机器人、虚拟陪伴助手还是交互式教育应用,借助其丰富的插件生态(如支持 OpenAI、Google、ElevenLabs 等主流服务),用户都能快速原型验证并部署属于自己的实时 AI 智能体,且完全掌控数据隐私与服务架构。
使用场景
一家在线教育公司希望为其语言学习 App 打造一款能实时纠正发音、进行多轮口语对话的 AI 外教,要求响应延迟极低且支持语音互动。
没有 agents-js 时
- 开发团队需手动拼接独立的语音识别(STT)、大模型(LLM)和语音合成(TTS)服务,导致代码耦合度高,维护困难。
- 难以精准判断用户何时说完话,常出现 AI 打断用户或回应迟缓的尴尬情况,破坏对话流畅性。
- 缺乏原生的 WebRTC 支持,处理实时音视频流时需自行搭建复杂的媒体服务器架构,研发周期长达数月。
- 无法灵活切换不同的 AI 供应商插件,一旦某家服务波动,整个系统面临瘫痪风险且替换成本极高。
使用 agents-js 后
- 利用 agents-js 统一的框架轻松集成 OpenAI 或 Deepgram 等插件,通过 Node.js 快速构建出模块化的多模态对话代理。
- 内置的语义轮次检测功能精准识别用户发言结束点,实现“零打断”的自然人机交互体验。
- 基于 LiveKit 成熟的 WebRTC 生态,直接复用开源客户端 SDK,将实时音视频功能的开发时间从数月缩短至数周。
- 支持热插拔式更换底层 AI 服务插件,团队可根据成本和效果动态调整策略,系统稳定性显著提升。
agents-js 让开发者无需深陷底层媒体处理泥潭,专注于业务逻辑,即可低成本交付生产级的实时语音 AI 应用。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
LiveKit Agents for Node.js
Agent 框架旨在构建运行在服务器上的实时可编程参与者。使用它来创建能够看见、听见并理解的对话式多模态语音助手。
这是 LiveKit Agents 框架 的 Node.js 版本,最初是用 Python 编写的。
✨ 1.0 发布 ✨
本 README 反映的是 1.0 版本。如果您正尝试从 0.x 升级,请参阅迁移指南。
特性
- 灵活的集成:一个全面的生态系统,可以根据您的用例自由组合合适的 STT、LLM、TTS 和实时 API。
- 丰富的 WebRTC 客户端:使用 LiveKit 的开源 SDK 生态系统构建客户端应用,支持所有主流平台。
- 与客户端交换数据:使用 RPC 和其他 数据 API 与客户端无缝交换数据。
- 语义轮次检测:采用 Transformer 模型检测用户何时结束发言,有助于减少打断。
- 开源:完全开源,允许您在自己的服务器上运行整个堆栈,包括 LiveKit 服务器,这是最常用的 WebRTC 媒体服务器之一。
安装
该框架包含多种插件,便于处理流式输入或生成输出。例如,有用于文本转语音或与流行 LLM 进行推理的插件。
- 如果尚未安装
pnpm,请先安装:
npm install -g pnpm
要安装核心 Agents 库以及插件,请运行:
pnpm install @livekit/agents
目前仅支持以下插件:
文档和指南
关于框架及其使用方法的文档可以在这里找到:https://docs.livekit.io/agents/
推荐的入门应用
使用 LiveKit Agents Node.js 入门项目快速启动完整的语音 AI 流程(LLM、STT、TTS):
它包含一个现成的助手、多语言轮次检测、背景噪声消除、指标/日志记录,以及一个生产就绪的 Dockerfile。您可以快速开始,然后根据自己的偏好选择模型和插件进行定制。
核心概念
- Agent:基于 LLM 的应用程序,具有明确的指令。
- AgentSession:用于管理与最终用户交互的代理容器。
- entrypoint:交互会话的起点,类似于 Web 服务器中的请求处理器。
- Worker:负责协调作业调度并为用户会话启动代理的主要进程。
使用方法
请查看快速入门指南
简单的语音代理
import {
type JobContext,
type JobProcess,
WorkerOptions,
cli,
defineAgent,
llm,
voice,
inference,
} from '@livekit/agents';
import * as silero from '@livekit/agents-plugin-silero';
import { fileURLToPath } from 'node:url';
import { z } from 'zod';
const lookupWeather = llm.tool({
description: '用于查询天气信息。',
parameters: z.object({
location: z.string().describe('要查询天气信息的位置'),
}),
execute: async ({ location }, { ctx }) => {
return { weather: 'sunny', temperature: 70 };
},
});
export default defineAgent({
prewarm: async (proc: JobProcess) => {
proc.userData.vad = await silero.VAD.load();
},
entry: async (ctx: JobContext) => {
const agent = new voice.Agent({
instructions: '你是由 LiveKit 构建的友好语音助手。',
tools: { lookupWeather },
});
const session = new voice.AgentSession({
// 语音转文本(STT)是代理的“耳朵”,将用户的语音转换为 LLM 可以理解的文本
// 可用模型请参见 https://docs.livekit.io/agents/models/stt/
stt: new inference.STT({ model: 'deepgram/nova-3', language: 'en' }),
// 大型语言模型(LLM)是代理的“大脑”,处理用户输入并生成响应
// 可用模型请参见 https://docs.livekit.io/agents/models/llm/
llm: new inference.LLM({ model: 'openai/gpt-4.1-mini' }),
// 文本转语音(TTS)是代理的“声音”,将 LLM 的文本转换为用户可以听到的语音
// 可用模型及语音选项请参见 https://docs.livekit.io/agents/models/tts/
tts: new inference.TTS({ model: 'cartesia/sonic-3', voice: '9626c31c-bec5-4cca-baa8-f8ba9e84c8bc' }),
// VAD 和发言轮次检测用于判断用户何时在说话以及代理何时应该回应
// 更多信息请参见 https://docs.livekit.io/agents/build/turns
vad: ctx.proc.userData.vad! as silero.VAD,
turnDetection: new livekit.turnDetector.MultilingualModel(),
// 若要使用实时模型,可将 STT、LLM、TTS 和 VAD 替换为以下内容:
// llm: new openai.realtime.RealtimeModel(),
});
await session.start({
agent,
room: ctx.room,
});
await session.generateReply({
instructions: '问候用户并询问他们今天过得如何',
});
},
});
cli.runApp(new WorkerOptions({ agent: fileURLToPath(import.meta.url) }));
此示例无需任何第三方 API 密钥。它通过 LiveKit 推理网关 即可开箱即用。
多代理交接
此代码片段已简化。完整示例请参阅 multi_agent.ts
type StoryData = {
name?: string;
location?: string;
};
class IntroAgent extends voice.Agent<StoryData> {
constructor() {
super({
instructions: `你是一名说书人。你的目标是从用户那里收集一些信息,使故事更加个性化和引人入胜。请向用户询问他们的姓名和来自哪里。`,
tools: {
informationGathered: llm.tool({
description:
'当用户提供了使故事个性化和引人入胜所需的信息时调用。',
parameters: z.object({
name: z.string().describe('用户的姓名'),
location: z.string().describe('用户的所在地'),
}),
execute: async ({ name, location }, { ctx }) => {
ctx.userData.name = name;
ctx.userData.location = location;
return llm.handoff({
agent: new StoryAgent(name, location),
returns: "让我们开始讲故事吧!",
});
},
}),
},
});
}
// 使用继承创建带有自定义钩子的代理
async onEnter() {
this.session.generateReply({
instructions: '"问候用户并收集信息"',
});
}
}
class StoryAgent extends voice.Agent<StoryData> {
constructor(name: string, location: string) {
super({
instructions: `你是一名说书人。请利用用户的提供的信息使故事更具个性化。
用户的名字是 ${name}, 来自 ${location}`,
});
}
async onEnter() {
this.session.generateReply();
}
}
export default defineAgent({
prewarm: async (proc: JobProcess) => {
proc.userData.vad = await silero.VAD.load();
},
entry: async (ctx: JobContext) => {
await ctx.connect();
const participant = await ctx.waitForParticipant();
console.log('参与者加入:', participant.identity);
const userdata: StoryData = {};
const session = new voice.AgentSession({
vad: ctx.proc.userData.vad! as silero.VAD,
stt: new inference.STT({ model: 'deepgram/nova-3', language: 'en' }),
llm: new inference.LLM({ model: 'openai/gpt-4.1-mini' }),
tts: new inference.TTS({ model: 'cartesia/sonic-3', voice: '9626c31c-bec5-4cca-baa8-f8ba9e84c8bc' }),
userData: userdata,
});
await session.start({
agent: new IntroAgent(),
room: ctx.room,
});
},
});
运行您的代理
该框架提供了一个 CLI 界面来运行您的代理。要开始使用,您需要设置以下环境变量:
LIVEKIT_URLLIVEKIT_API_KEYLIVEKIT_API_SECRET- 任何其他提供商的 API 密钥(例如
OPENAI_API_KEY)
以下命令将启动工作进程,并等待用户连接到您的 LiveKit 服务器:
pnpm run build && node ./examples/src/restaurant_agent.ts dev
使用 Playground 构建代理 UI
为了简化代理的构建和测试过程,我们开发了一个多功能的 Web 前端工具“Playground”。您可以根据自己的需求使用或修改此应用,它也可以作为完全自定义代理应用程序的起点。
生产环境运行
pnpm run build && node ./examples/src/restaurant_agent.ts start
此命令将以生产就绪的优化方式运行代理。
常见问题解答
运行我的代理时会发生什么?
按照上述步骤运行代理后,会启动一个工作进程,该进程会与 LiveKit 服务器实例建立经过身份验证的 WebSocket 连接(由你的 LIVEKIT_URL 定义,并使用访问令牌进行身份验证)。
此时并没有实际运行的代理。相反,工作进程正在等待 LiveKit 服务器为其分配任务。
当创建房间时,服务器会通知已注册的工作进程之一有新任务。被通知的工作进程可以决定是否接受该任务。如果工作进程接受任务,则会将你的代理实例化为参与者,并让其加入房间,从而开始订阅音视频轨道。一个工作进程可以同时管理多个代理实例。
如果被通知的工作进程拒绝了任务,或者在预设的超时时间内未接受任务,服务器会将任务请求路由到另一个可用的工作进程。
当我向工作进程发送 SIGTERM 信号时会发生什么?
编排系统专为生产环境设计。与典型的 Web 服务器不同,代理是一个有状态的程序,因此在活动会话进行中终止工作进程是非常重要的。
当向工作进程发送 SIGTERM 信号时,工作进程会向 LiveKit 服务器表明它不再需要新的任务。同时,它还会自动拒绝任何在服务器收到信号之前到达的新任务请求。工作进程将继续保持运行状态,直到处理完所有连接到房间的代理。
贡献
要为该项目做出贡献:
- 分叉 agents-js 仓库
- 基于
main分支创建一个新的分支 - 进行更改
- 提交拉取请求
- 在标记评审人员之前,请确保完成预审核对清单。
测试更改和插件
要测试任何更改或插件:
构建项目:
pnpm build根据插件更改的需要,编辑
./examples/src/basic_agent.ts使用调试日志运行基础代理:
node ./examples/src/basic_agent.ts dev --log-level=debug
测试代理连接性
要连接并与你的代理对话:
- 前往 LiveKit 控制台沙盒部分
- 启动名为“Web Voice Agent”的沙盒应用
- 运行你的代理,并确保所有 LiveKit API 密钥都已正确配置
- 点击沙盒界面中的蓝色“START CALL”按钮,以测试连接并与你的代理对话。
许可证
本项目采用 Apache-2.0 许可证,并符合 REUSE-3.2 标准。有关详细信息,请参阅 许可证。
| LiveKit 生态系统 | |
|---|---|
| 代理 SDKs | Python · Node.js |
| LiveKit SDKs | 浏览器 · Swift · Android · Flutter · React Native · Rust · Node.js · Python · Unity · Unity (WebGL) · ESP32 · C++ |
| 入门应用 | Python 代理 · TypeScript 代理 · React 应用 · SwiftUI 应用 · Android 应用 · Flutter 应用 · React Native 应用 · 网页嵌入 |
| UI 组件 | React · Android Compose · SwiftUI · Flutter |
| 服务器 API | Node.js · Golang · Ruby · Java/Kotlin · Python · Rust · PHP(社区版) · .NET(社区版) |
| 资源 | 文档 · MCP 服务器文档 · CLI · LiveKit 云 |
| LiveKit 服务器开源软件 | LiveKit 服务器 · Egress · Ingress · SIP |
| 社区 | 开发者社区 · Slack · X · YouTube |
版本历史
@livekit/agents@1.2.32026/04/02@livekit/agents-plugin-silero@1.2.32026/04/02@livekit/agents-plugin-rime@1.2.32026/04/02@livekit/agents-plugin-resemble@1.2.32026/04/02@livekit/agents-plugin-openai@1.2.32026/04/02@livekit/agents-plugin-neuphonic@1.2.32026/04/02@livekit/agents-plugin-livekit@1.2.32026/04/02@livekit/agents-plugin-google@1.2.32026/04/02@livekit/agents-plugin-elevenlabs@1.2.32026/04/02@livekit/agents-plugin-deepgram@1.2.32026/04/02@livekit/agents-plugin-cartesia@1.2.32026/04/02@livekit/agents-plugin-bey@1.2.32026/04/02@livekit/agents-plugin-anam@1.2.32026/04/02@livekit/agents@1.2.22026/03/30@livekit/agents-plugin-silero@1.2.22026/03/30@livekit/agents-plugin-rime@1.2.22026/03/30@livekit/agents-plugin-resemble@1.2.22026/03/30@livekit/agents-plugin-openai@1.2.22026/03/30@livekit/agents-plugin-neuphonic@1.2.22026/03/30@livekit/agents-plugin-livekit@1.2.22026/03/30常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。