啟用流程部署的追蹤和收集意見反應
重要
本文中標示為 (預覽) 的項目目前處於公開預覽狀態。 此預覽版本沒有服務等級協定,不建議將其用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款。
在生產中部署生成式 AI 應用程式之後,您可能會想要增強瞭解並最佳化效能。 追蹤每個要求、匯總計量和用戶意見反應的資料扮演重要角色。
在本文中,您將瞭解如何啟用追蹤、收集彙總的計量,以及在流程部署的推斷時間收集使用者意見反應。
注意
如需執行已部署應用程式持續監視(非提示流程)的改良方式,請考慮使用 Azure AI 在線評估。
必要條件
- Azure CLI 和適用於 Azure CLI 的 Azure Machine Learning 延伸模組。
- Azure AI Foundry 專案。 若您還沒有專案,您可以在此建立一個專案。
- Application Insights。 如果您還沒有可以使用的 Application Insights 資源,請在此建立一個資源。
- Azure 角色型存取控制可用來授予 Azure Machine Learning 作業的存取權。 若要執行本文中的步驟,您必須在所選資源群組中有所有人或參與者權限。 如需詳細資訊,請參閱 Azure AI Foundry 入口網站中的角色型訪問控制。
部署流程以進行即時推斷
測試適當流程後;彈性流程或 DAG 流程,您可在生產時部署流程。 在本文中,我們使用 部署流程以進行即時推斷 作為範例。 若為彈性流程,您需要 準備 flow.flex.yaml
檔案而非 flow.dag.yaml
。
您也可 部署其他平台,例如 Docker 容器、Kubernetes 叢集以上。
注意
由於您需要使用最新提示流程部署流量,因此這會支援追蹤和反應意見集合 API。
啟用追蹤和收集部署系統計量
如果您使用 Azure AI Foundry 入口網站進行部署,則可以在部署精靈的 [進階設定>部署] 步驟中開啟 Application Insights 診斷,以這種方式將追蹤數據和系統計量收集到連結至 Application Insights 的專案。
若您正在使用 SDK 和 CLI,您可在部署 yaml 檔案中新增將資料收集至連結至 Application Insights 專案的屬性 app_insights_enabled: true
。
app_insights_enabled: true
您也可透過部署 yaml 檔案中的環境變數 APPLICATIONINSIGHTS_CONNECTION_STRING
指定其他 Application Insights,方式如下, 您可以在 Azure 入口網站中的概觀頁面尋找 Application Insights 的連接字串。
environment_variables:
APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
注意
若您僅設定 app_insights_enabled: true
但您的專案沒有連結 Application Insights 資源,則您的部署不會失敗,但是將不會收集資料。
若您同時指定 app_insights_enabled: true
和上述環境變數,追蹤資料和計量將傳送至連結至 Application Insights 的專案。 因此,若您想要指定不同 Application Insights,則僅需要保留環境變數。
若您部署至其他平台,則也可使用環境變數 APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
收集指定 Application Insights 追蹤資料和計量。
在 Application Insights 中檢視資料
在執行期間追蹤記錄特定事件或應用程式狀態。 這可包含函式呼叫、變數值、系統事件等更多相關資料。 追蹤協助將應用程式元件細分為不同輸入和輸出,對除錯和瞭解應用程式相當重要。 您可以在這裡深入瞭解追蹤。 追蹤資料遵守 OpenTelemetry 規格。
您可在指定 Application Insights 中檢視詳細追蹤。 下列螢幕擷取畫面顯示包含多個節點部署流程事件的範例。 Application Insights - > 調查 -> 交易搜尋,且您可選擇每個節點來檢視其詳細追蹤。
相依性類型事件記錄部署的呼叫。 該事件名稱是流程資料夾的名稱。 深入瞭解在 Application Insights 交易搜尋和診斷。
在 Application Insights 中檢視系統計量
計量名稱 | 類型 | 維度 | 描述 |
---|---|---|---|
token_consumption | 計數器 | - flow - node - llm_engine - token_type: prompt_tokens :LLM API 輸入權杖;completion_tokens :LLM API 回應權杖;total_tokens = prompt_tokens + completion tokens |
OpenAI 權杖取用計量 |
flow_latency | 長條圖 | flow,response_code,streaming,response_type | 要求執行成本,response_type 表示其是否為 full/firstbyte/lastbyte |
flow_request | 計數器 | flow,response_code,exception,streaming | 流程要求計數 |
node_latency | 長條圖 | flow,node,run_status | 節點執行成本 |
node_request | 計數器 | flow,node,exception,run_status | 節點執行計數 |
rpc_latency | 長條圖 | flow,node,api_call | rpc 成本 |
rpc_request | 計數器 | flow,node,api_call,exception | rpc 計數 |
flow_streaming_response_duration | 長條圖 | 流程 | 串流回應傳送成本,從傳送第一個位元組到傳送最後一個位元組 |
您可以在 Azure 入口網站的工作區概觀頁面中找到工作區預設 Application Insights。
- 開啟 Application Insights,然後從左側導覽列中選取 [使用量和估計成本]。 選取 [自訂計量 (預覽)],然後選取 [使用維度],並儲存變更。
- 選取左側導覽列中的 [計量] 索引標籤。 從 [計量命名空間] 選取 [promptflow 標準計量],即可從 [計量] 下拉式清單中使用不同的彙總方法來探索計量。
收集意見反應並傳送至 Application Insights
提示流程服務提供新的 /feedback
API 來協助客戶收集意見反應,意見反應承載可以是任何 json 格式資料,提示流程服務只會協助客戶將意見反應資料儲存到追蹤範圍。 資料將儲存至已設定的追蹤匯出工具目標客戶。 這也支援 OpenTelemetry 標準追蹤內容傳播,表示將遵守要求標頭中設定的追蹤內容,並使用該內容做為要求父範圍內容。 您可以利用分散式追蹤功能,將意見反應追蹤與其聊天要求追蹤相互關聯。
下列範例程式碼示範如何評分已啟用追蹤的流程受控端點,並將意見反應傳送至評分要求的相同追蹤範圍。 流程具有輸入 question
和 chat_history
,以及輸出 answer
。 為端點評分後,我們會收集意見反應,並傳送至部署流程時指定的 Application Insights。
import urllib.request
import json
import os
import ssl
from opentelemetry import trace, context
from opentelemetry.baggage.propagation import W3CBaggagePropagator
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
from opentelemetry.sdk.trace import TracerProvider
# Initialize your tracer
tracer = trace.get_tracer("my.genai.tracer")
trace.set_tracer_provider(TracerProvider())
# Request data goes here
# The example below assumes JSON formatting which may be updated
# depending on the format your endpoint expects.
data = {
"question": "hello",
"chat_history": []
}
body = str.encode(json.dumps(data))
url = 'https://basic-chat-endpoint-0506.eastus.inference.ml.azure.com/score'
feedback_url = 'https://basic-chat-endpoint-0506.eastus.inference.ml.azure.com/feedback'
# Replace this with the primary/secondary key, AMLToken, or Microsoft Entra ID token for the endpoint
api_key = ''
if not api_key:
raise Exception("A key should be provided to invoke the endpoint")
# The azureml-model-deployment header will force the request to go to a specific deployment.
# Remove this header to have the request observe the endpoint traffic rules
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key), 'azureml-model-deployment': 'basic-chat-deployment' }
try:
with tracer.start_as_current_span('genai-request') as span:
ctx = context.get_current()
TraceContextTextMapPropagator().inject(headers, ctx)
print(headers)
print(ctx)
req = urllib.request.Request(url, body, headers)
response = urllib.request.urlopen(req)
result = response.read()
print(result)
# Now you can process the answer and collect feedback
feedback = "thumbdown" # Example feedback (modify as needed)
# Make another request to save the feedback
feedback_body = str.encode(json.dumps(feedback))
feedback_req = urllib.request.Request(feedback_url, feedback_body, headers)
urllib.request.urlopen(feedback_req)
except urllib.error.HTTPError as error:
print("The request failed with status code: " + str(error.code))
# Print the headers - they include the requert ID and the timestamp, which are useful for debugging the failure
print(error.info())
print(error.read().decode("utf8", 'ignore'))
您可以在 Application Insights 中檢視要求的追蹤以及意見反應。
進階使用方式:將追蹤匯出至自定義 OpenTelemetry 收集器服務
在某些情況下,您可能想要將追蹤數據匯出至已部署的 OTel 收集器服務,方法是設定 「OTEL_EXPORTER_OTLP_ENDPOINT」。 當您想要自訂自己的範圍處理邏輯和您自己的追蹤永續性目標時,請使用此匯出工具。