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

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

我们将构建这个:

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

设置环境

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

  1. !pip show azure-search-documents%pip install azure-search-documents --pre%pip show azure-search-documents!pip install python-dotenv!pip install openaiimport osimport requestsimport jsonimport openaiopenai.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 > Deploymentsdeployment_name = 'gpt-35-turbo'

登录后复制

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

设置 Azure 搜索

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

  1. import osfrom azure.core.credentials import AzureKeyCredentialfrom azure.search.documents.indexes import SearchIndexClientfrom azure.search.documents import SearchClientfrom azure.search.documents.indexes.models import (    ComplexField,    CorsOptions,    SearchIndex,    ScoringProfile,    SearchFieldDataType,    SimpleField,    SearchableField)

登录后复制

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

  1. # 从环境中设置服务端点和 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 搜索之前,我们需要定义一个描述数据结构的索引:

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

登录后复制

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

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

  1. # 指定索引模式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 上创建此索引:

  1. 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 存储中的文档:

  1. 文档 = [     {     "@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”:“美国”         }     }]

登录后复制

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

  1. 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 的连接:

  1. question="What is the address of ChatGpt Hotel?"

登录后复制

然后,添加 Azure OpenAI 连接:

  1. ###import osimport requestsimport jsonimport openaios.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 = "{}{}"    for message in messages:        prompt += message_template.format(message['sender'], message['text'])    prompt += "assistant"    return prompt# 定义系统消息system_message_template = "system{}"system_message = system_message_template.format("")print(system_message)

登录后复制

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

  1. import jsonresults =  search_client.search(search_text=question, include_total_count=True, select='HotelId,HotelName,Tags,Address')=  search_client.search(search_text=question, include_total_count=True, select='HotelId,HotelName,Tags,Address')json_results=""print ('Total Documents Matching Query:', 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 来解释或进一步处理结果。

  1. # 创建消息列表来跟踪对话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=[""])print(response)

登录后复制

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

结论

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

以上就是利用Azure语义搜索与OpenAI,打造认知搜索系统的详细内容,更多请关注【创想鸟】其它相关文章!

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

掌握人工智能的必备知识

2025-2-18 3:57:34

AI智能

百度王颖:百度文库每周上线2-3个AI新功能,累计使用次数近亿

2025-2-18 3:57:40

0 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
私信列表
搜索