Azure OpenAI服務大揭秘:如何實現檢索增強生成(RAG)?
檢索增強生成(RAG)這玩意兒,說白了就是把搜索引擎的 “找資料” 能力和大語言模型(LLM)的 “寫答案” 能力捏到一塊兒,讓 AI 能基于你公司自己的數據,給出有依據、貼需求還靠譜的回答 —— 再也不用怕 AI 瞎編 “幻覺答案” 啦!
圖片
Azure OpenAI 服務對企業特別友好,能輕松把 RAG 架構塞進安全又能上生產環境的解決方案里。本文就手把手教你用 Azure OpenAI、Azure AI 搜索和 Python 實現 RAG,讓你的 AI 應用能從自家數據集里撈出準確、懂上下文還可信的答案,小白也能跟著走!
1.啥是檢索增強生成(RAG)?
RAG 是個 AI 設計模式,簡單說就是 “搜索 + 生成” 雙 buff 疊加 —— 一邊是搜索引擎(負責 “找資料” 的檢索器),一邊是能生成內容的大模型(比如 GPT-4 這種 “寫答案” 的生成器)。
以前大模型答題全靠 “腦子記”,現在有了 RAG,它會先從知識庫裡撈出相關文檔,再把這些信息塞進給大模型的提示詞里。這樣一來,答案既有依據、夠新鮮,還靠譜不瞎編,對那些有自家數據或受監管數據的企業來說,簡直是救星!
2.前置條件 & 架構總覽
開始前先確認下,你得有這些 “裝備”:
- 一個 Azure 訂閱,而且得開了 Azure OpenAI 和 Azure 認知搜索功能
- 稍微懂點 Azure 門戶和 Python(不用太精通,能看懂基礎代碼就行)
- 不用在本地裝軟件!所有步驟都用 Azure Cloud Shell,省得你折騰環境
架構總覽
- 用戶發起提問:你敲下問題(比如 “倫敦的景點有啥?”),這是整個流程的 “啟動鍵”。
- Python 應用:中轉站本站相當于 “快遞員”—— 先接住你的問題,再轉頭去叫 “搜索小哥” 幫忙找資料,不自己瞎處理。
- Azure AI 搜索:資料挖掘機早就把你存在 Blob 存儲里的 PDF 建好了 “目錄索引”(比如哪個 PDF 講了紐約酒店、哪個講了倫敦景點),接到指令就快速挖出匹配的資料片段,絕不瞎翻。
- 匹配到相關文檔片段:比如你問紐約酒店,它就把 PDF 里所有提 “紐約酒店” 的段落都摘出來,打包好等著給大模型。
- Azure OpenAI 服務:答案加工廠拿著 “搜索挖來的資料” 和 “你的問題”,先讀懂資料里說啥,再結合問題邏輯,寫一個不脫離資料、不瞎編的答案(比純靠模型 “記東西” 靠譜多了)。
- 生成帶依據的回答:答案里不光有內容,還會標清楚 “這段信息來自哪個 PDF”,相當于給答案加了 “身份證”,你能查到源頭。
- 用戶拿到標準答案:最后你看到的,就是一個 “有根有據、不瞎吹” 的回答 —— 再也不用懷疑 “這 AI 是不是編的?”
3.搭好 Azure 環境 —— 用 Cloud Shell 部署 Azure 資源
Azure Cloud Shell 是個瀏覽器里就能用的 shell 環境,Azure CLI 和 Python 都預裝好了,不用在本地裝依賴,還永遠是最新版,簡直是 “懶人福音”。
先在 Azure 門戶頂欄找到 Cloud Shell 圖標(長得像 [>_]),點一下打開。
a. 創建資源組
復制下面這行命令粘進去運行,創建個資源組(相當于給你的資源建個 “文件夾”):
az group create --name my-rag-rg --location eastusb. 部署 Azure OpenAI
再跑下面這段命令,把 Azure OpenAI 服務部署好:
az cognitiveservices account create \
--name my-rag-openai \
--resource-group my-rag-rg \
--kind OpenAI \
--sku S0 \
--location eastus \
--yes跑完之后,去 AI Foundry 門戶的 “部署” 頁面,把你想用的模型(比如 GPT-4)部署好 —— 這步別忘,不然后面沒法用!
4.在 AI Foundry 里連數據 ——Chat Playground 操作
a. 創建 Azure 存儲賬戶
- 在 Azure 門戶里搜 “存儲賬戶”,點 “+ 創建”,然后按下面的填:
- 資源組:比如填 openai-lab(跟之前的對應上)
- 存儲賬戶名稱:比如 storage1(得是全球唯一的,別跟別人重名)
- 區域:選你順手的(比如離你近的)
- 主要服務:選 Azure Blob 存儲或 Azure Data Lake Gen2(都行,Blob 更常用)
- 冗余:選本地冗余存儲(LRS)就行,夠用還省錢
- 高級選項里:把 “允許對單個容器啟用匿名訪問” 勾上
- 填完點 “查看 + 創建”,再點 “創建”—— 等它部署完就好。
b. 建 Blob 容器并上傳文件
- 進你剛建的存儲賬戶,找 “數據存儲” 下面的 “容器”,點 “+ 添加容器”
- 名稱:填 openaidatasource(別瞎改,后面要對應)
- 匿名訪問級別:選 “啟用”
- 點 “創建”
- 進這個容器,點 “上傳”,然后去下面這個鏈接里把所有 PDF 都下載下來再上傳:
- 鏈接:https://github.com/MicrosoftLearning/mslearn-openai/tree/main/Labfiles/02-use-own-data/data
- 傳完記得確認下,文件都顯示在容器里了 —— 別漏傳,不然后面搜不到數據!
c. 創建 AI 搜索資源
- 在 Azure 門戶搜 “AI 搜索”,點 “+ 創建”
- 按下面填:
- 資源組:還是 openai-lab(保持統一)
- 服務名稱:比如 ai-search-xxxx(xxxx 換成隨機數,避免重名)
- 區域:跟存儲賬戶選同一個(速度快)
- 定價層:選 “基礎版”(新手夠用,不費錢)
- 點 “部署”,部署完點 “轉到資源”
- 找 “設置” 下面的 “密鑰”,把 “服務 URL” 和 “主密鑰 / 輔助密鑰” 抄下來 —— 后面配置要用,別弄丟了!
d. 在 Azure AI Foundry 里加數據源
- 進 AI Foundry 門戶,去 “Chat Playground”(聊天 playground),點 “添加你的數據”
- 點 “+ 添加數據源”,然后填:
- 數據源:選 “Azure Blob 存儲(預覽版)”
- Blob 存儲資源:選你剛建的存儲賬戶
- 存儲容器:選 openaidatasource(就是剛才傳文件的那個)
- AI 搜索資源:選你剛建的搜索服務
- 索引名稱:填 margiestravel(別改,后面代碼要對應)
- 索引器計劃:選 “一次”(先跑通再說,后面要更新數據再改)
- 搜索類型:選 “關鍵字”
- 身份驗證:選 “API 密鑰”
- 點 “保存并關閉”
等索引建完(可能要等一會兒),確認 “助手設置” 面板里能看到這個新數據源 —— 建完才能繼續哦!
5.在 Azure Cloud Shell 里搭應用
接下來咱們要做個命令行應用,用代碼實現 RAG 功能 —— 其實不難,跟著抄就行。
a. 打開 Azure Cloud Shell
再回到 Azure 門戶頂欄,點 [>_] 打開 Cloud Shell,確認一下是 Bash 模式(不是 PowerShell,不然命令可能不好使)。
b. 克隆實驗代碼倉庫
復制下面的命令,粘到 Cloud Shell 里運行,把代碼倉庫拉下來:
git clone https://github.com/microsoftlearning/mslearn-openai mslearn-openai
cd mslearn-openai/Labfiles/02-use-own-data/Python這步是把別人寫好的基礎代碼拿過來,省得你自己從零寫 —— 咱主打一個 “高效”!
c. 打開代碼編輯器
運行下面這行命令,打開內置的代碼編輯器:
code .這樣就能編輯后面要改的配置文件和代碼了,界面跟 VS Code 差不多,上手很容易。
6.配置你的應用
a. 編輯 .env 配置文件
在編輯器左邊的文件列表里,找到 Python 文件夾下的 .env 文件,雙擊打開
把你之前抄下來的那些信息填進去(沒抄的話回去找對應的資源拿):
AZURE_OPENAI_ENDPOINT=https://<your-openai-resource>.openai.azure.com/
AZURE_OPENAI_KEY=<your-openai-key>
AZURE_OPENAI_DEPLOYMENT=my-gpt-model
AZURE_SEARCH_ENDPOINT=https://<your-search-service>.search.windows.net
AZURE_SEARCH_KEY=<your-ai-search-key>
AZURE_SEARCH_INDEX=margiestravel填完記得按 Ctrl+S 保存 —— 別光改不存,不然白費勁!
b. 安裝依賴包
在 Cloud Shell 里運行下面這些命令,把需要的 Python 包裝上:
pip install --user python-dotenv
pip install --user openai==1.65.2
pip install --user openai requests python-dotenv這里指定了 openai 版本是 1.65.2,是為了避免新版本兼容性問題 —— 咱先保證能跑通,后面再折騰升級。
c. 瞅一眼應用核心邏輯
在編輯器里打開 ownData.py 文件,這是應用的核心代碼,咱們先大概看一下(不用全懂,知道它干了啥就行):
import os
import openai
import dotenv
# Flag to show citations
showCitations = False
dotenv.load_dotenv()
endpoint = os.environ.get("AZURE_OAI_ENDPOINT")
api_key = os.environ.get("AZURE_OAI_KEY")
deployment = os.environ.get("AZURE_OAI_DEPLOYMENT")
client = openai.AzureOpenAI(
azure_endpoint=endpoint,
api_key=api_key,
api_versinotallow="2024-02-01",
)
# Configure your data source
text = input('\nEnter a question:\n')
completion = client.chat.completions.create(
model=deployment,
messages=[
{
"role": "user",
"content": text,
},
],
extra_body={
"data_sources": [
{
"type": "azure_search",
"parameters": {
"endpoint": os.environ["AZURE_SEARCH_ENDPOINT"],
"index_name": os.environ["AZURE_SEARCH_INDEX"],
"authentication": {
"type": "api_key",
"key": os.environ["AZURE_SEARCH_KEY"],
}
}
}
],
}
)
print(completion.choices[0].message.content)
if showCitations:
print(f"\n{completion.choices[0].message.context}")簡單說,這代碼就是 “拿用戶問題 → 連 AI 搜索找相關 PDF → 讓 OpenAI 基于這些 PDF 寫答案 → 把答案給用戶”,邏輯很直白吧!
7.跑起應用,看 RAG 秀操作
a. 在 Cloud Shell 里運行 Python 應用
在 Cloud Shell 里敲下面這行命令,啟動應用:
python ownData.py等它提示你輸入問題時,就問點跟你上傳的 PDF 相關的,比如 “講講倫敦唄” 或者 “紐約最好的酒店有哪些?”
然后就等著看 —— 應用會調用 Azure OpenAI,結合你傳的 PDF 里的內容(通過 Azure AI 搜索找到的)給出答案,有時候還會把參考的數據源標出來,再也不是 AI 瞎編的 “空中樓閣” 了!
要是遇到報錯,先試試跑下面這行命令升級 openai 包,大概率能解決:
pip install --user --upgrade openai8.總結 & 最佳實踐
恭喜你!你已經在 Azure 上從頭到尾實現了 RAG,還用了自己的數據 —— 咱來復盤下干了啥:
用 Cloud Shell 部署了 Azure 資源(省得手動點半天)
把 PDF 傳到 Blob 存儲,還用 AI 搜索給它們建了索引(好找數據)
在 Chat Playground 里把數據連到 Azure OpenAI,試了 RAG 功能
在 Cloud Shell 里配置并運行了 Python 應用,讓 AI 基于你的數據答題
最佳實踐(劃重點!)
- 想讓答案準,文檔得 “給力”:用清晰、最新、結構規整的文檔(別傳一堆亂七八糟的掃描件)
- 安全第一:密鑰和存儲賬戶一定要鎖好,別隨便泄露(不然數據可能被人偷)
- 數據要 “保鮮”:信息變了就更新文檔,重新建索引(不然 AI 還拿舊數據答題,就鬧笑話了)
- 跟用戶說清楚:告訴用戶 “這個回答是基于公司內部數據的”,讓大家心里有底





































