適用於:所有 APIM 層
啟用對 LLM API 請求回應的語意快取,以減少後端 API 施加的頻寬和處理需求,並降低 API 取用者感知到的延遲。 使用語意快取,您可以針對相同提示以及意義相似的提示傳回快取回應,即使文字不相同。 如需背景,請參閱 教學課程:使用 Azure 受控 Redis 作為語意快取。
附註
本文的設定步驟展示了如何在 Microsoft Foundry 模型中啟用 Azure OpenAI 加入 API 管理的 API 語意快取。 您可以套用類似步驟,以針對透過 Azure AI 模型推斷 API 或透過第三方推斷提供者提供的 OpenAI 相容模型,啟用對應大型語言模型 (LLM) API 的語意快取。
先決條件
在 Microsoft Foundry 模型部署將一或多個 Azure OpenAI 當作 API 加入 API 管理執行個體。 如需詳細資訊,請參閱 將 Azure OpenAI API 新增至 Azure API 管理。
建立下列 API 的部署:
- 聊天完成 API - 用於 API 取用者呼叫的部署
- 內嵌 API - 用於語意快取的部署
設定 API 管理 執行個體,以對 Azure OpenAI API 使用受控識別驗證。 如需詳細資訊,請參閱使用 Azure API 管理對 Azure OpenAI API 的存取進行驗證和授權。
已在 Redis 快取上啟用 RediSearch 模組的 Azure Managed Redis 執行個體。
附註
您只能在建立新的 Azure 受控 Redis 快取時啟用 RediSearch 模組。 您無法將模組新增至現有的快取。 深入了解
將 Azure 受控 Redis 執行個體設定為 Azure API 管理 執行個體中的外部快取。 如需步驟,請參閱在 Azure API 管理中使用與 Redis 相容的外部快取。
測試聊天 API 部署
首先,測試 Azure OpenAI 部署,以確保聊天完成 API 或聊天 API 如預期般運作。 如需相關步驟,請參閱將 Azure OpenAI API 匯入至 Azure API 管理。
例如,使用要求本文中的提示,將 POST 要求傳送至 API 端點,以測試 Azure OpenAI 聊天 API。 回應應該包含完成提示。 要求範例︰
POST https://my-api-management.azure-api.net/my-api/openai/deployments/chat-deployment/chat/completions?api-version=2024-02-01
使用要求本文:
{"messages":[{"role":"user","content":"Hello"}]}
當要求成功時,回應會包含完成聊天訊息。
建立內嵌 API 的後端
使用下列設定建立內嵌 API 部署的 後端 資源:
名稱 - 您選擇的名稱,例如 embeddings-backend。 您可使用此名稱來參考原則中的後端。
類型:選取 [自訂 URL]。
執行階段 URL - Azure OpenAI 中內嵌 API 部署的 URL,類似於:
https://my-aoai.openai.azure.com/openai/deployments/embeddings-deployment/embeddings(不含查詢參數)。授權認證 - 移至 [受控識別] 索引標籤 。
- 用戶端身分識別 - 選取 [ 系統指派的身分識別 ],或輸入使用者指派的受控識別用戶端識別碼。
-
資源識別碼 - 輸入
https://cognitiveservices.azure.com/表示 Azure OpenAI。
測試嵌入後端
若要測試內嵌後端,請為您的 Azure OpenAI API 建立 API 作業:
- 在 API 的 [設計] 索引標籤上,選取 [+ 新增作業]。
- 輸入 [顯示名稱 ] (例如 [內嵌] ),並選擇性地輸入作業的 [名稱 ]。
- 在 [前端] 區段的 [URL] 中,選取 [POST],然後輸入路徑
/。 - 在 [標頭] 索引標籤上,新增名稱為
Content-Type和值為application/json的必要標頭。 - 選取 [儲存]。
在 API 作業 [輸入處理] 區段中設定下列原則。 在 set-backend-service 原則中,替代您建立的後端名稱。
<policies>
<inbound>
<set-backend-service backend-id="embeddings-backend" />
<authentication-managed-identity resource="https://cognitiveservices.azure.com/" />
[...]
</inbound>
[...]
</policies>
在 [測試] 索引標籤上,新增具有 api-version 等值的 2024-02-01 查詢參數來測試作業。 提供有效的要求本文。 例如:
{"input":"Hello"}
如果請求成功,回應會包含輸入文字的向量表示法。 範例回應:
{
"object": "list",
"data": [{
"object": "embedding",
"index": 0,
"embedding": [
-0.021829502,
-0.007157768,
-0.028619017,
[...]
]
}]
}
設定語意快取原則
若要在 Azure API 管理中啟用 Azure OpenAI API 的語意快取,請套用下列原則:一個用來在傳送要求之前檢查快取 (查詢),另一個用來儲存回應以供未來重複使用 (儲存):
在 API 的 [輸入處理] 區段中,新增 azure-openai-semantic-cache-lookup 原則。 在
embeddings-backend-id屬性中,指定您建立的內嵌 API 後端。附註
為其他大型語言模型 API 啟用語意快取時,請改用 llm-semantic-cache-lookup 原則。
範例:
<azure-openai-semantic-cache-lookup score-threshold="0.15" embeddings-backend-id="embeddings-backend" embeddings-backend-auth="system-assigned" ignore-system-messages="true" max-message-count="10"> <vary-by>@(context.Subscription.Id)</vary-by> </azure-openai-semantic-cache-lookup> <rate-limit calls="10" renewal-period="60" />在 API 的 [輸出處理] 區段中,新增 azure-openai-semantic-cache-store 原則。
附註
為其他大型語言模型 API 啟用語意快取時,請改用 llm-semantic-cache-store 原則。
範例:
<azure-openai-semantic-cache-store duration="60" />
確認快取
要確認語意快取是否正常運作,請使用入口網站中的測試主控台追蹤測試的 Completion 或 Chat Completion 作業。 檢查追蹤紀錄,確認是否在後續嘗試中使用快取。 深入了解在 Azure API 管理中追蹤 API 呼叫。
調整查詢原則中的 score-threshold 屬性,以控制輸入提示與快取提示之間必須多接近,才能傳回已儲存的回應。 較低的分數閾值表示提示必須具有較高的語意相似性,才能傳回快取的回應。 分數高於閾值的提示將不會使用快取的回應。
例如,如果使用快取,則 輸出 區段會包含類似下列螢幕擷取畫面的項目:
相關內容
- 快取原則
- Azure 託管 Redis
- Azure API 管理中的 AI 閘道功能