Share via


Inicio rápido: Introducción al uso de Azure OpenAI Assistants (versión preliminar)

Azure OpenAI Assistants (versión preliminar) permite crear asistentes de IA adaptados a sus necesidades mediante instrucciones personalizadas y aumentadas por herramientas avanzadas como el intérprete de código y las funciones personalizadas.

Requisitos previos

  • Una suscripción a Azure (cree una cuenta gratuita).

  • Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera.

    Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar acceso a Azure OpenAI, rellene el formulario en https://aka.ms/oai/access. Si tiene algún problema, abra una incidencia en este repositorio para ponerse en contacto con nosotros.

  • Un recurso de Azure OpenAI con un modelo de gpt-4 (1106-preview) implementado.

  • Azure OpenAI Assistants está disponible actualmente en Centro de Suecia, Este de EE. UU. 2 y Este de Australia. Para más información sobre la disponibilidad del modelo en esas regiones, consulte la guía de modelos.

  • Se recomienda revisar la nota sobre transparencia de inteligencia artificial responsable y otros recursos de inteligencia artificial responsable para familiarizarse con las capacidades y limitaciones de Azure OpenAI Service.

Vaya a Azure OpenAI Studio.

Vaya a Azure OpenAI Studio en https://oai.azure.com/ e inicie sesión con las credenciales que le permitan obtener acceso al recurso de OpenAI. Durante o después del flujo de trabajo de inicio de sesión, seleccione el directorio, la suscripción de Azure y el recurso de Azure OpenAI adecuados.

En la página de aterrizaje de Azure OpenAI Studio, inicie el área de juegos Assistants desde el panel de navegación izquierdo Área de juegos>Assistants (versión preliminar).

Captura de pantalla de la página de inicio de Azure OpenAI Studio.

Área de juegos

El área de juegos Assistants permite explorar, crear prototipos y probar asistentes de inteligencia artificial sin necesidad de ejecutar ningún código. Desde esta página puede iterar y experimentar rápidamente con nuevas ideas.

Captura de pantalla de la pantalla de configuración del Asistente sin todos los valores rellenados.

Configuración del asistente

Use el panel Configuración del asistente para crear un asistente de IA o para seleccionar uno existente.

Nombre Descripción
Nombre del asistente Su nombre de implementación asociado a un modelo específico.
Instrucciones Las instrucciones son similares a los mensajes del sistema, donde se proporcionan las instrucciones del modelo sobre cómo debe comportarse y cualquier contexto al que debe hacerse referencia al generar una respuesta. Puede describir la personalidad del asistente, indicarle lo que debe y lo que no debe responder y cómo formatear las respuestas. También puede proporcionar ejemplos de los pasos que debe realizar al responder a las respuestas.
Implementación Aquí es donde se establece la implementación de modelo que se va a usar con el asistente.
Funciones Creación de definiciones de función personalizadas para los modelos para formular llamadas API y generar salidas de datos de estructura en función de las especificaciones
Intérprete de código El intérprete de código proporciona acceso a un entorno de Python de espacio aislado que se puede usar para permitir que el modelo pruebe y ejecute el código.
Archivos Puede cargar hasta 20 archivos, con un tamaño máximo de archivo de 512 MB para usarlo con herramientas.

Herramientas

Un asistente individual puede acceder a hasta 128 herramientas, como code interpreter, así como a cualquier herramienta personalizada que haya creado mediante funciones.

Sesión de chat

La sesión de chat, que también se conoce como un subproceso dentro de la API Assistants, es donde se produce la conversación entre el usuario y el asistente. A diferencia de las llamadas de finalización de chat tradicionales no hay ningún límite para el número de mensajes de un subproceso. El asistente comprimirá automáticamente las solicitudes para ajustarse al límite del token de entrada del modelo.

Esto también significa que no controla cuántos tokens se pasan al modelo durante cada turno de la conversación. La API Assistants abstrae y controla completamente los tokens de administración.

Seleccione el botón Borrar chat para eliminar el historial de conversaciones actual.

Debajo del cuadro de entrada de texto hay dos botones:

  • Agregue un mensaje sin ejecutar.
  • Agregue y ejecute.

Registros

Los registros proporcionan una instantánea detallada de la actividad de la API Assistants.

Mostrar paneles

De forma predeterminada, hay tres paneles: Configuración del asistente, Sesión de chat y Registros. Mostrar paneles permite agregar, quitar y reorganizar los paneles. Si alguna vez cierra un panel y necesita recuperarlo, use Mostrar paneles para restaurar el panel perdido.

