使用Azure Cognitive Search结合OpenAI嵌入技术构建向量数据库

在人工智能和大数据的时代,将先进的搜索技术与强大的嵌入式模型相结合,已成为开发高效智能应用的关键。本教程将向您展示如何使用Azure Cognitive Search作为OpenAI嵌入技术的向量数据库,帮助您在云中构建一个丰富的搜索体验。

开始之前:必要条件和准备工作

环境准备

在开始实践之前,确保您已经具备以下条件:

  1. Azure Cognitive Search服务:注册并配置您的Azure Cognitive Search服务。
  2. OpenAI密钥或Azure OpenAI凭据:获取并配置您的OpenAI API密钥。
  3. 安装必要的库:通过pip安装如wgetazure-search-documents等必要的Python库。

导入所需库

import openai
import json
import wget
import pandas as pd
import zipfile
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.models import Vector
from azure.search.documents import SearchIndexingBufferedSender
from azure.search.documents.indexes.models import (
    SearchIndex, 
    SearchField, 
    SearchFieldDataType,
    SimpleField, 
    SearchableField, 
    SemanticConfiguration, 
    PrioritizedFields, 
    SemanticField, 
    VectorSearch, 
    HnswVectorSearchAlgorithmConfiguration
)

配置OpenAI和Azure Cognitive Search

设置OpenAI

openai.api_type = "azure"
openai.api_base = "YOUR_AZURE_OPENAI_ENDPOINT"
openai.api_version = "2023-05-15"
openai.api_key = "YOUR_AZURE_OPENAI_KEY"
model: str = "text-embedding-ada-002"

设置Azure Cognitive Search

search_service_endpoint: str = "YOUR_AZURE_SEARCH_ENDPOINT"
search_service_api_key: str = "YOUR_AZURE_SEARCH_ADMIN_KEY"
index_name: str = "azure-cognitive-search-vector-demo"
credential = AzureKeyCredential(search_service_api_key)

加载和准备数据

下载数据

使用wget下载并解压包含嵌入向量的Wikipedia文章数据。

embeddings_url = "https://cdn.openai.com/API/examples/data/vector_database_wikipedia_articles_embedded.zip"
wget.download(embeddings_url)
with zipfile.ZipFile("vector_database_wikipedia_articles_embedded.zip", "r") as zip_ref:
    zip_ref.extractall("../../data")

数据预处理

将下载的数据加载到Pandas DataFrame中,并准备用于上传到Azure Search。

article_df = pd.read_csv('../../data/vector_database_wikipedia_articles_embedded.csv')
article_df["title_vector"] = article_df.title_vector.apply(json.loads)
article_df["content_vector"] = article_df.content_vector.apply(json.loads)
article_df['vector_id'] = article_df['vector_id'].apply(str)

创建和配置搜索索引

定义索引结构

在Azure Search中创建一个新索引,定义包括文本字段和向量字段。

index_client = SearchIndexClient(
    endpoint=search_service_endpoint, credential=credential)

fields = [
    SimpleField(name="id", type=SearchFieldDataType.String),
    # ... 其他字段定义
]

index = SearchIndex(name=index_name, fields=fields, vector_search=vector_search)
result = index_client.create_or_update_index(index)
print(f'{result.name} created')

上传文档和嵌入向量

将数据上传至Azure Search

使用SearchIndexingBufferedSender将文档和嵌入向量上传至Azure Search。

documents = article_df.to_dict(orient='records')

with SearchIndexingBufferedSender(search_service_endpoint, index_name, credential) as batch_client:
    batch_client.upload_documents(documents=documents)

print(f"Uploaded {len(documents)} documents in total")

实现向量相似度搜索

搜索函数

定义一个函数,根据用户的查询生成嵌入,并在Azure Search中执行向量搜索。

def generate_embeddings(text):
    response = openai.Embedding.create(input=text, engine=model)
    return response['data'][0]['embedding']

query = "modern art in Europe"
search_client = SearchClient(search_service_endpoint, index_name, credential)
vector = Vector(value=generate_embeddings(query), k=3, fields="content_vector")

results = search_client.search(search_text=None, vectors=[vector])
for result in results:
    print(f"Title: {result['title']}\nURL: {result['url']}")

结语

通过本教程的学习,您已经掌握了如何使用Azure Cognitive Search结合OpenAI嵌入技术构建高效的向量数据库。这种方法不仅有利于提升搜索质量,还能为您的应用带来更加丰富和深入的搜索体验。

声明:本站所有文章,如无特殊说明或标注,均为本站(王大神)原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
指数词

使用嵌入式搜索技术增强ChatGPT问答能力的全面指南

2023-11-18 15:55:45

指数词

iPhone 13购买考量:价值与性能的平衡

2023-11-18 16:00:52

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索