探索时间加权向量存储检索器的使用:语义相似与时间衰减的完美结合

68 阅读2分钟
# 引言

在信息爆炸的时代,如何为用户提供最相关的信息成为一个关键问题。时间加权向量存储检索器(TimeWeightedVectorStoreRetriever)通过结合语义相似性和时间衰减,为解决这一问题提供了一种创新的方法。本文将介绍如何使用这种检索器,并提供实用的代码示例。

# 主要内容

## 时间加权向量存储检索器的基本原理

时间加权向量存储检索器的评分算法为:

semantic_similarity + (1.0 - decay_rate) ^ hours_passed


- `semantic_similarity`:内容之间的语义相似度。
- `hours_passed`:自对象上次被访问以来经过的小时数。

低衰减率让内存“保留”更久,而高衰减率则使之很快变得不具有时效性。

## 低衰减率与高衰减率的区别

- **低衰减率**:使对象在长时间内保持“新鲜”。
- **高衰减率**:让对象快速“遗忘”,除非频繁访问。

# 代码示例

### 低衰减率示例

```python
from datetime import datetime, timedelta
import faiss
from langchain.retrievers import TimeWeightedVectorStoreRetriever
from langchain_community.docstore import InMemoryDocstore
from langchain_community.vectorstores import FAISS
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings

# 定义嵌入模型
embeddings_model = OpenAIEmbeddings()
embedding_size = 1536
index = faiss.IndexFlatL2(embedding_size)
vectorstore = FAISS(embeddings_model, index, InMemoryDocstore({}), {})
retriever = TimeWeightedVectorStoreRetriever(
    vectorstore=vectorstore, decay_rate=0.00000000000001, k=1
)

yesterday = datetime.now() - timedelta(days=1)
retriever.add_documents(
    [Document(page_content="hello world", metadata={"last_accessed_at": yesterday})]
)
retriever.add_documents([Document(page_content="hello foo")])

# 使用API代理服务提高访问稳定性
print(retriever.get_relevant_documents("hello world"))

高衰减率示例

retriever = TimeWeightedVectorStoreRetriever(
    vectorstore=vectorstore, decay_rate=0.999, k=1
)

yesterday = datetime.now() - timedelta(days=1)
retriever.add_documents(
    [Document(page_content="hello world", metadata={"last_accessed_at": yesterday})]
)
retriever.add_documents([Document(page_content="hello foo")])

# 使用API代理服务提高访问稳定性
print(retriever.get_relevant_documents("hello world"))

常见问题和解决方案

如何设置合理的衰减率?

选择合适的衰减率取决于应用场景。频繁更新的数据可以选择高衰减率,而历史记录重要性较高的场景则应选择低衰减率。

网络访问问题怎么解决?

由于某些地区网络限制,考虑使用API代理服务以提高访问稳定性是一个不错的选择。

总结和进一步学习资源

本文介绍了时间加权向量存储检索器的基本原理和具体使用方法。欲深入了解LangChain及相关技术,建议访问以下资源:

参考资料

  1. LangChain API参考
  2. FAISS官方文档
  3. OpenAI嵌入模型使用指南

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---