Creación del primer asistente

  1. En la lista desplegable de Configuración del asistente, seleccione Nuevo.

  2. Asigne un nombre al asistente.

  3. Escriba la instrucción siguiente: "Usted es un asistente de IA que puede escribir código para ayudar a responder preguntas matemáticas".

  4. Seleccione una implementación de gpt-4 (1106-preview). La lista desplegable mostrará los nombres de implementación personalizados, por lo que si los nombres de modelo o implementación son diferentes, debe elegir una implementación en la que el modelo subyacente sea equivalente al modelo 1106-preview.

  5. Seleccione el botón de alternancia que habilita el intérprete de código.

  6. Seleccione Guardar.

    Captura de pantalla del asistente con los detalles de configuración especificados.

  7. Escriba una pregunta para que el asistente responda: "Necesito resolver la ecuación 3x + 11 = 14. ¿Puede ayudarme?"

  8. Seleccione el botón Agregar y ejecutar.

    The solution to the equation (3x + 11 = 14) is (x = 1).
    

    Aunque podemos ver que la respuesta es correcta, para confirmar que el modelo utilizó el intérprete de código para llegar a esta respuesta y que el código que escribió es válido, en lugar de limitarse a repetir una respuesta de los datos de entrenamiento del modelo, formularemos otra pregunta.

  9. Escriba la pregunta de seguimiento: "Muéstreme el código que ejecutó para llegar a esta solución".

    Certainly! Here's the Python code I ran to find the solution for the equation (3x + 11 = 14):
    
    from sympy import symbols, Eq, solve  
    
    # Define the variable  
    x = symbols('x')  
    
    # Define the equation  
    equation = Eq(3*x + 11, 14)  
    
    # Solve the equation  
    solution = solve(equation, x)  
    solution  
    

Captura de pantalla de la sesión de conversación en el área de juegos del Asistente.

También puede consultar los registros en el panel derecho para confirmar que se usó el intérprete de código y para validar el código que se ejecutó para generar la respuesta. Es importante recordar que, aunque el intérprete de código ofrece al modelo la capacidad de responder a preguntas matemáticas más complejas convirtiendo las preguntas en código y ejecutándose en un entorno de Python de espacio aislado, todavía debe validar la respuesta para confirmar que el modelo ha traducido correctamente la pregunta en una representación válida en el código.

Limpieza de recursos

Si quiere limpiar y quitar un recurso de Azure OpenAI, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.

Consulte también

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.

Requisitos previos

  • Una suscripción a Azure (cree una cuenta gratuita).

  • Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera.

    Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar acceso a Azure OpenAI, rellene el formulario en https://aka.ms/oai/access. Si tiene algún problema, abra una incidencia en este repositorio para ponerse en contacto con nosotros.

  • Un recurso de centro de Azure AI con un modelo implementado. Para obtener más información sobre la implementación de modelos, consulte la guía de implementación de recursos.

  • Un proyecto de Azure AI en Inteligencia artificial de Azure Studio.

Ir a Azure AI Studio (versión preliminar)

  1. Inicie sesión en Azure AI Studio.

  2. Vaya al proyecto o cree un nuevo proyecto en Inteligencia artificial de Azure Studio.

  3. En la información general del proyecto, seleccione Asistentes, que se encuentra en Área de juegos del proyecto.

    El área de juegos Assistants permite explorar, crear prototipos y probar asistentes de inteligencia artificial sin necesidad de ejecutar ningún código. Desde esta página puede iterar y experimentar rápidamente con nuevas ideas.

    El área de juegos proporciona varias opciones para configurar el Asistente. En los pasos siguientes, usará el panel configuración del asistente para crear un asistente de IA.

    Nombre Descripción
    Nombre del asistente Su nombre de implementación asociado a un modelo específico.
    Instrucciones Las instrucciones son similares a los mensajes del sistema, donde se proporcionan las instrucciones del modelo sobre cómo debe comportarse y cualquier contexto al que debe hacerse referencia al generar una respuesta. Puede describir la personalidad del asistente, indicarle lo que debe y lo que no debe responder y cómo formatear las respuestas. También puede proporcionar ejemplos de los pasos que debe realizar al responder a las respuestas.
    Implementación Aquí es donde se establece la implementación de modelo que se va a usar con el asistente.
    Funciones Creación de definiciones de función personalizadas para los modelos para formular llamadas API y generar salidas de datos de estructura en función de las especificaciones. No se usa en este inicio rápido.
    Intérprete de código El intérprete de código proporciona acceso a un entorno de Python de espacio aislado que se puede usar para permitir que el modelo pruebe y ejecute el código.
    Archivos Puede cargar hasta 20 archivos, con un tamaño máximo de archivo de 512 MB para usarlo con herramientas. No se usa en este inicio rápido.

    Captura de pantalla de la pantalla de configuración del Asistente sin todos los valores rellenados.

Creación del primer Asistente

  1. Seleccione la implementación en la lista desplegable Implementaciones.

  2. En la lista desplegable de configuración del Asistente, seleccione Nuevo.

  3. Asigne un nombre al Asistente.

  4. Escriba la instrucción siguiente: "Usted es un asistente de IA que puede escribir código para ayudar a responder preguntas matemáticas".

  5. Seleccione una implementación de modelo. Se recomienda realizar pruebas con uno de los modelos gpt-4 más recientes.

  6. Seleccione el botón de alternancia que habilita el intérprete de código.

  7. Seleccione Guardar.

    Captura de pantalla del asistente con los detalles de configuración especificados.

  8. Escriba una pregunta para que el asistente responda: "Necesito resolver la ecuación 3x + 11 = 14. ¿Puede ayudarme?"

  9. Seleccione el botón Agregar y ejecutar.

    The solution to the equation (3x + 11 = 14) is (x = 1).
    

    Aunque podemos ver que la respuesta es correcta, para confirmar que el modelo utilizó el intérprete de código para llegar a esta respuesta y que el código que escribió es válido, en lugar de limitarse a repetir una respuesta de los datos de entrenamiento del modelo, formularemos otra pregunta.

  10. Escriba la pregunta de seguimiento: "Muéstreme el código que ejecutó para llegar a esta solución".

    Sure. The code is very straightforward
    
    # calculation
    x = (14 - 11) / 3
    x
    
    
    First, we subtract 11 from 14, then divide the result by 3. This gives us the value of x which is 1.0.
    

    Captura de pantalla de la sesión de conversación en el área de juegos del Asistente.

