Creare un'app di chat personalizzata in Python usando l'SDK del prompt flow
Importante
Gli elementi contrassegnati (anteprima) in questo articolo sono attualmente disponibili in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliabile per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
Questo avvio rapido descrive la configurazione dell'ambiente di sviluppo locale con l'SDK del prompt flow. Si scrive un prompt, lo si esegue come parte del codice dell'app, si tracciano le chiamate LLM effettuate e si esegue una valutazione di base per gli output del LLM.
Prerequisiti
Importante
È necessario disporre delle autorizzazioni previste per aggiungere le assegnazioni di ruolo per gli account di archiviazione nella sottoscrizione di Azure. La concessione delle autorizzazioni (con aggiunta dell'assegnazione di ruolo) è abilitata solo per il Proprietario delle specifiche risorse di Azure. Potrebbe essere necessario chiedere al proprietario della sottoscrizione di Azure (che può coincidere con l'amministratore IT) di fornire assistenza per concedere l'accesso alla chiamata al Servizio OpenAI di Azure usando la propria identità.
Prima di seguire questo avvio rapido, creare le risorse necessarie per l'applicazione:
- Hub di Studio AI per la connessione a risorse esterne.
- Un progetto per organizzare gli artefatti di progetto e condividere tracce e esecuzioni di valutazione.
- Un modello di chat OpenAI di Azure distribuito (gpt-35-turbo o gpt-4)
Completare l'avvio rapido del playground di Studio AI per creare queste risorse, se non è già stato fatto. Per creare queste risorse è anche possibile seguire la Guida all'SDK per creare un hub e un progetto.
Concedere l'accesso per chiamare il Servizio OpenAI di Azure usando l'identità
Per usare le procedure consigliate per la sicurezza, anziché le chiavi API, si usa Microsoft Entra ID che consente di eseguire l'autenticazione con OpenAI di Azure usando l'identità utente.
L'utente/l’amministratore deve concedere all'identità utente il ruolo Utente OpenAI di Servizi cognitivi, sulla risorsa dei Servizi di Azure AI che si sta utilizzando. Questo ruolo concede la possibilità di chiamare il Servizio OpenAI di Azure usando l'identità utente.
Per concedere a se stessi l'accesso alla risorsa dei Servizi di Azure AI in uso:
In Studio AI, passare al progetto e selezionare Impostazioni nel riquadro sinistro.
Nella sezione Risorse connesse selezionare il nome della connessione con tipo AIServices.
Nota
Se la connessione AIServices non viene visualizzata, al suo posto usare la connessione OpenAI di Azure.
Nella pagina dei dettagli della risorsa, selezionare il collegamento nell'intestazione Risorsa per aprire la risorsa dei Servizi IA nel portale di Azure.
Nella pagina sinistra del portale di Azure, selezionare Controllo di accesso (IAM)> e >Aggiungi assegnazione di ruolo.
Cercare il ruolo Utente Servizi cognitivi OpenAI e selezionarlo. Quindi seleziona Avanti.
Selezionare Utente, gruppo o entità servizio. Quindi scegliere Seleziona membri.
Si apre il riquadro Seleziona membri. Qui cercare il nome dell'utente per cui si vuole aggiungere l'assegnazione di ruolo. Selezionare l'utente, quindi Seleziona.
Continuare la procedura guidata e selezionare Rivedi e assegna per aggiungere l'assegnazione di ruolo.
Installare l'interfaccia della riga di comando di Azure ed eseguire l'accesso
Si installa l'interfaccia della riga di comando di Azure e si accede dall'ambiente di sviluppo locale, in modo da poter usare le credenziali utente per chiamare il servizio OpenAI di Azure.
Nella gran parte dei casi è possibile installare l'interfaccia della riga di comando di Azure dal terminale usando il comando seguente:
Se questi comandi non funzionano per il sistema operativo o l'installazione specifici, è possibile seguire le istruzioni in Come installare l'interfaccia della riga di comando di Azure.
Dopo aver installato l'interfaccia della riga di comando di Azure, accedere usando il comando az login
e registrarsi tramite il browser:
az login
In alternativa, è possibile accedere manualmente tramite il browser con un codice del dispositivo.
az login --use-device-code
A questo punto si crea l'app e si chiama il Servizio OpenAI di Azure, dal codice.
Creare un nuovo ambiente Python
Prima di tutto è necessario creare un nuovo ambiente Python per installare i pacchetti SDK del prompt flow. NON installare i pacchetti nell'installazione globale di Python. Quando si installano i pacchetti Python, è necessario usare sempre un ambiente virtuale o Conda, altrimenti si rischia di interrompere l'installazione di Python nel sistema.
Se necessario, installare Python
È consigliabile usare Python 3.10 o versione successiva; è comunque necessario avere almeno Python 3.8. Se non è installata una versione appropriata di Python, seguire le istruzioni riportate in Esercitazione di Vs Code Python, che descrive il modo più semplice per installare Python nel sistema operativo.
Creare un ambiente virtuale
Se Python 3.10 o versione successiva è già installato, è possibile creare un ambiente virtuale usando i comandi seguenti:
L'attivazione dell'ambiente Python implica che quando si esegue python
o pip
dalla riga di comando, si usa l'interprete Python contenuto nella cartella .venv
dell'applicazione.
Nota
Per uscire dall'ambiente virtuale Python è possibile usare il comando deactivate
. Potrà poi essere riattivato successivamente, quando necessario.
Installare l'SDK del prompt flow
In questa sezione viene usato il prompt flow per compilare l'applicazione. Prompt flow è una suite di strumenti di sviluppo progettati per semplificare il ciclo di sviluppo end-to-end delle applicazioni di IA basate su LLM, dall'ideazione, alla creazione di prototipi, ai test, alla valutazione per la distribuzione e il monitoraggio di produzione.
Usare pip per installare l'SDK del prompt flow nell'ambiente virtuale creato.
pip install promptflow
pip install azure-identity
L'SDK del prompt flow accetta una dipendenza da più pacchetti. È possibile scegliere di installarli separatamente se, per tutti, non si desiderano le opzioni seguenti:
promptflow-core
: runtime del prompt flow di base usato per l'esecuzione del codice del LLMpromptflow-tracing
: libreria leggera usata per la creazione delle tracce OpenTelemetry negli standardpromptflow-devkit
: strumenti per il test del prompt flow e visualizzatore di traccia per gli ambienti di sviluppo localiopenai
: librerie client per l'uso del servizio OpenAI di Azurepython-dotenv
: uso per impostare le variabili di ambiente leggendole dai file.env
Configurare le variabili di ambiente
L'endpoint dei servizi di IA e il nome della distribuzione sono necessari per chiamare il servizio OpenAI di Azure dal codice. In questo avvio rapido, i valori sono salvati in un file .env
, ossia un file che contiene variabili di ambiente che l'applicazione è in grado di leggere. Questi valori sono disponibili nel playground della chat di Studio AI.
Creare un file
.env
e incollare il codice seguente:AZURE_OPENAI_ENDPOINT=endpoint_value AZURE_OPENAI_CHAT_DEPLOYMENT=chat_deployment_name AZURE_OPENAI_API_VERSION=api_version
Passare al playground della chat all'interno del progetto di Studio AI. Prima di tutto inviare un messaggio all’LLM per verificare che la chat funzioni con il modello.
Nel playground della chat trovare il nome della distribuzione di OpenAI di Azure. Selezionare la distribuzione nell'elenco a discesa e passare il puntatore del mouse sul nome della distribuzione, per visualizzarlo. In questo esempio il nome della distribuzione è gpt-35-turbo-16k.
Nel file
.env
, sostituirechat_deployment_name
con il nome della distribuzione del passaggio precedente. In questo esempio viene usato il nome distribuzionegpt-35-turbo-16k
.Selezionare il pulsante <>Visualizza codice e copiare il valore dell'endpoint e il valore della versione dell'API.
Nel file
.env
sostituireendpoint_value
con il valore dell'endpoint eapi_version
con la versione dell'API copiata dalla finestra di dialogo nel passaggio precedente, ad esempio "2024-02-15-preview".
Avviso
L'autenticazione basata su chiavi è supportata, ma Microsoft la sconsiglia. Se si desidera usare chiavi, è possibile aggiungere la chiave a .env
. Tuttavia è necessario accertare che .env
si trovi nel file .gitignore
, per assicurare che non venga accidentalmente archiviata nel repository Git.
Creare un prompt di chat e un'app di base
Creare prima di tutto un file Prompty, ovvero il formato del modello di prompt supportato dal prompt flow.
Creare un file chat.prompty
e copiare al suo interno il codice seguente:
---
name: Chat Prompt
description: A basic prompt that uses the chat API to answer questions
model:
api: chat
configuration:
type: azure_openai
parameters:
max_tokens: 256
temperature: 0.2
inputs:
chat_input:
type: string
chat_history:
type: list
is_chat_history: true
default: []
outputs:
response:
type: string
sample:
chat_input: What is the meaning of life?
---
system:
You are an AI assistant who helps people find information.
{% for item in history %}
{{item.role}}:
{{item.content}}
{% endfor %}
user:
{{chat_input}}
A questo punto si procede a creare un file Python che usa questo modello di richiesta. Creare un file denominato chat.py
e incollarvi il codice seguente:
import os
from dotenv import load_dotenv
load_dotenv()
from promptflow.core import Prompty, AzureOpenAIModelConfiguration
model_config = AzureOpenAIModelConfiguration(
azure_deployment=os.getenv("AZURE_OPENAI_CHAT_DEPLOYMENT"),
api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)
prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
result = prompty(
chat_history=[
{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
],
chat_input="Do other Azure AI services support this too?")
print(result)
Ora, eseguire il codice Python dalla console:
python chat.py
Sarà ora visualizzato l'output dall'esecuzione di Prompty:
Yes, other Azure AI services also support various capabilities and features. Some of the Azure AI services include Azure Cognitive Services, Azure Machine Learning, Azure Bot Service, and Azure Databricks. Each of these services offers different AI capabilities and can be used for various use cases. If you have a specific service or capability in mind, feel free to ask for more details.
Tracciare l'esecuzione del codice della chat
Si esamini ora il modo in cui la traccia del prompt flow può fornire informazioni dettagliate sulle diverse chiamate LLM eseguite negli script di Python.
All'inizio del file chat.py
, aggiungere il codice seguente per abilitare la traccia del prompt flow:
from promptflow.tracing import start_trace
start_trace()
Eseguire di nuovo chat.py
:
python chat.py
Questa volta viene visualizzato un collegamento nell'output per visualizzare una traccia del prompt flow dell'esecuzione:
Starting prompt flow service...
Start prompt flow service on port 23333, version: 1.10.1.
You can stop the prompt flow service with the following command:'pf service stop'.
Alternatively, if no requests are made within 1 hours, it will automatically stop.
You can view the trace detail from the following URL:
http://localhost:23333/v1.0/ui/traces/?#collection=aistudio-python-quickstart&uiTraceId=0x59e8b9a3a23e4e8893ec2e53d6e1e521
Se si seleziona questo collegamento, sarà visualizzata la traccia che mostra i passaggi dell'esecuzione del programma, gli elementi passati a LLM e l'output della risposta.
La traccia del prompt flow consente anche di tracciare chiamate di funzione specifiche e di registrare tracce in Studio AI. Per altre informazioni, vedere Come usare la traccia nell'SDK del prompt flow.
Valutare la richiesta
A questo punto sarà descritto l’uso dei valutatori del prompt flow per generare metriche in grado di assegnare punteggi sulla qualità della conversazione, secondo una scala da 0 a 5. Viene eseguito di nuovo il prompt, ma questa volta i risultati sono archiviati in una matrice contenente la conversazione completa. Poi la si passa a un ChatEvaluator
per assegnare un punteggio.
Come prima cosa installare promptflow-evals package
:
pip install promptflow-evals
Copiare ora il codice seguente in un file evaluate.py
:
import os
from dotenv import load_dotenv
load_dotenv()
from promptflow.core import Prompty, AzureOpenAIModelConfiguration
from promptflow.evals.evaluators import ChatEvaluator
model_config = AzureOpenAIModelConfiguration(
azure_deployment=os.getenv("AZURE_OPENAI_CHAT_DEPLOYMENT"),
api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)
chat_history=[
{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
]
chat_input="Do other Azure AI services support this too?"
prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
response = prompty(chat_history=chat_history, chat_input=chat_input)
conversation = chat_history
conversation += [
{"role": "user", "content": chat_input},
{"role": "assistant", "content": response}
]
chat_eval = ChatEvaluator(model_config=model_config)
score = chat_eval(conversation=conversation)
print(score)
Eseguire lo script evaluate.py
:
python evaluate.py
Sarà visualizzato un output del tipo:
{'gpt_coherence': 5.0, 'gpt_fluency': 5.0, 'evaluation_per_turn': {'gpt_coherence': {'score': [5.0, 5.0]}, 'gpt_fluency': {'score': [5.0, 5.0]}}}
A quanto pare, per questa conversazione le risposte da LLM hanno ottenuto un punteggio di coerenza e scorrevolezza pari a 5!
Per altre informazioni sull’uso dei valutatori del prompt flow, tra cui come creare valutatori personalizzati e registrare i risultati della valutazione in Studio AI, vedere Valutare l'app usando l'SDK del prompt flow.