Compartir a través de


Creación de una aplicación de chat personalizada en Python mediante el SDK de flujo de avisos

Importante

Algunas de las características descritas en este artículo solo pueden estar disponibles en versión preliminar. 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.

Requisitos previos

Para poder seguir este inicio rápido, cree los recursos que necesita para la aplicación:

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.

Además, 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 al administrador de TI ayuda para conceder acceso para llamar a Azure OpenAI Service mediante la identidad.

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:

  1. En AI Studio, vaya al proyecto y seleccione Configuración en el panel izquierdo.

  2. En la sección Recursos conectados, seleccione el nombre de conexión con el tipo AIServices.

    Captura de pantalla de la página de configuración del proyecto, en la que se muestra cómo seleccionar el recurso de servicios de IA conectado para abrirlo.

    Nota:

    Si no ve la conexión de AIServices, use la conexión Azure OpenAI en su lugar.

  3. 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.

    Captura de pantalla de los detalles de conexión de AI Services en la que se muestra cómo abrir el recurso en Azure Portal.

  4. En la página izquierda de Azure Portal, seleccione Control de acceso (IAM)>+ Agregar>Agregar asignación de roles.

  5. Busque el rol Usuario de OpenAI de Cognitive Services y luego selecciónelo. Luego, seleccione Siguiente.

    Captura de pantalla de la página para seleccionar el rol de usuario OpenAI de Cognitive Services.

  6. Seleccione Usuario, grupo o entidad de servicio. A continuación, seleccione Seleccionar miembros.

  7. 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.

    Captura de pantalla de la página con el usuario al que se asigna el nuevo rol.

  8. 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

Ahora instalamos la CLI de Azure e iniciamos 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:

winget install -e --id Microsoft.AzureCLI

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:

py -3 -m venv .venv
.venv\scripts\activate

La activación del entorno de Python significa que, al ejecutar python o pip desde la línea de comandos, usará 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 LLM
  • promptflow-tracing: biblioteca ligera que se usa para emitir seguimientos de OpenTelemetry en estándares
  • promptflow-devkit: contiene las herramientas del visor de seguimiento y el generador de pruebas de flujo de avisos para entornos de desarrollo locales
  • openai: bibliotecas cliente para usar el servicio Azure OpenAI
  • python-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.

  1. Cree un archivo .env y pegue el siguiente código:

    AZURE_OPENAI_ENDPOINT=endpoint_value
    AZURE_OPENAI_DEPLOYMENT_NAME=deployment_name
    AZURE_OPENAI_API_VERSION=2024-02-15-preview
    
  2. 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.

  3. 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.

    Captura de pantalla del área de juegos de chat de AI Studio abierta, resaltando el nombre de implementación y el botón Ver código.

  4. En el archivo .env, reemplace deployment_name por el nombre de la implementación del paso anterior. En este ejemplo, se usa el nombre de implementación gpt-35-turbo-16k.

  5. Seleccione el botón <> Ver código y copie el valor del punto de conexión.

    Captura de pantalla del elemento emergente Ver código que resalta el botón para copiar el valor del punto de conexión.

  6. En el archivo .env, reemplace endpoint_value por el valor del punto de conexión copiado del cuadro de diálogo en el paso anterior.

Advertencia

La autenticación basada en claves es compatible, pero Microsoft no la recomienda. Si quiere usar claves, puede agregar la clave a la .env, pero asegúrese de que .env está en el archivo .gitignore para que no se proteja 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 de plantilla de avisos, para ello usaremos 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_DEPLOYMENT_NAME"),
    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.

Captura de pantalla del seguimiento que muestra los pasos de la ejecución del programa.

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_DEPLOYMENT_NAME"),
    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.