首页 > 其他分享 >探索Databricks Vector Search:构建高效的相似性搜索引擎

探索Databricks Vector Search:构建高效的相似性搜索引擎

时间:2024-12-18 20:27:22浏览次数:6  
标签:API Search name Vector Databricks langchain vector import

引言

在当今的数据驱动世界中,处理和检索大量信息变得至关重要。Databricks Vector Search 是一个无服务器的相似性搜索引擎,允许您将数据的矢量表示存储在矢量数据库中,并通过简单的API查询以返回最相似的向量。在本文中,我们将介绍如何使用Databricks Vector Search进行自查询检索器(SelfQueryRetriever)的设置和应用。

主要内容

创建Databricks矢量存储索引

首先,需要创建一个Databricks矢量存储索引,并用一些数据进行初始化。我们将使用一组包含电影摘要的小型演示文档数据集。

安装所需的包:

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

重启内核以更新包后,获取OpenAI API Key,Databricks主机及令牌:

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
databricks_host = getpass.getpass("Databricks host:")
databricks_token = getpass.getpass("Databricks token:")

设置向量搜索客户端和索引

from databricks.vector_search.client import VectorSearchClient
from langchain_openai import OpenAIEmbeddings

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

vector_search_endpoint_name = "vector_search_demo_endpoint"

vsc = VectorSearchClient(
    workspace_url=databricks_host, personal_access_token=databricks_token
)
vsc.create_endpoint(name=vector_search_endpoint_name, endpoint_type="STANDARD")

创建直接访问索引:

index_name = "udhay_demo.10x.demo_index"

index = vsc.create_direct_access_index(
    endpoint_name=vector_search_endpoint_name,
    index_name=index_name,
    primary_key="id",
    embedding_dimension=emb_dim,
    embedding_vector_column="text_vector",
    schema={
        "id": "string",
        "page_content": "string",
        "year": "int",
        "rating": "float",
        "genre": "string",
        "text_vector": "array<float>",
    },
)

添加文档

from langchain_core.documents import Document

docs = [
    Document(
        page_content="A bunch of scientists bring back dinosaurs and mayhem breaks loose",
        metadata={"id": 1, "year": 1993, "rating": 7.7, "genre": "action"},
    ),
    # 其他文档省略...
]

from langchain_community.vectorstores import DatabricksVectorSearch

vector_store = DatabricksVectorSearch(
    index,
    text_column="page_content",
    embedding=embeddings,
    columns=["year", "rating", "genre"],
)
vector_store.add_documents(docs)

创建自查询检索器

from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_openai import OpenAI

metadata_field_info = [
    AttributeInfo(
        name="genre",
        description="The genre of the movie",
        type="string",
    ),
    AttributeInfo(
        name="year",
        description="The year the movie was released",
        type="integer",
    ),
    AttributeInfo(
        name="rating", description="A 1-10 rating for the movie", type="float"
    ),
]
document_content_description = "Brief summary of a movie"
llm = OpenAI(temperature=0)
retriever = SelfQueryRetriever.from_llm(
    llm, vector_store, document_content_description, metadata_field_info, verbose=True
)

代码示例

这是如何查询某些特定条件的电影的例子:

retriever.invoke("What are some movies about dinosaurs")

常见问题和解决方案

网络限制问题

在某些地区,开发者可能面临访问API的网络限制问题。建议使用API代理服务{AI_URL}来提高访问的稳定性。

认证问题

在开发阶段可能会使用个人访问令牌(PAT),但为了更好的性能,建议在生产环境中使用服务主体身份验证。

总结与进一步学习资源

Databricks Vector Search为开发者提供了一种强大的方式来存储和检索数据的向量表示。通过本文的介绍,我们了解了如何设置和使用自查询检索器。想要更深入地学习,可以参考以下资源:

参考资料

  • Databricks Vector Search 官方文档
  • Langchain 使用文档
  • OpenAI API 文档

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

—END—

标签:API,Search,name,Vector,Databricks,langchain,vector,import
From: https://blog.csdn.net/tt_jishu/article/details/144502412

相关文章

  • 【Azure Logic App】使用Logic App来定制Monitor Alert邮件内容遇见无法获取SearchRes
    问题描述在使用AzureMonitor获取自定义告警指标并发出告警邮件时,默认的告警邮件内容不满足需要,需要把自定义查询语句的结果也直接显示在邮件中。查阅官方文档(CustomizealertnotificationsbyusingLogicApps),可以通过LogicApp来自定义Alert邮件内容。但是,在实验中,遇见......
  • search简易使用
    Search的简易使用1.基本使用引入和创建:在ets文件中,首先通过import{Search}from'@ohos.arkui.advanced.Search'引入Search组件。然后可以在组件的build方法中创建Search实例,例如:Search({value:this.searchText,placeholder:'Search...'}).width('90%').......
  • 1e6 个 vector 做 1e6 次随机 push_back 非常慢
    测试代码:点击查看代码#include<benchmark/benchmark.h>#include<bits/stdc++.h>usingnamespacestd;constexprintN=1e6+10;mt19937rng{random_device{}()};voidbench_0(benchmark::State&state){for(auto_:state){for(inti=0;i......
  • 【Elasticsearch】高亮搜索:从原理到Web呈现
    ......
  • 常见操作系统中安装Elasticsearch 2.10的步骤
    一、前提条件Java环境:Elasticsearch是基于Java开发的,所以需要先安装JavaDevelopmentKit(JDK)。推荐安装JDK8,确保java-version命令在终端中可以正确执行,并且版本符合要求。二、在Linux系统(以Ubuntu为例)中安装Elasticsearch2.10下载Elasticsearch访问Elasticsearch官方网......
  • 全文检索Elasticsearch
    一、什么是Elasticsearch?Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎。它建立在ApacheLucene库之上,能够提供快速、近实时的搜索功能,并且可以处理大规模的数据。分布式架构Elasticsearch可以将数据分布在多个节点(服务器)上,通过分片(Shard)机制来存储和管理数......
  • ElasticSearch中的深度分页问题
    在使用ElasticSearch进行搜索时,很多小伙伴会遇到“深度分页”问题。当需要获取大量的分页数据时,查询性能会急剧下降,甚至导致集群负载过高。这篇文章将深入剖析ElasticSearch深度分页的成因、危害,并提供一些常用的优化方案。一、什么是深度分页?深度分页的定义在Elastic......
  • 关于QFramework UIKit和ResKit生成的UI预制体打包后报错Failed to Create Res. Not Fi
     使用UIKit创建UIPrefb后打包发布后提示FailedtoCreateRes.NotFindByResSearchKeys:AssetName:basepanelBundleName:TypeName:UnityEngine.GameObject,找不到所需资源。下方如图1-1的报错。图1-1问题原因:一开始以为是没有按照教程所说的流程来创建。按照教程所说......
  • 23、Elasticsearch-fielddata内存使用陡增解决方案
    利用searchAfter分页方式代替From-Size查询或Scroll滚动查询,解决From-Size查询存在的深度翻页问题与Scroll滚动查询存在数据量大响应慢的问题。由于searchAfter分页需要保证排序聚合唯一,当使用_id字段进行排序聚合时,可能会导致fielddata内存使用指标陡增,从而导致集群的内存使用率......
  • Docker安装Redis和Elasticsearch
    本章将和大家分享在Docker中如何安装Redis和Elasticsearch。废话不多说,下面我们直接进入主题。一、Docker安装Redis1、拉取最新版的redis镜像dockerpullredis2、查看本地镜像dockerimages3、从官网获取redis.conf配置文件创建并进入指定目录(可自定义)://进入......