RAG 集成与生态
RAG 分类讲了检索原理,本篇讲 LangChain 怎么把 RAG 接进 agent:retriever 作为工具、生态配套怎么用。
retriever 作工具
RAG 和 agent 的组合方式:
| 方式 | 做法 | 适用 |
|---|---|---|
| 直接检索 | 问题先检索再让模型回答 | 固定流程(传统 RAG) |
| retriever 作工具 | 检索封装成工具,agent 自己决定何时检索 | 复杂任务,agent 判断需要 |
| 混合 | 固定检索 + 工具兜底 | 生产常见 |
from langchain.tools import tool
@tool
def search_docs(query: str) -> str:
"""从知识库检索相关资料。当问题涉及产品文档时使用。"""
docs = retriever.invoke(query)
return "\n".join(d.text for d in docs[:5])retriever 作工具的好处:agent 自主决定检索时机和次数(先规划再查、不够再查),查询词可以由 agent 改写(比原始问题更精准)。代价:多一轮模型调用、行为不可完全预测。
检索工具的描述要点
- 说清知识库覆盖范围(“公司内部产品文档”),模型才知道何时用
- 说明返回结构(top-k 片段),模型才知道怎么用
- 查询改写交给模型:工具入参是 query 字符串,模型会生成合适的检索词
LangSmith:可观测与评估
| 能力 | 用途 |
|---|---|
| 追踪(Tracing) | 每次调用的完整链路:检索了什么、模型怎么决策、工具结果 |
| 数据集与评估 | 构建评测集,回归测试 RAG 质量 |
| 在线监控 | 生产延迟、token 成本、错误率 |
LangSmith 追踪对 RAG+agent 特别有价值:能看到“检索结果好不好”和“模型有没有正确使用”,这两步是 RAG 质量的关键(见 RAG 评估篇的 RAGAS 指标)。
LangServe 与部署
- LangServe:把 agent 包装成 REST API(
serve命令,自动 OpenAPI 文档) - 支持流式响应(SSE)、后台任务
- 现代路径:LangSmith Deployments 逐步取代自建 LangServe,提供托管的 agent 服务(自动处理持久化基础设施,见 LangGraph 持久化篇)
- 部署注意:RAG 的向量库连接、embedding 模型、检索参数都要在服务端配置
面试追问
- RAG 怎么和 agent 结合? 把 retriever 封装成工具,agent 自主决定何时检索。比固定检索灵活,比纯工具更贴近知识
- retriever 作工具的好处? 检索时机和次数由 agent 决定,查询词可改写。代价是多轮调用、行为不确定
- LangSmith 对 RAG 的价值? 追踪检索和模型使用链路,数据集评估回归。RAG 质量 = 检索质量 + 使用质量
- LangServe 是什么? agent 的 REST 部署层,自动文档和流式。新项目看 LangSmith Deployments
- 检索工具的描述怎么写? 说清覆盖范围、返回结构,让模型知道何时用、怎么用