ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI部署工程师实战:从零部署大模型对话服务到生产环境

AI部署工程师实战:从零部署大模型对话服务到生产环境 在实际 AI 项目从原型走向生产的过程中一个关键角色正变得越来越重要AI 前沿部署工程师。这个岗位并非简单的运维或开发而是横跨算法理解、工程实现、系统集成和性能调优的复合型角色。很多团队在模型训练上投入巨大却在最后一步的部署、上线、维护和迭代中遇到瓶颈导致模型无法真正产生业务价值。AI 前沿部署工程师的核心任务就是解决从“模型可用”到“系统可靠、服务高效、成本可控”的最后一公里问题。本文面向希望从零基础切入 AI 部署领域或希望系统化提升工程化能力的开发者。我们将围绕 AI 大模型和 Agent 的部署这条主线拆解其核心技能栈并通过一个从零开始的实战项目展示如何将一个 AI 应用从本地开发环境部署到可对外服务的状态。文章将涵盖环境准备、核心组件部署、服务化封装、常见问题排查以及生产环境考量目标是让你掌握一套可复现、可排查的部署方法论而不仅仅是运行几个演示命令。1. 理解 AI 前沿部署工程师的角色与技能栈AI 前沿部署工程师常被称为 FDE其工作重心是确保 AI 模型特别是大语言模型和智能体能够稳定、高效、安全地运行在目标环境中并持续提供服务。这远不止于运行一个 Python 脚本。1.1 FDE 与算法工程师、后端工程师的区别一个常见的误解是会调 API 或跑通训练代码就等于会部署。实际上三者的关注点有本质不同算法工程师聚焦于模型结构设计、训练数据准备、损失函数优化和评估指标提升。他们的产出物通常是模型权重文件如.pt,.safetensors和相关的训练/推理代码。后端工程师聚焦于业务逻辑、数据持久化、API 设计、系统架构和高并发处理。他们关心的是服务的可用性、扩展性和数据一致性。FDE聚焦于桥梁角色。他们需要理解模型的输入输出、资源需求GPU内存、显存、推理速度并将其封装成标准服务如 HTTP API同时处理版本管理、滚动更新、监控告警、成本优化以及与现有后端系统的集成。简单来说FDE 确保算法工程师的“大脑”能够在一个健壮的“身体”里正常工作。1.2 核心技能拆解从基础到专项要胜任 FDE 的工作需要构建一个金字塔形的技能体系基础层必会编程语言Python 是绝对核心需熟练掌握其生态pip, venv, poetry。其次需要了解至少一门系统级或后端语言如 Go 或 Java用于编写高性能服务或与现有系统集成。Linux 系统熟练使用命令行进行文件操作、进程管理、日志查看、权限设置和基础网络配置。容器技术Docker 是标准化部署的基石。必须掌握镜像构建、容器运行、网络和数据卷管理。版本控制Git 的日常使用包括分支管理、代码回滚和协作流程。核心层专精模型推理框架这是 FDE 的“武器库”。需要根据模型类型和场景选择合适的工具。Transformer 系模型Hugging Facetransformers库是标准入口需熟悉其 pipeline 和 AutoClass 用法。大模型服务化vLLM高吞吐推理、TGIText Generation InferenceHugging Face 官方、OpenAI-compatible API servers如FastChat,llama.cpp的 server 模式。这些工具能将模型封装成类似 OpenAI 的 API。轻量化与优化了解模型量化GGUF, AWQ, GPTQ、模型编译ONNX Runtime, TensorRT以提升速度、降低资源消耗。API 开发与集成使用 FastAPI 或 Flask 快速构建模型推理的 HTTP 接口并处理认证、限流、输入验证和格式化输出。依赖与环境管理使用requirements.txt,pyproject.toml,Dockerfile精确控制 Python 包版本和系统依赖确保环境一致性。进阶层生产级编排与部署在单机 Docker 之上学习使用 Docker Compose 编排多容器应用并初步了解 Kubernetes 的基本概念Pod, Deployment, Service用于复杂集群部署。监控与可观测性集成 Prometheus, Grafana 监控服务指标QPS 延迟 GPU 利用率使用 ELK 或 Loki 收集和分析应用日志。CI/CD搭建自动化流水线实现代码提交后自动构建镜像、运行测试、部署到不同环境。成本与性能优化分析推理瓶颈通过批处理、持续批处理、模型量化、缓存策略等手段优化吞吐和延迟控制云计算成本。对于入门者应优先夯实基础层并深入核心层的模型服务化部分。本文的实战部分也将围绕此展开。2. 环境准备构建可复现的部署基础部署工作的第一步是建立一个干净、一致、可复现的环境。我们将从本地开发环境开始逐步过渡到容器化环境。2.1 本地开发环境配置假设我们使用一个基于 Transformer 的中等规模模型如Qwen2-7B-Instruct的量化版进行对话服务部署。首先确保你的开发机满足基本要求操作系统Ubuntu 20.04/22.04 LTS 或 macOS。Windows 建议使用 WSL2。Python版本 3.8 - 3.11。推荐使用pyenv或conda管理多版本。CUDA如使用 NVIDIA GPU根据显卡驱动安装对应版本的 CUDA Toolkit如 11.8 或 12.1。这是 GPU 推理加速的前提。内存与存储部署 7B 参数的 4-bit 量化模型建议至少有 8GB 空闲内存和 10GB 磁盘空间。创建一个独立的项目目录并初始化虚拟环境# 创建项目目录 mkdir ai-deploy-demo cd ai-deploy-demo # 创建虚拟环境以 venv 为例 python -m venv venv # 激活虚拟环境 # Linux/macOS source venv/bin/activate # Windows # venv\Scripts\activate # 升级 pip pip install --upgrade pip2.2 核心依赖安装我们将使用vLLM作为推理引擎因为它对 Transformer 模型的支持好、推理效率高且原生提供 OpenAI 兼容的 API。使用FastAPI构建一个更上层的业务 API。创建requirements.txt文件# 模型推理与服务化 vllm0.3.3 fastapi0.104.0 uvicorn[standard]0.24.0 pydantic2.0.0 # 工具类 python-dotenv1.0.0 # 管理环境变量 loguru0.7.0 # 结构化日志 httpx0.25.0 # 异步 HTTP 客户端 # 可选用于测试或高级功能 openai1.0.0 # 使用 OpenAI SDK 格式调用本地服务安装依赖pip install -r requirements.txt注意vLLM对 PyTorch 和 CUDA 版本有特定要求。如果安装失败请根据官方文档指定对应的torch版本例如pip install torch2.1.2 --index-url https://download.pytorch.org/whl/cu118。2.3 容器化环境准备Docker为了确保环境一致性我们使用 Docker。创建Dockerfile# 使用带有 CUDA 基础的 PyTorch 镜像 FROM pytorch/pytorch:2.1.2-cuda11.8-cudnn8-runtime # 设置工作目录 WORKDIR /app # 复制依赖文件 COPY requirements.txt . # 安装依赖使用清华镜像加速 RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple \ pip install --no-cache-dir --upgrade pip \ pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 暴露端口vLLM 默认 8000 我们的 FastAPI 服务用 8001 EXPOSE 8000 8001 # 设置默认启动命令后续会被 docker-compose 覆盖 CMD [python, app/main.py]同时创建.dockerignore文件避免将虚拟环境、缓存文件等打入镜像__pycache__ *.pyc venv .DS_Store .git *.log3. 实战部署一个本地大模型对话服务我们将构建一个两层服务架构底层模型服务使用vLLM启动一个 OpenAI 兼容的 API 服务器提供/v1/completions,/v1/chat/completions等端点。上层业务 API使用FastAPI构建一个业务层处理更复杂的逻辑如对话历史管理、敏感词过滤、限流并调用底层的vLLM服务。3.1 启动底层 vLLM 模型服务首先我们需要下载模型。国内可以从 ModelScope 或相关镜像站下载。这里以Qwen2-7B-Instruct的Qwen2-7B-Instruct-GPTQ-Int4量化版本为例。你可以编写一个启动脚本start_vllm_server.py# start_vllm_server.py from vllm import AsyncEngineArgs, AsyncLLMEngine from vllm.entrypoints.openai import api_server import argparse import uvicorn def main(): parser argparse.ArgumentParser() parser.add_argument(--model, typestr, defaultQwen/Qwen2-7B-Instruct-GPTQ-Int4) parser.add_argument(--host, typestr, default0.0.0.0) parser.add_argument(--port, typeint, default8000) parser.add_argument(--gpu-memory-utilization, typefloat, default0.9) parser.add_argument(--max-model-len, typeint, default4096) args parser.parse_args() engine_args AsyncEngineArgs( modelargs.model, gpu_memory_utilizationargs.gpu_memory_utilization, max_model_lenargs.max_model_len, tensor_parallel_size1, # 如果多卡可以增加 trust_remote_codeTrue, # 对于 Qwen 等模型需要 ) # 使用 uvicorn 直接运行 vLLM 的 OpenAI API 服务器 uvicorn.run( api_server.app, hostargs.host, portargs.port, log_levelinfo, # 将 engine_args 传递给 app app_kwargs{engine_args: engine_args} ) if __name__ __main__: main()更简单的方式是直接使用vLLM的命令行工具。创建一个启动脚本run_vllm.sh#!/bin/bash # run_vllm.sh MODEL_NAMEQwen/Qwen2-7B-Instruct-GPTQ-Int4 # 或者使用本地路径 # MODEL_NAME/path/to/your/model python -m vllm.entrypoints.openai.api_server \ --model $MODEL_NAME \ --host 0.0.0.0 \ --port 8000 \ --gpu-memory-utilization 0.9 \ --max-model-len 4096 \ --trust-remote-code \ --served-model-name qwen-7b-instruct运行脚本chmod x run_vllm.sh ./run_vllm.sh服务启动后你可以通过curl测试curl http://localhost:8000/v1/models应该返回类似{object:list,data:[{id:qwen-7b-instruct, ...}]}的 JSON。3.2 构建上层 FastAPI 业务服务现在我们构建一个业务 API它接收用户消息添加系统提示调用底层的 vLLM 服务并返回结果。创建项目结构ai-deploy-demo/ ├── app/ │ ├── __init__.py │ ├── main.py # FastAPI 应用入口 │ ├── config.py # 配置管理 │ ├── services/ │ │ ├── __init__.py │ │ └── llm_service.py # 封装 LLM 调用 │ └── api/ │ ├── __init__.py │ └── endpoints/ │ ├── __init__.py │ └── chat.py # 聊天接口 ├── requirements.txt ├── Dockerfile ├── docker-compose.yml └── .env.example首先定义配置app/config.py# app/config.py from pydantic_settings import BaseSettings class Settings(BaseSettings): # vLLM 服务地址 VLLM_API_BASE: str http://localhost:8000/v1 VLLM_API_KEY: str token-abc123 # vLLM 默认密钥可配置 VLLM_MODEL: str qwen-7b-instruct # 服务配置 APP_HOST: str 0.0.0.0 APP_PORT: int 8001 LOG_LEVEL: str INFO class Config: env_file .env settings Settings()然后创建 LLM 服务层app/services/llm_service.py# app/services/llm_service.py import httpx from loguru import logger from app.config import settings from typing import List, Dict, Any class LLMService: def __init__(self): self.api_base settings.VLLM_API_BASE self.api_key settings.VLLM_API_KEY self.model settings.VLLM_MODEL self.client httpx.AsyncClient( base_urlself.api_base, headers{Authorization: fBearer {self.api_key}}, timeout60.0 ) logger.info(fLLMService initialized with endpoint: {self.api_base}) async def chat_completion(self, messages: List[Dict[str, str]], **kwargs) - Dict[str, Any]: 调用 vLLM 的聊天补全接口 payload { model: self.model, messages: messages, stream: False, **kwargs } try: response await self.client.post(/chat/completions, jsonpayload) response.raise_for_status() result response.json() return result except httpx.HTTPStatusError as e: logger.error(fHTTP error occurred: {e.response.status_code} - {e.response.text}) raise except Exception as e: logger.error(fUnexpected error during LLM call: {e}) raise async def close(self): await self.client.aclose() # 全局实例 llm_service LLMService()接着创建聊天端点app/api/endpoints/chat.py# app/api/endpoints/chat.py from fastapi import APIRouter, HTTPException from pydantic import BaseModel, Field from typing import List, Optional from app.services.llm_service import llm_service from loguru import logger router APIRouter(prefix/chat, tags[chat]) class Message(BaseModel): role: str Field(..., description角色user, assistant, system) content: str Field(..., description消息内容) class ChatRequest(BaseModel): messages: List[Message] Field(..., description对话历史) temperature: Optional[float] Field(0.7, ge0.0, le2.0, description采样温度) max_tokens: Optional[int] Field(1024, gt0, description生成的最大 token 数) class ChatResponse(BaseModel): message: Message finish_reason: str usage: dict router.post(/completions, response_modelChatResponse) async def chat_completion(request: ChatRequest): 聊天补全接口。 注意这里简化了处理实际项目可能需要添加对话历史管理、敏感词过滤等。 logger.info(fReceived chat request with {len(request.messages)} messages.) # 将 Pydantic 模型转换为字典列表 messages_dict [msg.dict() for msg in request.messages] try: # 调用 LLM 服务 llm_response await llm_service.chat_completion( messagesmessages_dict, temperaturerequest.temperature, max_tokensrequest.max_tokens ) # 解析响应 choice llm_response[choices][0] message choice[message] usage llm_response.get(usage, {}) return ChatResponse( messageMessage(rolemessage[role], contentmessage[content]), finish_reasonchoice.get(finish_reason, stop), usageusage ) except Exception as e: logger.exception(Error during chat completion) raise HTTPException(status_code500, detailfInternal server error: {str(e)})最后创建 FastAPI 主应用app/main.py# app/main.py from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.api.endpoints import chat from app.config import settings from app.services.llm_service import llm_service import uvicorn from contextlib import asynccontextmanager from loguru import logger asynccontextmanager async def lifespan(app: FastAPI): # 启动时 logger.info(Starting up LLM service...) # 这里可以初始化数据库连接等 yield # 关闭时 logger.info(Shutting down LLM service...) await llm_service.close() app FastAPI(titleAI Chat Deployment Demo, lifespanlifespan) # 添加 CORS 中间件按需配置 app.add_middleware( CORSMiddleware, allow_origins[*], # 生产环境应限制来源 allow_credentialsTrue, allow_methods[*], allow_headers[*], ) # 注册路由 app.include_router(chat.router) app.get(/health) async def health_check(): return {status: healthy, service: ai-chat-api} if __name__ __main__: uvicorn.run( app.main:app, hostsettings.APP_HOST, portsettings.APP_PORT, reloadTrue, # 开发模式热重载 log_levelsettings.LOG_LEVEL.lower() )3.3 使用 Docker Compose 编排服务为了简化部署我们使用docker-compose.yml来定义和运行两个服务vllm-server和chat-api。# docker-compose.yml version: 3.8 services: vllm-server: build: . # 为了快速启动也可以直接使用预构建的 vllm 镜像这里我们复用构建的镜像但覆盖命令 image: ai-deploy-demo:vllm container_name: vllm-server command: python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2-7B-Instruct-GPTQ-Int4 --host 0.0.0.0 --port 8000 --gpu-memory-utilization 0.9 --max-model-len 4096 --trust-remote-code --served-model-name qwen-7b-instruct ports: - 8000:8000 # 如果使用 GPU取消注释以下行 # deploy: # resources: # reservations: # devices: # - driver: nvidia # count: all # capabilities: [gpu] volumes: # 挂载模型目录避免每次下载 - ./models:/root/.cache/huggingface/hub environment: - HF_HOME/root/.cache/huggingface networks: - ai-network chat-api: build: . image: ai-deploy-demo:api container_name: chat-api command: uvicorn app.main:app --host 0.0.0.0 --port 8001 --reload ports: - 8001:8001 environment: - VLLM_API_BASEhttp://vllm-server:8000/v1 # 使用 Docker 服务名通信 - VLLM_API_KEYtoken-abc123 - VLLM_MODELqwen-7b-instruct - APP_HOST0.0.0.0 - APP_PORT8001 depends_on: - vllm-server networks: - ai-network networks: ai-network: driver: bridge现在在项目根目录下运行# 构建镜像并启动服务 docker-compose up --build等待镜像构建完成并启动后两个服务将运行起来vLLM服务http://localhost:8000FastAPI聊天服务http://localhost:80014. 验证、测试与常见问题排查服务启动后必须进行系统化验证而不是仅仅看日志是否报错。4.1 服务健康检查首先检查两个服务的基础健康状态# 检查 vLLM 服务 curl http://localhost:8000/v1/models # 检查 FastAPI 服务 curl http://localhost:8001/health预期应返回 JSON 格式的成功响应。4.2 功能测试调用聊天接口使用curl或 Python 脚本测试完整的聊天流程curl -X POST http://localhost:8001/chat/completions \ -H Content-Type: application/json \ -d { messages: [ {role: system, content: 你是一个乐于助人的助手。}, {role: user, content: 你好请介绍一下你自己。} ], temperature: 0.7, max_tokens: 200 }预期会返回一个包含助手回复的 JSON 对象。4.3 常见问题与排查路径在部署过程中你几乎一定会遇到各种问题。以下是按优先级排序的排查清单问题现象可能原因检查方式处理建议服务启动失败端口被占用端口 8000 或 8001 已被其他进程使用。netstat -tulpn | grep :8000(Linux) 或lsof -i :8000(macOS)。修改docker-compose.yml中的端口映射如8002:8000或停止占用端口的进程。vLLM 服务启动时报 CUDA 错误1. Docker 容器无法访问 GPU。2. CUDA 版本与 PyTorch/vLLM 不匹配。3. 显卡驱动太旧。1. 运行docker run --rm --gpus all nvidia/cuda:11.8.0-base nvidia-smi检查 Docker GPU 支持。2. 检查容器内python -c import torch; print(torch.cuda.is_available())。3. 查看宿主机nvidia-smi和 CUDA 版本。1. 确保安装nvidia-container-toolkit并重启 Docker。2. 确保Dockerfile基础镜像的 CUDA 版本与宿主机兼容。3. 升级显卡驱动。模型下载失败或速度极慢网络连接 Hugging Face 或 ModelScope 不稳定。查看 vLLM 容器日志寻找下载超时或连接错误。1. 使用国内镜像源设置环境变量HF_ENDPOINThttps://hf-mirror.com。2. 提前在宿主机下载模型到./models目录并通过 Docker 卷挂载。聊天 API 返回 500 内部错误1.chat-api服务无法连接vllm-server。2. 请求格式不符合 vLLM API 要求。3. 模型加载失败。1. 检查chat-api容器日志看是否有连接拒绝错误。2. 直接调用vLLM原始接口http://localhost:8000/v1/chat/completions测试。3. 检查vllm-server容器日志看模型加载是否有报错。1. 确保docker-compose.yml中VLLM_API_BASE配置正确使用服务名vllm-server。2. 对比请求体与 OpenAI API 格式。3. 确认模型路径或名称正确且有足够权限和磁盘空间。推理速度慢响应延迟高1. 模型过大硬件资源不足。2. 未使用量化模型。3. 未启用批处理。1. 监控 GPU 内存使用 (nvidia-smi)。2. 检查是否使用了GPTQ,AWQ或GGUF量化模型。3. 查看 vLLM 日志确认是否处理单个请求。1. 换用更小的模型或增加 GPU 内存。2. 务必使用 4-bit 或 8-bit 量化模型进行部署。3. 考虑使用 vLLM 的连续批处理功能或在流量允许时合并请求。生成内容不符合预期胡言乱语1. 温度 (temperature) 参数过高。2. 系统提示词 (system prompt) 未生效或冲突。3. 模型本身存在“幻觉”。1. 检查请求中的temperature参数尝试调低至 0.1-0.3。2. 确认messages列表中system角色的消息在正确位置。3. 使用更强大的模型或实施后处理过滤。1. 调整生成参数temperature,top_p,repetition_penalty。2. 优化提示词工程明确约束和格式。3. 对于关键应用结合 RAG 技术让模型基于检索到的事实生成。4.4 日志查看与监控日志是排查问题的生命线。学会查看和分析日志# 查看所有服务的日志 docker-compose logs # 查看特定服务如 vllm-server的日志并持续跟踪 docker-compose logs -f vllm-server # 进入容器内部查看 docker exec -it vllm-server /bin/bash cat /path/to/log/file.log在生产环境中需要将日志集中收集到如ELK或Loki系统中并设置关键错误告警。5. 从学习环境到生产环境的考量本地能跑通只是第一步。要让服务真正可靠地对外提供还需要做一系列加固和优化。5.1 配置外部化与管理永远不要将敏感信息如 API Keys、模型路径硬编码在代码中。使用环境变量或配置中心。开发/测试使用.env文件并通过python-dotenv加载。生产使用 KubernetesConfigMap,Secret或专业的配置中心如 Apollo, Nacos。创建.env.example文件作为模板# .env.example VLLM_API_BASEhttp://vllm-server:8000/v1 VLLM_API_KEYyour-secret-token-here VLLM_MODELQwen/Qwen2-7B-Instruct-GPTQ-Int4 APP_HOST0.0.0.0 APP_PORT8001 LOG_LEVELINFO HF_HOME/data/models # Hugging Face 缓存目录5.2 安全性加固API 认证与授权为chat-api添加 API Key 认证或 JWT 认证避免服务被滥用。输入验证与清理在 FastAPI 层使用 Pydantic 严格校验输入防止 Prompt 注入攻击。网络隔离在生产环境中将vllm-server服务设置为仅内部网络可访问不暴露公网端口只有chat-api可以调用它。内容安全对模型的输出进行后处理过滤防止生成有害、敏感或不适当的内容。5.3 性能、可用性与可观测性资源限制与调度在docker-compose或 Kubernetes 中为容器设置 CPU、内存限制防止单个服务耗尽主机资源。健康检查与就绪探针为服务配置/health端点并在编排工具中设置健康检查实现故障自愈。监控指标在chat-api中集成Prometheus客户端暴露请求量、延迟、错误率等指标。监控 GPU 使用率、显存占用和温度。日志聚合使用Fluentd或Filebeat将容器日志收集到中心化的日志平台。限流与熔断在 API 网关层如 Nginx, Kong或应用层使用slowapi等库实施限流防止突发流量打垮服务。使用tenacity等库为 LLM 调用添加重试和熔断机制。5.4 部署与 CI/CD 流程镜像仓库将构建好的 Docker 镜像推送到私有镜像仓库如 Harbor, AWS ECR, Google Container Registry。持续集成在 Git 仓库配置 CI 流水线在代码合并时自动运行单元测试、构建 Docker 镜像。持续部署使用 ArgoCD 或 Flux 等 GitOps 工具将镜像自动部署到 Kubernetes 集群。版本管理与回滚为镜像使用语义化版本标签并在部署配置中明确指定版本确保可以快速回滚到稳定版本。5.5 成本优化大模型推理是计算密集型任务成本主要来自 GPU 实例。优化方向包括模型选择在效果可接受的范围内选择更小、更高效的模型。量化始终使用量化模型如 GPTQ-Int4能在几乎不损失精度的情况下大幅降低显存占用和提升速度。推理优化利用vLLM的 PagedAttention 和连续批处理提高 GPU 利用率。自动伸缩根据流量预测在 Kubernetes 中配置 HPA水平自动伸缩在低峰期减少 Pod 副本数。Spot 实例在云平台上对非关键任务使用可抢占的 Spot 实例降低成本。6. 扩展方向与学习路径掌握基础部署后你可以向以下几个方向深入这些都是 FDE 岗位的核心竞争力。深入模型优化学习更高级的量化技术AWQ, SqueezeLLM、模型编译TensorRT-LLM和蒸馏追求极致的推理性能。构建 AI Agent 服务将大模型与工具调用、记忆、规划能力结合部署复杂的 AI Agent。这需要设计更复杂的服务间通信、状态管理和任务调度。搭建 RAG 系统实现检索增强生成的全链路部署包括文档切分、向量化、向量数据库检索、重排序和生成。涉及 Milvus, Qdrant, Elasticsearch 等组件的部署和调优。掌握云原生部署深入学习 Kubernetes包括 Service, Ingress, ConfigMap, Secret, PersistentVolume, HPA 等对象的管理以及使用 Helm 打包应用。建立完整的 MLOps 流水线不仅部署模型还要管理从数据准备、训练、评估到部署、监控的完整生命周期。学习 MLflow, Kubeflow 等工具。学习路径建议先通过本文的实践掌握单模型服务化部署的全流程然后选择一个扩展方向如 RAG进行垂直深入构建一个端到端的可运行项目。在这个过程中你会自然遇到并需要解决网络、存储、监控、安全等一系列工程问题这正是 FDE 经验积累的过程。记住部署的本质是工程问题核心思维是标准化、自动化、可观测和可回滚。
返回列表