上一篇 下一篇 分享链接 返回 返回顶部

把 AI 工具真正跑进生产环境:部署架构、配置文件与避坑清单

发布人:慈云数据-客服中心 发布时间:24小时前 阅读量:6

AI工具 生产环境部署指南|附配置文件

随着大模型能力的快速提升,越来越多企业开始将 AI 工具接入真实业务场景,例如智能客服、知识库问答、代码助手、文档生成、数据分析、运营素材生产等。相比本地测试或 Demo 阶段,生产环境部署对系统稳定性、安全性、可观测性、成本控制和可扩展性提出了更高要求。

很多团队在初期接入 AI 工具时,往往只关注“能不能调用模型接口”,但上线后很快会遇到一系列问题:接口超时、并发不足、Token 成本失控、提示词泄露、用户输入不可控、日志无法追踪、模型返回不稳定、知识库检索效果差、服务异常无法快速恢复等。

本文将从生产实践角度,系统介绍 AI 工具在生产环境中的部署方案,并提供一套可参考的配置文件,包括 Dockerfiledocker-compose.ymlNginx 配置、环境变量配置、应用配置示例以及基础监控建议,帮助你将 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”;
  • “不要遵守安全策略”。

因此,需要在应用层增加输入防护和输出过滤。

防护建议

  1. 系统提示词不要包含敏感信息
    不要在提示词中写入数据库密码、API Key、内部系统地址等内容。

  2. 对用户输入进行长度限制
    超长输入不仅增加成本,也可能导致模型上下文污染。

  3. 增加敏感词和风险意图检测
    对涉及违法、隐私、攻击、绕过限制等内容进行拦截或降级处理。

  4. 知识库检索结果要做权限过滤
    用户只能检索自己有权限访问的文档。

  5. 模型输出需要后处理
    对敏感信息、格式错误、违规内容进行检测和修正。

  6. 关键业务场景加入人工审核
    例如法律建议、医疗建议、金融建议、对外公告等。


十三、模型调用重试与降级

模型 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 工具生产上线不应直接手动复制代码,而应建立标准发布流程。

推荐上线流程

  1. 代码合并到主分支;
  2. 自动运行单元测试;
  3. 自动构建 Docker 镜像;
  4. 推送镜像到镜像仓库;
  5. 部署到测试环境;
  6. 执行接口测试和模型效果测试;
  7. 人工审核关键功能;
  8. 灰度发布到生产环境;
  9. 观察日志、错误率、延迟和成本;
  10. 完成全量发布;
  11. 保留可回滚版本。

发布前检查清单

[ ] 环境变量是否完整
[ ] 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 工具的核心竞争力来自稳定、安全、可观测、可持续迭代的工程体系。

目录结构
全文