NIM RAG Agent实操:8步通关极速问答!

2025-09-24AI工具

Image

各位跨境实战精英,大家好!我是你们的老朋友,跨境实战专家。今天,我们要聊点硬核又前沿的技术——如何利用NVIDIA Nemotron来搭建一个智能、高效的RAG Agent。这可不是什么虚头巴脑的概念,而是能实实在在提升我们工作效率、优化客户服务体验的利器。

我们都知道,传统的LLM(大语言模型)虽然强大,但在处理特定领域知识、实时信息更新或者需要精确引用来源时,总会显得力不从心。它们的知识边界,往往局限于训练数据。而RAG(检索增强生成)技术的出现,就像给LLM插上了翅膀,让它能够从外部知识库中获取最新、最精准的信息来生成回答。

新媒网跨境获悉,Agentic RAG,也就是所谓的“代理式RAG”,更是RAG的进阶版。它不只是简单地检索信息,更是融合了自主决策系统。你可以把它想象成给LLM安上了一个“智慧大脑”,能动态判断、灵活应变,处理更复杂的推理任务。这套系统巧妙地运用了ReAct代理架构,让它能“思考”:我是直接回答,还是需要去知识库里找找资料?只有当真的需要外部上下文时,它才会启动检索流程,确保回答既准确又高效。

在今天的实战教程中,我们将手把手教你如何搭建一套Agentic RAG系统,让你对NVIDIA Nemotron这一开放模型家族有深入的理解,并学会使用LangGraph来构建你的智能体。更棒的是,我们将提供一个开箱即用、可移植的开发环境,最终帮你打造出一个专属的Agentic RAG系统,可以直接投入使用!

开启你的AI实战之旅

首先,让我们一起打开这个“藏宝箱”。你可以像操作云端服务一样,直接通过NVIDIA Launchable部署我们的实战工坊环境。
Button of the “Deploy Now” button for NVIDIA DevX Workshop
图1. 点击“立即部署”按钮,在云端部署NVIDIA DevX工作坊。

当你的Jupyter Lab环境跑起来后,在Launcher界面找到“NVIDIA DevX Learning Path”区域。选择“Agentic RAG”的卡片,就可以打开实验室指导,准备大展身手了。
A screenshot of the 2. Agentic RAG tile
图2. 点击NVIDIA DevX学习路径中的“Agentic RAG”卡片,打开实验指导。

关键配置,先行一步

要顺利完成这次实战,有几个关键的“通行证”你需要提前准备好并配置:

  • NGC API Key:这是你访问NVIDIA软件、模型、容器等资源的钥匙(可选,但推荐配置)。
  • LangSmith API Key:它能帮助你连接到LangChain平台,追踪和调试你的AI Agent,让问题无处遁形。

你可以在Jupyterlab Launcher的“NVIDIA DevX Learning Path”下找到“Secrets Manager”卡片,通过它来配置这些项目密钥。配置完成后,记得在日志(logs)标签页确认密钥是否添加成功,这是确保后续操作顺畅的关键一步。
A screenshot of the Secrets Manager tile under NVIDIA DevX Learning Path.
图3. 使用NVIDIA DevX学习路径下的“Secrets Manager”卡片配置项目密钥(API Key)。

RAG架构,知其所以然

环境搭建完毕后,我们先来聊聊Agentic RAG系统的架构原理。RAG技术通过在生成文本时融入外部相关信息,极大地增强了LLM的能力。传统的语言模型只能基于其训练数据生成响应,这在面对瞬息万变的信息、高度专业化的知识领域或企业机密数据时,往往会捉襟见肘。而RAG则不同,它能从外部知识库中检索非结构化数据,并以此为基础生成回答,是一个名副其实的“知识增强器”。
A flow chart showing the path of a user prompt takes from the retrieval chain, to the LLM, to the final generated response.
图4. 传统的RAG流程,利用用户提示检索上下文相关文档,作为LLM生成更明智响应的依据。

