首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用NVIDIA AI-Q和LangChain构建企业搜索深度代理

使用NVIDIA AI-Q和LangChain构建企业搜索深度代理

原创
作者头像
用户11764306
发布2026-05-20 10:17:26
发布2026-05-20 10:17:26
1310
举报

如何利用NVIDIA AI-Q与LangChain为企业搜索构建深度代理

发布日期: 2026年3月18日

作者: Sean Lopp, Sam Pastoriza, Ajay Thorve, Chantal D Gama Rose, Victor Moreira

构建内容:一个深度代理

您将学习:

  • 如何为企事业搜索用例部署基于LangChain的NVIDIA AI-Q蓝图
  • 如何使用Nemotron和前沿LLM配置浅层和深层研究代理
  • 如何使用LangSmith和NVIDIA工具监控代理的追踪记录和性能
  • 如何通过NeMo代理工具包工具连接内部企事业数据源

环境准备

  • 用于访问开放模型(如Nemotron 3)的NVIDIA API密钥
  • 用于访问前沿模型(如GPT-5.2)的OpenAI API密钥
  • 用于网络搜索的Tavily API密钥
  • Python
  • Docker Compose
  • 可选:用于监控和实验追踪的LangSmith

如何构建长期运行的数据代理(视频说明)

视频1:使用LangChain和NVIDIA构建可扩展、自我优化的数据代理的实操讲解

安装并运行蓝图

克隆仓库并配置API密钥。首先复制环境模板。

代码语言:bash
复制
cp deploy/.env.example deploy/.env

打开 deploy/.env 并填写所需的值。

代码语言:bash
复制
# 必需
NVIDIA_API_KEY=nvapi-...
TAVILY_API_KEY=tvly-...

# 可选:启用追踪监控(本文后续会涉及)
LANGSMITH_API_KEY=lsv2-...

NVIDIA_API_KEY 用于访问某机构托管的模型(如Nemotron 3 Nano)。TAVILY_API_KEY 用于启用网络搜索。

接下来,构建并启动完整的技术栈。同时启动多个容器,首次构建可能需要几分钟,具体取决于网络连接和硬件配置。

代码语言:bash
复制
docker compose -f deploy/compose/docker-compose.yaml up --build

该命令启动三个服务:

  • aiq-research-assistant:端口8000上的FastAPI后端
  • postgres:用于异步任务状态和对话检查点的PostgreSQL 16
  • frontend:端口3000上的Next.js Web界面

所有服务报告健康后,打开 http://localhost:3000。下图展示了AI-Q研究助手聊天界面,您可以在其中输入研究查询并实时观察代理工作。

图1. AI-Q研究助手生成研究报告的过程

自定义AI-Q:工作流、追踪和模型配置

打开 configs/config_web_docker.yml。这个单一文件控制着LLM、工具、代理和工作流配置。

llms 部分声明了命名的模型。注意 enable_thinking 标志——它用于切换Nemotron的思维链推理。以下示例声明了三个具有不同角色的LLM:

代码语言:yaml
复制
llms:
  nemotron_llm_non_thinking:
    _type: nim
    model_name: nvidia/nemotron-3-super-120b-a12b
    temperature: 0.7
    max_tokens: 8192
    chat_template_kwargs:
      enable_thinking: false
  nemotron_llm:
    _type: nim
    model_name: nvidia/nemotron-3-super-120b-a12b
    temperature: 1.0
    max_tokens: 100000
    chat_template_kwargs:
      enable_thinking: true
  gpt-5-2:
    _type: openai
    model_name: 'gpt-5.2'

nemotron_llm_non_thinking 处理快速响应,在这些场景下思维链会增加延迟而无益处。nemotron_llm 启用思维模式,拥有100K上下文窗口,供需要多步推理的代理使用。gpt-5.2 增加了一个用于编排的前沿模型。

该蓝图包含浅层和深层研究代理。以下配置展示了这两种代理:

