type
status
date
slug
summary
tags
category
icon
password
comment
Status
本文将展示如何在一个基本的端到端示例中使用查询分析。这包括创建一个简单的搜索引擎,在原始用户问题传递给该搜索引擎时调用失败的情况,然后实现一个查询分析如何帮助解决该问题的示例。
我们将在LangChain YouTube视频上进行检索。
配置
安装依赖
设置环境变量
加载文本
我们可以使用
YouTubeLoader
加载一些 YouTube 上 LangChain 视频的字幕:API 调用:YoutubeLoader
以下是我们已加载的视频的标题:
这是与每个视频关联的元数据。我们可以看到,每个文档还具有标题、观看次数、发布日期和长度:
下面是某个文档内容的样本:
文本索引
每当我们执行检索时,我们需要创建一个文档索引,以便我们可以查询。我们将使用向量存储来索引我们的文档,并首先将它们分块,使我们的检索更加简洁和精确:
Retrieval 检索器
我们可以直接在用户问题上执行相似性搜索,以找到与问题相关的片段:
这个方法效果相当不错!我们的第一个结果与问题非常相关。
如果我们想要搜索特定时间段的结果怎么办?
我们的第一个结果是来自2024年的(尽管我们要求的是2023年的视频),并且与输入内容不太相关。由于我们只是针对文档内容进行搜索,所以结果无法根据任何文档属性进行过滤。
这只是可能出现的失败情况中的一种。现在,让我们看看基本的查询分析如何能够解决这个问题!
查询分析
我们可以使用查询分析来改善检索结果。这需要定义一个包含日期过滤器的查询结构,并使用函数调用模型将用户问题转换为结构化查询。
Query schema
在这种情况下,我们将有明确的最小和最大属性用于过滤发布日期。
查询生成
为了将用户问题转换为结构化查询,可以使用 OpenAI 工具调用的API。使用新的ChatModel.with_structured_output()构造函数来处理将结构传递给模型并解析输出。
让我们看看分析器为我们之前搜索的问题生成了哪些查询:
使用查询分析的检索
现在让我们尝试使用生成的查询执行实际的检索。
注意:在我们的示例中,我们指定了
tool_choice="Search"
。这将强制LLM调用一个(且仅有一个)工具,这意味着我们总是有一个优化后的查询来进行查找。请注意,情况并非总是如此——请参阅其他指南,了解在没有或返回多个优化查询时如何处理。API 调用:Document
现在我们再问一下之前的问题,并看到它只输出了那一年的结果!
官网链接:
- Author:小灰
- URL:https://blog.opencontent.cn//article/langchain-query-analysis
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!