两种常见架构

A. 经典 RAG 管线
固定:检索一次 → 拼 prompt → 生成。

B. Agent + RAG 工具
模型自主决定:要不要搜、搜什么、搜几次、信息够不够。

对照

维度固定 RAGAgent 里的 RAG 工具
路径可预期动态
成本通常更低可能多次调用
调试简单要看轨迹
复杂问题一次检索易漏可多轮换 query
过度检索较少需要预算/限流

我更倾向的折中

默认路径仍走「一次检索」;只有当答案缺证据时,才允许 Agent 再调 search_notes。
并给硬约束:

  • 最多 3 次检索
  • 单次 top-k 固定
  • 超预算就基于现有证据作答或声明不确定

工具怎么封

@tool
def search_notes(query: str) -> str:
    """Search experiment notes. Prefer short factual queries."""
    docs = vector_store.search(query, k=4)
    return format_snippets(docs)

返回要短、带来源标识,避免把整页文档塞回上下文。

什么时候别用 Agent-RAG

  • 问答域极窄、延迟极敏感
  • 成本必须可预算到「固定一次调用」
  • 审计要求路径完全确定

这些场景固定管线更稳。

结论

RAG 可以是 Agent 的工具,不必是另一套世界观。
简单问题固定检索,复杂问题再开放多轮,通常性价比最高。