目录
设置 Azure 搜索" >设置 Azure 搜索
为 Azure 语义搜索准备索引" >为 Azure 语义搜索准备索引
与 OpenAI 集成" >与 OpenAI 集成
结论" >结论
首页 科技周边 人工智能 利用Azure语义搜索与OpenAI,打造认知搜索系统

利用Azure语义搜索与OpenAI,打造认知搜索系统

Oct 12, 2023 am 10:18 AM
azure openal

在当今的数字时代,拥有强大、可扩展且高效的系统不仅仅是一种竞争优势,更是一种竞争优势。这是必要的。无论您是努力优化用户输入处理旨在简化文档搜索,多种服务和平台的结合都是获得无与伦比性能的关键。在本文中,我们将探索一种将 Azure 认知服务的强大功能与 OpenAI 的功能相结合的整体方法。通过深入研究意图识别、文档过滤、特定领域的算法和文本摘要,您将学习创建一个不仅可以理解用户意图而且可以有效处理和呈现信息的系统。

我们将构建这个:

利用Azure语义搜索与OpenAI,打造认知搜索系统

设置环境

在我们深入之前,让我们确保已经安装了必要的软件包并设置了环境变量:

!pip show azure-search-documents
%pip install azure-search-documents --pre
%pip show azure-search-documents
!pip install python-dotenv
!pip install openai
import os
import requests
import json
import openai
openai.api_key = os.getenv("AZURE_OPENAI_KEY")
openai.api_base = os.getenv("AZURE_OPENAI_ENDPOINT")
openai.api_type = 'azure'
openai.api_version = '2023-05-15'
# Look in Azure OpenAI Studio > Deployments
deployment_name = 'gpt-35-turbo'
登录后复制

在这里,我们使用必要的 API 密钥、端点和类型来设置 OpenAI 环境。

设置 Azure 搜索

要使用Azure语义搜索,我们需要导入必要的模块并设置环境。

import os
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents import SearchClient
from azure.search.documents.indexes.models import (
    ComplexField,
    CorsOptions,
    SearchIndex,
    ScoringProfile,
    SearchFieldDataType,
    SimpleField,
    SearchableField
)
登录后复制

导入模块后,我们现在可以设置 Azure 搜索服务端点和 API 密钥:

# 从环境中设置服务端点和 API 密钥
service_name = "xxxxx"
admin_key ="xxxxx"
# 如果您共享密钥 - 请确保您的 index_name 是唯一的!
index_name = "hotels-quickstart"
# 创建 SDK 客户
endpoint = "https://{}.search.windows.net/".format(service_name)
admin_client = SearchIndexClient(endpoint=endpoint,
                      index_name=index_name,
                      credential=AzureKeyCredential(admin_key))

search_client = SearchClient(endpoint=endpoint,
                      index_name=index_name,
                      credential=AzureKeyCredential(admin_key))
登录后复制

(注意:在共享任何代码之前,请务必掩盖或隐藏您的密钥。)

为 Azure 语义搜索准备索引

在将数据添加到 Azure 搜索之前,我们需要定义一个描述数据结构的索引:

# 删除索引(如果存在)
try:
    result = admin_client.delete_index(index_name)
    print ('Index', index_name, 'Deleted')
except Exception as ex:
    print (ex)
登录后复制

此代码片段确保如果索引已存在,则将其删除。这在重新运行代码或更改索引时很有用。

现在,让我们指定索引的架构:

# 指定索引模式
name = index_name 
fields = [ 
        SimpleField(name= "HotelId" , type=SearchFieldDataType.String, key= True ), 
        SearchableField(name= "HotelName" , type=SearchFieldDataType.String, sortable= True ), 
        SearchableField (名称= “描述”,类型=SearchFieldDataType.String,analyzer_name= “en.lucene”),
        SearchableField(名称= “Description_fr”,类型=SearchFieldDataType.String,analyzer_name= “fr.lucene”),
        SearchableField(名称= “类别”、 type=SearchFieldDataType.String、facetable= True、filterable= True、sortable= True )、
        SearchableField(name= "Tags"、collection= True、type=SearchFieldDataType.String、facetable= True、filterable= True )、
        SimpleField(name = “ParkingInincluded”,类型=SearchFieldDataType.Boolean,facetable= True,filterable= True,sortable= True),
        SimpleField(name= “LastRenovationDate”,type=SearchFieldDataType.DateTime关闭设置,facetable= True,filterable=True、sortable= True )、
        SimpleField(name= "Rating"、 type=SearchFieldDataType.Double、facetable= True、filterable= True、sortable= True )、
        ComplexField(name= "地址"、 fields=[ 
            SearchableField(name= " StreetAddress"、 type=SearchFieldDataType.String)、
            SearchableField(name= "City"、 type=SearchFieldDataType.String、facetable= True、 filterable= True、 sortable= True )、
            SearchableField(name= "StateProvince"、 type=SearchFieldDataType.String、facetable= True、filterable= True、sortable= True )、
            SearchableField(name= "邮政编码"、 type=SearchFieldDataType.String、facetable= True、filterable= True、sortable= True )、
            SearchableField(name = “国家”,类型= SearchFieldDataType.String,facetable = True,filterable = True,sortable = True),
        ])
    ] 
