路径
Pathway 是一个开源的数据处理框架。它允许您轻松开发数据转换管道和机器学习应用,这些应用可以处理实时数据源和不断变化的数据。
该笔记本演示了如何将实时的 Pathway 数据索引管道与 Langchain 结合使用。你可以像查询常规向量存储一样,从你的链(chains)中查询此管道的结果。然而,在底层,Pathway 会在每次数据变更时更新索引,从而始终为你提供最新的答案。
在本笔记本中,我们将使用一个公开演示文档处理管道,该管道:
- 监视多个云数据源的数据变化。
- 为数据构建向量索引。
我们将使用VectorStore客户端连接到索引,该客户端实现了similarity_search函数以检索匹配的文档。
本文档中使用的基本管道可以轻松地构建存储在云位置的文件的简单向量索引。然而,Pathway 提供了构建实时数据管道和应用程序所需的一切功能,包括类 SQL 的表操作(例如对不同数据源进行分组聚合和连接)、基于时间的数据分组与窗口化处理,以及丰富的连接器支持。
您需要使用 langchain-community 安装 pip install -qU langchain-community 才能使用此集成
查询数据管道
要实例化并配置客户端,您需要提供文档索引管道的 url 或 host 和 port。在下面的代码中,我们使用了一个公开可用的 演示管道,您可以通过位于 https://demo-document-indexing.pathway.stream 的 REST API 访问它。此演示管道从 Google Drive 和 Sharepoint 摄取文档,并维护一个用于检索文档的索引。
from langchain_community.vectorstores import PathwayVectorClient
client = PathwayVectorClient(url="https://demo-document-indexing.pathway.stream")
我们就可以开始提出查询
query = "What is Pathway?"
docs = client.similarity_search(query)
print(docs[0].page_content)
轮到你了! 获取你的管道 或上传 新文档 到演示管道并重新尝试查询!
根据文件元数据进行过滤
我们支持使用jmespath表达式进行文档过滤,例如:
# take into account only sources modified later than unix timestamp
docs = client.similarity_search(query, metadata_filter="modified_at >= `1702672093`")
# take into account only sources modified later than unix timestamp
docs = client.similarity_search(query, metadata_filter="owner == `james`")
# take into account only sources with path containing 'repo_readme'
docs = client.similarity_search(query, metadata_filter="contains(path, 'repo_readme')")
# and of two conditions
docs = client.similarity_search(
query, metadata_filter="owner == `james` && modified_at >= `1702672093`"
)
# or of two conditions
docs = client.similarity_search(
query, metadata_filter="owner == `james` || modified_at >= `1702672093`"
)
获取索引文件的信息
PathwayVectorClient.get_vectorstore_statistics() 提供向量存储状态的基本统计信息,例如已索引文件的数量以及最近一次更新的时间戳。你可以在你的链中使用它来告知用户你的知识库有多新。
client.get_vectorstore_statistics()
您自己的管道
在生产环境中运行
要拥有您自己的 Pathway 数据索引管道,请查看 Pathway 提供的托管管道服务。您也可以运行您自己的 Pathway 管道——有关如何构建管道的信息,请参考Pathway 指南。
处理文档
向量化管道支持用于解析、分割和嵌入文档的可插拔组件。对于嵌入和分割,您可以使用Langchain 组件,或查看 Pathway 中提供的嵌入器和分割器。如果没有提供解析器,则默认使用UTF-8解析器。您可以在此处查找可用的解析器。