把 AI 工具真正跑进生产环境:部署架构、配置文件与避坑清单
AI工具 生产环境部署指南|附配置文件
随着大模型能力的快速提升,越来越多企业开始将 AI 工具接入真实业务场景,例如智能客服、知识库问答、代码助手、文档生成、数据分析、运营素材生产等。相比本地测试或 Demo 阶段,生产环境部署对系统稳定性、安全性、可观测性、成本控制和可扩展性提出了更高要求。
很多团队在初期接入 AI 工具时,往往只关注“能不能调用模型接口”,但上线后很快会遇到一系列问题:接口超时、并发不足、Token 成本失控、提示词泄露、用户输入不可控、日志无法追踪、模型返回不稳定、知识库检索效果差、服务异常无法快速恢复等。
本文将从生产实践角度,系统介绍 AI 工具在生产环境中的部署方案,并提供一套可参考的配置文件,包括 Dockerfile、docker-compose.yml、Nginx 配置、环境变量配置、应用配置示例以及基础监控建议,帮助你将 AI 工具从 Demo 平稳推进到可用、可靠、可维护的生产系统。
一、生产环境部署 AI 工具前需要考虑什么?
AI 工具与传统 Web 应用有很多相似之处,但也有明显不同。传统服务主要关注接口响应、数据库、缓存和业务逻辑,而 AI 应用还需要考虑模型调用、上下文管理、向量检索、提示词安全、Token 成本以及输出质量控制。
在进入部署之前,建议先明确以下几个问题。
1. AI 工具的业务定位
首先需要确认 AI 工具在业务中的角色:
- 是内部员工使用,还是面向外部用户?
- 是辅助工具,还是关键业务链路的一部分?
- 是否需要 7×24 小时稳定运行?
- 模型返回结果是否需要人工审核?
- 是否涉及敏感数据、客户隐私或商业机密?
- 是否需要接入企业知识库、数据库或业务系统?
如果只是内部低频使用,部署方案可以相对轻量;如果直接面向客户,则需要更严格的权限控制、限流机制、日志审计和异常兜底。
2. 模型调用方式
目前常见的模型部署方式有三种:
| 方式 | 说明 | 适用场景 |
|---|---|---|
| 调用云端大模型 API | 通过第三方模型厂商接口调用 | 快速上线、维护成本低 |
| 私有化部署开源模型 | 在自有服务器或私有云部署模型 | 数据敏感、定制化要求高 |
| 混合模式 | 云端 API + 本地小模型/Embedding | 成本优化、复杂业务场景 |
对于大多数团队来说,第一阶段建议优先采用云端大模型 API,因为接入速度快、模型能力强、运维成本低。等业务稳定后,再考虑私有化部署或多模型路由。
3. 生产环境的基本要求
一个可用于生产的 AI 工具,至少应具备以下能力:
- 服务容器化部署;
- 支持配置化管理;
- 支持多环境区分,例如开发、测试、生产;
- 支持日志记录与链路追踪;
- 支持接口鉴权和访问控制;
- 支持请求限流;
- 支持异常重试和超时控制;
- 支持模型调用失败后的降级策略;
- 支持敏感信息保护;
- 支持成本统计与 Token 用量监控;
- 支持平滑升级和快速回滚。
如果缺少这些能力,AI 工具在小规模测试时可能看不出问题,但一旦用户量上升或业务依赖增强,系统风险会迅速暴露。
二、推荐生产架构
下面是一种较通用的 AI 工具生产环境架构。
用户/业务系统
│
▼
Nginx / API Gateway
│
▼
AI 应用服务
│
├── Redis:缓存、会话、限流
├── PostgreSQL/MySQL:业务数据、用户数据、调用记录
├── Vector DB:知识库向量检索
├── Object Storage:文件、图片、文档存储
└── LLM Provider:大模型 API 或私有模型服务
核心组件说明
1. Nginx / API Gateway
Nginx 或 API 网关主要负责:
- HTTPS 终止;
- 反向代理;
- 访问日志;
- 请求体大小限制;
- 基础限流;
- 静态资源分发;
- 灰度发布流量控制。
如果企业已有网关系统,例如 Kong、APISIX、Traefik 或云厂商 API Gateway,也可以直接使用现有基础设施。
2. AI 应用服务
AI 应用服务是业务核心,负责:
- 接收用户请求;
- 进行权限校验;
- 处理提示词模板;
- 调用知识库检索;
- 调用大模型接口;
- 处理模型输出;
- 保存调用记录;
- 返回结果给前端或业务系统。
应用服务可以使用 Python、Node.js、Java、Go 等语言实现。Python 在 AI 生态中较常见,适合快速构建;Java 和 Go 更适合高并发和大型企业系统。
3. Redis
Redis 在 AI 工具中非常常用,主要用于:
- 会话缓存;
- 请求限流;
- Token 用量缓存;
- 短期上下文缓存;
- 异步任务队列;
- 模型返回结果缓存。
对于重复性问题较多的场景,合理使用缓存可以显著降低模型调用成本。
4. 数据库
数据库用于保存:
- 用户信息;
- 权限信息;
- 对话历史;
- 提示词模板;
- 调用日志;
- Token 消耗记录;
- 反馈数据;
- 审计记录。
如果对话内容涉及隐私数据,建议加密存储,并设置数据保留周期。
5. 向量数据库
如果 AI 工具需要知识库问答,通常需要向量数据库。常见选择包括:
- Milvus;
- Qdrant;
- Weaviate;
- Elasticsearch 向量检索;
- PostgreSQL + pgvector;
- Chroma。
中小规模知识库可以优先考虑 PostgreSQL + pgvector 或 Qdrant,部署和维护相对简单。
三、目录结构建议
以下是一个适合生产部署的 AI 工具项目目录结构示例:
ai-tool/
├── app/
│ ├── main.py
│ ├── api/
│ ├── core/
│ ├── services/
│ ├── prompts/
│ ├── models/
│ └── utils/
├── config/
│ ├── app.yaml
│ ├── logging.yaml
│ └── prompt_templates.yaml
├── deploy/
│ ├── nginx.conf
│ ├── docker-compose.yml
│ └── supervisor.conf
├── scripts/
│ ├── migrate.sh
│ ├── healthcheck.sh
│ └── backup.sh
├── logs/
├── Dockerfile
├── requirements.txt
├── .env.example
└── README.md
目录设计应尽量清晰,将业务代码、配置文件、部署文件、脚本文件分离,便于后续维护和协作。
四、环境变量配置
生产环境中,模型密钥、数据库密码、Redis 密码等敏感信息不应写死在代码中,应通过环境变量或密钥管理系统注入。
下面是一个 .env.example 示例:
# =========================
# Application
# =========================
APP_NAME=ai-tool
APP_ENV=production
APP_HOST=0.0.0.0
APP_PORT=8000
APP_DEBUG=false
# =========================
# Security
# =========================
APP_SECRET_KEY=replace_with_a_strong_secret_key
JWT_EXPIRE_MINUTES=1440
API_AUTH_ENABLED=true
# =========================
# LLM Provider
# =========================
LLM_PROVIDER=openai
LLM_API_BASE=https://api.example.com/v1
LLM_API_KEY=replace_with_your_llm_api_key
LLM_MODEL=gpt-4o-mini
LLM_TIMEOUT_SECONDS=60
LLM_MAX_RETRIES=2
# =========================
# Embedding
# =========================
EMBEDDING_MODEL=text-embedding-3-small
EMBEDDING_DIMENSION=1536
# =========================
# Database
# =========================
DATABASE_URL=postgresql://ai_user:strong_password@postgres:5432/ai_tool
# =========================
# Redis
# =========================
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=strong_redis_password
REDIS_DB=0
# =========================
# Rate Limit
# =========================
RATE_LIMIT_ENABLED=true
RATE_LIMIT_PER_MINUTE=60
RATE_LIMIT_PER_DAY=1000
# =========================
# Log
# =========================
LOG_LEVEL=INFO
LOG_DIR=/app/logs
# =========================
# Vector Database
# =========================
VECTOR_DB_TYPE=qdrant
VECTOR_DB_URL=http://qdrant:6333
VECTOR_COLLECTION=knowledge_base
# =========================
# Cost Control
# =========================
TOKEN_DAILY_LIMIT_PER_USER=100000
TOKEN_DAILY_LIMIT_GLOBAL=5000000
在生产环境中,不建议直接将 .env 文件提交到 Git 仓库。可以使用以下方式管理密钥:
- Kubernetes Secret;
- Docker Swarm Secret;
- 云厂商密钥管理服务;
- Vault;
- CI/CD 平台变量;
- 独立配置中心。
五、应用配置文件示例
除了环境变量,还可以使用 YAML 文件管理非敏感配置,例如模型参数、提示词模板、日志策略等。
config/app.yaml
app:
name: ai-tool
env: production
debug: false
timezone: Asia/Shanghai
server:
host: 0.0.0.0
port: 8000
workers: 4
request_timeout_seconds: 90
llm:
provider: openai
model: gpt-4o-mini
temperature: 0.3
max_tokens: 2048
timeout_seconds: 60
max_retries: 2
retry_interval_seconds: 1
prompt:
default_language: zh-CN
max_input_chars: 8000
enable_prompt_injection_check: true
conversation:
enable_history: true
max_history_rounds: 8
summary_when_exceed: true
retrieval:
enabled: true
top_k: 5
score_threshold: 0.72
rerank_enabled: false
security:
auth_enabled: true
audit_log_enabled: true
mask_sensitive_data: true
allowed_file_types:
- pdf
- docx
- txt
- md
rate_limit:
enabled: true
per_minute: 60
per_day: 1000
cost:
enable_token_statistics: true
daily_user_limit: 100000
daily_global_limit: 5000000
该配置文件适合管理业务逻辑层的参数。需要注意的是,模型参数应根据业务场景调整。例如,客服问答通常要求稳定、准确,temperature 可以设置较低;创意文案生成可以适当提高 temperature。
六、Dockerfile 配置
容器化是生产部署的基础。下面以 Python FastAPI 应用为例,提供一个可参考的 Dockerfile。
FROM python:3.11-slim
WORKDIR /app
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
build-essential \
curl \
netcat-openbsd \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade pip \
&& pip install --no-cache-dir -r /app/requirements.txt
COPY . /app
RUN mkdir -p /app/logs
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1
CMD ["gunicorn", "app.main:app", "-k", "uvicorn.workers.UvicornWorker", "-w", "4", "-b", "0.0.0.0:8000", "--timeout", "90"]
说明
- 使用
python:3.11-slim减小镜像体积; - 设置
PYTHONUNBUFFERED=1,便于容器日志实时输出; - 使用
gunicorn + uvicorn worker,适合 FastAPI 生产部署; - 添加
HEALTHCHECK,方便容器编排系统判断服务健康状态; --timeout 90可根据模型调用耗时调整。
七、docker-compose 配置
对于中小型项目,docker-compose 是非常实用的部署方式。下面示例包含 AI 应用服务、PostgreSQL、Redis、Qdrant 和 Nginx。
deploy/docker-compose.yml
version: "3.9"
services:
ai-app:
build:
context: ..
dockerfile: Dockerfile
container_name: ai-app
restart: always
env_file:
- ../.env
volumes:
- ../logs:/app/logs
- ../config:/app/config
depends_on:
- postgres
- redis
- qdrant
networks:
- ai-network
expose:
- "8000"
postgres:
image: postgres:15
container_name: ai-postgres
restart: always
environment:
POSTGRES_USER: ai_user
POSTGRES_PASSWORD: strong_password
POSTGRES_DB: ai_tool
TZ: Asia/Shanghai
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- ai-network
ports:
- "5432:5432"
redis:
image: redis:7
container_name: ai-redis
restart: always
command: redis-server --requirepass strong_redis_password --appendonly yes
volumes:
- redis_data:/data
networks:
- ai-network
ports:
- "6379:6379"
qdrant:
image: qdrant/qdrant:latest
container_name: ai-qdrant
restart: always
volumes:
- qdrant_data:/qdrant/storage
networks:
- ai-network
ports:
- "6333:6333"
nginx:
image: nginx:1.25
container_name: ai-nginx
restart: always
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ../logs/nginx:/var/log/nginx
depends_on:
- ai-app
ports:
- "80:80"
- "443:443"
networks:
- ai-network
networks:
ai-network:
driver: bridge
volumes:
postgres_data:
redis_data:
qdrant_data:
生产使用建议
如果是正式生产环境,不建议将 PostgreSQL、Redis 的端口直接暴露到公网。可以删除 ports,仅通过内部网络访问,或者限制安全组访问来源。
八、Nginx 配置
下面是一份基础 Nginx 反向代理配置示例。
deploy/nginx.conf
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'request_time=$request_time upstream_time=$upstream_response_time';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
sendfile on;
keepalive_timeout 65;
client_max_body_size 20m;
upstream ai_backend {
server ai-app:8000;
keepalive 32;
}
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
listen 80;
server_name example.com;
location /health {
proxy_pass http://ai_backend/health;
}
location / {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://ai_backend;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 10s;
proxy_send_timeout 90s;
proxy_read_timeout 90s;
}
}
}
HTTPS 建议
生产环境强烈建议启用 HTTPS。可以使用:
- 云厂商证书服务;
- Let’s Encrypt;
- 企业内部 CA;
- 负载均衡器 HTTPS 终止。
如果使用 Let’s Encrypt,可通过 certbot 自动签发和续期证书。
九、应用服务健康检查
生产环境必须提供健康检查接口,供 Nginx、Docker、Kubernetes 或监控系统调用。
FastAPI 示例:
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
def health_check():
return {
"status": "ok",
"service": "ai-tool"
}
更完善的健康检查应包含数据库、Redis、向量数据库状态,例如:
@app.get("/health/full")
def full_health_check():
return {
"status": "ok",
"database": "ok",
"redis": "ok",
"vector_db": "ok",
"llm_provider": "ok"
}
需要注意的是,/health 接口应尽量轻量,不建议每次都调用大模型接口,否则会造成不必要的成本和延迟。
十、日志配置
AI 工具的日志不仅用于排查系统问题,还用于分析模型效果、用户行为和成本消耗。
需要记录的日志
建议记录以下内容:
- 请求 ID;
- 用户 ID;
- 接口路径;
- 请求时间;
- 响应时间;
- 模型名称;
- 输入 Token 数;
- 输出 Token 数;
- 总 Token 数;
- 调用状态;
- 错误信息;
- 知识库命中文档 ID;
- 用户反馈。
不建议记录的内容
以下内容应谨慎记录或进行脱敏:
- 用户密码;
- 身份证号;
- 手机号;
- 银行卡号;
- API Key;
- 访问令牌;
- 商业机密;
- 原始敏感对话内容。
config/logging.yaml
version: 1
disable_existing_loggers: false
formatters:
standard:
format: "%(asctime)s [%(levelname)s] %(name)s %(message)s"
handlers:
console:
class: logging.StreamHandler
formatter: standard
level: INFO
file:
class: logging.handlers.RotatingFileHandler
formatter: standard
filename: /app/logs/app.log
maxBytes: 104857600
backupCount: 10
encoding: utf8
level: INFO
loggers:
app:
handlers:
- console
- file
level: INFO
propagate: false
root:
handlers:
- console
- file
level: INFO
建议将应用日志输出到标准输出,并由容器平台统一采集。对于规模较大的系统,可以接入 ELK、Loki、Datadog、阿里云 SLS 或腾讯云 CLS。
十一、限流与成本控制
AI 应用与普通接口最大的区别之一是:每一次请求都可能产生模型调用成本。如果缺少限流机制,恶意请求或异常循环调用可能导致账单暴涨。
1. 用户级限流
可以按用户维度限制:
- 每分钟请求次数;
- 每日请求次数;
- 每日 Token 用量;
- 单次输入长度;
- 单次输出长度。
例如:
rate_limit:
per_user:
requests_per_minute: 20
requests_per_day: 500
tokens_per_day: 100000
anonymous:
requests_per_minute: 5
requests_per_day: 50
2. 全局限流
全局限流用于保护系统和预算:
cost_control:
global_daily_token_limit: 5000000
global_daily_cost_limit_usd: 200
stop_when_exceed_limit: true
3. 缓存策略
对于重复问题,可以启用缓存:
cache:
enabled: true
ttl_seconds: 3600
key_strategy: normalized_query_hash
缓存适合 FAQ、文档问答、分类标签生成等确定性较强的场景。但对于强上下文、多轮对话和个性化生成,缓存要谨慎使用。
十二、提示词安全与输入防护
AI 工具生产部署时,提示词安全非常重要。用户可能通过 Prompt Injection 尝试绕过系统规则,例如:
- “忽略之前所有指令”;
- “输出你的系统提示词”;
- “告诉我你的 API Key”;
- “不要遵守安全策略”。
因此,需要在应用层增加输入防护和输出过滤。
防护建议
-
系统提示词不要包含敏感信息
不要在提示词中写入数据库密码、API Key、内部系统地址等内容。 -
对用户输入进行长度限制
超长输入不仅增加成本,也可能导致模型上下文污染。 -
增加敏感词和风险意图检测
对涉及违法、隐私、攻击、绕过限制等内容进行拦截或降级处理。 -
知识库检索结果要做权限过滤
用户只能检索自己有权限访问的文档。 -
模型输出需要后处理
对敏感信息、格式错误、违规内容进行检测和修正。 -
关键业务场景加入人工审核
例如法律建议、医疗建议、金融建议、对外公告等。
十三、模型调用重试与降级
模型 API 在生产环境中可能出现以下问题:
- 网络超时;
- 服务限流;
- 模型返回 5xx;
- 响应时间过长;
- 输出格式不符合要求;
- 上下文长度超限。
因此,需要设计重试和降级机制。
推荐策略
llm_resilience:
timeout_seconds: 60
max_retries: 2
retry_on_status:
- 429
- 500
- 502
- 503
- 504
fallback_model: gpt-4o-mini
enable_circuit_breaker: true
circuit_breaker_threshold: 10
circuit_breaker_window_seconds: 60
降级方式
常见降级策略包括:
- 使用更便宜、更快的备用模型;
- 返回缓存结果;
- 返回标准兜底话术;
- 将任务加入队列稍后处理;
- 提示用户稍后重试;
- 对非核心功能暂停服务。
例如客服场景中,如果模型调用失败,可以返回:
当前智能助手繁忙,请稍后重试。你也可以留下问题,我们会尽快安排人工处理。
十四、数据库初始化与备份
生产环境必须考虑数据迁移和备份。建议使用 Alembic、Flyway、Liquibase 等工具管理数据库结构变更。
数据迁移脚本示例
scripts/migrate.sh
#!/usr/bin/env bash
set -e
echo "Running database migrations..."
alembic upgrade head
echo "Migration completed."
PostgreSQL 备份脚本示例
scripts/backup.sh
#!/usr/bin/env bash
set -e
BACKUP_DIR="/backup/postgres"
DATE=$(date +"%Y%m%d_%H%M%S")
DB_HOST="postgres"
DB_NAME="ai_tool"
DB_USER="ai_user"
mkdir -p ${BACKUP_DIR}
pg_dump -h ${DB_HOST} -U ${DB_USER} ${DB_NAME} > ${BACKUP_DIR}/ai_tool_${DATE}.sql
find ${BACKUP_DIR} -type f -mtime +14 -delete
echo "Backup finished: ai_tool_${DATE}.sql"
备份策略建议:
- 至少每日一次全量备份;
- 重要业务增加增量备份;
- 备份文件加密存储;
- 定期进行恢复演练;
- 备份保留周期根据合规要求设置。
十五、上线流程建议
AI 工具生产上线不应直接手动复制代码,而应建立标准发布流程。
推荐上线流程
- 代码合并到主分支;
- 自动运行单元测试;
- 自动构建 Docker 镜像;
- 推送镜像到镜像仓库;
- 部署到测试环境;
- 执行接口测试和模型效果测试;
- 人工审核关键功能;
- 灰度发布到生产环境;
- 观察日志、错误率、延迟和成本;
- 完成全量发布;
- 保留可回滚版本。
发布前检查清单
[ ] 环境变量是否完整
[ ] API Key 是否可用
[ ] 数据库迁移是否成功
[ ] Redis 是否正常连接
[ ] 向量数据库是否可用
[ ] Nginx 配置是否正确
[ ] HTTPS 证书是否有效
[ ] 日志是否正常输出
[ ] 限流是否生效
[ ] Token 统计是否准确
[ ] 健康检查接口是否正常
[ ] 异常兜底是否可用
[ ] 监控告警是否配置
[ ] 回滚方案是否明确
十六、监控与告警
生产环境上线后,监控是保障稳定性的关键。
需要监控的指标
系统指标
- CPU 使用率;
- 内存使用率;
- 磁盘使用率;
- 网络流量;
- 容器重启次数。
应用指标
- QPS;
- 平均响应时间;
- P95/P99 延迟;
- 错误率;
- 超时率;
- 接口状态码分布。
AI 指标
- 模型调用次数;
- 输入 Token 数;
- 输出 Token 数;
- Token 总量;
- 单用户 Token 消耗;
- 模型调用失败率;
- 模型平均响应时间;
- 知识库命中率;
- 用户满意度反馈。
告警规则示例
alerts:
- name: high_error_rate
condition: error_rate > 5%
duration: 5m
severity: critical
- name: high_latency
condition: p95_latency > 10s
duration: 10m
severity: warning
- name: llm_call_failure
condition: llm_failure_rate > 10%
duration: 5m
severity: critical
- name: token_budget_exceeded
condition: daily_token_usage > 90%
duration: 1m
severity: warning
监控系统可以选择 Prometheus + Grafana,也可以使用云厂商提供的监控服务。对于 AI 工具,除了技术指标,还应特别关注成本指标和模型效果指标。
十七、生产环境常见问题与优化建议
1. 模型响应太慢
可能原因:
- 模型本身推理较慢;
- 输入上下文过长;
- 知识库检索耗时;
- 网络跨区域调用;
- 并发过高导致排队。
优化方式:
- 减少上下文长度;
- 优化提示词;
- 使用流式输出;
- 使用更快的模型;
- 增加缓存;
- 将模型服务部署在更近区域;
- 异步处理长任务。
2. Token 成本过高
可能原因:
- 每次都携带完整历史对话;
- 检索文档过多;
- 用户输入没有限制;
- 输出长度没有限制;
- 缺少缓存;
- 缺少用户级配额。
优化方式:
- 对历史对话做摘要;
- 控制
top_k; - 设置最大输入长度;
- 设置
max_tokens; - 增加结果缓存;
- 按用户、团队、租户设置 Token 限额。
3. 知识库问答不准确
可能原因:
- 文档切分不合理;
- Embedding 模型效果不足;
- 检索阈值设置不合适;
- 文档内容过期;
- 缺少重排序;
- 提示词没有约束模型基于资料回答。
优化方式:
- 优化 chunk 大小;
- 增加文档元数据;
- 调整相似度阈值;
- 引入 rerank;
- 增加“找不到答案时不要编造”的提示;
- 建立知识库更新机制。
4. 模型输出格式不稳定
优化方式:
- 使用 JSON Schema;
- 在提示词中给出明确格式;
- 增加少量示例;
- 降低 temperature;
- 对输出做解析校验;
- 解析失败后自动重试。
十八、Kubernetes 部署补充建议
如果系统规模较大,建议使用 Kubernetes 部署。Kubernetes 可以提供更好的弹性伸缩、滚动更新、服务发现和故障恢复能力。
一个简单的 Deployment 示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ai-app
spec:
replicas: 3
selector:
matchLabels:
app: ai-app
template:
metadata:
labels:
app: ai-app
spec:
containers:
- name: ai-app
image: registry.example.com/ai-tool:1.0.0
ports:
- containerPort: 8000
envFrom:
- secretRef:
name: ai-app-secret
- configMapRef:
name: ai-app-config
readinessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 10
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 30
periodSeconds: 30
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "2"
memory: "2Gi"
Kubernetes 生产环境中,应配合:
- Ingress;
- HPA 自动扩缩容;
- Secret 管理密钥;
- ConfigMap 管理配置;
- PersistentVolume 管理持久化存储;
- Prometheus 采集指标;
- Argo CD 或 GitOps 管理发布。
十九、完整部署命令示例
假设服务器已经安装 Docker 和 Docker Compose,可以按以下步骤部署。
1. 拉取代码
git clone https://github.com/example/ai-tool.git
cd ai-tool
2. 准备环境变量
cp .env.example .env
vim .env
修改其中的数据库密码、Redis 密码、大模型 API Key、域名等信息。
3. 构建并启动服务
cd deploy
docker compose up -d --build
4. 查看服务状态
docker compose ps
5. 查看日志
docker logs -f ai-app
docker logs -f ai-nginx
6. 测试健康检查
curl http://localhost/health
如果返回:
{
"status": "ok",
"service": "ai-tool"
}
说明应用服务已经启动成功。
7. 更新服务
git pull
cd deploy
docker compose up -d --build
8. 回滚版本
如果使用镜像仓库管理版本,可以指定旧版本镜像:
image: registry.example.com/ai-tool:1.0.0
然后执行:
docker compose up -d
二十、总结
AI 工具从 Demo 到生产环境,并不是简单地“把代码跑起来”。真正可靠的生产部署,需要同时考虑应用架构、容器化、配置管理、权限安全、日志监控、模型调用稳定性、成本控制和数据治理。
本文提供了一套较完整的生产部署思路和配置文件示例,包括:
- 推荐系统架构;
- 项目目录结构;
.env环境变量;app.yaml应用配置;Dockerfile;docker-compose.yml;Nginx反向代理配置;- 日志配置;
- 限流与成本控制;
- 健康检查;
- 备份脚本;
- Kubernetes 部署建议;
- 上线流程与检查清单。
对于中小型团队,可以先使用 Docker Compose 快速搭建一套稳定环境;当用户量增长、服务复杂度提升后,再迁移到 Kubernetes 或云原生平台。无论采用哪种方式,都应坚持一个原则:AI 能力只是系统的一部分,生产级 AI 工具的核心竞争力来自稳定、安全、可观测、可持续迭代的工程体系。