@11labs/react

中文文档
0.2.0发布于 2025/08/13MITTypeScriptESM + CJS近 30 天下载 12.7万

11Labs 反应库

此软件包已被标记为弃用

This package is no longer maintained. Please use @elevenlabs/react for the latest version

中文使用文档
文档目录5 节
  1. 安装
  2. 使用量
  3. 使用组合
  4. 发展
  5. 捐款

11Labs 反应库

一个SDK库,用于在基于React的应用程序中使用"11Lab". 如果你想找一个Node.js图书馆,请参考 十一拉布斯节点js 图书馆。 。 。 .

请注意,这个图书馆的启动主要是为了支持对话AI. 今后计划支持语音综合和其他更通用的用法案例.

LOGO Discord Twitter

安装

通过软件包管理器在您的工程中安装软件包 .

npm install @elevenlabs/react
# or
yarn add @elevenlabs/react
# or
pnpm install @elevenlabs/react

使用量

使用组合

用于管理WebSocket和WebRTC的连接和音频使用,用于11Labs对话AI.

初始化对话

首先,初始化对话实例.

const conversation = useConversation();

注意对话AI需要麦克风访问. 考虑解释和允许麦克风进入您的应用程序 UI 在对话开始前。 麦克风也可能默认被屏蔽当前页面,导致允许的提示完全不出现. 您应当在应用程序中处理此用途, 并向用户显示适当的消息 :

// call after explaning to the user why the microphone access is needed
// handle errors and show appropriate message to the user
try {
  await navigator.mediaDevices.getUserMedia();
} catch {
  // handle error
}

选项

对话可以通过某些选项初始化. 这些都是可选的.

const conversation = useConversation({
  /* options object */
});
  • 客户端工具 - 代理人可以引用的客户端工具的对象定义. 见下文 详细情况.
  • 覆盖 - 对象定义对话设置覆盖. 见下文 详细情况.
  • 文本仅 - 对话是否应当以文本模式运行. 见下文 详细情况.
  • 连接 - 接线员打电话来.
  • 断开连接 - 接线员在谈话结束的时候打电话来.
  • 新闻 - 收到新消息后,处理者打电话来 这些可以是用户语音的暂定或最终的抄录,由LLM生成的回覆,也可以是调试选项启用后调试消息.
  • 错误 - 遇到错误时调用处理器.
客户端工具

客户端工具是一种使代理能够引用客户端功能的方法. 这可用于触发客户端中的动作,例如打开一个模式或者代表用户进行API呼叫.

客户工具定义是函数的对象,需要与您的配置在 十一实验室,其中可以命名和描述不同的工具,也可以设置代理传递的参数.

const conversation = useConversation({
  clientTools: {
    displayMessage: (parameters: { text: string }) => {
      alert(text);

      return "Message displayed";
    },
  },
});

在万一函数返回一个值时,它会被传递回代理作为响应. 请注意,该工具需要被明确设定为在"十一律所UI"中阻断对话,以便代理等待并响应响应,否则代理就假定成功并继续进行对话.

对话覆盖

您可以选择覆盖对话的各种设置, 并按动态设置其他用户互动 . 我们支持超越各种环境. 这些设置是可选的,可用于自定义对话体验. 以下设置可供使用:

const conversation = useConversation({
  overrides: {
    agent: {
      prompt: {
        prompt: "My custom prompt",
      },
      firstMessage: "My custom first message",
      language: "en",
    },
    tts: {
      voiceId: "custom voice id",
    },
    conversation: {
      textOnly: true,
    },
  },
});

用户识别

您可以选择通过用户ID来识别对话中的用户. 这可以是你自己的客户识别码. 这将包含在发送给服务器的对话启动数据中:

跟踪这个ID可以帮助过滤对话,跟踪用户层面的分析等.

// Or pass it when starting the session
const conversationId = await conversation.startSession({
  agentId: "<your-agent-id>",
  userId: "user-123",
  connectionType: "webrtc",
});

只有文本

如果您的代理被配置为只以文本模式运行, 即它不发送或接收音频消息, 您可以使用此旗帜来使用较轻版本的对话。 在这种情况下 用户不会被请求麦克风权限,也不会创建音频上下文.