一个典型的RAG系统流程是这样的:

  1. 用户提问(Prompt):用户用自然语言提出问题。
  2. 嵌入模型(Embedding Model):系统将问题转换成向量形式。
  3. 向量数据库搜索(Vector Database Search):用户提问被向量化后,系统会在一个存储着语义索引文档块的向量数据库中搜索,快速检索出上下文相关的资料片段。
  4. 重排序模型(Reranking Model):检索到的资料片段会进行重新排序,优先展示最相关的。
  5. 大语言模型(LLM):LLM结合检索到的数据,生成最终的回答。

这种方法确保了语言模型能够获取到超越其训练数据的最新、具体信息,使其功能更加多样,效率更高。

ReAct Agent架构,让AI“会思考”

与传统基于LLM的应用不同,Agent(智能体)能够动态地选择工具、进行复杂的推理,并根据具体情况调整分析方法。这就像给AI装上了一个灵活的大脑。
A flow chart showing the path a user prompt takes inside of a ReAct agent to iteratively utilize tool calling.
图5. ReAct Agent可以迭代推理并调用用户定义的工具,生成更高质量的RAG响应。

ReAct Agents是一种简单但高效的代理架构,它通过支持工具调用的LLM实现“思考与行动”(reasoning and acting)。如果LLM在接收到提示后请求调用任何工具,这些工具就会被运行,其结果会添加到聊天历史中,然后再次发送给模型进行后续调用。

RAG虽然好用,但也有局限性,比如LLM无法自主决定如何检索数据、控制数据质量,或者选择数据源。而Agentic RAG则更进一步,它结合了LLM在语言理解、上下文推理和灵活生成方面的优势,以及动态的工具使用、高级检索机制(如语义搜索、混合检索、重排序和数据源选择)的能力。

要让一个ReAct Agent具备RAG能力,我们只需要将“检索链”(Retrieval Chain)作为一个工具提供给它,这样Agent就能自主决定何时以及如何搜索信息了。
A flow chart showing the path a user prompt takes between the ReAct agent and the Retrieval Chain.
图6. 完整的Agentic RAG流程将ReAct Agent添加到存储上下文文档的检索链中。

Agentic RAG采用了ReAct Agent架构,推理型LLM会系统性地决定是直接响应,还是通过工具调用来检索信息。只有当需要额外上下文才能更好地满足用户请求时,它才会启动检索流程。

实战演练:代码实现篇

理论知识我们已经打通了,接下来就是动手实践,把这些概念变成实际可用的代码。我们将从基础组件开始,一步步构建出完整的Agentic RAG系统:

  • 模型选型:基础大模型、嵌入模型、重排序模型。
  • 工具构建:为Agent提供与外部知识库交互的能力。
  • 数据摄入:如何加载我们的知识库数据。
  • 文本切分:优化数据处理,提升检索效率。
  • 向量数据库摄入:将切分后的数据存储到数据库。
  • 文档检索与重排序:确保检索结果的准确性和优先级。
  • 检索工具创建:将检索能力封装成Agent可用的工具。
  • Agent配置:搭建Agent的核心决策逻辑。

一、基石:核心模型

这次的实战工坊,我们主要依赖NVIDIA NIM(NVIDIA Inference Microservices)提供的核心模型接口来驱动Agent。NVIDIA NIM提供了高性能的推理能力,包含以下特点:

  • 工具绑定:原生支持函数调用。
  • 结构化输出:内置支持Pydantic模型。
  • 异步操作:全面支持异步/等待,实现并发处理。
  • 企业级可靠性:生产级别的推理基础设施。

下面这段代码展示了LangChain的ChatNVIDIA连接器如何使用NVIDIA NIM:

from langchain_nvidia_ai_endpoints import ChatNVIDIA

LLM_MODEL = "nvidia/nvidia-nemotron-nano-9b-v2"
llm = ChatNVIDIA(model=LLM_MODEL, temperature=0.6, top_p=0.95, max_tokens=8192)

为了确保LLM应用的质量,Agent需要收到清晰的指令,以明确决策过程,消除歧义,并指导它如何处理检索到的文档。下面是code/rag_agent.py中一个系统提示的例子:

SYSTEM_PROMPT = (
    "You are an IT help desk support agent.\\n"
    "- Use the 'company_llc_it_knowledge_base' tool for questions likely covered by the internal IT knowledge base.\\n"
    "- Always write grounded answers. If unsure, say you don't know.\\n"
    "- Cite sources inline using [KB] for knowledge base snippets.\\n"
    "- If the knowledge base doesn't contain sufficient information, clearly state what information is missing.\\n"
    "- Keep answers brief, to the point, and conversational."
)

这个提示展现了构建可靠RAG应用LLM提示的几个关键原则:

  1. 角色定位:明确定义Agent的专长和职责。
  2. 工具利用:指导Agent在特定任务中使用哪些工具。
  3. 扎实基础:强调答案应基于可靠来源,并勇于承认不确定性。
  4. 引用来源:提供引用来源的指导,确保透明度。
  5. 沟通风格:明确期望的沟通方式。

code/rag_agent.py中,我们定义了IT服务台Agent回答用户查询所需的模型。新媒网跨境了解到Nemotron Nano 9b V2是用于生成响应的主要推理模型。NVIDIA NeMo Retriever Embedding Model(Llama 3.2 EmbedQA 1b V2)用于将文档转换为向量嵌入表示,以便存储和检索。NeMo Retriever Reranking Model(Llama 3.2 RerankQA 1b V2)则用于对检索到的文档进行重新排序,以突出最相关的结果。

这些模型协同工作,使得IT服务台Agent能够通过结合语言生成、文档检索和重排序能力,准确地回答用户查询。

二、基石:工具构建

我们的RAG Agent将访问./data/it-knowledge-base中提供的知识库,其中包含记录常见IT操作步骤的Markdown文件。检索器工具(retriever tool)让Agent能够在内部IT知识库中搜索与用户查询相关的文档。

向量数据库用于存储、索引和查询向量化嵌入的数值表示,从而实现对文本、图像和音频等非结构化数据的快速相似性搜索。在这里,我们使用内存中的FAISS数据库,它对于搭建小型数据库非常高效。在数据摄入方面,我们将主要关注文本数据的摄入。对于生产环境,你可能还需要考虑多模态数据等更多功能。

三、基石:数据摄入

这里我们使用的嵌入模型是NeMo Retriever llama-3.2-nv-embedqa-1b-v2。这个模型为文档和查询创建嵌入(embeddings),通过比较查询和文档之间的语义相似性,帮助我们高效地从知识库中检索相关文档。

为了摄入文档,我们将对文档进行分块,将这些分块嵌入成向量,然后将向量插入数据库。在此之前,我们需要使用LangChain的DirectoryLoader./data/it-knowledge-base目录加载数据。

from langchain_community.document_loaders import DirectoryLoader, TextLoader

# Read the data
_LOGGER.info(f"Reading knowledge base data from {DATA_DIR}")
data_loader = DirectoryLoader(
    DATA_DIR,
    glob="**/\\*",
    loader_cls=TextLoader,
    show_progress=True,
)
docs = data_loader.load()

四、基石:文本切分

文档切分由两个关键参数控制:chunk_size(块大小)和chunk_overlap(块重叠)。chunk_size定义了每个文本块的最大长度,这确保了每个块都是经过优化的尺寸,便于语言模型和检索系统处理。块过大可能包含与特定查询不那么相关的信息,而过小则可能遗漏重要上下文。chunk_overlap定义了连续块之间重叠的词元数量。其目的是确保块之间的连续性并保留上下文,从而保持检索信息的连贯性。

为了高效地执行文本切分,我们使用RecursiveCharacterTextSplitter。这个工具根据字符长度递归地将文档切分成更小的块,确保每个块都符合定义的块大小和重叠参数。它对于处理大型文档特别有用,可以提高信息检索的整体准确性。

from langchain.text_splitter import RecursiveCharacterTextSplitter

CHUNK_SIZE = 800
CHUNK_OVERLAP = 120

