LLM(Large Language Model,大型语言模型)是一个功能强大的新平台,但它们并不总是使用与我们的任务相关的数据或者是最新的数据进行训练。
RAG(Retrieval Augmented Generation,检索增强生成)是一种将 LLM 与外部数据源(例如私有数据或最新数据)连接的通用方法。它允许 LLM 使用外部数据来生成其输出。
要想真正掌握 RAG,我们需要学习下图所示的技术(技巧):
我们从《RAG从入门到精通系列3:Routing(路由)》中学习了 Routing,在本文中我们将进入下一个节点:Query Construction(查询构造)。
Query Construction 是指根据用户输入的自然语言问题,通过语义解析、上下文理解以及路由后的结果,生成特定领域数据源所需的查询语句或格式化内容。这一过程的目标是最大化数据源检索的准确性和相关性。
比如,许多 Vector Store 都有 meta data(元数据),我们可以将用户的查询“Videos on chat langchain published after 2024”(2024年之后发布的 chat langchain 视频)转成可用于 meta data 过滤的结构化查询:
首先我构造一个假的 Document 对象,其中包含了一些假的 meta data:
假设我们已经建立了一个索引:
允许我们对每个文档的 content 和 title 进行非结构化搜索
并对
view count、
publication date 和 length
使用范围过滤。
我们希望将自然语言转换为结构化搜索查询。
我们可以为结构化搜索查询定义一个架构:
现在,我们写一个让 LLM 可以将自然语言转成合适的结构化查询的 Prompt:
整体的运行结果还是不错的:
GitHub 链接:
https://github.com/realyinchen/RAG/blob/main/04_Query_Construction.ipynb