También puede consultar los registros en el panel derecho para confirmar que se usó el intérprete de código y para validar el código que se ejecutó para generar la respuesta. Es importante recordar que, aunque el intérprete de código ofrece al modelo la capacidad de responder a preguntas matemáticas más complejas convirtiendo las preguntas en código y ejecutándose en un entorno de Python de espacio aislado, todavía debe validar la respuesta para confirmar que el modelo ha traducido correctamente la pregunta en una representación válida en el código.

Conceptos clave

Al usar el área de juegos de Asistentes, tenga en cuenta los siguientes conceptos.

Herramientas

Un asistente individual puede acceder a hasta 128 herramientas, como code interpreter, así como a cualquier herramienta personalizada que haya creado mediante funciones.

Sesión de chat

La sesión de chat, que también se conoce como un subproceso dentro de la API Assistants, es donde se produce la conversación entre el usuario y el asistente. A diferencia de las llamadas de finalización de chat tradicionales no hay ningún límite para el número de mensajes de un subproceso. El asistente comprimirá automáticamente las solicitudes para ajustarse al límite del token de entrada del modelo.

Esto también significa que no controla cuántos tokens se pasan al modelo durante cada turno de la conversación. La API Assistants abstrae y controla completamente los tokens de administración.

Seleccione el botón Borrar chat para eliminar el historial de conversaciones actual.

Debajo del cuadro de entrada de texto hay dos botones:

  • Agregue un mensaje sin ejecutar.
  • Agregue y ejecute.

Registros

Los registros proporcionan una instantánea detallada de la actividad de la API Assistants.

Mostrar paneles

De forma predeterminada, hay tres paneles: Configuración del asistente, Sesión de chat y Registros. Mostrar paneles permite agregar, quitar y reorganizar los paneles. Si alguna vez cierra un panel y necesita recuperarlo, use Mostrar paneles para restaurar el panel perdido.

Limpieza de recursos

Si quiere limpiar y quitar un recurso de Azure OpenAI, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.

También puede eliminar el asistente, o conversación a través de la API del Asistente.

Consulte también

Documentación de referencia | Código fuente de la biblioteca | Paquete (PyPi) |

Requisitos previos

Configuración

Instalar la biblioteca cliente de OpenAI Python con:

pip install openai==v1.20.0

Nota:

  • La búsqueda de archivos puede ingerir hasta 10 000 archivos por asistente, 500 veces más que antes. Es rápida, compatible con consultas paralelas a través de búsquedas multiproceso y presenta características mejoradas de reordenación y reescritura de consultas.
    • El almacén de vectores es un nuevo objeto de la API. Una vez que un archivo se agrega a un almacén de vectores, se analiza automáticamente, se divide en fragmentos y se inserta, quedando listo para su búsqueda. Los almacenes de vectores se pueden usar entre asistentes y subprocesos, lo que simplifica la administración de archivos y la facturación.
  • Hemos agregado compatibilidad con el parámetro tool_choice que se puede usar para forzar el uso de una herramienta específica (como la búsqueda de archivos, el intérprete de código o una función) en una ejecución determinada.

Nota:

OpenAI mantiene esta biblioteca. Consulte el historial de versiones para realizar el seguimiento de las actualizaciones más recientes de la biblioteca.

Recuperación de la clave y el punto de conexión

Para realizar correctamente una llamada en el servicio Azure OpenAI, necesitará lo siguiente:

Nombre de la variable Valor
ENDPOINT Este valor se puede encontrar en la sección Claves y punto de conexión al examinar su recurso en Azure Portal. Como alternativa, puede encontrar el valor en Azure OpenAI Studio>Área de juegos>Ver código. Punto de conexión de ejemplo: https://docs-test-001.openai.azure.com/.
API-KEY Este valor se puede encontrar en la sección Claves y punto de conexión al examinar su recurso en Azure Portal. Puede usar KEY1 o KEY2.
DEPLOYMENT-NAME Este valor corresponderá al nombre personalizado que eligió para la implementación al implementar un modelo. Este valor se puede encontrar en Administración de recursos>Implementaciones de modelos en Azure Portal o también en Management>Deployments en Azure OpenAI Studio.

Vaya al recurso en Azure Portal. Las claves y el punto de conexión se pueden encontrar en la sección Administración de recursos. Copie el punto de conexión y la clave de acceso, ya que los necesitará para autenticar las llamadas API. Puede usar KEY1 o KEY2. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio.

Captura de pantalla de la hoja de información general de un recurso de Azure OpenAI en Azure Portal con la ubicación del punto de conexión y las claves de acceso en círculo rojo.

Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.

Variables de entorno

Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

Creación de un asistente

En nuestro código vamos a especificar los siguientes valores:

Nombre Descripción
Nombre del asistente Su nombre de implementación asociado a un modelo específico.
Instrucciones Las instrucciones son similares a los mensajes del sistema, donde se proporcionan las instrucciones del modelo sobre cómo debe comportarse y cualquier contexto al que debe hacerse referencia al generar una respuesta. Puede describir la personalidad del asistente, indicarle lo que debe y lo que no debe responder y cómo formatear las respuestas. También puede proporcionar ejemplos de los pasos que debe realizar al responder a las respuestas.
Modelo Aquí es donde se establece el nombre de implementación de modelo que se usará con el asistente. La herramienta de recuperación requiere el modelo gpt-35-turbo (1106) o gpt-4 (1106-preview). Establezca este valor en el nombre de la implementación, no en el nombre del modelo, a menos que sea el mismo.
Intérprete de código El intérprete de código proporciona acceso a un entorno de Python de espacio aislado que se puede usar para permitir que el modelo pruebe y ejecute el código.

Herramientas

Un asistente individual puede acceder a hasta 128 herramientas, como code interpreter, así como a cualquier herramienta personalizada que haya creado mediante funciones.

Cree y ejecute un asistente con lo siguiente:

import os
import time
import json
from openai import AzureOpenAI
    
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-02-15-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
    )

# Create an assistant
assistant = client.beta.assistants.create(
    name="Math Assist",
    instructions="You are an AI assistant that can write code to help answer math questions.",
    tools=[{"type": "code_interpreter"}],
    model="gpt-4-1106-preview" #You must replace this value with the deployment name for your model.
)

# Create a thread
thread = client.beta.threads.create()

# Add a user question to the thread
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="I need to solve the equation `3x + 11 = 14`. Can you help me?"
)

# Run the thread
run = client.beta.threads.runs.create(
  thread_id=thread.id,
  assistant_id=assistant.id,
)

# Retrieve the status of the run
run = client.beta.threads.runs.retrieve(
  thread_id=thread.id,
  run_id=run.id
)

status = run.status

# Wait till the assistant has responded
while status not in ["completed", "cancelled", "expired", "failed"]:
    time.sleep(5)
    run = client.beta.threads.runs.retrieve(thread_id=thread.id,run_id=run.id)
    status = run.status

messages = client.beta.threads.messages.list(
  thread_id=thread.id
)

print(messages.model_dump_json(indent=2))

Output

{
  "data": [
    {
      "id": "msg_XOL8597uuV6zIEgaqZtI0KD3",
      "assistant_id": "asst_WKFOCDJ42Ld1bVUfS8w2pt6E",
      "content": [
        {
          "text": {
            "annotations": [],
            "value": "The solution to the equation \\(3x + 11 = 14\\) is \\(x = 1\\)."
          },
          "type": "text"
        }
      ],
      "created_at": 1705892759,
      "file_ids": [],
      "metadata": {},
      "object": "thread.message",
      "role": "assistant",
      "run_id": "run_TSmF4LoU6bX4SD3xp5xDr1ey",
      "thread_id": "thread_hCOKdEZy1diZAAzwDudRqGRc"
    },
    {
      "id": "msg_F25tb90W5xTPqSn4KgU4aMsb",
      "assistant_id": null,
      "content": [
        {
          "text": {
            "annotations": [],
            "value": "I need to solve the equation `3x + 11 = 14`. Can you help me?"
          },
          "type": "text"
        }
      ],
      "created_at": 1705892751,
      "file_ids": [],
      "metadata": {},
      "object": "thread.message",
      "role": "user",
      "run_id": null,
      "thread_id": "thread_hCOKdEZy1diZAAzwDudRqGRc"
    }
  ],
  "object": "list",
  "first_id": "msg_XOL8597uuV6zIEgaqZtI0KD3",
  "last_id": "msg_F25tb90W5xTPqSn4KgU4aMsb",
  "has_more": false
}

Descripción de los resultados

En este ejemplo se crea un asistente con el intérprete de código habilitado. Cuando formulamos una pregunta matemática al asistente, este traduce la pregunta a código de python y ejecuta el código en un entorno de espacio aislado para determinar la respuesta a la pregunta. El código que el modelo crea y prueba para llegar a una respuesta es el siguiente:

    from sympy import symbols, Eq, solve  
      
    # Define the variable  
    x = symbols('x')  
      
    # Define the equation  
    equation = Eq(3*x + 11, 14)  
      
    # Solve the equation  
    solution = solve(equation, x)  
    solution  

Es importante recordar que, aunque el intérprete de código proporciona al modelo la capacidad de responder a consultas más complejas convirtiendo las preguntas en código y ejecutando ese código de forma iterativa en el espacio aislado de Python hasta llegar a una solución, todavía debe validar la respuesta para confirmar que el modelo ha traducido correctamente la pregunta en una representación válida en el código.

Limpieza de recursos

Si quiere limpiar y quitar un recurso de Azure OpenAI, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.

Consulte también

Documentación de referencia de la API | Código fuente | Paquete (NuGet)

Requisitos previos

  • Una suscripción a Azure: cree una cuenta gratuita.

  • Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera.

    Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar acceso a Azure OpenAI, rellene el formulario en https://aka.ms/oai/access. Si tiene algún problema, abra una incidencia en este repositorio para ponerse en contacto con nosotros.

  • SDK de .NET 8

  • Azure OpenAI Assistants está disponible actualmente en Centro de Suecia, Este de EE. UU. 2 y Este de Australia. Para más información sobre la disponibilidad del modelo en esas regiones, consulte la guía de modelos.

  • Se recomienda revisar la nota sobre transparencia de inteligencia artificial responsable y otros recursos de inteligencia artificial responsable para familiarizarse con las capacidades y limitaciones de Azure OpenAI Service.

  • Se usó un recurso de Azure OpenAI con el modelo gpt-4 (1106-preview) implementado para probar este ejemplo.