cors_options = CorsOptions(allowed_origins = [ “*” ],max_age_in_seconds = 60)
Scoring_profiles = [] 
suggester = [{ 'name' : 'sg' , 'source_fields' : [ '标签' , '地址/城市' , '地址/国家' ]}]
登录后复制

接下来,您必须在 Azure 上创建此索引:

index = SearchIndex(
    name=name,
    fields=fields,
    scoring_profiles=scoring_profiles,
    suggesters = suggester,
    cors_options=cors_options)
try:
    result = admin_client.create_index(index)
    print ('Index', result.name, 'created')
except Exception as ex:
    print (ex)
登录后复制

创建索引后,我们需要用文档填充它。需要指出的是,它可以是任何类型的文档!我只是在此处手动添加将保留在 blob 存储中的文档:

文档 = [ 
    { 
    "@search.action": "上传", "@search.action" : "上传" , 
    "HotelId" : "1" , 
    "HotelName" : "秘密点汽车旅馆" , 
    "Description" : "酒店地理位置优越,位于纽约市中心的城市主要商业干道上。几分钟即可到达时代广场和城市的历史中心,以及使纽约成为美国最具吸引力的城市之一的其他名胜古迹和国际大都市。” ,
    “Description_fr”:“L'hôtel est idéalement situé sur la prime artère Commerciale de la ville en plein cœur de New York.A insi que d'autres lieux d'intérêt qui font纽约的城市充满魅力和美国的国际化。” , 
    "Category" : "精品店" , 
    "Tags" : [ "游泳池" , "空调" , "礼宾服务" ], 
    "ParkingInincluded" : "false" , 
    "LastRenovationDate" : "1970-01-18T00:00:00Z ”,
    "Rating" : 3.60 , 
    "Address" : {    
        “StreetAddress”:“677 第五大道”,
        “City”:“纽约”,
        “StateProvince”:“纽约” ,
        “PostalCode”:“10022”,
        “Country”:“美国”
         } 
    },
    { 
    “@search. action" : "上传" , 
    "HotelId" : "2" , 
    "HotelName" : "双圆顶汽车旅馆" , 
    "Description" :“该酒店坐落在一座十九世纪的广场上,该广场已按照最高建筑标准进行扩建和翻新,打造出一座现代化、实用的一流酒店,艺术和独特的历史元素与最现代的舒适设施共存。” , 
    "Description_fr" : "L'hôtel 位于十九世纪的地方,是一座现代化酒店的高级规范建筑,在艺术和历史独特方面具有一流的功能和一流的设计舒适与现代共存。” , 
    "Category" : "精品店" , 
    "Tags" : [ "泳池" ,], 
    "ParkingInincluded" : "false" , 
    "LastRenovationDate" : "1979-02-18T00:00:00Z" , 
    "Rating" : 3.60 , 
    "Address" : { 
        "StreetAddress" : "140 大学城中心" , 
        "City”:“萨拉索塔”,
        “StateProvince”:“佛罗里达州”,
        “PostalCode”:“34243”,
        “Country”:“美国”
         } 
    },
    { 
    "@search.action" : "上传" , 
    "HotelId" :"3" , 
    "HotelName" : "三重景观酒店" , 
    "Description" : "该酒店在 William Dough 的管理下以其卓越的美食脱颖而出,他为酒店的所有餐厅服务提供建议并监督。" , 
    "Description_fr" : "L'hôtel 位于十九世纪的地方,是一座现代化酒店的高级规范建筑,在艺术和历史独特方面具有一流的功能和一流的设计舒适与现代共存。” , 
    "Category" : "度假村中心" ,
    "Tags" : [ "酒吧" , "欧陆式早餐" ], 
    "ParkingInincluded" : "true" , 
    "LastRenovationDate" : "2015-09-20T00:00:00Z" , 
    "Rating" : 4.80 , 
    "Address" : { 
        "StreetAddress" : “3393 Peachtree Rd”、
        “City”:“亚特兰大”、
        “StateProvince”:“GA”、
        “PostalCode”:“30326”、
        “Country”:“美国”
         } 
    }
]
登录后复制

