容器化 RAG 应用

概览

本节将引导你使用 Docker 对 RAG 应用进行容器化。

注意

你可以在 GenAI Stack 演示应用中看到更多容器化的生成式 AI 应用示例。

获取示例应用

本指南中使用的示例应用是一个 RAG 应用示例,它由三个主要组件构成,这三个组件是所有 RAG 应用的基础构建模块。一个托管在某处的大型语言模型(在本例中,它托管在容器中并通过 Ollama 提供服务)。一个向量数据库,Qdrant,用于存储本地数据的 embedding,以及一个使用 Streamlit 提供最佳用户体验的 Web 应用。

克隆示例应用。打开终端,切换到你想要工作的目录,然后运行以下命令克隆仓库:

$ git clone https://github.com/mfranzon/winy.git

现在你的 winy 目录中应该包含以下文件。

├── winy/
│ ├── .gitignore
│ ├── app/
│ │ ├── main.py
│ │ ├── Dockerfile
| | └── requirements.txt
│ ├── tools/
│ │ ├── create_db.py
│ │ ├── create_embeddings.py
│ │ ├── requirements.txt
│ │ ├── test.py
| | └── download_model.sh
│ ├── docker-compose.yaml
│ ├── wine_database.db
│ ├── LICENSE
│ └── README.md

应用容器化要点

应用容器化涉及将其及其依赖项打包到容器中,这确保了不同环境之间的一致性。下面是你容器化 Winy 等应用所需的内容:

  1. Dockerfile:一个 Dockerfile,包含构建应用 Docker 镜像的指令。它指定了基础镜像、依赖项、配置文件以及运行应用的命令。

  2. Docker Compose 文件:Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。Compose 文件允许你在一个文件中配置应用的 服务、网络 和 卷。

运行应用

winy 目录中,在终端中运行以下命令。

$ docker compose up --build

Docker 会构建并运行你的应用。根据你的网络连接情况,下载所有依赖项可能需要几分钟。应用运行时,你会在终端中看到类似如下的消息:

server-1  |   You can now view your Streamlit app in your browser.
server-1  |
server-1  |   URL: http://0.0.0.0:8501
server-1  |

打开浏览器并访问 http://localhost:8501 查看应用。你应该会看到一个简单的 Streamlit 应用。

应用需要 Qdrant 数据库服务和 LLM 服务才能正常工作。如果你可以访问在 Docker 外部运行的服务,请在 docker-compose.yaml 中指定连接信息。

winy:
  build:
    context: ./app
    dockerfile: Dockerfile
  environment:
    - QDRANT_CLIENT=http://qdrant:6333 # Specifies the url for the qdrant database
    - OLLAMA=http://ollama:11434 # Specifies the url for the ollama service
  container_name: winy
  ports:
    - "8501:8501"
  depends_on:
    - qdrant
    - ollama

如果你没有运行这些服务,请继续阅读本指南,了解如何使用 Docker 运行部分或全部这些服务。请记住,ollama 服务是空的;它没有任何模型。因此,在使用 RAG 应用之前,你需要拉取一个模型。所有说明都在下一页。

在终端中,按 ctrl+c 停止应用。

总结

在本节中,你学习了如何使用 Docker 将 RAG 应用容器化并运行。

下一步

在下一节中,你将学习如何使用 Docker 在本地正确配置应用和你偏好的 LLM 模型。

页面选项