Configuración

Creación de una aplicación de .NET Core

En una ventana de consola (por ejemplo, cmd, PowerShell o Bash), use el comando dotnet new para crear una nueva aplicación de consola con el nombre azure-openai-quickstart. Este comando crea un sencillo proyecto "Hola mundo" con un solo archivo de origen de C#: Program.cs.

dotnet new console -n azure-openai-assistants-quickstart

Cambie el directorio a la carpeta de aplicaciones recién creada. Para compilar la aplicación:

dotnet build

La salida de la compilación no debe contener advertencias ni errores.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

Instalar la biblioteca cliente de OpenAI .NET con:

dotnet add package Azure.AI.OpenAI.Assistants --prerelease

Recuperación de la clave y el punto de conexión

Para realizar correctamente una llamada en Azure OpenAI, necesita un punto de conexión y una clave.

Nombre de la variable Valor
ENDPOINT Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. Como alternativa, puede encontrar el valor en Azure OpenAI Studio>Playground>Code View. Punto de conexión de ejemplo: https://docs-test-001.openai.azure.com/.
API-KEY Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. Puede usar KEY1 o KEY2.

Vaya al recurso en Azure Portal. La sección Claves y puntos de conexión se puede encontrar en la sección Administración de recursos. Copie el punto de conexión y la clave de acceso, ya que los necesitará para autenticar las llamadas API. Puede usar KEY1 o KEY2. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio.

Captura de pantalla de la interfaz de usuario de información general de un recurso de Azure OpenAI en Azure Portal con el punto de conexión y la ubicación de las claves de acceso en círculo en rojo.

Variables de entorno

Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

Creación de un asistente

En nuestro código vamos a especificar los siguientes valores:

Nombre Descripción
Nombre del asistente Su nombre de implementación asociado a un modelo específico.
Instrucciones Las instrucciones son similares a los mensajes del sistema, donde se proporcionan las instrucciones del modelo sobre cómo debe comportarse y cualquier contexto al que debe hacerse referencia al generar una respuesta. Puede describir la personalidad del asistente, indicarle lo que debe y lo que no debe responder y cómo formatear las respuestas. También puede proporcionar ejemplos de los pasos que debe realizar al responder a las respuestas.
Modelo Aquí es donde se establece el nombre de implementación de modelo que se usará con el asistente. La herramienta de recuperación requiere el modelo gpt-35-turbo (1106) o gpt-4 (1106-preview). Establezca este valor en el nombre de la implementación, no en el nombre del modelo, a menos que sea el mismo.
Intérprete de código El intérprete de código proporciona acceso a un entorno de Python de espacio aislado que se puede usar para permitir que el modelo pruebe y ejecute el código.

Herramientas

Un asistente individual puede acceder a hasta 128 herramientas, como code interpreter, así como a cualquier herramienta personalizada que haya creado mediante funciones.

Cree y ejecute un asistente con lo siguiente:

using Azure;
using Azure.AI.OpenAI.Assistants;

string endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new ArgumentNullException("AZURE_OPENAI_ENDPOINT");
string key = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY") ?? throw new ArgumentNullException("AZURE_OPENAI_API_KEY");
AssistantsClient client = new AssistantsClient(new Uri(endpoint), new AzureKeyCredential(key));

// Create an assistant
Assistant assistant = await client.CreateAssistantAsync(
    new AssistantCreationOptions("gpt-4-1106-preview") // Replace this with the name of your model deployment
    {
        Name = "Math Tutor",
        Instructions = "You are a personal math tutor. Write and run code to answer math questions.",
        Tools = { new CodeInterpreterToolDefinition() }
    });

// Create a thread
AssistantThread thread = await client.CreateThreadAsync();

// Add a user question to the thread
ThreadMessage message = await client.CreateMessageAsync(
    thread.Id,
    MessageRole.User,
    "I need to solve the equation `3x + 11 = 14`. Can you help me?");

// Run the thread
ThreadRun run = await client.CreateRunAsync(
    thread.Id,
    new CreateRunOptions(assistant.Id)
);

// Wait for the assistant to respond
do
{
    await Task.Delay(TimeSpan.FromMilliseconds(500));
    run = await client.GetRunAsync(thread.Id, run.Id);
}
while (run.Status == RunStatus.Queued
    || run.Status == RunStatus.InProgress);

// Get the messages
PageableList<ThreadMessage> messagesPage = await client.GetMessagesAsync(thread.Id);
IReadOnlyList<ThreadMessage> messages = messagesPage.Data;

// Note: messages iterate from newest to oldest, with the messages[0] being the most recent
foreach (ThreadMessage threadMessage in messages.Reverse())
{
    Console.Write($"{threadMessage.CreatedAt:yyyy-MM-dd HH:mm:ss} - {threadMessage.Role,10}: ");
    foreach (MessageContent contentItem in threadMessage.ContentItems)
    {
        if (contentItem is MessageTextContent textItem)
        {
            Console.Write(textItem.Text);
        }
        Console.WriteLine();
    }
}

Se imprimirá una salida como la siguiente:

2024-03-05 03:38:17 -       user: I need to solve the equation `3x + 11 = 14`. Can you help me?
2024-03-05 03:38:25 -  assistant: The solution to the equation \(3x + 11 = 14\) is \(x = 1\).

