如何创建时间加权检索器
先决条件
本指南假设您熟悉以下概念
本指南介绍了 TimeWeightedVectorStoreRetriever
,它结合使用语义相似性和时间衰减。
它们评分的算法为
semantic_similarity + (1.0 - decay_rate) ^ hours_passed
值得注意的是,hours_passed
指的是检索器中对象上次访问的时间,而不是其创建时间。这意味着频繁访问的对象会保持“新鲜”。
let score = (1.0 - this.decayRate) ** hoursPassed + vectorRelevance;
this.decayRate
是一个可配置的 0 到 1 之间的十进制数。较低的数字表示文档会被“记住”更长时间,而较高的数字则会更强烈地加权最近访问的文档。
请注意,将衰减率设置为正好为 0 或 1 会使 hoursPassed
变得无关紧要,并使此检索器等同于标准向量查找。
重要的是要注意,由于需要元数据,所有文档都必须使用检索器上的 addDocuments
方法添加到后备向量存储中,而不是向量存储本身。
提示
有关安装集成包的常规说明,请参见 本节。
- npm
- Yarn
- pnpm
npm install @langchain/openai @langchain/core
yarn add @langchain/openai @langchain/core
pnpm add @langchain/openai @langchain/core
import { TimeWeightedVectorStoreRetriever } from "langchain/retrievers/time_weighted";
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "@langchain/openai";
const vectorStore = new MemoryVectorStore(new OpenAIEmbeddings());
const retriever = new TimeWeightedVectorStoreRetriever({
vectorStore,
memoryStream: [],
searchKwargs: 2,
});
const documents = [
"My name is John.",
"My name is Bob.",
"My favourite food is pizza.",
"My favourite food is pasta.",
"My favourite food is sushi.",
].map((pageContent) => ({ pageContent, metadata: {} }));
// All documents must be added using this method on the retriever (not the vector store!)
// so that the correct access history metadata is populated
await retriever.addDocuments(documents);
const results1 = await retriever.invoke("What is my favourite food?");
console.log(results1);
/*
[
Document { pageContent: 'My favourite food is pasta.', metadata: {} }
]
*/
const results2 = await retriever.invoke("What is my favourite food?");
console.log(results2);
/*
[
Document { pageContent: 'My favourite food is pasta.', metadata: {} }
]
*/
API 参考
- TimeWeightedVectorStoreRetriever 来自
langchain/retrievers/time_weighted
- MemoryVectorStore 来自
langchain/vectorstores/memory
- OpenAIEmbeddings 来自
@langchain/openai
下一步
您现在已经了解了如何在执行检索时将时间作为因素。
接下来,请查看 关于 RAG 的更广泛教程,或本节以了解如何 在任何数据源上创建您自己的自定义检索器。