目錄
設定 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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++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

微軟在應對3.47 Tbps DDoS攻擊中創下防禦紀錄 微軟在應對3.47 Tbps DDoS攻擊中創下防禦紀錄 Apr 22, 2023 am 08:52 AM

微軟去年11月,它緩解了3.47TbpsDDoS(分散式阻斷服務)攻擊,無意中創造了新記錄。在一篇部落格文章中,這家Redmond巨頭分享了2021年第三季的AzureDDoS保護資料。該公司指出,2021年下半年DDoS攻擊數量增加。由於攻擊服務價格低廉,DDoS是任何人都可以使用的流行攻擊方法。 2021年下半年,微軟平均每天緩解1,955次攻擊,比上半年增加40%。然而,與2021年8月10日緩解的4,296次攻擊相比,這相形見絀。總體而言,

Windows Server VNext Preview 內部版 25099 現已推出 Windows Server VNext Preview 內部版 25099 現已推出 Apr 14, 2023 pm 01:55 PM

微軟已發布 Windows Server Insider Preview 的新版本。本週的 build 25099 現在可以從Windows Server Insider 網站下載 ISO和 VHDX,但按照慣例,沒有完整的變更日誌可言,因此不清楚有什麼新內容。微軟再次表示品牌尚未更新,在預覽版中仍為 Windows Server 2022。此外,微軟鼓勵內部人員在Azure

Azure 翻譯機現在可以掃描和翻譯 PDF 文檔 Azure 翻譯機現在可以掃描和翻譯 PDF 文檔 May 14, 2023 pm 08:13 PM

微軟 已宣布AzureTranslator中內建的文件翻譯功能現在可以掃描和翻譯PDF文件。該公司表示,用戶在嘗試翻譯文件之前不再需要透過OCR引擎對文件進行預處理。文件翻譯功能於一年前首次推出,能夠一次將多個文件翻譯成110多種語言和方言。今天的更新意味著現在完全支援PDF文件以及Word和PowerPoint文件。據該公司稱,能夠掃描帶有掃描影像內容的PDF是非常需要的。解釋一些功能,微軟說:文件翻譯服務現在擁有智慧辨識PDF文件是否包含掃描的影像內容,

See all articles