5分钟搭建你自己的DeepSeek AI 聊天应用!Flask+LangChain 用户注册 + 公式显示 + 网络搜索 + 文件上传 + Token 统计 | Docker 一键部署,开箱即用
AIChat 是一个开源的 AI 聊天 Web 应用。项目使用 Flask 作为后端框架,集成了 DeepSeek API 提供 AI 聊天服务。通过 Docker Compose 实现一键部署。
- AI聊天功能:集成 DeepSeek API,支持实时对话交互,上传文件,支持公式/代码/markdown的格式化显示
- 用户认证:完整的登录/注册功能,Redis Session 管理
- 使用统计:Token 使用量统计和记录查询
- 管理后台:API Key 管理和全局统计
- 容器化部署:Docker Compose 一键部署
- 响应式设计:兼容手机端访问
- 部署地址: https://guopengfei.top
- 作者邮箱: wisdomfriend@126.com(有问题欢迎发邮件)
Flask Python Docker DeepSeek API LangChain
- Docker (版本 20.10+)
- Docker Compose (版本 5.0.0,最低要求 1.29+)
- Python 3.9+ (本地开发需要)
如果你在中国大陆,建议配置国内镜像源以加速下载:
创建或编辑 /etc/docker/daemon.json:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
EOF
# 重启 Docker 服务使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker
# 验证配置
docker info | grep -A 10 "Registry Mirrors"常用国内镜像源:
- 中科大:
https://docker.mirrors.ustc.edu.cn - 网易:
https://hub-mirror.c.163.com - 百度云:
https://mirror.baidubce.com - 阿里云:需要登录阿里云控制台获取专属加速地址
# 构建并启动所有容器
docker-compose up -d
# 查看所有服务日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f flask-app
# 停止服务
docker-compose down
启动容器后,可以通过以下方式访问:
- Flask 应用直接访问:
http://localhost:5000
- Python 3.11
推荐使用 venv(Python 内置虚拟环境)
- 创建虚拟环境
# Windows PowerShell
python -m venv venv- 激活虚拟环境
# Windows PowerShell
.\venv\Scripts\Activate.ps1
# 如果遇到执行策略错误,运行以下命令:
# Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Windows CMD
venv\Scripts\activate.bat激活成功后,命令行提示符前会显示 (venv)。
- 安装 Python 依赖
# 确保已激活虚拟环境(命令行前显示 (venv))
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn常见问题:
- 如果遇到
ModuleNotFoundError,检查是否已激活虚拟环境 - 在 PyCharm 中运行,确保已配置使用 venv 解释器
- 在终端中运行,确保先执行激活命令
# 重新构建并启动
docker-compose up -d --build修改 nginx/nginx.conf 后:
# Nginx 使用官方镜像,配置通过 volumes 挂载,直接重启即可生效
docker-compose restart nginx主要配置项:
- 镜像: nginx:alpine
- 配置挂载:
nginx/nginx.conf通过 volumes 挂载,修改后重启即可生效 - 反向代理: 转发到 Flask 应用 (flask-app:5000)
- 运行端口: 5000
- WSGI 服务器: Gunicorn (4 workers)
- 数据库: MySQL (通过环境变量配置)
- Session: Redis 存储(使用自定义
FixedRedisSessionInterface)- Session 过期时间:7 天(可配置)
- Session ID 签名:启用(增强安全性)
- 版本: MySQL 8.0
- 数据持久化: Docker Volume
- 初始化脚本:
mysql/init.sql
- 版本: Redis 7 (Alpine)
- 数据持久化: Docker Volume + AOF (Append Only File)
- 端口: 6379
-
容器无法启动
# 查看详细日志 docker-compose logs # 检查端口占用 netstat -tulpn | grep :80
-
数据库连接失败
# 检查 MySQL 容器状态 docker-compose ps mysql # 查看 MySQL 日志 docker-compose logs mysql
-
Redis 连接失败
# 检查 Redis 容器状态 docker-compose ps redis # 查看 Redis 日志 docker-compose logs redis # 测试 Redis 连接 docker-compose exec redis redis-cli -a Gpf_learning ping
- 检查环境变量
REDIS_HOST、REDIS_PORT、REDIS_PASSWORD是否正确配置
- 检查环境变量
以下是计划中的功能改进和优化:
-
✅ 集成 Redis 缓存
- ✅ 添加 Redis 服务到 Docker Compose
- ✅ 将 Flask Session 从默认存储迁移到 Redis
- ✅ 提升 Session 管理的性能和可扩展性
- ✅ 支持多实例部署时的 Session 共享
- ✅ 自定义 Session 接口修复兼容性问题
-
✅ 实现流式聊天响应
- ✅ 修改
/api/chat接口支持流式输出 - ✅ 前端实现 Server-Sent Events (SSE) 或 WebSocket 接收流式数据
- ✅ 减少用户等待时间,提升交互体验
- ✅ 修改
-
✅ API 访问频率限制 ✅ - 使用 Redis 实现聊天 API 访问频率限制 ✅ - 限制规则:1 分钟内最多访问 5 次 ✅ - 基于用户 ID 进行限流 ✅ - 返回友好的错误提示信息
-
✅ 显示优化
- ✅ 支持markdown/公式/代码的格式化显示,使用KaTeX/Marked.js/Highlight.js
-
✅ 文件对话
- ✅ 支持pdf/docx/xlsx文件对话
-
对话优化
- ✅ 超长上下文自动总结
- ✅ 支持网络搜索
- 支持MCP工具调用
- 增加对话主题的修改和删除
- 增加收藏功能
- 增加对话内容/上传文件的删除功能
- 上下文总结时增加提示
- 联网搜索改为从直接调用百度接口,而不是通过爬虫的模式
- 支持图片输入
-
higress部署
- 增加higress部署
-
langchain agent的使用
- langchain agent的使用
本项目采用 MIT License 许可证。 详细许可证内容请查看 LICENSE 文件。