const conversation = useConversation({
  textOnly: true,
});

IOS 设备首选耳机

虽然这个SDK将音频输入/输出设备的选择留给了浏览器/系统,但iOS Safari似乎更喜欢内置的扬声器而不是耳机,即使蓝牙设备正在被使用. 如果您想要在iOS设备可用时"强制"使用耳机,可以使用以下选项. 请记住,由于浏览器不提供这种功能,所以不能保证这一点. 系统音频应该是默认的选择.

const conversation = useConversation({
  preferHeadphonesForIosDevices: true,
});

连接延迟

您可以在麦克风启动到连接建立之间配置额外的延迟 . 在Android上,延迟默认被设定为3秒,以确保设备有时间切换到正确的音频模式. 没有它,你可能会遇到问题 随着第一个消息的开头被切断.

const conversation = useConversation({
  connectionDelay: {
    android: 3_000,
    ios: 0,
    default: 0,
  },
});

获取醒锁

默认情况下,对话将试图获得 唤醒锁 防止设备在谈话中入睡. 通过设置 useWakeLock 选项到 false数字 :

const conversation = useConversation({
  useWakeLock: false,
});

方法

开始集合

startConversation 方法可以踢出WebSocket或WebRTC连接,并开始使用麦克风与"十一实验室"对话AI代理通信. 该方法接受一个选项对象,其中 signedUrl, (中文(简体) ), conversationToken 或者说 agentId 需要选项.

代理ID可以通过 十一实验室 总是必要的.

const conversation = useConversation();

// For public agents, pass in the agent ID and the connection type
const conversationId = await conversation.startSession({
  agentId: "<your-agent-id>",
  connectionType: "webrtc", // either 'webrtc' or 'websocket'
});

对于公共代理人(即没有启用认证的代理人),定义 agentId - 不需要签名的链接生成.

如果谈话需要授权,使用REST API生成WebSocket连接的签名链接或WebRTC连接的谈话符.

startSession 返回承诺 conversationId。该值是一个全球独特的对话ID,您可以用来识别单独的对话.

用于 WebSocket 连接 :

// Node.js server

app.get("/signed-url", yourAuthMiddleware, async (req, res) => {
  const response = await fetch(
    `https://api.elevenlabs.io/v1/convai/conversation/get-signed-url?agent_id=${process.env.AGENT_ID}`,
    {
      headers: {
        // Requesting a signed url requires your ElevenLabs API key
        // Do NOT expose your API key to the client!
        "xi-api-key": process.env.ELEVENLABS_API_KEY,
      },
    }
  );

  if (!response.ok) {
    return res.status(500).send("Failed to get signed URL");
  }

  const body = await response.json();
  res.send(body.signed_url);
});
// Client

const response = await fetch("/signed-url", yourAuthHeaders);
const signedUrl = await response.text();

const conversation = await Conversation.startSession({
  signedUrl,
  connectionType: "websocket",
});

对于 WebRTC 连接 :

// Node.js server

app.get("/conversation-token", yourAuthMiddleware, async (req, res) => {
  const response = await fetch(
    `https://api.elevenlabs.io/v1/convai/conversation/token?agent_id=${process.env.AGENT_ID}`,
    {
      headers: {
        // Requesting a conversation token requires your ElevenLabs API key
        // Do NOT expose your API key to the client!
        'xi-api-key': process.env.ELEVENLABS_API_KEY,
      }
    }
  );

  if (!response.ok) {
    return res.status(500).send("Failed to get conversation token");
  }

  const body = await response.json();
  res.send(body.token);
);
// Client

const response = await fetch("/conversation-token", yourAuthHeaders);
const conversationToken = await response.text();

const conversation = await Conversation.startSession({
  conversationToken,
  connectionType: "webrtc",
});
会议结束

手动结束对话的方法. 该方法会结束与websocket的交谈和断开.

await conversation.endSession();
发送回信

一个向代理发送二进制反馈的方法. 该方法接受布尔值,其中 true 表示积极的反馈 false 负面反馈. 反馈总是与最近的代理响应相关,每次响应只能发送一次. 检查 canSendFeedback 状态,以查看能否在特定时刻发送反馈.

const { sendFeedback } = useConversation();

sendFeedback(true); // positive feedback
sendFeedback(false); // negative feedback
发送文本更新

向代理发送背景更新的方法 . 这可以用来告知代理商与对话没有直接关联的用户动作,但可能影响代理商的反应.

const { sendContextualUpdate } = useConversation();

sendContextualUpdate(
  "User navigated to another page. Consider it for next response, but don't react to this contextual update."
);
发送用户信息

向代理人发送短信.

可用于让用户在信件中输入而不是使用麦克风. 与 sendContextualUpdate,这将会被当作一个用户消息,并会促使代理商在对话中自行决定.

const { sendUserMessage, sendUserActivity } = useConversation();
const [value, setValue] = useState("");

return (
  <>
    <input
      value={value}
      onChange={e => {
        setValue(e.target.value);
        sendUserActivity();
      }}
    />
    <button
      onClick={() => {
        sendUserMessage(value);
        setValue(value);
      }}
    >
      SEND
    </button>
  </>
);
发送用户活动

通知代理用户活动.

该代理在检测到用户活动后至少2秒内不会尝试发言. 这可以用来防止代理在打字时打断用户.

const { sendUserMessage, sendUserActivity } = useConversation();
const [value, setValue] = useState("");

return (
  <>
    <input
      value={value}
      onChange={e => {
        setValue(e.target.value);
        sendUserActivity();
      }}
    />
    <button
      onClick={() => {
        sendUserMessage(value);
        setValue(value);
      }}
    >
      SEND
    </button>
  </>
);
设置

设置对话输出量的方法 。 接受体积字段在0到1之间的对象.

const [volume, setVolume] = useState(0.5);
const conversation = useConversation({ volume });

// Set the volume
setVolume(0.5);
哑弹Mic

哑/解麦克风的方法.

const [micMuted, setMicMuted] = useState(false);
const conversation = useConversation({ micMuted });

// Mute the microphone
setMicMuted(true);

// Unmute the microphone
setMicMuted(false);
状态

包含当前对话状态的反应状态 .

const { status } = useConversation();
console.log(status); // "connected" or "disconnected"
说话

一个反应状态,包含该代理是否正在说话的信息. 用于在您的 UI 中显示模式 .

const { isSpeaking } = useConversation();
console.log(isSpeaking); // boolean
发送后退

一个反应状态,代表用户是否可以向代理发送反馈. 假的,打给 sendFeedback 将被忽略. 这样做有助于有条件地在您的用户界面中显示反馈按钮 .

const { canSendFeedback } = useConversation();
console.log(canSendFeedback); // boolean

发展

请参考此寄存器根中的 README. md 文件 .

捐款

请先创建一个问题来讨论提议的修改。 欢迎任何贡献!

记住,如果合并,你的代码将作为麻省理工学院许可项目的一部分使用. 通过提交"拉出请求",你同意将您的代码整合到这个库中.

版本与发布记录

@11labs/react 共发布 27 个版本,首次发布于 2024/10/12;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.2.0latest2025/08/131.2 年前
0.1.42025/05/041.5 年前
0.1.32025/04/141.6 年前
0.1.22025/04/081.6 年前
0.1.2-beta.1beta2025/03/281.6 年前
0.1.02025/03/261.6 年前

关于 @11labs/react 的常见问题

@11labs/react 是什么?

11Labs 反应库注意:该包已被作者标记为弃用——This package is no longer maintained. Please use @elevenlabs/react for the latest version

如何安装 @11labs/react?

在项目目录运行 npm install @11labs/react,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=16.8.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@11labs/react 支持 TypeScript 吗?

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

@11labs/react 支持 ESM 还是 CommonJS?

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

@11labs/react 可以商用吗?

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

@11labs/react 的下载量有多少?

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

@11labs/react 还在维护吗?

最新版本 0.2.0 发布于 2025/08/13(1.2 年前);至今共发布 27 个版本,其中过去 12 个月发布了 0 个;首次发布于 2024/10/12。作者已将其标记为弃用,新项目建议寻找替代方案。