Tracering inschakelen en feedback verzamelen voor een stroomimplementatie
Belangrijk
Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.
Nadat u een Generatieve AI-APP in productie hebt geïmplementeerd, wilt u mogelijk uw begrip verbeteren en de prestaties optimaliseren. Traceringsgegevens voor elke aanvraag, geaggregeerde metrische gegevens en feedback van gebruikers spelen kritieke rollen.
In dit artikel leert u hoe u tracering inschakelt, geaggregeerde metrische gegevens verzamelt en feedback van gebruikers verzamelt tijdens deductietijd van uw stroomimplementatie.
Notitie
Voor een verbeterde manier om continue bewaking van geïmplementeerde toepassingen (behalve promptstroom) uit te voeren, kunt u overwegen om online evaluatie van Azure AI te gebruiken.
Vereisten
- De Azure CLI en de Azure Machine Learning-extensie voor de Azure CLI.
- Een Azure AI Foundry-project. Als u nog geen project hebt, kunt u er hier een maken.
- Een Application Insights. Als u nog geen Application Insights-resource hebt, kunt u hier een resource maken.
- Op rollen gebaseerd toegangsbeheer van Azure wordt gebruikt om toegang te verlenen tot bewerkingen in Azure Machine Learning. Als u de stappen in dit artikel wilt uitvoeren, moet u de machtigingen Eigenaar of Inzender hebben voor de geselecteerde resourcegroep. Zie Op rollen gebaseerd toegangsbeheer in de Azure AI Foundry-portal voor meer informatie.
Een stroom implementeren voor realtime deductie
Nadat u uw stroom goed hebt getest, kunt u een flexstroom of DAG-stroom implementeren in productie. In dit artikel gebruiken we een stroom implementeren voor realtime deductie als voorbeeld. Voor flexstromen moet u het flow.flex.yaml
bestand voorbereiden in plaats van flow.dag.yaml
.
U kunt ook implementeren op andere platforms, zoals Docker-container, Kubernetes-cluster en meer.
Notitie
U moet de meest recente basisinstallatiekopieën voor promptstromen gebruiken om de stroom te implementeren, zodat deze ondersteuning biedt voor de API voor tracering en feedbackverzameling.
Tracering inschakelen en metrische systeemgegevens verzamelen voor uw implementatie
Als u de Azure AI Foundry-portal gebruikt om te implementeren, kunt u Application Insights-diagnostische gegevens inschakelen in de stap Implementatie van geavanceerde instellingen>in de implementatiewizard, op welke manier de traceringsgegevens en metrische systeemgegevens worden verzameld naar het project dat is gekoppeld aan Application Insights.
Als u SDK of CLI gebruikt, kunt u een eigenschap app_insights_enabled: true
toevoegen in het yaml-bestand van de implementatie waarmee gegevens worden verzameld aan het project dat is gekoppeld aan Application Insights.
app_insights_enabled: true
U kunt ook andere Application Insights opgeven door een omgevingsvariabele APPLICATIONINSIGHTS_CONNECTION_STRING
in het yaml-implementatiebestand als volgt. U vindt de verbindingsreeks van uw Application Insights op de pagina Overzicht in Azure Portal.
environment_variables:
APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
Notitie
Als u alleen instelt app_insights_enabled: true
maar uw project geen gekoppelde Application Insights-resource heeft, mislukt uw implementatie niet, maar worden er geen gegevens verzameld.
Als u zowel als app_insights_enabled: true
de bovenstaande omgevingsvariabele tegelijk opgeeft, worden de traceringsgegevens en metrische gegevens verzonden naar het project dat is gekoppeld aan Application Insights. Dus als u een andere Application Insights wilt opgeven, hoeft u alleen de omgevingsvariabele te behouden.
Als u implementeert op andere platforms, kunt u ook de omgevingsvariabele APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
gebruiken om traceringsgegevens en metrische gegevens te verzamelen om Application Insights te speicifed.
Traceringsgegevens weergeven in Application Insights
Traceringen registreren specifieke gebeurtenissen of de status van een toepassing tijdens de uitvoering. Het kan gegevens bevatten over functie-aanroepen, variabele waarden, systeemevenementen en meer. Traceringen helpen bij het uitsplitsen van de onderdelen van een toepassing in discrete invoer en uitvoer, wat essentieel is voor foutopsporing en begrip van een toepassing. Hier vindt u meer informatie over traceringen. De traceringsgegevens volgen de OpenTelemetry-specificatie.
U kunt de gedetailleerde tracering bekijken in de opgegeven Application Insights. In de volgende schermopname ziet u een voorbeeld van een gebeurtenis van een geïmplementeerde stroom die meerdere knooppunten bevat. In Application Insights -> Onderzoeken -> Transactie zoeken en kunt u elk knooppunt selecteren om de gedetailleerde tracering ervan weer te geven.
De gebeurtenissen van het afhankelijkheidstype registreren aanroepen van uw implementaties. De naam van die gebeurtenis is de naam van de stroommap. Meer informatie over transactiezoekopdrachten en diagnostische gegevens in Application Insights.
Metrische systeemgegevens weergeven in Application Insights
Naam van metrische gegevens | Type | Afmetingen | Beschrijving |
---|---|---|---|
token_consumption | counter | -vloeien -knoop - llm_engine - token_type: prompt_tokens LLM API-invoertokens; completion_tokens : LLM API-antwoordtokens ; total_tokens = prompt_tokens + completion tokens |
Metrische gegevens over openAI-tokenverbruik |
flow_latency | histogram | stroom,response_code,streaming,response_type | kosten voor het uitvoeren van aanvragen, response_type betekent of deze volledig/firstbyte/lastbyte is |
flow_request | counter | stroom,response_code,uitzondering,streaming | aantal stroomaanvragen |
node_latency | histogram | stroom, knooppunt, run_status | kosten voor uitvoering van knooppunten |
node_request | counter | stroom,knooppunt,uitzondering,run_status | aantal uitvoeringen van knooppunten |
rpc_latency | histogram | stroom, knooppunt, api_call | rpc-kosten |
rpc_request | counter | stroom,knooppunt,api_call,uitzondering | aantal rpc's |
flow_streaming_response_duration | histogram | stroom | streamingantwoord verzenden van kosten, van het verzenden van eerste byte naar het verzenden van laatste byte |
U vindt de standaard Application Insights-werkruimte op de overzichtspagina van uw werkruimte in Azure Portal.
- Open Application Insights en selecteer Gebruik en geschatte kosten in de linkernavigatiebalk. Selecteer Aangepaste metrische gegevens (preview) en selecteer Met dimensies en sla de wijziging op.
- Selecteer het tabblad Metrische gegevens in het linkernavigatievenster. Selecteer standaardgegevens voor promptflow in de metrische naamruimte en u kunt de metrische gegevens verkennen in de vervolgkeuzelijst Metrische gegevens met verschillende aggregatiemethoden.
Feedback verzamelen en verzenden naar Application Insights
Prompt flow-service biedt een nieuwe /feedback
API om klanten te helpen de feedback te verzamelen, de nettolading van de feedback kan elke json-indeling zijn, PF-server helpt de klant alleen de feedbackgegevens op te slaan in een traceringsspanne. Gegevens worden opgeslagen op de klant van de traceerexporteur die is geconfigureerd. Het biedt ook ondersteuning voor standaarddoorgifte van openTelemetry-traceringscontext, waarbij wordt aangegeven dat de traceringscontext in de aanvraagheader wordt gerespecteerd en dat wordt gebruikt als de bovenliggende context van de aanvraag. U kunt gebruikmaken van de functionaliteit voor gedistribueerde tracering om de feedbacktracering te correleren met de tracering van de chataanvraag.
Hieronder ziet u voorbeeldcode die laat zien hoe u een door een stroom geïmplementeerd beheerde eindpunttracering kunt beoordelen en de feedback verzendt naar dezelfde traceringsspanne van een scoreaanvraag. De stroom heeft invoer question
en chat_history
uitvoer answer
. Na het scoren van het eindpunt verzamelen we een feedback en verzenden we naar Application Insights die zijn opgegeven bij het implementeren van de stroom.
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'))
U kunt de tracering van de aanvraag bekijken, samen met feedback in Application Insights.
Geavanceerd gebruik: tracering exporteren naar aangepaste OpenTelemetry Collector-service
In sommige gevallen wilt u de traceringsgegevens mogelijk exporteren naar de geïmplementeerde OTel-collectorservice, ingeschakeld door 'OTEL_EXPORTER_OTLP_ENDPOINT' in te stellen. Gebruik deze exporteur als u uw eigen spanverwerkingslogica en uw eigen permanente traceringsdoel wilt aanpassen.