_LOGGER.info(f"Ingesting {len(docs)} documents into FAISS vector database.")
splitter = RecursiveCharacterTextSplitter(
    chunk_size=CHUNK_SIZE,
    chunk_overlap=CHUNK_OVERLAP
)
chunks = splitter.split_documents(docs)

五、基石:向量数据库摄入

为了高效检索相关信息,我们需要将大量文档摄入到向量数据库中。现在我们已经将文档分解成可管理的块,接下来使用嵌入模型为每个文档块生成向量嵌入。这些嵌入是文档块语义内容的数值表示。高质量的嵌入能够实现高效的相似性搜索,使系统能够快速识别并检索与用户查询最相关的块。

下一步是将生成的嵌入存储到内存中的FAISS数据库中,这确保了实时信息检索的快速索引和查询能力。在这个例子中,我们利用LangChain的FAISS from_documents方法,它方便地为文档块生成嵌入,并将其存储到FAISS向量存储中,一步到位。

from langchain_community.vectorstores import FAISS
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings, embeddings

embeddings = NVIDIAEmbeddings(model=RETRIEVER_EMBEDDING_MODEL, truncate="END")
vectordb = FAISS.from_documents(chunks, embeddings)

通过遵循这些步骤并充分利用嵌入模型的力量,我们确保IT服务台Agent能够高效地从知识库中检索和处理相关信息。

六、基石:文档检索与重排序

有了填充好的向量数据库,我们就可以构建内容检索链了。这包括创建一个无缝的工作流,其中包含嵌入步骤和查找步骤。
A flow chart showing the path ingested document chunks take to get stored in a vector database.
图7. 一个基本的检索链由嵌入模型和存储转换后向量嵌入的数据库组成。

在嵌入步骤中,用户查询使用我们之前用于文档块的相同模型转换为嵌入。这确保了查询和文档块都在相同的语义空间中表示,从而实现准确的相似性比较。

为了初始化本例中的检索器,我们将使用语义相似性,并搜索与我们的查询相比,返回的前六个结果。

# imports already handled
kb_retriever = vectordb.as_retriever(search_type="similarity", search_kwargs={"k": 6})

在查找步骤中,用户的查询嵌入会与向量数据库中存储的嵌入进行比较。系统会检索最相似的文档块,然后用于生成响应。
A flow chart showing the path ingested document chunks take to get stored in and retrieved from a vector database.
图8. 一个更复杂的检索链包括附加一个重排序模型,以重新组织检索到的上下文,将最相关的块放在最前面。

对于嵌入模型和重排序模型,我们将使用NVIDIA NeMo Retriever的NIM微服务。

LangChain允许我们轻松地从向量数据库对象创建包含嵌入步骤和查找步骤的基本检索链。

为了提高检索文档的相关性和顺序,我们可以利用基于NVIDIA NeMo Retriever Reranker模型的NVIDIA Rerank类。Reranker模型根据检索到的文档块与用户查询的相关性进行评估和排名,以便将最相关的信息首先呈现给用户。在此示例中,我们这样初始化Reranker:

from langchain_nvidia_ai_endpoints import NVIDIARerank

reranker = NVIDIARerank(model=RETRIEVER_RERANK_MODEL)

七、基石:检索工具创建

结合文档检索器和文档重排序器,我们现在可以创建最终的文档检索器,代码如下:

RETRIEVER = ContextualCompressionRetriever(
    base_retriever=kb_retriever,
    base_compressor=reranker,
)

LangChain的ContextualCompressionRetriever使得将检索器与额外处理步骤结合起来变得非常容易,它将检索链与重排序模型连接起来。

现在我们可以创建使我们的ReAct Agent能够工作的检索工具了。在此示例中,我们可以使用LangChain工具包初始化检索工具,传入我们初始化好的检索器:

from langchain.tools.retriever import create_retriever_tool

RETRIEVER_TOOL = create_retriever_tool(
    retriever=RETRIEVER,
    name="company_llc_it_knowledge_base",
    description=(
        "Search the internal IT knowledge base for Company LLC IT related questions and policies."
    ),
)

