首页
/ 深入解析Docker GenAI Stack的容器化部署架构

深入解析Docker GenAI Stack的容器化部署架构

2025-07-08 05:06:02作者:昌雅子Ethen

项目概述

Docker GenAI Stack是一个基于容器化技术的生成式AI应用堆栈,它整合了大型语言模型(LLM)、知识图谱数据库和多个AI服务组件,为开发者提供了一个开箱即用的AI应用开发环境。该项目通过Docker Compose编排多个服务,实现了从模型管理到应用前端的完整解决方案。

核心服务组件分析

1. 语言模型服务(LLM)

项目提供了两种LLM服务配置:

  • 基础CPU版本:使用ollama/ollama镜像,适合没有GPU的环境
  • GPU加速版本:通过NVIDIA设备预留实现GPU加速,显著提升模型推理速度
llm: &llm
  image: ollama/ollama:latest
  profiles: ["linux"]

llm-gpu:
  <<: *llm
  profiles: ["linux-gpu"]
  deploy:
    resources:
      reservations:
        devices:
          - driver: nvidia
            count: all
            capabilities: [gpu]

2. 模型下载服务(pull-model)

这是一个定制服务,负责从Ollama服务器下载指定的语言模型:

  • 默认下载llama2模型
  • 可通过环境变量LLM指定其他模型
  • 使用OLLAMA_BASE_URL配置模型服务器地址

3. 知识图谱数据库(database)

采用Neo4j 5.11作为知识存储后端:

  • 默认启用APOC插件(Neo4j的扩展过程库)
  • 提供健康检查机制确保服务可用性
  • 数据持久化到本地./data目录
  • 默认认证为neo4j/password,可通过环境变量覆盖
database:
  image: neo4j:5.11
  ports:
    - 7687:7687  # Bolt协议端口
    - 7474:7474  # HTTP管理端口
  volumes:
    - $PWD/data:/data
  environment:
    - NEO4J_AUTH=${NEO4J_USERNAME-neo4j}/${NEO4J_PASSWORD-password}
    - NEO4J_PLUGINS=["apoc"]

功能服务组件

1. 数据加载服务(loader)

核心功能:

  • 处理文档嵌入和知识图谱构建
  • 支持多种嵌入模型(sentence_transformer等)
  • 集成了LangChain的跟踪功能
  • 提供两个服务端口(8081和8502)

开发特性:

  • 支持代码热重载(忽略特定文件变更)
  • 依赖数据库健康和模型下载完成

2. 对话机器人服务(bot)

特性:

  • 基于LLM的对话接口
  • 端口8501对外提供服务
  • 同样支持开发时热重载
  • 共享嵌入模型目录

3. PDF处理服务(pdf_bot)

专用于PDF文档处理的AI服务:

  • 端口8503
  • 支持PDF内容提取和分析
  • 与知识图谱深度集成

4. API服务(api)

提供RESTful接口:

  • 端口8504
  • 包含健康检查机制
  • 整合了所有AI功能的后端接口

5. 前端服务(front-end)

Web用户界面:

  • 端口8505
  • 开发模式下支持文件同步
  • 自动重建package.json变更
  • 依赖API服务健康状态

网络与部署架构

所有服务通过自定义的net网络互联,确保容器间通信隔离。部署时需要注意:

  1. 服务启动顺序控制:

    • 数据库必须健康
    • 模型必须下载完成
    • API健康后前端才会启动
  2. 资源配置:

    • GPU版本需要NVIDIA驱动支持
    • 各服务内存需求不同,生产环境可能需要调整
  3. 开发便利功能:

    • 多服务支持代码热重载
    • 前端开发时文件同步

环境变量配置

项目高度可配置,主要环境变量包括:

  • 数据库相关:NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD
  • AI模型相关:LLM, EMBEDDING_MODEL, OLLAMA_BASE_URL
  • 第三方API:OPENAI_API_KEY, LANGCHAIN_API_KEY
  • AWS集成:AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY

最佳实践建议

  1. GPU加速:如有NVIDIA GPU,优先使用llm-gpu服务
  2. 模型管理:通过pull-model服务预下载所需模型,避免运行时延迟
  3. 数据持久化:确保data目录有足够空间存储Neo4j数据
  4. 开发流程:利用x-develop配置提高开发效率
  5. 安全配置:生产环境务必修改默认密码和API密钥

这个Docker Compose配置展现了一个现代化的AI应用架构,将多种技术栈无缝集成,为生成式AI应用开发提供了完整的容器化解决方案。