RAG 机器人#

这是一个示例聊天机器人,展示了 RAG(检索增强生成)。此机器人与 RAG 链服务器/generate 端点交互,使用插件服务器根据摄取的文档回答问题。

RAG 机器人展示了以下 ACE Agent 功能

  • 集成来自 NVIDIA 的 Generative AI Examples 的 RAG 示例

  • 使用 ASR 2 次传递语句结束 (EOU) 实现低延迟

  • 始终开启的 Barge-In 支持

  • 处理插件中的对话历史记录

  • 流式传输来自插件服务器的 JSON 响应

  • 支持使用 事件架构 进行部署

查看教程 构建低延迟语音 RAG 机器人 以深入了解机器人实现。

RAG 示例机器人在 快速入门目录./samples/rag_bot/ 中。

RAG 链服务器部署

此示例机器人需要部署来自 NVIDIA 的 Generative AI Examples 的 RAG 示例之一作为先决条件。如果您想使用任何自定义 RAG 解决方案,您需要在 ./samples/rag_bot/plugins/rag.py 中进行更新。您可以利用以下三个选项中的任何一个来试用示例机器人。

  1. 使用 NIM 托管的 meta/llama3-8b-instruct LLM 和嵌入模型端点部署 RAG。

    1. 获取您的 NVIDIA API 密钥。

      1. 转到 NVIDIA API 目录

      2. 选择任何模型。

      3. 单击获取 API 密钥

    2. 导出所需的环境变量。

      export DOCKER_VOLUME_DIRECTORY=$(pwd)
      export MODEL_DIRECTORY=$(pwd)
      export NVIDIA_API_KEY=...
      
    3. 更新 samples/rag_bot/RAG/basic_rag/docker-compose.yaml 以不使用本地 LLM 和嵌入端点。要使用 NIM 托管的模型,请在 chain-server 服务环境变量中将 APP_LLM_SERVERURLAPP_EMBEDDINGS_SERVERURL 设置为空字符串。

      APP_LLM_SERVERURL: ""
      APP_EMBEDDINGS_SERVERURL: ""
      
    4. 部署 rag-applicationvector-db 容器。

      docker compose -f samples/rag_bot/RAG/basic_rag/docker-compose.yaml up -d --build
      
  2. 使用本地托管的 meta/llama3-8b-instruct LLM 和嵌入模型端点部署 RAG。

    1. 本地部署 LLM 和嵌入模型将需要单独的 A100 或 H100 GPU 设备。

    2. 导出所需的环境变量。

      export DOCKER_VOLUME_DIRECTORY=$(pwd)
      export MODEL_DIRECTORY=$(pwd)export NGC_CLI_API_KEY=...
      
    3. 更新 samples/rag_bot/RAG/basic_rag/docker-compose.yaml 以不使用本地 LLM 和嵌入端点。在 chain-server 服务环境变量中,分别将 APP_LLM_SERVERURLAPP_EMBEDDINGS_SERVERURL 设置为 nemollm-inference:8000nemollm-embedding:8000

      APP_LLM_SERVERURL: "nemollm-inference:8000"
      APP_EMBEDDINGS_SERVERURL: "nemollm-embedding:8000"
      
    4. 部署 rag-applicationvector-db 容器以及 NIM LLM 和嵌入微服务。

      docker compose -f samples/rag_bot/RAG/basic_rag/docker-compose.yaml --profile local-nim --profile milvus up -d
      
  3. 使用 NIM 托管的小型语言模型 nvidia/nemotron-mini-4b-instruct 和嵌入模型端点部署 RAG。

    1. 获取您的 NVIDIA API 密钥。

      1. 转到 NVIDIA API 目录

      2. 选择任何模型。

      3. 单击获取 API 密钥

    2. 导出所需的环境变量。

      export DOCKER_VOLUME_DIRECTORY=$(pwd)
      export NVIDIA_API_KEY=...
      
    3. 部署 rag-applicationvector-db 容器。

      docker compose -f samples/rag_bot/RAG/slm_rag/docker-compose.yaml up -d --build
      

有关部署步骤的更多信息,请参阅 GenerativeAIExamples

通过访问 http://<your-ip>:3001/kb,根据您的用例按需摄取文档。

如果您遇到任何问题或错误,请参阅 故障排除 部分。

基于 Docker 的机器人部署

  1. 为 Docker Compose 命令准备环境。

    export BOT_PATH=./samples/rag_bot/
    source deploy/docker/docker_init.sh
    
  2. 部署语音模型。

    docker compose -f deploy/docker/docker-compose.yml up model-utils-speech
    
  3. 如果您已在不同的机器上部署 RAG 链服务器,请更新 ./samples/rag_bot/plugin_config.yaml 中的 RAG_SERVER_URL

  4. 部署 ACE Agent 微服务。部署聊天控制器、聊天引擎、插件服务器和 WebUI 微服务。

    docker compose -f deploy/docker/docker-compose.yml up speech-event-bot -d
    
  5. 等待几分钟,直到所有服务准备就绪。您可以检查各个微服务的 Docker 日志以确认。您将在聊天控制器容器的 Docker 日志中看到日志打印 Server listening on 0.0.0.0:50055

  6. 使用 URL http://<工作站 IP>:7006/ 与机器人交互。

    为了访问浏览器上的麦克风,我们需要通过添加 SSL 验证将 http 转换为 https 端点,或者更新您的 chrome://flags/edge://flags/ 以允许 http://<工作站 IP>:7006 作为安全端点。

注意

我们将向 RAG 服务器发送早期触发器,如果用户在单词之间暂停超过 240 毫秒,则可能需要重新触发。平均而言,您可能需要为每个用户查询执行 2 个额外的 RAG 调用,这将在规模部署时需要额外的计算/成本。