Creación de una aplicación de chat personalizada en Python mediante el SDK de flujo de avisos
Importante
Los elementos marcados (versión preliminar) en este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin acuerdo de nivel de servicio y no se recomienda para las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.
En esta guía rápida, le guiaremos a través de la configuración de su entorno de desarrollo local con el SDK de flujo de avisos rápido. Escribimos un aviso, lo ejecutamos como parte del código de su aplicación, rastreamos las llamadas LLM que se realizan y ejecutamos una evaluación básica de los resultados del LLM.
Prerrequisitos
Importante
Debe tener los permisos necesarios para agregar asignaciones de roles para las cuentas de almacenamiento en la suscripción de Azure. La concesión de permisos (agregar asignación de roles) solo está permitida por el propietario de los recursos específicos de Azure. Es posible que tenga que pedir ayuda al propietario de la suscripción de Azure (que puede ser su administrador de TI) para conceder acceso para llamar a Azure OpenAI Service mediante la identidad.
Para poder seguir este inicio rápido, cree los recursos que necesita para la aplicación:
- Un centro de AI Studio para conectarse a recursos externos.
- Un proyecto para organizar los artefactos del proyecto y compartir seguimientos y ejecuciones de evaluación.
- Un modelo de chat de Azure OpenAI implementado (gpt-35-turbo o gpt-4)
Complete el inicio rápido de Área de juegos de AI Studio para crear estos recursos si aún no lo ha hecho. También puede crear estos recursos siguiendo el artículo Guía SDK para crear un centro y un proyecto.
Concesión de acceso para llamar a Azure OpenAI Service mediante su identidad
Para usar los procedimiento recomendados de seguridad, en lugar de claves de API usamos Microsoft Entra ID para autenticar con Azure OpenAI usando su identidad de usuario.
Usted o su administrador deben conceder a su identidad de usuario el rol Usuario de OpenAI de Cognitive Services en el recurso Servicios de Azure AI que esté utilizando. Este rol le concede la capacidad de llamar al servicio Azure OpenAI mediante su identidad de usuario.
Para concederse acceso al recurso de Servicios de Azure AI que usa:
En AI Studio, vaya al proyecto y seleccione Configuración en el panel izquierdo.
En la sección Recursos conectados, seleccione el nombre de conexión con el tipo AIServices.
Nota:
Si no ve la conexión de AIServices, use la conexión Azure OpenAI en su lugar.
En la página de detalles del recurso, seleccione el vínculo bajo el título Recurso para abrir el recurso de servicios de IA en el portal Azure.
En la página izquierda de Azure Portal, seleccione Control de acceso (IAM)>+ Agregar>Agregar asignación de roles.
Busque el rol Usuario de OpenAI de Cognitive Services y luego selecciónelo. Luego, seleccione Siguiente.
Seleccione Usuario, grupo o entidad de servicio. A continuación, seleccione Seleccionar miembros.
En el panel Seleccionar miembros que se abre, busque el nombre del usuario para el que desea agregar la asignación de roles. Seleccione el usuario y luego seleccione Seleccionar.
Continúe con el asistente y seleccione Revisar + asignar para agregar la asignación de roles.
Instale la CLI de Azure e inicie sesión.
Instale la CLI de Azure e inicie sesión desde el entorno de desarrollo local, de modo que pueda usar las credenciales de usuario para llamar al servicio Azure OpenAI.
En la mayoría de los casos, puede instalar la CLI de Azure desde el terminal mediante el siguiente comando:
Puede seguir las instrucciones Cómo instalar la CLI de Azure si estos comandos no funcionan para su sistema operativo o configuración concretos.
Después de instalar la CLI de Azure, inicie sesión con el comando az login
e inicie sesión con el explorador:
az login
Ahora creamos nuestra aplicación y llamamos a Azure OpenAI Service desde el código.
Creación de un entorno de Python
En primer lugar, es necesario crear un nuevo entorno de Python que podamos usar para instalar los paquetes del SDK de flujo de avisos. NO instale paquetes en la instalación global de Python. Siempre debe usar un entorno virtual o conda al instalar paquetes de Python; de lo contrario, puede interrumpir la instalación global de Python.
Si es necesario, instale Python.
Se recomienda usar Python 3.10 o posterior, pero se requiere al menos Python 3.8. Si no tiene instalada una versión adecuada de Python, puede seguir las instrucciones del Tutorial de Python de VS Code para la manera más fácil de instalar Python en el sistema operativo.
Creación de un entorno virtual
Si ya tiene Instalado Python 3.10 o superior, puede crear un entorno virtual con los siguientes comandos:
La activación del entorno de Python significa que, al ejecutar python
o pip
desde la línea de comandos, se usa el intérprete de Python incluido en la carpeta .venv
de la aplicación.
Nota:
Puede usar el comando deactivate
para salir del entorno virtual de Python y, posteriormente, volver a activarlo cuando sea necesario.
Instalación del SDK de flujo de avisos
En esta sección, se usa el flujo de avisos para compilar la aplicación. Flujo de avisos es un conjunto de herramientas de desarrollo diseñadas para simplificar el ciclo de desarrollo integral de aplicaciones de inteligencia artificial basadas en LLM, desde la ideación, la creación de prototipos, las pruebas, la evaluación hasta la implementación y supervisión de producción.
Use pip para instalar el SDK de flujo de avisos en el entorno virtual que ha creado.
pip install promptflow
pip install azure-identity
El SDK de flujo de avisos depende de varios paquetes, que puede optar por instalar por separado si no desea que todos ellos sean:
promptflow-core
: contiene el tiempo de ejecución de flujo de avisos principal que se usa para ejecutar código LLMpromptflow-tracing
: biblioteca ligera que se usa para emitir seguimientos de OpenTelemetry en estándarespromptflow-devkit
: contiene las herramientas del visor de seguimiento y el generador de pruebas de flujo de avisos para entornos de desarrollo localesopenai
: bibliotecas cliente para usar el servicio Azure OpenAIpython-dotenv
: se usa para establecer variables de entorno leyéndolas de archivos.env
Configuración de las variables de entorno
El punto de conexión de los servicios de IA y el nombre de implementación son necesarios para llamar al servicio Azure OpenAI desde el código. En este inicio rápido, guardará estos valores en un archivo .env
, que es un archivo que contiene variables de entorno que la aplicación puede leer. Puede encontrar estos valores en el área de juegos de chat de AI Studio.
Cree un archivo
.env
y pegue el siguiente código:AZURE_OPENAI_ENDPOINT=endpoint_value AZURE_OPENAI_CHAT_DEPLOYMENT=chat_deployment_name AZURE_OPENAI_API_VERSION=api_version
Vaya al área de juegos de chat de dentro del proyecto de AI Studio. En primer lugar, valide que el chat funciona con el modelo mediante el envío de un mensaje al LLM.
Busque el nombre de implementación de Azure OpenAI en el área de juegos de chat. Seleccione la implementación en la lista desplegable y mantenga el puntero sobre el nombre de implementación para verlo. En este ejemplo, el nombre de implementación es gpt-35-turbo-16k.
En el archivo
.env
, reemplacechat_deployment_name
por el nombre de la implementación del paso anterior. En este ejemplo, se usa el nombre de implementacióngpt-35-turbo-16k
.Seleccione el botón <> Ver código y copie el valor del punto de conexión y el valor de la versión de la API.
En el archivo
.env
, reemplaceendpoint_value
por el valor del punto de conexión y reemplaceapi_version
por la versión de API copiada del cuadro de diálogo en el paso anterior (por ejemplo, "2024-02-15-preview").
Advertencia
La autenticación basada en claves es compatible, pero Microsoft no la recomienda. Si quiere usar claves, puede agregar la clave al .env
, pero asegúrese de que el .env
está en el archivo .gitignore
para que no lo compruebe accidentalmente en el repositorio de Git.
Creación de un mensaje de chat básico y una aplicación
En primer lugar, cree un archivo Prompty, que es el formato de plantilla de solicitud compatible con el flujo de avisos.
Cree un archivo chat.prompty
y copie el siguiente código en él:
---
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}}
Ahora vamos a crear un archivo de Python que use esta plantilla de solicitud. Cree un archivo chat.py
y pegue el siguiente código en él:
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)
Ahora desde la consola, ejecute el código de Python:
python chat.py
Ahora debería ver la salida de la ejecución del símbolo del sistema:
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.
Seguimiento de la ejecución del código de chat
Ahora echaremos un vistazo a cómo el seguimiento rápido del flujo de avisos puede proporcionar información sobre las diversas llamadas LLM que están ocurriendo en nuestros scripts Python.
Al principio del archivo chat.py
, agregue el código siguiente para habilitar el seguimiento del flujo de aviso:
from promptflow.tracing import start_trace
start_trace()
Vuelva a ejecutar chat.py
:
python chat.py
Esta vez verá un vínculo en la salida para ver un seguimiento de flujo de avisos de la ejecución:
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
Si selecciona ese vínculo, verá el seguimiento en el que se muestran los pasos de la ejecución del programa, lo que se pasó al LLM y la salida de la respuesta.
El seguimiento del flujo de avisos también permite realizar un seguimiento de llamadas de función específicas y seguimientos de registro en AI Studio, para obtener más información, consulte Uso del seguimiento en el SDK de flujo de avisos.
Evaluación del aviso
Ahora vamos a mostrar cómo podemos utilizar los evaluadores de flujo de avisos para generar métricas que puedan puntuar la calidad de la conversación en una escala de 0 a 5. Se vuelve a ejecutar el símbolo del sistema, pero esta vez se almacenan los resultados en una matriz que contiene la conversación completa y luego se pasa a un ChatEvaluator
para puntuar.
En primer lugar, instale promptflow-evals package
:
pip install promptflow-evals
Ahora copie el código siguiente en un archivo 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)
Ejecute el script evaluate.py
:
python evaluate.py
Debería ver una salida similar a la siguiente:
{'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]}}}
Parece que puntuamos 5 para la coherencia y la fluidez de las respuestas de LLM en esta conversación.
Para obtener más información sobre cómo usar evaluadores de flujo de solicitud, incluido cómo crear sus propios evaluadores personalizados y resultados de evaluación de registros en AI Studio, asegúrese de consultar Evaluar la aplicación mediante el SDK de flujo de avisos.