现在将这些文档推送到语义搜索索引。

try:
    result = search_client.upload_documents(documents=documents)
    print("Upload of new document succeeded: {}".format(result[0].succeeded))
except Exception as ex:
    print (ex.message)
登录后复制

与 OpenAI 集成

让我们建立与 OpenAI 的连接:

question="What is the address of ChatGpt Hotel?"
登录后复制

然后,添加 Azure OpenAI 连接:

###
import os
import requests
import json
import openai
os.environ["AZURE_OPENAI_KEY"] = "xxxx"
os.environ["AZURE_OPENAI_ENDPOINT"] = "xxxx"
openai.api_key = os.getenv("AZURE_OPENAI_KEY")
openai.api_base = os.getenv("AZURE_OPENAI_ENDPOINT")
openai.api_type = 'azure'
openai.api_version = '2023-05-15'
# 在 Azure OpenAI Studio > 部署中查找
deployment_name = 'gpt-35-turbo'
###
# 定义一个函数,根据系统消息和消息创建提示
def create_prompt(system_message, messages):
    prompt = system_message
    message_template = "\n<|im_start|>{}\n{}\n<|im_end|>"
    for message in messages:
        prompt += message_template.format(message[&#39;sender&#39;], message[&#39;text&#39;])
    prompt += "\n<|im_start|>assistant\n"
    return prompt
# 定义系统消息
system_message_template = "<|im_start|>system\n{}\n<|im_end|>"
system_message = system_message_template.format("")
print(system_message)
登录后复制

此时,您可以使用语义搜索和 Azure OpenAI。我们来查询语义搜索:

import json
results =  search_client.search(search_text=question, include_total_count=True, select=&#39;HotelId,HotelName,Tags,Address&#39;)=  search_client.search(search_text=question, include_total_count=True, select=&#39;HotelId,HotelName,Tags,Address&#39;)
json_results=""
print (&#39;Total Documents Matching Query:&#39;, results.get_count())
for result in results:
    #print("{}: {}: {}".format(result["HotelId"], result["HotelName"], result["Tags"],results["Address"]))
    json_results+=str(result)
print(json_results)
登录后复制

有了搜索结果,我们现在可以利用 Azure OpenAI 来解释或进一步处理结果。

# 创建消息列表来跟踪对话
messages = [{"sender": "user", "text": "Hello, take into account the following information "+json_results},
            {"sender": "user", "text": question},
            ]
response = openai.Completion.create(
  engine=deployment_name,
  prompt= create_prompt(system_message, messages),
  temperature=0.7,
  max_tokens=800,
  top_p=0.95,
  frequency_penalty=0,
  presence_penalty=0,
    stop=["<|im_end|>"])
print(response)
登录后复制

此代码向 OpenAI 模型提示搜索结果和我们的原始问题,使其能够根据数据处理并提供有意义的信息。

结论

在本文中,我们了解了如何将 Azure 语义搜索的强大功能与 OpenAI 的功能相结合。通过集成这两个强大的工具,我们可以在我们的应用程序中为用户提供丰富的智能搜索结果。

以上是利用Azure语义搜索与OpenAI,打造认知搜索系统的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

错误代码 801c03ed:如何在 Windows 11 上修复它 错误代码 801c03ed:如何在 Windows 11 上修复它 Oct 04, 2023 pm 06:05 PM

错误801c03ed通常附带以下消息:管理员策略不允许此用户加入设备。此错误消息将阻止你安装Windows并加入网络,从而阻止你使用电脑,因此尽快解决此问题非常重要。什么是错误代码801c03ed?这是一个Windows安装错误,由于以下原因而发生:Azure设置不允许新用户加入。Azure上未启用设备对象。Azure面板中的硬件哈希出现故障。如何修复Windows801上的错误代码03c11ed?1.检查Intune设置登录到Azure门户。导航到“设备”,然后选择“设备设置”。将“用户可以将

openal是什么 openal是什么 Aug 21, 2023 pm 04:16 PM

OpenAL是一种开放的跨平台音频库,用于处理3D音频和多声道音频的播放和混音,它由Creative Labs开发,最初用于游戏开发,但现在已经广泛应用于多媒体应用程序、虚拟现实、增强现实和音频编辑等领域。OpenAL为开发人员提供了控制音频效果的API,可用于游戏、多媒体应用和其他音频相关的软件开发。

利用Azure语义搜索与OpenAI,打造认知搜索系统 利用Azure语义搜索与OpenAI,打造认知搜索系统 Oct 12, 2023 am 10:18 AM

旨在简化文档搜索,多种服务和平台的结合都是获得无与伦比性能的关键。在本文中,我们将探索一种将 Azure 认知服务的强大功能与 OpenAI 的功能相结合的整体方法。通过深入研究意图识别、文档过滤、特定领域的算法和文本摘要,您将学习创建一个不仅可以理解用户意图而且可以有效处理和呈现信息的系统。

微软 Azure OpenAI 服务现已支持 GPT-4 Turbo with Vision 微软 Azure OpenAI 服务现已支持 GPT-4 Turbo with Vision Dec 18, 2023 am 08:18 AM

本站12月17日消息,AzureOpenAI服务提供对OpenAI强大语言模型的RESTAPI访问,这些模型包括GPT-4、GPT-3.5-Turbo和嵌入模型系列。微软宣布进一步加强AzureOpenAI服务的功能,并为客户提供了最新的GPT-4TurbowithVision的公开预览版本这个先进的多模态AI模型继承了GPT-4Turbo的所有强大功能,并且还加入了图像处理和分析的能力。这样一来,我们就有了利用GPT-4处理更多任务的机会,比如改进无障碍辅助功能、解释和分析可视化数据,以及进行

微软 Azure 将从 10 月开始推行强制性多因素身份验证功能 微软 Azure 将从 10 月开始推行强制性多因素身份验证功能 Aug 17, 2024 am 07:40 AM

本站8月16日消息,微软昨日发布了一条公告,宣布将从10月开始强制实施多因素身份验证(MFA)功能,以帮助降低账户被入侵的可能性。微软表示,MFA可以阻止99.2%以上的此类账户入侵攻击,因此该措施是强制性的。据介绍,这一过程将分为两个阶段逐步实施,本站总结如下:第1阶段:从10月开始,登录Azure门户、MicrosoftEntra管理中心和Intune管理中心都将需要MFA,但不会影响其他Azure客户端。第2阶段:从2025年初开始,MFA要求将逐步拓展到其他Azure客户端,例如Azur

openal有什么用 openal有什么用 Aug 21, 2023 pm 04:30 PM

openal的作用有3D音效、多声道音频、音频空间定位、音频格式支持、音频效果处理、跨平台支持等功能。详细介绍:1、3D音效,OpenAL可以模拟真实的3D音效,通过控制音频的位置、方向、距离和音量等参数,使得听众可以感受到音频来自不同方向和距离;2、多声道音频,OpenAL支持多声道音频的播放和混音,可以同时播放多个声音源,并对它们进行混音处理;3、音频空间定位等等。

如何利用React和Microsoft Azure构建可靠的云端应用 如何利用React和Microsoft Azure构建可靠的云端应用 Sep 26, 2023 am 11:01 AM

如何利用React和MicrosoftAzure构建可靠的云端应用随着云计算的发展,越来越多的应用程序开始迁移到云端。在这个过程中,选择一种可靠、高效的开发框架是非常重要的。React作为一种流行的前端框架,具有高效的组件化开发和虚拟DOM更新等特性,而MicrosoftAzure则是一种灵活的云服务平台,提供了强大的计算、存储和部署等能力。本文将介绍如

Azure 翻译器现在可以扫描和翻译 PDF 文档 Azure 翻译器现在可以扫描和翻译 PDF 文档 May 14, 2023 pm 08:13 PM

微软 已宣布AzureTranslator中内置的文档翻译功能现在可以扫描和翻译PDF文档。该公司表示,用户在尝试翻译文档之前不再需要通过OCR引擎对文档进行预处理。文档翻译功能于一年前首次推出,能够一次将多个文档翻译成110多种语言和方言。今天的更新意味着现在完全支持PDF文件以及Word和PowerPoint文件。据该公司称,能够扫描带有扫描图像内容的PDF是非常需要的。解释一些功能,微软说过:文件翻译服务现在拥有智能识别PDF文档是否包含扫描的图像内容,

See all articles