发布日期: 2026年3月18日
作者: Sean Lopp, Sam Pastoriza, Ajay Thorve, Chantal D Gama Rose, Victor Moreira
您将学习:
视频1:使用LangChain和NVIDIA构建可扩展、自我优化的数据代理的实操讲解
克隆仓库并配置API密钥。首先复制环境模板。
cp deploy/.env.example deploy/.env打开 deploy/.env 并填写所需的值。
# 必需
NVIDIA_API_KEY=nvapi-...
TAVILY_API_KEY=tvly-...
# 可选:启用追踪监控(本文后续会涉及)
LANGSMITH_API_KEY=lsv2-...NVIDIA_API_KEY 用于访问某机构托管的模型(如Nemotron 3 Nano)。TAVILY_API_KEY 用于启用网络搜索。
接下来,构建并启动完整的技术栈。同时启动多个容器,首次构建可能需要几分钟,具体取决于网络连接和硬件配置。
docker compose -f deploy/compose/docker-compose.yaml up --build该命令启动三个服务:
aiq-research-assistant:端口8000上的FastAPI后端postgres:用于异步任务状态和对话检查点的PostgreSQL 16frontend:端口3000上的Next.js Web界面所有服务报告健康后,打开 http://localhost:3000。下图展示了AI-Q研究助手聊天界面,您可以在其中输入研究查询并实时观察代理工作。
图1. AI-Q研究助手生成研究报告的过程
打开 configs/config_web_docker.yml。这个单一文件控制着LLM、工具、代理和工作流配置。
llms 部分声明了命名的模型。注意 enable_thinking 标志——它用于切换Nemotron的思维链推理。以下示例声明了三个具有不同角色的LLM:
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 增加了一个用于编排的前沿模型。
该蓝图包含浅层和深层研究代理。以下配置展示了这两种代理:
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,并在配置文件中添加遥测部分:
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 工厂。
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、工具和两个子代理连接在一起。
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与长上下文方法对比查询的规划器输出:
{
"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:
# 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 列表中:
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深度代理架构引入其企事业环境。要进一步了解,请查阅:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。