共用方式為


啟用流程部署的追蹤和收集意見反應

重要

本文中標示為 (預覽) 的項目目前處於公開預覽狀態。 此預覽版本沒有服務等級協定,不建議將其用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 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。

  1. 開啟 Application Insights,然後從左側導覽列中選取 [使用量和估計成本]。 選取 [自訂計量 (預覽)],然後選取 [使用維度],並儲存變更。
  2. 選取左側導覽列中的 [計量] 索引標籤。 從 [計量命名空間] 選取 [promptflow 標準計量],即可從 [計量] 下拉式清單中使用不同的彙總方法來探索計量。

收集意見反應並傳送至 Application Insights

提示流程服務提供新的 /feedback API 來協助客戶收集意見反應,意見反應承載可以是任何 json 格式資料,提示流程服務只會協助客戶將意見反應資料儲存到追蹤範圍。 資料將儲存至已設定的追蹤匯出工具目標客戶。 這也支援 OpenTelemetry 標準追蹤內容傳播,表示將遵守要求標頭中設定的追蹤內容,並使用該內容做為要求父範圍內容。 您可以利用分散式追蹤功能,將意見反應追蹤與其聊天要求追蹤相互關聯。

下列範例程式碼示範如何評分已啟用追蹤的流程受控端點,並將意見反應傳送至評分要求的相同追蹤範圍。 流程具有輸入 questionchat_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」。 當您想要自訂自己的範圍處理邏輯和您自己的追蹤永續性目標時,請使用此匯出工具。