Los nuevos mensajes se pueden crear en el subproceso antes de volver a ejecutar, con lo cual se verá que el asistente usa los mensajes anteriores como contexto dentro del subproceso.

Limpieza de recursos

Si quiere limpiar y quitar un recurso de Azure OpenAI, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.

Consulte también

Documentación de referencia | Código fuente de la biblioteca | Paquete (npm) |

Requisitos previos

Para la autenticación sin contraseña, se necesita:

  1. Usar el paquete @azure/identity.
  2. Asignar el rol Cognitive Services User a su cuenta de usuario. Esto se puede hacer en Azure Portal en Control de acceso (IAM)>Agregar asignación de roles.
  3. Inicie sesión con la CLI de Azure, como az login.

Configurar

  1. Instale la biblioteca cliente de OpenAI Assistants para JavaScript con:

    npm install openai
    
  2. Para conocer la autenticación sin contraseña recomendada:

    npm install @azure/identity
    

Recuperación de la clave y el punto de conexión

Para realizar correctamente una llamada en el servicio Azure OpenAI, necesitará lo siguiente:

Nombre de la variable Valor
ENDPOINT Este valor se puede encontrar en la sección Claves y punto de conexión al examinar su recurso en Azure Portal. Como alternativa, puede encontrar el valor en Azure OpenAI Studio>Área de juegos>Ver código. Punto de conexión de ejemplo: https://docs-test-001.openai.azure.com/.
API-KEY Este valor se puede encontrar en la sección Claves y punto de conexión al examinar su recurso en Azure Portal. Puede usar KEY1 o KEY2.
DEPLOYMENT-NAME Este valor corresponderá al nombre personalizado que eligió para la implementación al implementar un modelo. Este valor se puede encontrar en Administración de recursos>Implementaciones de modelos en Azure Portal o también en Management>Deployments en Azure OpenAI Studio.

Vaya al recurso en Azure Portal. Las claves y el punto de conexión se pueden encontrar en la sección Administración de recursos. Copie el punto de conexión y la clave de acceso, ya que los necesitará para autenticar las llamadas API. Puede usar KEY1 o KEY2. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio.

Captura de pantalla de la hoja de información general de un recurso OpenAI en Azure Portal con la ubicación del punto de conexión y las claves de acceso rodeada con un círculo rojo.

Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.

Variables de entorno

Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

Agregue una variable de entorno adicional para el nombre de implementación: AZURE_OPENAI_DEPLOYMENT_NAME.

Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.

setx AZURE_OPENAI_DEPLOYMENT_NAME "REPLACE_WITH_YOUR_DEPLOYMENT_NAME" 

Creación de un asistente

En nuestro código vamos a especificar los siguientes valores:

Nombre Descripción
Nombre del asistente Su nombre de implementación asociado a un modelo específico.
Instrucciones Las instrucciones son similares a los mensajes del sistema, donde se proporcionan las instrucciones del modelo sobre cómo debe comportarse y cualquier contexto al que debe hacerse referencia al generar una respuesta. Puede describir la personalidad del asistente, indicarle lo que debe y lo que no debe responder y cómo formatear las respuestas. También puede proporcionar ejemplos de los pasos que debe realizar al responder a las respuestas.
Modelo Este es el nombre de la implementación.
Intérprete de código El intérprete de código proporciona acceso a un entorno de Python de espacio aislado que se puede usar para permitir que el modelo pruebe y ejecute el código.

Herramientas

Un asistente individual puede acceder a hasta 128 herramientas, como code interpreter, así como a cualquier herramienta personalizada que haya creado mediante funciones.

Inicie sesión en Azure con az login y cree y ejecute un asistente con el siguiente módulo de TypeScript sin contraseña recomendado (index.ts):

import "dotenv/config";
import { AzureOpenAI } from "openai";
import {
  Assistant,
  AssistantCreateParams,
  AssistantTool,
} from "openai/resources/beta/assistants";
import { Message, MessagesPage } from "openai/resources/beta/threads/messages";
import { Run } from "openai/resources/beta/threads/runs/runs";
import { Thread } from "openai/resources/beta/threads/threads";

// Add `Cognitive Services User` to identity for Azure OpenAI resource
import {
  DefaultAzureCredential,
  getBearerTokenProvider,
} from "@azure/identity";

// Get environment variables
const azureOpenAIEndpoint = process.env.AZURE_OPENAI_ENDPOINT as string;
const azureOpenAIDeployment = process.env
  .AZURE_OPENAI_DEPLOYMENT_NAME as string;

// Check env variables
if (!azureOpenAIEndpoint || !azureOpenAIDeployment) {
  throw new Error(
    "Please ensure to set AZURE_OPENAI_DEPLOYMENT_NAME and AZURE_OPENAI_ENDPOINT in your environment variables."
  );
}

// Get Azure SDK client
const getClient = (): AzureOpenAI => {
  const credential = new DefaultAzureCredential();
  const scope = "https://cognitiveservices.azure.com/.default";
  const azureADTokenProvider = getBearerTokenProvider(credential, scope);
  const assistantsClient = new AzureOpenAI({
    endpoint: azureOpenAIEndpoint,
    azureADTokenProvider,
  });
  return assistantsClient;
};

const assistantsClient = getClient();

const options: AssistantCreateParams = {
  model: azureOpenAIDeployment, // Deployment name seen in Azure AI Studio
  name: "Math Tutor",
  instructions:
    "You are a personal math tutor. Write and run JavaScript code to answer math questions.",
  tools: [{ type: "code_interpreter" } as AssistantTool],
};
const role = "user";
const message = "I need to solve the equation `3x + 11 = 14`. Can you help me?";

