跳至主要内容

如何构建过滤器

先决条件

本指南假定您熟悉以下内容

我们可能希望进行查询分析以提取过滤器以传递给检索器。我们要求 LLM 表示这些过滤器的一种方法是作为 Zod 架构。然后是将 Zod 架构转换为可以传递给检索器的过滤器的問題。

这可以通过手动完成,但 LangChain 还提供了一些“转换器”,这些转换器能够从通用语法转换为特定于每个检索器的过滤器。在这里,我们将介绍如何使用这些转换器。

设置

安装依赖项

yarn add zod

在这个示例中,yearauthor 都是要过滤的属性。

import { z } from "zod";

const searchSchema = z.object({
query: z.string(),
startYear: z.number().optional(),
author: z.string().optional(),
});

const searchQuery: z.infer<typeof searchSchema> = {
query: "RAG",
startYear: 2022,
author: "LangChain",
};
import { Comparison, Comparator } from "langchain/chains/query_constructor/ir";

function constructComparisons(
query: z.infer<typeof searchSchema>
): Comparison[] {
const comparisons: Comparison[] = [];
if (query.startYear !== undefined) {
comparisons.push(
new Comparison("gt" as Comparator, "start_year", query.startYear)
);
}
if (query.author !== undefined) {
comparisons.push(
new Comparison("eq" as Comparator, "author", query.author)
);
}
return comparisons;
}

const comparisons = constructComparisons(searchQuery);
import { Operation, Operator } from "langchain/chains/query_constructor/ir";

const _filter = new Operation("and" as Operator, comparisons);
import { ChromaTranslator } from "langchain/retrievers/self_query/chroma";

new ChromaTranslator().visitOperation(_filter);
{
"$and": [
{ start_year: { "$gt": 2022 } },
{ author: { "$eq": "LangChain" } }
]
}

下一步

您现在已经了解了如何从任意查询创建特定过滤器。

接下来,查看本部分中的一些其他查询分析指南,例如 如何使用少样本提示来提高性能


此页面对您有帮助吗?


您还可以留下详细的反馈 在 GitHub 上.