GenAI Cookbook开发手册:MongoDB与Docker容器化AI应用

【免费下载链接】GenAI-Showcase GenAI Cookbook 【免费下载链接】GenAI-Showcase 项目地址: https://gitcode.com/GitHub_Trending/ge/GenAI-Showcase

引言

你还在为AI应用的环境配置而烦恼吗?本文将带你一步解决MongoDB与Docker容器化AI应用的开发难题。读完本文,你将能够:

  • 理解Docker容器化MongoDB AI应用的核心原理
  • 掌握使用Docker Compose编排多服务AI应用的方法
  • 构建一个基于Streamlit、LangChain、Ollama和MongoDB的本地聊天机器人
  • 学会调试和优化容器化AI应用

技术栈概述

本项目采用以下技术栈构建容器化AI应用:

  • MongoDB Atlas:提供强大的向量搜索能力,用于存储和检索文档向量
  • Docker:容器化应用,确保环境一致性和部署便捷性
  • Streamlit:快速构建交互式Web界面
  • LangChain:连接LLM和外部数据源的框架
  • Ollama:本地运行大语言模型的工具

项目结构遵循最佳实践,主要文件包括:

环境准备

安装Docker和Docker Compose

确保你的系统已安装Docker和Docker Compose。如果尚未安装,可以参考Docker官方文档进行安装。

克隆项目仓库

git clone https://gitcode.com/GitHub_Trending/ge/GenAI-Showcase
cd GenAI-Showcase/apps/local-bot

Docker容器化配置

Dockerfile详解

Dockerfile定义了应用的构建过程和运行环境。以下是本项目使用的Dockerfile内容:

FROM python:3.12
WORKDIR /opt/app
ADD requirements.txt .
RUN pip install -r requirements.txt
ADD app.py .

CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]

这个Dockerfile做了以下几件事:

  1. 使用Python 3.12作为基础镜像
  2. 设置工作目录为/opt/app
  3. 安装依赖包
  4. 添加应用代码
  5. 定义启动命令,运行Streamlit应用

Docker Compose服务编排

compose.yaml文件定义了多服务的编排配置:

services:
  app:
    build:
      context: .
    ports:
      - 8501:8501/tcp
    environment:
      OLLAMA_HOST: host.docker.internal:11434
      MONGO_URI: mongodb://root:root@mongo:27017/admin?directConnection=true
    extra_hosts:
      - "host.docker.internal:host-gateway"
  mongo:
    image: mongodb/mongodb-atlas-local
    environment:
      - MONGODB_INITDB_ROOT_USERNAME=root
      - MONGODB_INITDB_ROOT_PASSWORD=root
    ports:
       - 27017:27017

这个配置定义了两个服务:

  • app:AI应用服务,包含Streamlit前端和LangChain后端逻辑
  • mongo:MongoDB服务,使用MongoDB Atlas本地镜像

服务之间通过内部网络通信,同时暴露必要的端口给宿主机。

MongoDB集成

MongoDB连接配置

在应用代码中,我们使用pymongo连接MongoDB:

import os
from pymongo import MongoClient

MONGO_URI = os.getenv("MONGO_URI", "mongodb://localhost:27017")

try:
    mongo_client = MongoClient(MONGO_URI)
    collection = mongo_client["bot"]["data"]
except Exception as e:
    st.error(f"Failed to connect to MongoDB: {e}")
    st.stop()

连接字符串通过环境变量注入,确保了配置的灵活性和安全性。

向量搜索索引创建

使用MongoDB Atlas Vector Search功能,我们可以创建向量索引来加速相似性搜索:

from langchain_mongodb import MongoDBAtlasVectorSearch

vectorstore = MongoDBAtlasVectorSearch.from_documents(
    splits, 
    embedding, 
    collection=collection, 
    index_name="default"
)
vectorstore.create_vector_search_index(768)

这段代码从文档创建向量存储,并在MongoDB中创建向量搜索索引,维度为768,对应所使用的嵌入模型维度。

应用开发

核心功能实现

应用的核心功能在apps/local-bot/app.py中实现,主要包括:

  1. 初始化组件:连接MongoDB、配置Ollama模型
  2. 文档处理:加载、转换和分割文档
  3. 向量存储:创建文档向量并存储到MongoDB
  4. 聊天界面:使用Streamlit构建交互式聊天界面
  5. 查询处理:结合上下文和向量搜索生成回答

启动应用

使用Docker Compose启动整个应用栈:

docker compose up --build

构建完成后,访问http://localhost:8501即可使用聊天机器人。

调试与优化

常见问题解决

  1. 连接问题:确保MongoDB服务正常运行,检查连接字符串是否正确
  2. 模型下载:首次运行时Ollama需要下载模型,可能需要较长时间
  3. 资源限制:本地LLM运行需要足够的内存,建议至少16GB RAM

性能优化建议

  1. 模型选择:根据硬件条件选择合适的模型,平衡性能和效果
  2. 文档处理:优化文档分块策略,提高检索准确性
  3. 缓存机制:实现查询结果缓存,减少重复计算

部署与扩展

生产环境考虑

  1. 安全配置:使用环境变量管理敏感信息,限制数据库访问权限
  2. 资源分配:根据实际负载调整容器资源限制
  3. 日志管理:配置集中式日志收集,便于问题排查

功能扩展方向

  1. 多模型支持:集成更多Ollama模型,实现模型切换功能
  2. 多数据源:支持本地文件、数据库等多种数据源
  3. 高级UI:增强用户界面,添加历史记录、主题切换等功能
  4. API服务:封装为API服务,支持多客户端访问

总结

本文详细介绍了如何使用Docker容器化MongoDB AI应用,以local-bot项目为例,展示了从环境配置到应用部署的完整流程。通过容器化技术,我们可以轻松管理复杂的AI应用依赖,确保开发、测试和生产环境的一致性。

MongoDB的向量搜索功能为AI应用提供了强大的数据检索能力,结合本地LLM模型,可以构建高性能、低延迟的智能应用。

鼓励读者进一步探索项目中的其他示例应用,如apps/mongostoryapps/vercel_sdk_hr_agent,发现更多MongoDB在AI领域的应用场景。

参考资料

【免费下载链接】GenAI-Showcase GenAI Cookbook 【免费下载链接】GenAI-Showcase 项目地址: https://gitcode.com/GitHub_Trending/ge/GenAI-Showcase

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