代码语言:yaml
复制
functions:
  shallow_research_agent:
    _type: shallow_research_agent
    llm: nemotron_llm
    tools:
      - web_search_tool
    max_llm_turns: 10
    max_tool_calls: 5
  deep_research_agent:
    _type: deep_research_agent
    orchestrator_llm: gpt-5
    planner_llm: nemotron_llm
    researcher_llm: nemotron_llm
    max_loops: 2
    tools:
      - advanced_web_search_tool

浅层研究代理运行一个有限制的工具调用循环(最多10次LLM轮次和5次工具调用),然后返回带有引用的简洁答案。像“什么是CUDA?”这样的简单问题可在几秒内解决。深层研究代理使用带有待办事项列表、文件系统和子代理的LangChain深度代理,生成带有引用的长篇报告。

为了将所有推理保留在本地,请将 orchestrator_llm 指向一个自托管的模型。

监控追踪记录

为了监控AI-Q代理,启用LangSmith追踪,这样每个查询都会生成完整的执行追踪,包括LangChain工具调用和模型使用情况。将 LANGSMITH_API_KEY 添加到 deploy/.env,并在配置文件中添加遥测部分:

代码语言:yaml
复制
general:
  telemetry:
    tracing:
      langsmith:
        _type: langsmith
        project: aiq-gtc-demo
        api_key: ${LANGSMITH_API_KEY}

每个查询都会生成一个捕获整个执行路径的追踪。

图2. 浅层研究查询的LangSmith追踪,显示多次工具调用和最终答案

浅层研究示例查询:

地球最深的地方是哪里?

深层研究示例查询:

分析2026年当前关于地球最深点的科学共识,比较马里亚纳海沟的挑战者深渊与陆地上的极值(如韦廖夫金洞穴和科拉超深钻孔)。包括最新的测深和大地测量数据、对测量不确定性的评估(包括重力和压力传感器修正),以及2020-2026年间更新我们对深渊区地形和生物生命认知的最新深海探险总结。

展开追踪以检查每个节点。对网络搜索的工具调用尤其有助于调试——可以准确看到代理发送了什么查询以及返回了什么结果。除了单个追踪之外,还可以使用LangSmith来跟踪延迟、token使用量和错误率随时间的变化,并为性能退化设置警报。

优化深度代理

为了针对特定领域调整深度研究代理,首先检查它如何组装其子代理。深度研究代理使用LangChain的 deepagents 库中的 create_deep_agent 工厂。

代码语言:python
复制
from deepagents import create_deep_agent

return create_deep_agent(
    model=self.llm_provider.get(LLMRole.ORCHESTRATOR),
    system_prompt=orchestrator_prompt,
    tools=self.tools,
    subagents=self.subagents,
    middleware=custom_middleware,
    skills=self.skills,
).with_config({"recursion_limit": 1000})

该工厂将编排LLM、工具和两个子代理连接在一起。

代码语言:python
复制
self.subagents = [
    {
        "name": "planner-agent",
        "system_prompt": render_prompt_template(
            self._prompts["planner"], tools=self.tools_info,
        ),
        "tools": self.tools,
        "model": self.llm_provider.get(LLMRole.PLANNER),
    },
    {
        "name": "researcher-agent",
        "system_prompt": render_prompt_template(
            self._prompts["researcher"], tools=self.tools_info,
        ),
        "tools": self.tools,
        "model": self.llm_provider.get(LLMRole.RESEARCHER),
    },
]

上下文管理是深度代理工作的核心。规划代理生成一个JSON格式的研究计划。研究代理只接收这个计划——而不是编排器的思维token或规划器的内部推理。通过只传递结构化的有效载荷,减少了token膨胀,并防止了“迷失在中间”的现象(即LLM忘记埋藏在巨大上下文窗口深处的关键指令)。这种隔离使每个子代理保持专注。

以下示例显示了一个关于RAG与长上下文方法对比查询的规划器输出:

