Saltar al contenido

La función de llamada ahora está disponible en Azure OpenAI Service

21 de julio de 2023

En los últimos años, hemos aprendido cuán poderosos pueden ser los modelos de lenguaje. Con la llegada de gpt-35-turbo y gpt-4, estos modelos pueden lograr más que nunca y estamos viendo que los clientes tienen éxito con una variedad de nuevos escenarios. Si bien estos modelos son increíblemente útiles por sí solos, puede lograr aún más integrándolos con otros sistemas y herramientas.

Las llamadas a funciones ahora están disponibles en Azure OpenAI Service y brindan a las versiones 0613 más recientes de gpt-35-turbo y gpt-4 la capacidad de producir salidas JSON estructuradas en función de las funciones que describa en la solicitud. Esto proporciona una forma nativa para que estos modelos formulen llamadas API y estructuren salidas de datos, todo en función de las funciones que especifique. Es importante tener en cuenta que, si bien los modelos pueden generar estas llamadas, depende de usted ejecutarlas, asegurándose de mantener el control.

Las últimas versiones de gpt-35-turbo y gpt-4 se han ajustado para aprender a trabajar con funciones. Si se especifican una o más funciones en la solicitud, el modelo determinará si alguna de las funciones debe llamarse según el contexto de la solicitud. Cuando el modelo determina que se debe llamar a una función, responderá con un objeto JSON que incluye los argumentos de la función.

En un nivel alto, puede dividir el trabajo con funciones en tres pasos:

Paso 1 – Llame a la API de finalización de chat con sus funciones y la entrada del usuario

Paso 2 – Use la respuesta del modelo para llamar a su API o función

Paso 3 – Vuelva a llamar a la API de finalización de chat, incluida la respuesta de su función para obtener una respuesta final

Las secciones a continuación brindan ejemplos de diferentes escenarios en los que la llamada a función podría ser útil o puede consultar nuestros ejemplos para probar un ejemplo completo de llamada a función.

La función de llamada desbloquea una variedad de nuevos casos de uso. Puede usar llamadas a funciones para ayudarlo a recuperar datos relevantes de fuentes de datos o API, integrarse con otros sistemas o herramientas, crear resultados estructurados a partir de sus indicaciones y más.

Recuperar datos de fuentes de datos o API

Uno de los escenarios más comunes para llamar a funciones es usarlos para escribir llamadas para recuperar datos de un índice de búsqueda, base de datos o API para informar la respuesta a la entrada del usuario. Ya sea que desee aprovechar los datos de la web, sus propios documentos u otras fuentes de datos, puede usar la función de llamada para determinar cuándo necesita aumentar sus indicaciones con datos adicionales.

Recomendado:  Un riesgo existencial para la humanidad

Ejemplo:

messages= [
{"role": "user", "content": "Find beachfront hotels in San Diego for less than $300 a month with free breakfast."}
]

functions= [
{
"name": "search_hotels",
"description": "Retrieves hotels from the search index based on the parameters provided",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The location of the hotel (i.e. Seattle, WA)"
},
"max_price": {
"type": "number",
"description": "The maximum price for the hotel"
},
"features": {
"type": "string",
"description": "A comma separated list of features (i.e. beachfront, free wifi, etc.)"
}
},
"required": ["location"],
},
}
]

response = openai.ChatCompletion.create(
engine="gpt-35-turbo-0613",
messages=messages,
functions=functions,
function_call="auto",
)

print(response['choices'][0]['message'])

Respuesta:

{
"role": "assistant",
"function_call": {
"name": "search_hotels",
"arguments": "{n "location": "San Diego",n "max_price": 300, n "features": "beachfront, free breakfast"n}"
}
}

Integración con API o herramientas

También puede usar llamadas a funciones para agregar nuevas habilidades que aumenten las capacidades del modelo. Por ejemplo, es posible que desee otorgar al modelo acceso a funciones para realizar cálculos o realizar otras tareas en las que el LLM podría no ser inherentemente bueno. Al definir estas funciones, puede interactuar de manera confiable con varias API externas o funciones que haya definido en el código.

La función de llamada también se puede utilizar para realizar acciones como escribir datos en una base de datos, realizar pedidos o enviar notificaciones. Sin embargo, es importante comprender las implicaciones si algo sale mal al realizar una acción antes de implementar una funcionalidad como esta. En general, recomendamos crear siempre un flujo de confirmación del usuario antes de permitir que el modelo realice acciones que podrían tener efectos secundarios dañinos.

Ejemplo:

messages= [
{ "role": "user", "content": "Last month Fabrikam made $73,846 in sales. Based on that, what would the annual run rate be?"}
]

functions= [
{
"name": "calculator",
"description": "A simple calculator",
"parameters": {
"type": "object",
"properties": {
"num1": {"type": "number"},
"num2": {"type": "number"},
"operator": {"type": "string", "enum": ["+", "-", "*", "https://techcommunity.microsoft.com/", "**", "sqrt"]},
},
"required": ["num1", "num2", "operator"],
},
}
]

