检索增强生成

使用 RAG 通过大型知识库增强智能体。

概述

检索增强生成(RAG) 让智能体能在对话中访问和使用大型知识库。RAG 不会将整个文档加载到上下文窗口,而是仅为每个用户查询检索最相关的信息,使智能体能够:

  • 访问远超提示词容量的知识库
  • 提供更准确、有知识依据的回复
  • 通过引用源材料减少幻觉
  • 无需创建多个专用智能体即可扩展知识

RAG 非常适合需要引用大型文档、技术手册或大量知识库的智能体, 这些内容会超出传统提示词的上下文窗口限制。 RAG 会为智能体的响应时间增加约 250ms 的轻微延迟。

此视频使用较早版本的控制台录制。RAG 配置步骤未变, 但部分界面元素的外观可能不同。

RAG 的工作原理

启用 RAG 后,智能体会通过以下步骤处理用户查询:

  1. 查询处理:分析并重构用户问题,以实现最佳检索效果。
  2. 嵌入生成:将处理后的查询转换为代表用户问题的向量嵌入。
  3. 检索:系统从知识库中找到语义最相似的内容。
  4. 生成回复:智能体结合对话上下文和检索到的信息生成回复。

此过程可确保与用户查询相关的信息被传递给 LLM,以生成事实准确的回答。

指南

前提条件

为智能体启用 RAG

在智能体设置中,前往 知识库 部分并开启 使用 RAG 选项。根据需要,在 高级 标签下配置嵌入模型、最大文档块数和最大向量距离。

RAG 配置选项,包括嵌入模型选择

知识库索引

知识库中的每份文档都需要先建立索引,才能与 RAG 一起使用。 向已启用 RAG 的智能体添加文档时,此过程会自动进行。

大型文档的索引可能需要几分钟。你可以在知识库列表中查看索引状态。

配置文档使用模式(可选)

对于知识库中的每份文档,你可以选择其使用方式:

  • 自动(默认):仅在与查询相关时检索文档
  • 提示词:无论相关性如何,始终将文档包含在系统提示词中
知识库中的文档使用模式选项

将过多文档设为“提示词”模式可能超出上下文限制。此选项仅应用于关键信息。

测试启用 RAG 的智能体

保存配置后,通过询问与知识库相关的问题来测试智能体。智能体现在应能检索并引用文档中的具体信息。

使用限制

为确保资源公平分配,ElevenLabs 会根据订阅层级,对每个工作区可为 RAG 建立索引的文档总大小实施限制。

限制如下:

订阅层级文档总大小上限说明
免费版1MB索引可能会在一段时间未使用后删除。
入门版2MB
创作者版20MB
专业版100MB
Scale500MB
商业版1GB
企业版1GB可根据层级和协议提供更高上限。

注意:

  • 这些限制适用于为 RAG 建立索引的文档原始文件大小总和,而非 RAG 索引本身的内部存储大小(后者可能大得多)。
  • 小于 500 字节的文档无法为 RAG 建立索引,将自动改为在提示词中使用。

API 实现

你也可以通过 API 实现 RAG:

from elevenlabs import ElevenLabs
import time
# Initialize the ElevenLabs client
elevenlabs = ElevenLabs(api_key="your-api-key")
# First, index a document for RAG
document_id = "your-document-id"
embedding_model = "e5_mistral_7b_instruct"
# Trigger RAG indexing
response = elevenlabs.conversational_ai.knowledge_base.document.compute_rag_index(
documentation_id=document_id,
model=embedding_model
)
# Check indexing status
while response.status not in ["SUCCEEDED", "FAILED"]:
time.sleep(5) # Wait 5 seconds before checking status again
response = elevenlabs.conversational_ai.knowledge_base.document.compute_rag_index(
documentation_id=document_id,
model=embedding_model
)
# Then update agent configuration to use RAG
agent_id = "agent_7101k5zvyjhmfg983brhmhkd98n6"
# Get the current agent configuration
agent_config = elevenlabs.conversational_ai.agents.get(agent_id=agent_id)
# Enable RAG in the agent configuration
agent_config.agent.prompt.rag = {
"enabled": True,
"embedding_model": "e5_mistral_7b_instruct",
"max_documents_length": 10000
}
# Update document usage mode if needed
for i, doc in enumerate(agent_config.agent.prompt.knowledge_base):
if doc.id == document_id:
agent_config.agent.prompt.knowledge_base[i].usage_mode = "auto"
# Update the agent configuration
elevenlabs.conversational_ai.agents.update(
agent_id=agent_id,
conversation_config=agent_config.agent
)