// Create an assistant
const assistantResponse: Assistant =
  await assistantsClient.beta.assistants.create(options);
console.log(`Assistant created: ${JSON.stringify(assistantResponse)}`);

// Create a thread
const assistantThread: Thread = await assistantsClient.beta.threads.create({});
console.log(`Thread created: ${JSON.stringify(assistantThread)}`);

// Add a user question to the thread
const threadResponse: Message =
  await assistantsClient.beta.threads.messages.create(assistantThread.id, {
    role,
    content: message,
  });
console.log(`Message created:  ${JSON.stringify(threadResponse)}`);

// Run the thread and poll it until it is in a terminal state
const runResponse: Run = await assistantsClient.beta.threads.runs.createAndPoll(
  assistantThread.id,
  {
    assistant_id: assistantResponse.id,
  },
  { pollIntervalMs: 500 }
);
console.log(`Run created:  ${JSON.stringify(runResponse)}`);

// Get the messages
const runMessages: MessagesPage =
  await assistantsClient.beta.threads.messages.list(assistantThread.id);
for await (const runMessageDatum of runMessages) {
  for (const item of runMessageDatum.content) {
    // types are: "image_file" or "text"
    if (item.type === "text") {
      console.log(`Message content: ${JSON.stringify(item.text?.value)}`);
    }
  }
}

Para usar la clave de servicio para la autenticación, puede crear un asistente y ejecutarlo con el siguiente módulo de TypeScript (index.ts):

import "dotenv/config";
import { AzureOpenAI } from "openai";
import {
  Assistant,
  AssistantCreateParams,
  AssistantTool,
} from "openai/resources/beta/assistants";
import { Message, MessagesPage } from "openai/resources/beta/threads/messages";
import { Run } from "openai/resources/beta/threads/runs/runs";
import { Thread } from "openai/resources/beta/threads/threads";

// Get environment variables
const azureOpenAIKey = process.env.AZURE_OPENAI_KEY as string;
const azureOpenAIEndpoint = process.env.AZURE_OPENAI_ENDPOINT as string;
const azureOpenAIDeployment = process.env
  .AZURE_OPENAI_DEPLOYMENT_NAME as string;

// Check env variables
if (!azureOpenAIKey || !azureOpenAIEndpoint || !azureOpenAIDeployment) {
  throw new Error(
    "Please set AZURE_OPENAI_KEY and AZURE_OPENAI_ENDPOINT and AZURE_OPENAI_DEPLOYMENT_NAME in your environment variables."
  );
}

// Get Azure SDK client
const getClient = (): AzureOpenAI => {
  const assistantsClient = new AzureOpenAI({
    endpoint: azureOpenAIEndpoint,
    apiKey: azureOpenAIKey,
  });
  return assistantsClient;
};

const assistantsClient = getClient();

const options: AssistantCreateParams = {
  model: azureOpenAIDeployment, // Deployment name seen in Azure AI Studio
  name: "Math Tutor",
  instructions:
    "You are a personal math tutor. Write and run JavaScript code to answer math questions.",
  tools: [{ type: "code_interpreter" } as AssistantTool],
};
const role = "user";
const message = "I need to solve the equation `3x + 11 = 14`. Can you help me?";

// Create an assistant
const assistantResponse: Assistant =
  await assistantsClient.beta.assistants.create(options);
console.log(`Assistant created: ${JSON.stringify(assistantResponse)}`);

// Create a thread
const assistantThread: Thread = await assistantsClient.beta.threads.create({});
console.log(`Thread created: ${JSON.stringify(assistantThread)}`);

// Add a user question to the thread
const threadResponse: Message =
  await assistantsClient.beta.threads.messages.create(assistantThread.id, {
    role,
    content: message,
  });
console.log(`Message created:  ${JSON.stringify(threadResponse)}`);

// Run the thread and poll it until it is in a terminal state
const runResponse: Run = await assistantsClient.beta.threads.runs.createAndPoll(
  assistantThread.id,
  {
    assistant_id: assistantResponse.id,
  },
  { pollIntervalMs: 500 }
);
console.log(`Run created:  ${JSON.stringify(runResponse)}`);

// Get the messages
const runMessages: MessagesPage =
  await assistantsClient.beta.threads.messages.list(assistantThread.id);
for await (const runMessageDatum of runMessages) {
  for (const item of runMessageDatum.content) {
    // types are: "image_file" or "text"
    if (item.type === "text") {
      console.log(`Message content: ${JSON.stringify(item.text?.value)}`);
    }
  }
}

Output