代码语言:json
复制
{
  "report_title": "企事业搜索的RAG与长上下文模型对比",
  "report_toc": [
    {
      "id": "1",
      "title": "架构基础",
      "subsections": [
        {"id": "1.1", "title": "检索增强生成流程"},
        {"id": "1.2", "title": "长上下文Transformer架构"}
      ]
    },
    {
      "id": "2",
      "title": "性能与准确性权衡",
      "subsections": [
        {"id": "2.1", "title": "事实准确性与幻觉率"},
        {"id": "2.2", "title": "延迟与吞吐量基准"}
      ]
    }
  ],
  "queries": [
    {
      "id": "q1",
      "query": "RAG检索增强生成架构组件...",
      "target_sections": ["架构基础"],
      "rationale": "建立对RAG流程的基础理解"
    }
  ]
}

该架构经过调优,在Deep Research Bench和Deep Research Bench II上都表现良好。

为了针对特定领域自定义代理,请编辑 src/aiq_aira/agents/deep_researcher/prompts/ 中的提示模板。例如,打开 planner.j2 并指示规划器将大纲保持在三个部分或更少,以便生成更聚焦的报告。还可以添加额外的调试日志来检查中间状态(如 /planner_output.md),以了解提示更改如何影响子代理之间传递的上下文。

添加数据源

蓝图将每个工具实现为NeMo代理工具包函数。要连接新的企事业数据源,请实现一个NeMo代理工具包函数并在配置中引用它。

步骤1:实现NeMo代理工具包函数

以下示例连接到内部知识库API:

代码语言:python
复制
# sources/internal_kb/src/register.py
from pydantic import Field, SecretStr
from nat.builder.builder import Builder
from nat.builder.function_info import FunctionInfo
from nat.cli.register_workflow import register_function
from nat.data_models.function import FunctionBaseConfig

class InternalKBConfig(FunctionBaseConfig, name="internal_kb"):
    """内部知识库的搜索工具。"""
    api_url: str = Field(description="知识库API端点")
    api_key: SecretStr = Field(description="认证密钥")
    max_results: int = Field(default=5)

@register_function(config_type=InternalKBConfig)
async def internal_kb(config: InternalKBConfig, builder: Builder):
    async def search(query: str) -> str:
        """搜索内部知识库以查找相关文档。"""
        results = await call_kb_api(config.api_url, query, config.max_results)
        return format_results(results)

    yield FunctionInfo.from_fn(search, description=search.__doc__)

NeMo代理工具包在启动时验证配置字段,因此配置错误会快速失败。代理将使用函数的文档字符串来决定何时调用该工具。

步骤2:在配置中引用该工具

functions 下声明新工具,然后将其添加到每个代理的 tools 列表中:

代码语言:yaml
复制
functions:
  internal_kb_tool:
    _type: internal_kb
    api_url: "https://kb.internal.company.com/api/v1"
    api_key: ${INTERNAL_KB_API_KEY}
    max_results: 10

  shallow_research_agent:
    _type: shallow_research_agent
    llm: nemotron_llm
    tools:
      - web_search_tool
      - internal_kb_tool

  deep_research_agent:
    _type: deep_research_agent
    orchestrator_llm: gpt-5
    planner_llm: nemotron_llm
    researcher_llm: nemotron_llm
    tools:
      - advanced_web_search_tool
      - internal_kb_tool

无需更改任何代理代码。代理会自动发现新工具的名称和描述,当查询匹配时LLM会调用它。使用相同的模式连接到自有企事业系统,或利用MCP(模型上下文协议)让代理访问现有工具。这确保了研究技术栈保持私有,并与机构最重要的数据深度集成。

更进一步

通过扩展和构建NVIDIA AI-Q蓝图,开发者能够将业界领先的LangChain深度代理架构引入其企事业环境。要进一步了解,请查阅:

  • 用于添加更多数据源的蓝图自定义指南
  • 用于在某机构工厂部署的Helm Chart
  • 用于进行以评估为驱动的开发的蓝图评估指南
  • 用于在生产环境中监控系统并防止性能退化的LangSmithFINISHED

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何利用NVIDIA AI-Q与LangChain为企业搜索构建深度代理
    • 构建内容:一个深度代理
    • 环境准备
    • 如何构建长期运行的数据代理(视频说明)
    • 安装并运行蓝图
    • 自定义AI-Q:工作流、追踪和模型配置
    • 监控追踪记录
    • 优化深度代理
    • 添加数据源
    • 更进一步
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档