DeepAgents : 检索(Retrieval)

DeepAgents : 检索(Retrieval)

大语言模型(LLM)虽能力卓越,却受两大固有制约:

  • 上下文窗口有限------无法一次性处理大规模语料;
  • 知识时效性固化------训练数据截止后即不再更新。

为突破这些限制,检索 机制让模型能在推理时动态获取外部知识,而检索增强生成(RAG) 则进一步将检索与生成结合,产出有据可依的答案。

1. 知识库构建

知识库是检索系统的数据底座,可由文档、结构化数据等构成。LangChain 提供丰富的文档加载器向量存储,基于私有数据快速搭建知识库。已有数据库、CRM 或内部文档系统的,则无需重复建设,可直接将其作为工具接入,实现:

  • 智能体式 RAG(Agentic RAG):让 Agent 自主决定检索时机与方式;
  • 两步 RAG(2‑Step RAG):固定先检索后生成,流程清晰可预测。

检索流水线

一个标准的检索流程通常包含以下模块化步骤(各组件均可灵活替换):

各构建模块(加载器、分割器、嵌入模型、向量库等)均解耦设计,便于按需组合。

2. RAG 架构选型

根据业务对控制力灵活性延迟的要求,可选择不同架构:

架构 特点 控制力 灵活性 延迟 典型场景
两步 RAG 固定检索顺序,生成前必检 稳定、快 FAQ、文档问答机器人
智能体式 RAG Agent 自主决定检索时机与工具 不固定(取决于推理路径) 需调用多种工具的研究助手
混合 RAG 融合两者,加入验证与重试环节 不固定 对答案质量有严格要求的领域系统

3. 两步 RAG(2‑Step RAG)

该模式简单直接:每次回答前必须执行检索,将检索结果作为生成上下文。它适用于大多数对流程稳定性要求高的场景。

4. 智能体式 RAG(Agentic RAG)

此模式让 LLM 驱动的 Agent 在推理过程中自主判断是否检索检索什么 以及如何使用检索结果 。只需为 Agent 配备一个或多个检索工具 (如文档加载器、网页抓取、SQL 查询等),即可赋予其动态获取外部知识的能力。

代码示例(基础工具定义):

python 复制代码
import requests
from langchain.tools import tool
from langchain.chat_models import init_chat_model
from langchain.agents import create_agent

@tool
def fetch_url(url: str) -> str:
    """获取指定 URL 的文本内容"""
    response = requests.get(url, timeout=10.0)
    response.raise_for_status()
    return response.text

system_prompt = """当你需要从网页获取信息时,使用 fetch_url 工具,并引用相关片段。"""
agent = create_agent(
    model="claude-sonnet-4-6",
    tools=[fetch_url],
    system_prompt=system_prompt,
)

实战:面向 LangGraph 文档的智能体问答

以下 Agent 会先读取 llms.txt(内含文档索引),再根据用户问题动态调用 fetch_documentation 获取并解析相关页面:

python 复制代码
import requests
from langchain.agents import create_agent
from langchain.messages import HumanMessage
from langchain.tools import tool
from markdownify import markdownify

ALLOWED_DOMAINS = ["https://langchain-ai.github.io/"]
LLMS_TXT = 'https://langchain-ai.github.io/langgraph/llms.txt'

@tool
def fetch_documentation(url: str) -> str:
    """从指定 URL 抓取文档并转为 Markdown"""
    if not any(url.startswith(domain) for domain in ALLOWED_DOMAINS):
        return f"错误:URL 不在允许范围内,必须以 {', '.join(ALLOWED_DOMAINS)} 开头。"
    response = requests.get(url, timeout=10.0)
    response.raise_for_status()
    return markdownify(response.text)

# 预先加载文档索引(无需每次经 LLM)
llms_txt_content = requests.get(LLMS_TXT).text

system_prompt = f"""
你是一位资深的 Python 技术专家,专注于 LangGraph 生态。

工作原则:
1. 凡涉及 API 用法、配置或行为的问题,**必须**使用 `fetch_documentation` 查阅官方文档。
2. 引用文档时需给出总结和关键上下文。
3. 禁止访问非允许域名下的 URL。
4. 若获取失败,请告知用户并基于已有知识尽力作答。

可用文档索引如下:
{llms_txt_content}
"""

tools = [fetch_documentation]
model = init_chat_model("claude-sonnet-4-6", max_tokens=32_000)
agent = create_agent(model=model, tools=tools, system_prompt=system_prompt, name="AgenticRAG")

response = agent.invoke({
    'messages': [HumanMessage(content="写一个使用预置 create_react_agent 的 Agent,用于查询股票价格。")]
})
print(response['messages'][-1].content)

5. 混合 RAG(Hybrid RAG)

该架构融合前两种模式,在检索前后增加中间处理步骤,例如:

  • 查询增强:改写模糊问题、生成多版本查询或添加上下文;
  • 检索验证:判断初次检索是否充分,不足则优化后二次检索;
  • 答案验证:校验生成答案的准确性与完整性,不符合则修正或重生成。

它适合查询条件不明确、涉及多源数据或需要严格质量把控的复杂场景。

相关推荐
飞哥数智坊5 分钟前
AI提升了人效,但组织却接不住释放的生产力
人工智能
飞哥数智坊13 分钟前
什么才叫真正的端到端?
人工智能
武科大许志伟24 分钟前
从并行进化到分布式进化计算读 A Survey on Distributed Evolutionary Computation
人工智能·分布式·演化计算
长谷深风11128 分钟前
好的 Tool Schema,不是字段越全越好
java·大数据·人工智能·ai agent·agent工作流·智能体设计·ai产品设计
Moon上有月亮32 分钟前
Ollama 完全指南:本地大语言模型的“开箱即用”方案
人工智能·语言模型·自然语言处理·ollama
sel_941 分钟前
【Docker】Docker 安装与使用详解:从零搭建到日常实战
人工智能·深度学习·算法·docker
zhangfeng113343 分钟前
AtomCode等ai agent 软件解决 直接设置限流等待时间为 5 分钟 例如商汤api限流
人工智能·算子开发
uncle_ll1 小时前
大模型落地选型GGUF 量化与 Ollama 部署指南
人工智能·大模型·llm·ollama·gguf
Dovis(誓平步青云)2 小时前
从Redis指标采集到异常告警:redis_exporter + Prometheus 完整实战
服务器·数据库·人工智能·redis·架构·prometheus·vibe coding
AcaDesign3 小时前
国家/省部市级科技奖答辩PPT_科技进步奖_自然科学奖_技术发明奖|WordinPPT
大数据·人工智能·科技·powerpoint