agent-desk + Qdrant:Docker 搭一套 AI 客服
本文属于「自托管 Docker 部署实战」系列(共 35 篇),第 15 篇。 示例中的 IP(192.0.2.10)、域名(example.com)、密码均为占位符,请按实际环境替换。
它是什么
基于 LLM + 向量库的客服系统:agent-desk 提供对话与知识库管理,qdrant 存向量。
前置条件
- 一台 Linux 服务器(1C1G 起步;Java 类应用建议 2C4G 以上);
- 已安装 Docker 与 Compose v2,执行
docker compose version有版本号输出; - 所有示例里的 IP / 域名 / 密码都是占位符,实际部署请替换成自己的。
# 安装 Docker(已安装可跳过)
curl -fsSL https://get.docker.com | sh
# 目录约定:一个服务一个目录,后文的 ./data 均指栈目录内
mkdir -p /srv/docker/active/<stack> && cd /srv/docker/active/<stack>
镜像地址
mlogclub/agent-desk:latest
qdrant/qdrant:v1.18.3
目录结构
/srv/docker/active/agent-desk/
├── docker-compose.yml
├── docker/
│ └── agent-desk.yaml # 应用配置(模型、知识库、渠道)
└── data/ # 应用数据
部署步骤
# docker-compose.yml(使用官方镜像版)
services:
qdrant:
image: qdrant/qdrant:v1.18.3
restart: unless-stopped
volumes:
- qdrant-data:/qdrant/storage
ports:
- "6333:6333"
agent-desk:
image: mlogclub/agent-desk:latest
restart: unless-stopped
depends_on:
qdrant:
condition: service_started
ports:
- "8083:8083"
volumes:
- agent-desk-data:/app/data
- ./docker/agent-desk.yaml:/app/config/config.yaml:ro
environment:
TZ: Asia/Shanghai
volumes:
qdrant-data:
agent-desk-data:
docker compose up -d
# 访问 http://<SERVER_IP>:8083
关键配置
config.yaml挂载为只读,改配置后docker compose restart agent-desk;- 向量库地址在配置里写
http://qdrant:6333(容器名),不是宿主 IP; - Qdrant 数据在
qdrant-data卷,重建容器不丢。
注意事项
- 模型 API Key 走
.env或配置,不要写进 compose 提交 Git; - 首次建知识库时嵌入会吃 CPU/内存,注意 Qdrant 与模型服务的资源;
- 对话数据涉及用户隐私,做好访问控制;
- 如果从源码构建,
build: .代替image:,并保留agent-desk.yaml。
备份与升级
# 先确认卷名(通常是 <目录名>_qdrant-data / <目录名>_agent-desk-data)
docker volume ls | grep -E 'qdrant|agent-desk'
docker run --rm -v <项目名>_qdrant-data:/src -v "$PWD":/b alpine \
tar czf /b/qdrant-$(date +%F).tar.gz -C /src .
docker run --rm -v <项目名>_agent-desk-data:/src -v "$PWD":/b alpine \
tar czf /b/agent-desk-$(date +%F).tar.gz -C /src .
# 升级
docker compose pull
docker compose up -d
- 重新生成向量成本很高,Qdrant 卷一定要备份;
- 升级后如果检索异常,先回滚镜像,再检查数据版本。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果