用MCP实现Agentic RAG
传统的RAG系统使用固定策略,这些策略在数据变化时可能变得不那么有效。在Agentic RAG中则不同,LLM根据上下文决定如何与数据交互。

当我第一次开始探索模型上下文协议(MCP)时,我只是被它在标准化大型语言模型(LLMs)与外部系统交互方面的潜力所吸引。我的初始目标很简单:为LanceDB(一个多模态无服务器向量数据库)构建一个简单的MCP服务器。我从未想到这个探索会演变成更有趣的东西。

从一个简单的集成开始,这逐渐演变为一个智能PDF交互的复杂系统。结果?一个由LangChain和LanceDB支持的本地文件持久索引,并通过MCP访问(GitHub上的lance-mcp),具有无缝的文档添加和重新索引功能。最令人兴奋的是,它比典型的RAG实现要强大得多,因为Claude自主地确定其查询策略和提示格式。
如果你有兴趣亲自尝试,设置非常简单——你只需要Node、Ollama和Claude桌面应用程序即可。说明可以在GitHub存储库中找到。
1、理解模型上下文协议 (MCP)
模型上下文协议代表了在标准化AI模型与外部工具和数据源交互方面迈出的重要一步。它为LLMs提供了一种结构化的方式来访问和操作外部资源,使其在现实世界的应用中更加高效和可靠。
来自 https://modelcontextprotocol.io/introduction:
"MCP是一个开放协议,用于标准化应用程序如何向LLMs提供上下文。可以将MCP视为AI应用的USB-C端口。就像USB-C提供了一种标准方式来连接您的设备到各种外围设备和配件一样,MCP提供了一种标准方式来连接AI模型到不同的数据源和工具。"

事实上,目前MCP服务器的使用与LLM常规工具调用并没有太大区别。但作为一种协议,我相信客户端和服务端的实现将继续发展,以支持更多的安全性和与LLMs的双向交互。
2、Agentic RAG与传统RAG:范式转变
传统的RAG(检索增强生成)遵循预定义或硬编码的管道,开发人员通过提示工程对查询构造、结果过滤和上下文整合做出关键决策。虽然这种方法在静态数据集上表现良好,但在生产环境中面临挑战,因为数据不断变化。

考虑一下:检索与数据摄取同样重要,然而传统的RAG系统使用固定策略(例如向量存储查询谓词或要获取的结果数量——Top K),这些策略在数据变化时可能变得不那么有效。这导致原始优化与当前数据现实之间的偏差,从而导致LLM代理错过重要上下文并产生幻觉。
进入Agentic RAG——这是一种更动态的方法,其中LLM本身根据上下文决定如何与数据交互。就像人类执行多次Google搜索以找到正确信息一样,我观察到Claude执行了几轮带有微妙关键词变化的查询,以锁定最相关的信息。这种适应性对于保持数据变化后的有效性至关重要。
3、内部细节:实现细节

该系统包含几个关键组件:
a) 一个种子脚本创建了一个LanceDB索引,存储片段、元数据、摘要和嵌入。
我选择了LanceDB,因为它无服务器且易于本地设置(也因为我最近遇到了LanceDB的首席执行官Chang She,他是一个很棒的人),尽管该系统也可以轻松集成其他流行的向量存储,如Chroma、Pinecone、MongoDB Atlas、Azure Cosmos DB、Weaviate或OpenSearch。
b) 索引流水线利用开源模型进行嵌入(“snowflake-arctic-embed2”)和文档摘要(“llama3.1:8b”)。
为了优化资源使用,种子脚本使用文档哈希来避免重新处理先前已索引的文档。
c) LanceDB中有两个主要表。
目录(catalog)表存储文档元数据和LLM生成的摘要。片段(chunks)表维护文本片段及其对应的嵌入。
d) MCP服务器提供的工具旨在引导Claude完成两步搜索过程。
首先,执行目录搜索以识别相关文档。然后,在这些文档内执行聚焦片段搜索。
e) 这种方法显著提高了结果的相关性,并减少了产生幻觉的可能性。虽然Claude也可以在整个数据集中执行广泛的片段搜索,但它通常保留此功能用于特定场景。
4、未来方向
还有几个令人兴奋的可能性有待探索:
- 创建完全离线版本,仅使用开源模型,脱离Claude。
- 向MCP服务器添加资源,以实现直接从磁盘访问文档。
- 整合数据库来源(例如MongoDB、PostgreSQL)以超越文档存储。
- 开发全面的质量指标,涵盖准确性、完整性和相关性。
该项目展示了赋予AI代理更多自主权在其信息检索策略方面的潜力。通过允许LLM自行决定如何搜索和上下文化信息,我们可以创建更强大和适应性强的系统,即使底层数据发生变化也能保持其有效性。
代码在MIT许可证下开源,并可在GitHub上进行实验。我欢迎社区的贡献和反馈,因为我们继续一起探索Agentic RAG和MCP的可能性!
原文链接:True Agentic RAG: How I Taught Claude to Talk to My PDFs using MCP (Model Context Protocol)
汇智网翻译整理,转载请标明出处
