⚡ AI 工程实践
从模型训练到生产环境 —— 部署、监控、Agent 开发与工程化落地
AI 工程概览
AI 工程(AI Engineering)是将 AI 模型从实验阶段推向生产环境的系统工程。涵盖模型部署、服务化、监控、数据管道、Agent 开发等多个环节。一个 AI 产品的成功,往往 80% 的工作在工程落地。
💡 AI 工程师的核心挑战
不只是「模型跑通」,而是要解决:高并发低延迟的推理服务、稳定可靠的线上表现、可观测可调试的系统行为、持续迭代的模型更新流程。
模型部署方案
将训练好的模型部署为可调用的服务,是 AI 工程的第一步。
推理引擎对比
| 引擎 | 特点 | 适用场景 | 性能 |
|---|---|---|---|
| vLLM | PagedAttention、连续批处理、张量并行 | LLM 高并发推理 | ⭐⭐⭐⭐⭐ |
| TGI | HuggingFace 官方推理服务器 | HuggingFace 模型部署 | ⭐⭐⭐⭐ |
| Ollama | 一键本地运行,OpenAI 兼容 API | 个人开发、快速验证 | ⭐⭐⭐ |
| llama.cpp | 纯 C/C++,CPU/Metal 推理 | 边缘设备、Mac 本地 | ⭐⭐⭐ |
| TensorRT-LLM | NVIDIA 官方优化,极致性能 | NVIDIA GPU 生产部署 | ⭐⭐⭐⭐⭐ |
| Triton | 多框架支持、动态批处理 | 多模型混合部署 | ⭐⭐⭐⭐ |
vLLM 部署实战
# 安装
pip install vllm
# 启动 OpenAI 兼容 API 服务
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2.5-7B-Instruct \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 2 \ # 2 卡张量并行
--gpu-memory-utilization 0.9 \
--max-model-len 8192 \
--enable-prefix-caching # 启用前缀缓存
# 调用(兼容 OpenAI SDK)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="none")
response = client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct",
messages=[{"role": "user", "content": "你好"}]
)
Docker 容器化部署
# Dockerfile 示例
FROM vllm/vllm-openai:latest
ENV MODEL_NAME=Qwen/Qwen2.5-7B-Instruct
ENV PORT=8000
EXPOSE 8000
ENTRYPOINT python -m vllm.entrypoints.openai.api_server \
--model $MODEL_NAME \
--host 0.0.0.0 \
--port $PORT \
--gpu-memory-utilization 0.9
# 构建与运行
docker build -t llm-service .
docker run --gpus all -p 8000:8000 llm-service
MLOps 工程体系
MLOps 是将 DevOps 理念应用到 AI 项目的工程实践,实现模型开发、测试、部署、监控的自动化。
MLOps 核心组件
📊 实验管理
记录每次实验的超参数、指标、模型文件。工具:Weights & Biases、MLflow、Neptune。
📦 模型注册
统一管理模型版本、元数据、依赖。工具:MLflow Model Registry、HuggingFace Hub。
🔄 CI/CD 流水线
自动化测试、构建、部署。工具:GitHub Actions、GitLab CI、Jenkins。
📈 监控告警
监控模型性能漂移、推理延迟、错误率。工具:Prometheus + Grafana、Evidently AI。
模型版本管理
# 使用 MLflow 管理模型版本
import mlflow
mlflow.set_tracking_uri("http://localhost:5000")
with mlflow.start_run(run_name="qwen2-lora-medical"):
# 记录超参数
mlflow.log_params({
"model": "Qwen2.5-7B",
"method": "LoRA",
"rank": 16,
"learning_rate": 2e-4,
"epochs": 3,
"train_samples": 5000,
})
# 记录指标
mlflow.log_metrics({
"eval_loss": 0.42,
"eval_accuracy": 0.89,
"train_loss": 0.38,
})
# 注册模型
mlflow.register_model(
"runs:/current/model",
"qwen2-medical-qa"
)
AI Agent 开发
AI Agent 是能够自主规划、使用工具、执行多步任务的智能体。从「被动回答」到「主动行动」的范式升级。
Agent 核心架构
# Agent 的核心循环
while task not completed:
# 1. 思考(Reasoning)
thought = llm.think(task, memory, observations)
# 2. 决策(Planning)
action = llm.decide(thought, available_tools)
# 3. 执行(Action)
result = execute(action)
# 4. 观察(Observation)
memory.update(thought, action, result)
# 5. 判断是否完成
if is_task_done(result):
return final_answer
主流 Agent 框架
| 框架 | 特点 | 适合场景 |
|---|---|---|
| LangChain | 生态最丰富,模块化组件多 | RAG、对话机器人、工具链 |
| LangGraph | 图结构编排,支持复杂工作流 | 多步骤、有状态的 Agent |
| CrewAI | 多 Agent 协作,角色扮演 | 多角色协作的复杂任务 |
| AutoGen | 微软出品,多 Agent 对话 | 代码生成、分析任务 |
| Dify | 低代码平台,可视化编排 | 快速构建 AI 应用 |
LangChain Agent 实战
from langchain_openai import ChatOpenAI
from langchain.agents import tool, AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
# 定义工具
@tool
def search_web(query: str) -> str:
"""搜索互联网获取最新信息"""
# 实际调用搜索 API
return f"搜索结果:{query} 的相关信息..."
@tool
def calculate(expression: str) -> str:
"""计算数学表达式"""
return str(eval(expression))
# 创建 Agent
llm = ChatOpenAI(model="gpt-4", temperature=0)
tools = [search_web, calculate]
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个智能助手,可以使用工具来帮助用户。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
agent = create_tool_calling_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools)
# 运行
result = executor.invoke({
"input": "北京今天气温多少度?比上海高几度?"
})
# Agent 会自动:1.搜索北京气温 2.搜索上海气温 3.计算差值
向量数据库
向量数据库是 RAG 系统和语义搜索的核心基础设施,专门用于存储和检索高维向量(Embedding)。
主流向量数据库对比
| 数据库 | 部署方式 | 特点 | 适合规模 |
|---|---|---|---|
| Milvus | 自建 / 云 | 功能最全,分布式架构 | 大规模生产 |
| Qdrant | 自建 / 云 | Rust 实现,性能优秀 | 中大规模 |
| Weaviate | 自建 / 云 | 内置向量化模块 | 中大规模 |
| Pinecone | 纯云托管 | 零运维,开箱即用 | 快速上手 |
| Chroma | 嵌入式 | 轻量级,Python 原生 | 开发 / 小规模 |
| pgvector | PostgreSQL 插件 | 复用现有 PG 基础设施 | 已有 PG 的项目 |
RAG 系统实战
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
# 1. 文档加载与切分
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
)
chunks = splitter.split_documents(documents)
# 2. 向量化并存入数据库
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
chunks, embeddings, persist_directory="./chroma_db"
)
# 3. 构建 RAG 链
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4"),
retriever=vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 5}, # 检索 top-5
),
return_source_documents=True,
)
# 4. 查询
result = qa_chain.invoke({"query": "公司的年假政策是什么?"})
print(result["result"])
监控与可观测性
AI 系统上线后,持续监控是保证质量的关键。
需要监控的指标
- 推理延迟(Latency):P50 / P95 / P99 响应时间
- 吞吐量(Throughput):每秒处理的请求数 / token 数
- 错误率(Error Rate):超时、模型报错、格式错误的比例
- GPU 利用率:显存占用、GPU 使用率、温度
- 模型质量漂移:输出分布是否偏离预期
- 用户满意度:点赞/点踩比例、人工反馈
LLM 应用监控工具
🔍 LangSmith
LangChain 官方追踪平台,可视化 Agent 执行链路,调试 Prompt。
📊 Phoenix (Arize)
开源 LLM 可观测性平台,追踪调用、评估质量、检测幻觉。
📈 Grafana + Prometheus
通用监控方案,自定义指标采集和可视化,适合基础设施监控。
🧪 Braintrust
AI 产品评估平台,A/B 测试、回归测试、Prompt 版本管理。
AI 应用架构模式
常见架构模式
- 网关模式:统一 API 网关管理多个模型的调用、限流、鉴权
- 路由模式:根据任务复杂度将请求分发到不同模型(简单→小模型,复杂→大模型)
- 缓存模式:相同/相似请求的结果缓存,减少重复推理成本
- 降级模式:主模型不可用时自动切换到备用模型
- 异步模式:长任务异步处理,WebSocket / SSE 推送进度
成本优化策略
# 1. 模型路由:简单问题用小模型,复杂问题用大模型
def route_request(user_input):
if is_simple_query(user_input):
return call_small_model(user_input) # 成本低
else:
return call_large_model(user_input) # 效果好
# 2. 语义缓存:相似问题复用历史回答
def get_response(query):
cached = vector_store.search(query, threshold=0.95)
if cached:
return cached.answer # 命中缓存
return generate_new(query) # 未命中,调用模型
# 3. Prompt 缓存:固定前缀自动缓存(vLLM/OpenAI)
# 4. 批处理:非实时任务合并为 Batch API(节省 50%)
🚀 工程实践建议
先跑通最小可行产品(MVP)→ 建立评估体系 → 逐步优化工程细节。不要一开始就追求完美架构,但也别忽视监控和可观测性——看不到问题比有问题更危险。