八、基石:Agent配置

有了向量数据库和检索链,我们就可以构建Agent图了。这个Agent图就像一张流程图,描绘了模型为完成任务可能采取的步骤。在传统的、一步步的LLM应用中,这些被称为“链”(chains)。当工作流涉及更动态、非线性的决策时,我们称之为“图”(graphs)。Agent可以根据任务的上下文和要求选择不同的路径,分支到不同的决策节点。

鉴于ReAct Agent架构的普遍性,LangGraph提供了一个函数来创建ReAct Agent图。在此示例中,我们如下使用:

from langgraph.prebuilt import create_react_agent

AGENT = create_react_agent(
    model=llm,
    tools=[RETRIEVER_TOOL],
    prompt=SYSTEM_PROMPT,
)

通过构建Agent图,我们创建了一个动态灵活的工作流,使我们的IT服务台Agent能够处理复杂的决策过程。这种方法确保了Agent能够高效地检索和处理信息,提供准确的响应,并适应各种场景。

运行你的Agent,检验成果

恭喜你!你已经成功构建了你的Agent!现在,是时候让它“活”起来,一试身手了。

要从终端运行你的Agent,首先进入包含Agent代码的Python文件的code目录。然后,使用LangGraph CLI启动你的Agent API。当你对代码进行更改并保存时,你的Agent将自动重新加载。

langgraph dev

为了方便与你的Agent聊天,我们提供了一个简单的Streamlit应用,包含在Simple Agents Client中。你也可以从Jupyter Launcher页面访问Streamlit客户端。在侧边栏中,确保选择了rag_agent客户端,然后开始聊天吧!
A screenshot of the Simple Agents Client tile
图9. 点击NVIDIA DevX学习路径中的“Simple Agents Client”卡片,打开Streamlit聊天应用。

随着你的Agent变得越来越复杂,管理其内部的复杂性可能会变得困难。追踪(Tracing)有助于可视化Agent采取的每一步,从而更容易调试和优化Agent的行为。在本次实战工坊中,你可以选择性地配置LANGSMITH_API_KEY并在LangSmith仪表板上查看追踪记录。

进阶:迁移至本地NIM微服务

本次实战工坊利用了NVIDIA API Catalog中的nvidia-nemotron-nano-9b-v2 LLM。这些API对于评估多种模型、快速实验和免费入门非常有用。然而,对于生产环境中所需的无限性能和控制,你需要使用NVIDIA NIM微服务容器在本地部署模型。

在典型的开发工作流中,你的Agent和NIM容器通常会在后台运行,让你能够多任务并行并快速迭代。为了本次练习,我们可以让NIM在前台运行,以便轻松监控其输出并确保正确启动。

首先,你需要登录NGC容器注册表,如下所示:

echo $NVIDIA_API_KEY | \
docker login nvcr.io \
--username '$oauthtoken' \
--password-stdin

下一步是为NIM容器创建一个位置,用于保存其下载的模型文件。

docker volume create nim-cache

现在,我们需要使用Docker run命令拉取NIM容器镜像和模型数据文件,然后在本地托管符合OpenAI标准的API,从而将模型部署在本地。

docker run -it --rm \
--name nemotron \
--network workbench \
--gpus 1 \
--shm-size=16GB \
-e NGC_API_KEY=$NVIDIA_API_KEY \
-v nim-cache:/opt/nim/.cache \
-u $(id -u) \
-p 8000:8000 \
nvcr.io/nim/nvidia/nvidia-nemotron-nano-9b-v2:latest

让它运行几分钟后,当它显示“Application startup complete”时,你就知道NIM已准备好进行推理了。

INFO 2025-09-10 16:31:52.7 on.py:48] Waiting for application startup.
INFO 2025-09-10 16:31:52.239 on.py:62] Application startup complete.
INFO 2025-09-10 16:31:52.240 server.py:214] Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
...
INFO 2025-09-10 16:32:05.957 metrics.py:386] Avg prompt throughput: 0.2 tokens/s, Avg generation throughput: 1.1 tokens/s, Running: 0 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%.

