news 2026/2/5 17:57:33

NVIDIA NIM 开发并部署 AI Agent(智能体)实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NVIDIA NIM 开发并部署 AI Agent(智能体)实战

基于 NVIDIA NIM 开发并部署 AI Agent(智能体)的完整案例,以企业级客服智能体为例,涵盖 Agent 核心逻辑开发、基于 NIM 的推理服务部署、Agent 服务封装与上线全流程。

案例背景

开发一个“金融产品咨询智能体”,具备以下能力:

  1. 理解用户自然语言问题(如“信用卡分期利率是多少?”);
  2. 检索金融产品知识库(RAG 能力);
  3. 调用 NIM 提供的 LLM 生成合规、准确的回答;
  4. 部署为可对外调用的 HTTP 服务。

前置条件

  1. 硬件:配备 NVIDIA GPU(RTX 4090/A100/H100,显存 ≥ 16GB);
  2. 软件:Docker、NVIDIA Container Toolkit、Python 3.9+、FastAPI、LangChain;
  3. 账号:NVIDIA NGC 账号(获取 NIM 容器,https://ngc.nvidia.com/)。

步骤 1:部署 NVIDIA NIM 推理服务(Llama 3.1 + BGE-M3)

首先部署 NIM 提供的 LLM 服务(对话生成)和嵌入模型服务(知识库检索)。

1.1 启动 NIM Llama 3.1 8B 服务(对话生成)

# 1. 登录 NGC(首次需执行,输入 NGC API Key)docker login nvcr.io# 2. 拉取 NIM Llama 3.1 8B 镜像docker pull nvcr.io/nim/meta/llama3.1-8b-instruct:latest# 3. 启动 NIM LLM 服务(暴露 8000 端口,占用 1 块 GPU)docker run -d --name nim-llm --gpus all -p8000:8000\-eNVIDIA_API_KEY="你的 NGC API Key"\nvcr.io/nim/meta/llama3.1-8b-instruct:latest

1.2 启动 NIM BGE-M3 服务(文本嵌入)

# 1. 拉取 NIM BGE-M3 镜像docker pull nvcr.io/nim/bge-m3:latest# 2. 启动 NIM 嵌入服务(暴露 8001 端口)docker run -d --name nim-embed --gpus all -p8001:8000\-eNVIDIA_API_KEY="你的 NGC API Key"\nvcr.io/nim/bge-m3:latest

1.3 验证 NIM 服务

# 验证 LLM 服务curlhttp://localhost:8000/v1/models# 验证嵌入服务curlhttp://localhost:8001/v1/models

返回模型列表(如llama3.1-8b-instruct)则说明部署成功。


步骤 2:开发 AI Agent 核心逻辑

基于 LangChain 封装 Agent,整合“知识库检索 + NIM LLM 推理 + 合规校验”能力。

2.1 安装依赖

pipinstalllangchain fastapi uvicorn requests faiss-cpu python-multipart

2.2 Agent 核心代码(finance_agent.py

importrequestsimportfaissimportnumpyasnpfromlangchain.schemaimportHumanMessage,SystemMessagefromfastapiimportFastAPI,HTTPExceptionfrompydanticimportBaseModel# ====================== 配置项 ======================# NIM 服务地址NIM_LLM_URL="http://localhost:8000/v1/chat/completions"NIM_EMBED_URL="http://localhost:8001/v1/embeddings"# 金融产品知识库(示例数据)KNOWLEDGE_BASE=["信用卡分期利率:3期 0.9%/期,6期 0.85%/期,12期 0.8%/期","储蓄卡跨行取款手续费:每月前3笔免费,之后每笔2元","房贷基准利率:首套房 LPR - 20BP,二套房 LPR + 60BP","理财产品起购金额:稳健型 1万元,进取型 5万元"]# 合规提示词(确保回答符合金融监管要求)SYSTEM_PROMPT=""" 你是专业的金融客服智能体,需遵守以下规则: 1. 仅回答知识库中的金融产品问题,超出范围请回复“暂无相关信息”; 2. 回答需准确、简洁,不夸大收益、不承诺保本; 3. 禁止透露客户隐私、禁止提供投资建议。 """# ====================== 工具函数 ======================classNIMEmbedding:"""适配 NIM 嵌入服务的封装类"""defembed_texts(self,texts:list)->list:"""批量生成文本嵌入向量"""try:resp=requests.post(NIM_EMBED_URL,json={"input":texts},timeout=10)resp.raise_for_status()return[d["embedding"]fordinresp.json()["data"]]exceptExceptionase:raiseRuntimeError(f"嵌入服务调用失败:{str(e)}")defembed_query(self,query:str)->list:"""生成单个查询的嵌入向量"""returnself.embed_texts([query])[0]classNIMLLM:"""适配 NIM LLM 服务的封装类"""defgenerate_response(self,context:str,query:str)->str:"""结合上下文生成回答"""try:payload={"model":"llama3.1-8b-instruct","messages":[{"role":"system","content":SYSTEM_PROMPT},{"role":"user","content":f"上下文:{context}\n问题:{query}"}],"temperature":0.1,# 低随机性保证回答准确"max_tokens":200}resp=requests.post(NIM_LLM_URL,json=payload,timeout=20)resp.raise_for_status()returnresp.json()["choices"][0]["message"]["content"].strip()exceptExceptionase:raiseRuntimeError(f"LLM 服务调用失败:{str(e)}")# ====================== Agent 核心类 ======================classFinanceAgent:def__init__(self):# 初始化嵌入模型和向量库self.embedding=NIMEmbedding()self.llm=NIMLLM()self._build_knowledge_vector_db()def_build_knowledge_vector_db(self):"""构建知识库向量库"""# 生成知识库文本的嵌入向量knowledge_embeddings=self.embedding.embed_texts(KNOWLEDGE_BASE)# 初始化 FAISS 向量库(维度与 NIM 嵌入一致)dimension=len(knowledge_embeddings[0])self.index=faiss.IndexFlatL2(dimension)self.index.add(np.array(knowledge_embeddings).astype("float32"))self.knowledge_texts=KNOWLEDGE_BASEdefretrieve_context(self,query:str,top_k:int=2)->str:"""检索与问题最相关的知识库内容"""query_embedding=self.embedding.embed_query(query)# 向量检索(L2 距离)distances,indices=self.index.search(np.array([query_embedding]).astype("float32"),k=top_k)# 过滤低相关性结果(距离阈值可根据实际调整)context=[]fori,idxinenumerate(indices[0]):ifdistances[0][i]<1.0:# 距离越小越相关context.append(self.knowledge_texts[idx])return"\n".join(context)ifcontextelse"暂无相关信息"defrun(self,query:str)->str:"""Agent 主流程:检索 → 生成回答"""# 1. 检索知识库context=self.retrieve_context(query)# 2. 调用 LLM 生成回答returnself.llm.generate_response(context,query)# ====================== FastAPI 服务封装 ======================app=FastAPI(title="金融客服智能体 API")agent=FinanceAgent()# 初始化 Agent# 请求体模型classAgentRequest(BaseModel):query:str# 响应体模型classAgentResponse(BaseModel):code:intmsg:stranswer:str=""@app.post("/api/finance/query",response_model=AgentResponse)defagent_query(request:AgentRequest):"""智能体对外调用接口"""try:ifnotrequest.query.strip():raiseHTTPException(status_code=400,detail="查询内容不能为空")# 执行 Agent 逻辑answer=agent.run(request.query)returnAgentResponse(code=200,msg="success",answer=answer)exceptHTTPExceptionase:returnAgentResponse(code=e.status_code,msg=e.detail)exceptExceptionase:returnAgentResponse(code=500,msg=f"服务异常:{str(e)}")# 启动服务(本地测试)if__name__=="__main__":importuvicorn uvicorn.run(app,host="0.0.0.0",port=8080)

步骤 3:部署 Agent 服务并测试

3.1 启动 Agent 服务

# 运行 FastAPI 服务python finance_agent.py

服务将启动在http://0.0.0.0:8080

3.2 测试 Agent 接口

# 测试有效查询curl-X POST"http://localhost:8080/api/finance/query"\-H"Content-Type: application/json"\-d'{"query": "信用卡分期12期的利率是多少?"}'# 测试无效查询curl-X POST"http://localhost:8080/api/finance/query"\-H"Content-Type: application/json"\-d'{"query": "股票怎么买?"}'

3.3 预期输出

  • 有效查询返回:
    {"code":200,"msg":"success","answer":"信用卡分期利率:12期 0.8%/期"}
  • 无效查询返回:
    {"code":200,"msg":"success","answer":"暂无相关信息"}

步骤 4:企业级部署优化(可选)

若需生产环境部署,可补充以下优化:

4.1 容器化 Agent 服务

创建Dockerfile

FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY finance_agent.py . EXPOSE 8080 CMD ["python", "finance_agent.py"]

构建并启动容器:

docker build -t finance-agent:v1.docker run -d --name finance-agent -p8080:8080 finance-agent:v1

4.2 Kubernetes 部署(大规模场景)

创建agent-deployment.yaml

apiVersion:apps/v1kind:Deploymentmetadata:name:finance-agentspec:replicas:2selector:matchLabels:app:finance-agenttemplate:metadata:labels:app:finance-agentspec:containers:-name:agentimage:finance-agent:v1ports:-containerPort:8080resources:limits:cpu:"1"memory:"2Gi"---apiVersion:v1kind:Servicemetadata:name:finance-agent-servicespec:type:LoadBalancerselector:app:finance-agentports:-port:80targetPort:8080

部署到 K8s 集群:

kubectl apply -f agent-deployment.yaml

总结

  1. 核心流程:先部署 NIM 提供的 LLM/嵌入服务(容器化一键启动),再基于 LangChain 封装 Agent 逻辑(检索 + 推理 + 合规),最后通过 FastAPI 封装为 HTTP 服务;
  2. 关键优势:NIM 预优化容器大幅降低 LLM 部署门槛,标准化 OpenAI 兼容接口无需修改核心代码;
  3. 企业级适配:支持容器化/K8s 部署,可根据业务需求扩展为多 Agent 协作、多模型调用的复杂场景。

该案例可直接落地,也可根据实际业务扩展知识库、增加工具调用(如查询用户账单)、接入语音识别(NIM RIVA 服务)等能力。

你想了解在不同环境下部署 NVIDIA NIM 的具体方法,我会按开发测试、单机生产、企业级集群、云托管四大典型环境分类,给出适配各场景的部署步骤、核心配置和代码/命令示例,覆盖从新手体验到大规模生产的全场景需求。

核心前提(所有环境通用)

  1. 硬件:需配备 NVIDIA GPU(RTX 4090/A100/H100 等,显存 ≥ 8GB,大模型需 ≥ 16GB);
  2. 基础软件:安装 NVIDIA 驱动(≥535 版本)、Docker(或 Podman)、NVIDIA Container Toolkit;
  3. 账号:NVIDIA NGC 账号(获取 API Key,地址:https://ngc.nvidia.com/)。

一、开发/测试环境(RTX AI PC/轻量工作站)

适合开发者体验、功能验证,操作极简,无需复杂配置。

场景特点

  • 单 GPU、低并发、快速启动;
  • 支持可视化工具/一键脚本部署。

部署步骤(以 Llama 3.1 8B 为例)

1. 环境准备(仅首次执行)
# 安装 NVIDIA Container Toolkit(让 Docker 识别 GPU)curl-s -L https://nvidia.github.io/nvidia-docker/gpgkey|sudoapt-keyadd-distribution=$(./etc/os-release;echo$ID$VERSION_ID)curl-s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list|sudotee/etc/apt/sources.list.d/nvidia-docker.listsudoapt-getupdate&&sudoapt-getinstall-y nvidia-docker2sudosystemctl restart docker
2. 一键启动 NIM 服务
# 登录 NGC(输入你的 NGC API Key)docker login nvcr.io# 拉取并启动 Llama 3.1 8B NIM 容器(暴露 8000 端口)docker run -it --gpus all -p8000:8000\-eNVIDIA_API_KEY="你的 NGC API Key"\nvcr.io/nim/meta/llama3.1-8b-instruct:latest
3. 可视化工具辅助部署(可选,新手友好)
  • Flowise:打开 Flowise → 拖拽「Chat NVIDIA NIM」节点 → 点击「Set up NIM Locally」→ 选择模型自动下载部署;
  • AnythingLLM:进入配置 → AI Providers → LLM → 选择 NVIDIA NIM → 运行安装程序自动部署。
验证方式

访问http://localhost:8000/v1/models,返回模型列表即部署成功。


二、单机生产环境(物理服务器/私有云单机)

适合中小规模业务(日均请求 ≤ 10 万),兼顾稳定性与资源利用率。

场景特点

  • 单 GPU/多 GPU(单机)、固定并发、需持久化/日志管理。

部署步骤(以多模型部署为例)

1. 自定义配置启动 NIM

创建docker-compose.yml(支持多模型、持久化日志):

version:'3.8'services:# LLM 服务(Llama 3.1 8B)nim-llm:image:nvcr.io/nim/meta/llama3.1-8b-instruct:latestports:-"8000:8000"environment:-NVIDIA_API_KEY=你的 NGC API Key-LOG_LEVEL=info# 日志级别-MAX_CONCURRENT_REQUESTS=50# 最大并发deploy:resources:reservations:devices:-driver:nvidiacount:1# 占用 1 块 GPUcapabilities:[gpu]volumes:-./nim-logs:/var/log/nim# 日志持久化restart:always# 异常自动重启# 嵌入模型服务(BGE-M3)nim-embed:image:nvcr.io/nim/bge-m3:latestports:-"8001:8000"environment:-NVIDIA_API_KEY=你的 NGC API Keydeploy:resources:reservations:devices:-driver:nvidiacount:1capabilities:[gpu]restart:always
2. 启动服务
docker-compose up -d
3. 监控与维护
# 查看日志docker-compose logs -f nim-llm# 重启服务docker-compose restart nim-llm# 升级镜像docker-compose pull nim-llm&&docker-compose up -d

三、企业级集群环境(Kubernetes 集群)

适合大规模、高并发、弹性扩展的生产场景(如金融/制造行业核心业务)。

场景特点

  • 多节点、多 GPU、自动扩缩容、统一运维;
  • 支持大模型(70B+)多节点分布式部署。

部署步骤

1. 集群前置配置
# 安装 NVIDIA GPU 设备插件(让 K8s 识别 GPU)kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.0/nvidia-device-plugin.yml# 安装 Helm(K8s 包管理工具)curlhttps://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3|bash
2. 单模型部署(Helm 示例)

① 创建values.yaml配置文件:

# values.yamlreplicaCount:2# 副本数(弹性扩展)image:repository:nvcr.io/nim/meta/llama3.1-8b-instructtag:latestpullSecrets:-name:ngc-secret# NGC 登录密钥(需提前创建)service:type:ClusterIP# 集群内访问,可改为 LoadBalancer 对外暴露port:8000resources:limits:nvidia.com/gpu:1# 每个副本占用 1 块 GPUrequests:cpu:2memory:16Gienv:-name:NVIDIA_API_KEYvalue:"你的 NGC API Key"-name:MAX_TOKENSvalue:"2048"

② 创建 NGC 密钥并部署:

# 创建 NGC 登录密钥(替换 <NGC_API_KEY> 为你的密钥)kubectl create secret docker-registry ngc-secret\--docker-server=nvcr.io\--docker-username='$oauthtoken'\--docker-password=<NGC_API_KEY># 部署 NIM 服务helminstallnim-llm ./nim-chart -f values.yaml
3. 大模型多节点部署(70B+ 模型)

针对 70B/400B 等超大模型,需跨节点调度 GPU:

# 1. 安装 LeaderWorkerSet(管理多节点 Pod)kubectl apply -f https://github.com/NVIDIA/leader-workerset/releases/download/v0.1.0/leaderworkerset-crds.yaml kubectl apply -f https://github.com/NVIDIA/leader-workerset/releases/download/v0.1.0/leaderworkerset-controller.yaml# 2. 部署多节点 NIM(示例:Llama 3.1 70B,跨 2 节点,每节点 2 块 GPU)curl-X POST"${nemo_base_url}/v1/deployment/model-deployments"\-H"Content-Type: application/json"\-d'{ "name": "llama3.1-70b-instruct", "namespace": "meta", "config": { "model": "meta/llama3.1-70b-instruct", "nim_deployment": { "image_name": "nvcr.io/nim/meta/llama3.1-70b-instruct", "image_tag": "latest", "pvc_size": "100Gi", "gpu": 4, # 总计 4 块 GPU "multi_node": true, "num_nodes": 2 # 跨 2 节点 } } }'
4. 验证与扩缩容
# 查看部署状态kubectl get pods -lapp=nim-llm# 弹性扩缩容helm upgrade nim-llm ./nim-chart --setreplicaCount=3

四、云托管环境(NVIDIA Cloud Functions/NVCF)

适合无本地算力、需弹性扩缩的场景,无需管理底层硬件。

场景特点

  • 零基础设施管理、按需付费、自动扩缩容;
  • 支持公有云(AWS/Azure/GCP)+ NVIDIA 云函数联动。

部署步骤

1. 环境准备
  • 注册 NVCF 账号(https://build.nvidia.com/);
  • 配置云账号权限(如 AWS IAM 权限),确保可访问 NGC 仓库。
2. 一键部署 Elastic NIM

① 登录 NVCF 控制台 → 选择「Elastic NIM」;
② 选择目标模型(如 Llama 3.1 8B)、GPU 规格(如 A10G/H100);
③ 配置扩缩容策略(最小/最大副本数、触发阈值);
④ 点击「Deploy」,系统自动分配资源并启动服务。

3. 命令行部署(可选)
# 安装 NVCF CLIpipinstallnvidia-cloud-functions# 登录 NVCFnvcf login --api-key<你的 NVCF API Key># 部署 NIM 服务nvcf model deploy\--model-name meta/llama3.1-8b-instruct\--gpu-type A10G\--min-replicas1\--max-replicas5
4. 调用与管理
# 获取服务端点nvcf model list# 调用 NIM 服务curl-X POST"https://api.nvcf.nvidia.com/v2/nim/meta/llama3.1-8b-instruct/chat/completions"\-H"Authorization: Bearer <NVCF_API_KEY>"\-H"Content-Type: application/json"\-d'{ "messages": [{"role": "user", "content": "Hello World"}], "temperature": 0.1 }'

五、不同环境部署对比与选型建议

环境类型核心优势适用场景关键配置
开发/测试快速启动、操作简单功能验证、新手体验单 GPU、端口映射
单机生产稳定、低运维成本中小规模业务、固定并发持久化日志、资源限制
K8s 集群弹性扩展、统一运维大规模高并发、核心业务多 GPU、多节点、Helm
云托管(NVCF)零硬件管理、按需付费无本地算力、弹性需求扩缩容策略、GPU 规格

总结

  1. 核心逻辑:所有环境均基于 NIM 容器化封装,差异仅在“部署载体”(Docker/Compose/K8s/云函数);
  2. 选型原则:小体量用单机 Docker,大规模用 K8s,无本地算力用 NVCF;
  3. 通用验证:无论哪种环境,均可通过http://<IP>:<端口>/v1/models验证服务是否启动;
  4. 扩展建议:生产环境建议搭配监控(Prometheus + Grafana)、日志收集(ELK),大模型需关注显存/网络带宽。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 0:42:56

【R语言时空可视化实战】:掌握环境监测数据动态展示的5大核心技巧

第一章&#xff1a;R语言时空可视化在环境监测中的应用概述R语言凭借其强大的统计分析与图形绘制能力&#xff0c;已成为环境监测领域中时空数据可视化的首选工具之一。通过整合地理信息系统&#xff08;GIS&#xff09;数据与时间序列观测值&#xff0c;研究人员能够直观揭示污…

作者头像 李华
网站建设 2026/2/4 5:37:25

【专家亲授】:重构PHP脱敏逻辑的7个关键节点(基于最新医疗标准)

第一章&#xff1a;医疗数据脱敏的合规性演进与PHP实现挑战随着《个人信息保护法》和《数据安全法》的相继实施&#xff0c;医疗数据的处理必须满足日益严格的合规要求。数据脱敏作为保护患者隐私的核心手段&#xff0c;其技术实现不仅需保障数据可用性&#xff0c;还需符合监管…

作者头像 李华
网站建设 2026/2/3 0:24:00

揭秘R Shiny文件上传黑科技:如何同时处理CSV、Excel、图像与JSON?

第一章&#xff1a;R Shiny 的多模态数据导入组件 在构建交互式数据应用时&#xff0c;R Shiny 提供了强大的多模态数据导入能力&#xff0c;支持从本地文件、数据库、API 接口等多种来源加载数据。通过合理设计输入控件与后端逻辑&#xff0c;用户可以灵活地上传和解析不同格式…

作者头像 李华
网站建设 2026/2/3 0:06:42

汇川H5U标准化编程模板!! 逻辑非常清晰,对规范化编程很有参考价值!!! 1.注释详细,功能齐全,逻辑严谨 2.软元件命名,地址规划规范 3.启停、报警总结、光电检测程序完整 4.气缸、轴控功能块编

汇川H5U标准化编程模板&#xff01;&#xff01; 逻辑非常清晰&#xff0c;对规范化编程很有参考价值&#xff01;&#xff01;&#xff01; 1.注释详细&#xff0c;功能齐全&#xff0c;逻辑严谨 2.软元件命名&#xff0c;地址规划规范 3.启停、报警总结、光电检测程序完整 4.…

作者头像 李华