Assistant created: {"id":"asst_zXaZ5usTjdD0JGcNViJM2M6N","createdAt":"2024-04-08T19:26:38.000Z","name":"Math Tutor","description":null,"model":"daisy","instructions":"You are a personal math tutor. Write and run JavaScript code to answer math questions.","tools":[{"type":"code_interpreter"}],"fileIds":[],"metadata":{}}
Thread created: {"id":"thread_KJuyrB7hynun4rvxWdfKLIqy","createdAt":"2024-04-08T19:26:38.000Z","metadata":{}}
Message created:  {"id":"msg_o0VkXnQj3juOXXRCnlZ686ff","createdAt":"2024-04-08T19:26:38.000Z","threadId":"thread_KJuyrB7hynun4rvxWdfKLIqy","role":"user","content":[{"type":"text","text":{"value":"I need to solve the equation `3x + 11 = 14`. Can you help me?","annotations":[]},"imageFile":{}}],"assistantId":null,"runId":null,"fileIds":[],"metadata":{}}
Created run
Run created:  {"id":"run_P8CvlouB8V9ZWxYiiVdL0FND","object":"thread.run","status":"queued","model":"daisy","instructions":"You are a personal math tutor. Write and run JavaScript code to answer math questions.","tools":[{"type":"code_interpreter"}],"metadata":{},"usage":null,"assistantId":"asst_zXaZ5usTjdD0JGcNViJM2M6N","threadId":"thread_KJuyrB7hynun4rvxWdfKLIqy","fileIds":[],"createdAt":"2024-04-08T19:26:39.000Z","expiresAt":"2024-04-08T19:36:39.000Z","startedAt":null,"completedAt":null,"cancelledAt":null,"failedAt":null}
Message content: "The solution to the equation \\(3x + 11 = 14\\) is \\(x = 1\\)."
Message content: "Yes, of course! To solve the equation \\( 3x + 11 = 14 \\), we can follow these steps:\n\n1. Subtract 11 from both sides of the equation to isolate the term with x.\n2. Then, divide by 3 to find the value of x.\n\nLet me calculate that for you."
Message content: "I need to solve the equation `3x + 11 = 14`. Can you help me?"

Es importante recordar que, aunque el intérprete de código proporciona al modelo la capacidad de responder a consultas más complejas convirtiendo las preguntas en código y ejecutando ese código de forma iterativa en JavaScript hasta llegar a una solución, todavía debe validar la respuesta para confirmar que el modelo ha traducido correctamente la pregunta en una representación válida en el código.

Limpieza de recursos

Si quiere limpiar y quitar un recurso de Azure OpenAI, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.

Código de ejemplo

Consulte también

Requisitos previos

Configuración

Recuperación de la clave y el punto de conexión

Para realizar correctamente una llamada a Azure OpenAI, necesitará lo siguiente:

Nombre de la variable Valor
ENDPOINT Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. Como alternativa, puede encontrar el valor en Azure OpenAI Studio>Área de juegos>Vista de código. Punto de conexión de ejemplo: https://docs-test-001.openai.azure.com/.
API-KEY Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. Puede usar KEY1 o KEY2.
DEPLOYMENT-NAME Este valor corresponderá al nombre personalizado que eligió para la implementación al implementar un modelo. Este valor se puede encontrar en Administración de recursos>Implementaciones en Azure Portal o también en Management>Deployments en Azure OpenAI Studio.

Vaya al recurso en Azure Portal. El punto de conexión y las claves se pueden encontrar en la sección Administración de recursos. Copie el punto de conexión y la clave de acceso, ya que los necesitará para autenticar las llamadas API. Puede usar KEY1 o KEY2. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio.

Captura de pantalla de la hoja de información general de un recurso de Azure OpenAI en Azure Portal con la ubicación del punto de conexión y las claves de acceso en círculo rojo.

Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.

Variables de entorno

Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

REST API

Creación de un asistente

Nota:

Con Azure OpenAI, el parámetro model necesita el nombre de implementación del modelo. Si el nombre de implementación de modelo es diferente al del modelo subyacente, tendría que ajustar el código a "model": "{your-custom-model-deployment-name}".

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/assistants?api-version=2024-05-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instructions": "You are an AI assistant that can write code to help answer math questions.",
    "name": "Math Assist",
    "tools": [{"type": "code_interpreter"}],
    "model": "gpt-4-1106-preview"
  }'

Herramientas

Un asistente individual puede acceder a hasta 128 herramientas, como code interpreter, así como a cualquier herramienta personalizada que haya creado mediante funciones.

Creación de un subproceso

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d ''

Adición de una pregunta de usuario al subproceso

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/messages \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
      "role": "user",
      "content": "I need to solve the equation `3x + 11 = 14`. Can you help me?"
    }'

Ejecución del subproceso

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/runs \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "assistant_id": "asst_abc123",
  }'

Recuperación del estado de la ejecución

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/runs/run_abc123 \
  -H "api-key: $AZURE_OPENAI_API_KEY" \

Respuesta del asistente

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/messages \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \

Descripción de los resultados

En este ejemplo se crea un asistente con el intérprete de código habilitado. Cuando formulamos una pregunta matemática al asistente, este traduce la pregunta a código de python y ejecuta el código en un entorno de espacio aislado para determinar la respuesta a la pregunta. El código que el modelo crea y prueba para llegar a una respuesta es el siguiente:

    from sympy import symbols, Eq, solve  
      
    # Define the variable  
    x = symbols('x')  
      
    # Define the equation  
    equation = Eq(3*x + 11, 14)  
      
    # Solve the equation  
    solution = solve(equation, x)  
    solution  

Es importante recordar que, aunque el intérprete de código proporciona al modelo la capacidad de responder a consultas más complejas convirtiendo las preguntas en código y ejecutando ese código de forma iterativa en el espacio aislado de Python hasta llegar a una solución, todavía debe validar la respuesta para confirmar que el modelo ha traducido correctamente la pregunta en una representación válida en el código.

Limpieza de recursos

Si quiere limpiar y quitar un recurso de Azure OpenAI, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.

Consulte también