在前面的文章中,我们讨论了 AI Agent 的各个模块实现。今天,我想聊聊如何把这个系统部署到生产环境。说实话,这个过程比想象的要复杂得多,因为 AI Agent 系统有很多特殊的运维需求。
从一次部署事故说起
还记得第一次部署 AI Agent 到生产环境时的场景:
我:系统测试都通过了,可以部署了
运维:好的,按常规 Python 应用部署
(部署完成后)
用户:为什么响应这么慢?
监控:API 费用飙升...
我:...(这才发现漏掉了很多细节)
这次经历让我意识到:AI Agent 不是普通的 Web 应用,它需要特别的部署和运维策略。
环境准备
首先,我们需要准备好部署环境:
# 1. 创建部署目录
mkdir -p /app/ai-agent
cd /app/ai-agent
# 2. 创建虚拟环境
python -m venv venv
source venv/bin/activate
# 3. 安装依赖
pip install -r requirements.txt
# 4. 准备配置文件
cat > config.yaml << EOF
environment: production
log_level: INFO
# AI 模型配置
model:
provider: openai
model_name: gpt-4
temperature: 0.7
max_tokens: 2000
retry_count: 3
timeout: 30
# 向量数据库配置
vector_store:
type: milvus
host: milvus.internal
port: 19530
collection: agent_knowledge
# 缓存配置
cache:
type: redis
url: redis://redis.internal:6379
ttl: 3600
# 监控配置
monitoring:
prometheus_port: 9090
grafana_port: 3000
alert_webhook: "https://hooks.slack.com/..."
EOF
# 5. 准备 Docker 配置
cat > Dockerfile << EOF
FROM python:3.11-slim
WORKDIR /app
# 安装系统依赖
RUN apt-get update && apt-get install -y \\
build-essential \\
curl \\
&& rm -rf /var/lib/apt/lists/*
# 复制应用代码
COPY . .
# 安装 Python 依赖
RUN pip install --no-cache-dir -r requirements.txt
# 暴露端口
EXPOSE 8000 9090
# 启动命令
CMD ["uvicorn", "agent.main:app", "--host", "0.0.0.0", "--port", "8000"]
EOF
# 6. 准备 docker-compose 配置
cat > docker-compose.yml << EOF
version: '3.8'
services:
agent:
build: .
ports:
- "8000:8000"
- "9090:9090"
environment:
- ENVIRONMENT=production
- OPENAI_API_KEY=\${OPENAI_API_KEY}
volumes:
- ./config.yaml:/app/config.yaml
depends_on:
- redis
- milvus
deploy:
replicas: 3
resources:
limits:
cpus: '1'
memory: 2G
reservations:
cpus: '0.5'
memory: 1G
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
milvus:
image: milvusdb/milvus:latest
ports:
- "19530:19530"
volumes:
- milvus_data:/var/lib/milvus
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
grafana:
image: grafana/gr

最低0.47元/天 解锁文章
462

被折叠的 条评论
为什么被折叠?



