搜尋
首頁科技週邊人工智慧利用Azure語意搜尋與OpenAI,打造認知搜尋系統

在當今的數位時代,擁有強大、可擴展且高效的系統不僅僅是一種競爭優勢,更是一種競爭優勢。這是必要的。無論您是努力優化用戶輸入處理旨在簡化文件搜索,多種服務和平台的結合都是獲得無與倫比性能的關鍵。在本文中,我們將探索一種將 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中文網其他相關文章!

陳述
本文轉載於:Dr. Ernesto Lee。如有侵權,請聯絡admin@php.cn刪除
最新的最佳及時工程技術的年度彙編最新的最佳及時工程技術的年度彙編Apr 10, 2025 am 11:22 AM

對於那些可能是我專欄新手的人,我廣泛探討了AI的最新進展,包括體現AI,AI推理,AI中的高科技突破,及時的工程,AI培訓,AI,AI RE RE等主題

歐洲的AI大陸行動計劃:Gigafactories,Data Labs和Green AI歐洲的AI大陸行動計劃:Gigafactories,Data Labs和Green AIApr 10, 2025 am 11:21 AM

歐洲雄心勃勃的AI大陸行動計劃旨在將歐盟確立為人工智能的全球領導者。 一個關鍵要素是建立了AI Gigafactories網絡,每個網絡都有大約100,000個高級AI芯片 - 2倍的自動化合物的四倍

微軟的直接代理商故事是否足以創造更多的粉絲?微軟的直接代理商故事是否足以創造更多的粉絲?Apr 10, 2025 am 11:20 AM

微軟對AI代理申請的統一方法:企業的明顯勝利 微軟最近公告的新AI代理能力清晰而統一的演講給人留下了深刻的印象。 與許多技術公告陷入困境不同

向員工出售AI策略:Shopify首席執行官的宣言向員工出售AI策略:Shopify首席執行官的宣言Apr 10, 2025 am 11:19 AM

Shopify首席執行官TobiLütke最近的備忘錄大膽地宣布AI對每位員工的基本期望是公司內部的重大文化轉變。 這不是短暫的趨勢。這是整合到P中的新操作範式

IBM啟動具有完整AI集成的Z17大型機IBM啟動具有完整AI集成的Z17大型機Apr 10, 2025 am 11:18 AM

IBM的Z17大型機:集成AI用於增強業務運營 上個月,在IBM的紐約總部,我收到了Z17功能的預覽。 以Z16的成功為基礎(於2022年推出並證明持續的收入增長

5 Chatgpt提示取決於別人並完全相信自己5 Chatgpt提示取決於別人並完全相信自己Apr 10, 2025 am 11:17 AM

解鎖不可動搖的信心,消除了對外部驗證的需求! 這五個CHATGPT提示將指導您完全自力更生和自我感知的變革轉變。 只需複制,粘貼和自定義包圍

AI與您的思想危險相似AI與您的思想危險相似Apr 10, 2025 am 11:16 AM

人工智能安全與研究公司 Anthropic 最近的一項[研究]開始揭示這些複雜過程的真相,展現出一種令人不安地與我們自身認知領域相似的複雜性。自然智能和人工智能可能比我們想像的更相似。 窺探內部:Anthropic 可解釋性研究 Anthropic 進行的研究的新發現代表了機制可解釋性領域的重大進展,該領域旨在反向工程 AI 的內部計算——不僅僅觀察 AI 做了什麼,而是理解它在人工神經元層面如何做到這一點。 想像一下,試圖通過繪製當有人看到特定物體或思考特定想法時哪些神經元會放電來理解大腦。 A

龍翼展示高通的邊緣動力龍翼展示高通的邊緣動力Apr 10, 2025 am 11:14 AM

高通的龍翼:企業和基礎設施的戰略飛躍 高通公司通過其新的Dragonwing品牌在全球範圍內積極擴展其範圍,以全球為目標。 這不僅僅是雷布蘭

See all articles

熱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.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用