既然你的NIM已在本地运行,我们需要更新你在rag_agent.py中创建的Agent以使用它。

llm = ChatNVIDIA(
    base_url="http://nemotron:8000/v1",
    model=LLM_MODEL,
    temperature=0.6,
    top_p=0.95,
    max_tokens=8192
)

在你的langgraph服务器仍在运行的情况下,回到Simple Agents Client并再次尝试与Agent对话。如果一切顺利,你应该不会注意到任何变化!恭喜你!你现在已经成功迁移到为你的LangGraph Agent使用本地NIM微服务了!

总结与展望,不忘风险与时效

通过这次实战,我们不仅掌握了Agentic RAG从基础到高级的构建方法,更体验了生产级别的工具和技术。这是一条充满创新与挑战的道路,但只要我们勇于探索,就能发现无限可能。

完成本次实战,你将收获:

  • 核心概念的理解:透彻掌握标准RAG与Agentic RAG的区别。
  • 状态管理实践:实现复杂的状态转换和持久化能力。
  • 工具集成技巧:创建和管理Agent的工具调用功能。
  • 现代AI栈应用:熟练运用LangGraph、NVIDIA NIM及相关工具。

新媒网跨境认为,在享受技术带来的便利时,我们也要时刻保持警惕。数据隐私、模型偏见、合规性风险等都是我们在实际应用中需要认真考虑的问题。尤其是在跨境业务中,不同国家和地区的法律法规差异巨大,务必确保你的Agent设计和数据处理流程符合当地的规定。同时,AI技术发展日新月异,本教程基于2025年的技术栈,未来可能会有更高效、更便捷的工具和方法出现,大家要保持学习的热情,持续关注行业动态。

想要继续深入学习的伙伴们,可以关注我们的Nemotron Labs直播、Hugging Face上的NVIDIA Nemotron项目、GitHub上的实战工坊,或者在Nemotron开发者论坛或Discord频道提问交流。

此外,NVIDIA DevX工作坊中还有另一个教程——“用NVIDIA Nemotron和OpenRouter构建报告生成AI Agent”,同样精彩,值得一试!

请大家订阅NVIDIA新闻,加入社区,并在领英、Instagram、X和脸书上关注NVIDIA AI,以便随时掌握Agentic AI、Nemotron及更多前沿动态。让我们一起,在跨境实战的道路上,用科技点亮未来!
llm-promo-chat-labs-blog2-blog-3419377-1920x1080-1-660x370-jpg.webp
An illustrations representing agnetic RAG.
Decorative image of a RAG pipeline.
rag-chatbot-video-thumbnail-v2-1-960x540.png
retrieval-augmented-generation-graphic-960x540.jpg
image1-4-660x370-png.webp
computing-stack-1-660x370-jpg.webp
NVIDIA full-stack data center networking racks.
person-working-at-laptop-with-headphones-660x370-jpg.webp
Decorative image.

新媒网(公号: 新媒网跨境发布),是一个专业的跨境电商、游戏、支付、贸易和广告社区平台,为百万跨境人传递最新的海外淘金精准资讯情报。

本文来源:新媒网 https://nmedialink.com/posts/nim-rag-agent-tutorial-8-steps-fast-qa.html

评论(0)

暂无评论,快来抢沙发~
2025年下半年,特朗普总统执政期间,本文介绍了如何使用NVIDIA Nemotron搭建Agentic RAG系统。Agentic RAG通过ReAct代理架构,结合LLM的语言理解和工具使用能力,能更高效地检索和生成信息。教程详细讲解了模型选型、工具构建、数据摄入、文本切分、向量数据库摄入等步骤,并提供了一个可移植的开发环境。
发布于 2025-09-24
查看人数 168
人民币汇率走势
CNY
亚马逊热销榜
共 0 SKU 上次更新 NaN:NaN:NaN
类目: 切换分类
暂无数据
暂无数据
关注我们
新媒网跨境发布
本站原创内容版权归作者及NMedia共同所有,未经许可,禁止以任何形式转载。