response = openai.ChatCompletion.create(
engine="gpt-35-turbo-0613",
messages=messages,
functions=functions,
function_call="auto",
)

print(response['choices'][0]['message'])

Respuesta:

{
"role": "assistant",
"function_call": {
"name": "calculator",
"arguments": "{n "num1": 73846,n "num2": 12,n "operator": "*"n}"
}
}

Creación de resultados estructurados

Ya es posible que estos modelos generen JSON, pero a menudo esto requiere un análisis adicional y puede ser complicado si el modelo ocasionalmente inicia la respuesta con algo como «Aquí está el JSON:» o agrega otro texto en la respuesta.

Las llamadas a funciones le brindan una forma más confiable de hacer que el modelo cree salidas JSON estructuradas a partir de texto que pueden ser valiosas cuando necesita extraer entidades de texto o cuando se trata de tareas que requieren salidas organizadas y fáciles de interpretar.

Ejemplo:

messages= [
{"role": "system", "content": "Assistant is a large language model designed to extract structured data from text."},
{"role": "user", "content": "There are many fruits that were found on the recently discovered planet Goocrux. There are neoskizzles that grow there, which are purple and taste like candy. There are also loheckles, which are a grayish blue fruit and are very tart, a little bit like a lemon. Pounits are a bright green color and are more savory than sweet. There are also plenty of loopnovas which are a neon pink flavor and taste like cotton candy. Finally, there are fruits called glowls, which have a very sour and bitter taste which is acidic and caustic, and a pale orange tinge to them."}
]

functions= [
{
"name": "extract_fruit",
"type": "function",
"description": "Extract fruit names from text.",
"parameters": {
"type": "object",
"properties": {
"fruits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fruit": {"type": "string", "description": "The name of the fruit." },
"color": {"type": "string", "description": "The color of the fruit." },
"flavor": {"type": "string", "description": "The flavor of the fruit."}
},
"required": ["fruit", "color", "flavor"] }
}
},
"required": ["fruits"] }
}
]

response = openai.ChatCompletion.create(
engine="gpt-35-turbo-0613",
messages=messages,
functions=functions,
function_call={"name": "extract_fruit"}, # force the model to call the function
)

print(response['choices'][0]['message'])

Respuesta:

{
"fruits": [
{"fruit": "neoskizzles", "color": "purple", "flavor": "candy"},
{"fruit": "loheckles", "color": "grayish blue", "flavor": "tart"},
{"fruit": "pounits", "color": "bright green", "flavor": "savory"},
{"fruit": "loopnovas", "color": "neon pink", "flavor": "cotton candy"},
{"fruit": "glowls", "color": "pale orange", "flavor": "sour and bitter"}
] }

Al igual que cualquier sistema de IA, el uso de llamadas a funciones para integrar modelos de lenguaje con otras herramientas y sistemas presenta riesgos potenciales. Es importante comprender los riesgos que podrían presentar las llamadas a funciones y tomar medidas para asegurarse de usar las capacidades de manera responsable.

Aquí hay algunos consejos para ayudarlo a usar las funciones de manera segura:

  • Validar llamadas a funciones: Verifique siempre las llamadas a funciones generadas por el modelo. Esto incluye verificar los parámetros, la función que se llama y asegurarse de que la llamada se alinee con la acción prevista.
  • Use datos y herramientas confiables: solo use datos de fuentes confiables y verificadas. Los datos que no son de confianza en la salida de una función se pueden usar para indicarle al modelo que escriba las llamadas a funciones de una manera diferente a la que usted pretendía.
  • Siga el principio del privilegio mínimo: Otorgue solo el acceso mínimo necesario para que la función realice su trabajo. Esto reduce el impacto potencial si una función es mal utilizada o explotada. Por ejemplo, si está utilizando llamadas a funciones para consultar una base de datos, debe otorgar a su aplicación acceso de solo lectura a la base de datos. Tampoco debe depender únicamente de la exclusión de capacidades en la definición de la función como control de seguridad.
  • Considere el impacto en el mundo real: tenga en cuenta el impacto en el mundo real de las llamadas a funciones que planea ejecutar, especialmente aquellas que activan acciones como ejecutar código, actualizar bases de datos o enviar notificaciones.
  • Implementar pasos de confirmación de usuario: Particularmente para las funciones que toman acciones, recomendamos incluir un paso donde el usuario confirme la acción antes de ejecutarla.

Para obtener más información sobre nuestras recomendaciones sobre cómo usar los modelos de Azure OpenAI de manera responsable, consulte la Descripción general de las prácticas de IA responsable para los modelos de Azure OpenAI.

Puede comenzar con las funciones de llamadas hoy mismo si tiene acceso al servicio Azure OpenAI. Aquí hay algunos pasos para ayudarlo a ponerse en marcha: