GenAI Cookbook开发手册:MongoDB与Docker容器化AI应用
GenAI Cookbook开发手册:MongoDB与Docker容器化AI应用
【免费下载链接】GenAI-Showcase GenAI Cookbook 项目地址: 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:本地运行大语言模型的工具
项目结构遵循最佳实践,主要文件包括:
- 应用源码:apps/local-bot/app.py
- Docker配置:apps/local-bot/Dockerfile
- 服务编排:apps/local-bot/compose.yaml
- 依赖管理:apps/local-bot/requirements.txt
环境准备
安装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做了以下几件事:
- 使用Python 3.12作为基础镜像
- 设置工作目录为/opt/app
- 安装依赖包
- 添加应用代码
- 定义启动命令,运行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中实现,主要包括:
- 初始化组件:连接MongoDB、配置Ollama模型
- 文档处理:加载、转换和分割文档
- 向量存储:创建文档向量并存储到MongoDB
- 聊天界面:使用Streamlit构建交互式聊天界面
- 查询处理:结合上下文和向量搜索生成回答
启动应用
使用Docker Compose启动整个应用栈:
docker compose up --build
构建完成后,访问http://localhost:8501即可使用聊天机器人。
调试与优化
常见问题解决
- 连接问题:确保MongoDB服务正常运行,检查连接字符串是否正确
- 模型下载:首次运行时Ollama需要下载模型,可能需要较长时间
- 资源限制:本地LLM运行需要足够的内存,建议至少16GB RAM
性能优化建议
- 模型选择:根据硬件条件选择合适的模型,平衡性能和效果
- 文档处理:优化文档分块策略,提高检索准确性
- 缓存机制:实现查询结果缓存,减少重复计算
部署与扩展
生产环境考虑
- 安全配置:使用环境变量管理敏感信息,限制数据库访问权限
- 资源分配:根据实际负载调整容器资源限制
- 日志管理:配置集中式日志收集,便于问题排查
功能扩展方向
- 多模型支持:集成更多Ollama模型,实现模型切换功能
- 多数据源:支持本地文件、数据库等多种数据源
- 高级UI:增强用户界面,添加历史记录、主题切换等功能
- API服务:封装为API服务,支持多客户端访问
总结
本文详细介绍了如何使用Docker容器化MongoDB AI应用,以local-bot项目为例,展示了从环境配置到应用部署的完整流程。通过容器化技术,我们可以轻松管理复杂的AI应用依赖,确保开发、测试和生产环境的一致性。
MongoDB的向量搜索功能为AI应用提供了强大的数据检索能力,结合本地LLM模型,可以构建高性能、低延迟的智能应用。
鼓励读者进一步探索项目中的其他示例应用,如apps/mongostory和apps/vercel_sdk_hr_agent,发现更多MongoDB在AI领域的应用场景。
参考资料
- 项目源码:apps/local-bot
- Docker文档:Docker官方文档
- MongoDB文档:MongoDB Atlas Vector Search
- LangChain文档:LangChain官方文档
【免费下载链接】GenAI-Showcase GenAI Cookbook 项目地址: https://gitcode.com/GitHub_Trending/ge/GenAI-Showcase
更多推荐


所有评论(0)