Curso introductorio al agente de IA de Microsoft: herramientas que utilizan (invocan) patrones de diseño
Información sobre el cursoPublicado hace 6 meses Círculo de intercambio de inteligencia artificial 9.9K 00
Las herramientas son interesantes porque permiten a las inteligencias de IA tener una gama más amplia de capacidades. Al añadir herramientas, la inteligencia ya no está limitada al conjunto limitado de operaciones que puede realizar, sino que puede realizar una amplia variedad de operaciones. En este capítulo, exploraremos el Patrón de Diseño de Uso de Herramientas, que describe cómo una Inteligencia Artificial puede utilizar una herramienta concreta para alcanzar sus objetivos.
breve
En este curso, esperamos responder a las siguientes preguntas:
- ¿Qué son los patrones de diseño de uso de herramientas?
- ¿A qué casos de uso puede aplicarse?
- ¿Qué elementos son necesarios para aplicar este patrón de diseño?
- ¿Qué consideraciones especiales hay que tener en cuenta a la hora de utilizar herramientas para crear inteligencias de IA fiables utilizando patrones de diseño?
objetivo de aprendizaje
Al finalizar este curso, serás capaz de:
- Definir el uso de la herramienta de patrones de diseño y su propósito.
- Identificar casos de uso en los que se apliquen patrones de diseño de uso de herramientas.
- Comprender los elementos clave necesarios para implementar este patrón de diseño.
- Reconocer las consideraciones para garantizar la fiabilidad de las inteligencias de IA al utilizar este patrón de diseño.
¿Qué son los patrones de diseño de uso de herramientas?
Herramientas para utilizar patrones de diseño Se centra en dotar a los grandes modelos lingüísticos (LLM) de la capacidad de interactuar con herramientas externas para alcanzar objetivos específicos. Una herramienta es un código que una inteligencia puede ejecutar para realizar una acción. Las herramientas pueden ser funciones sencillas (por ejemplo, calculadoras) o llamadas a la API de servicios de terceros (por ejemplo, consulta de cotizaciones bursátiles o previsiones meteorológicas). En el contexto de una Inteligencia Artificial, las herramientas están diseñadas para ser ejecutadas por la Inteligencia en respuesta a un Llamadas a funciones para la generación de modelos.
¿A qué casos de uso puede aplicarse?
Las inteligencias artificiales pueden utilizar herramientas para realizar tareas complejas, recuperar información o tomar decisiones. El patrón de diseño Uso de herramientas se utiliza normalmente en escenarios que requieren una interacción dinámica con sistemas externos, como bases de datos, servicios web o intérpretes de código. Esta característica es útil para muchos casos de uso diferentes, incluyendo:
- Recuperación dinámica de la información: Intelligentsia puede consultar API o bases de datos externas para obtener datos actualizados (por ejemplo, consultar una base de datos SQLite para analizar datos, obtener cotizaciones bursátiles o información meteorológica).
- Ejecución e interpretación de códigos: Intelligentsia puede ejecutar código o scripts para resolver problemas matemáticos, generar informes o realizar simulaciones.
- Automatización del flujo de trabajo: Automatice los flujos de trabajo repetitivos o de varios pasos integrando herramientas como programadores de tareas, servicios de correo electrónico o canalizaciones de datos.
- Atención al cliente: Intelligentsia puede interactuar con sistemas CRM, plataformas de órdenes de trabajo o bases de conocimientos para resolver las consultas de los usuarios.
- Generación y edición de contenidos: Intelligentsia puede utilizar herramientas como correctores gramaticales, resumidores de texto o evaluadores de la seguridad de los contenidos para ayudar en las tareas de creación de contenidos.
¿Qué elementos son necesarios para implantar una herramienta que utilice patrones de diseño?
Estos bloques de construcción permiten a las inteligencias de IA realizar una amplia variedad de tareas. Veamos los elementos clave necesarios para implementar una herramienta que utilice patrones de diseño:
- Llamadas a funciones/herramientasLas funciones o herramientas son bloques de código reutilizables que las inteligencias utilizan para realizar tareas. Las funciones o herramientas son bloques de código reutilizables que las inteligencias utilizan para realizar tareas. Puede tratarse de funciones sencillas (por ejemplo, calculadoras) o de llamadas a la API de servicios de terceros (por ejemplo, consulta de cotizaciones bursátiles o previsiones meteorológicas1 ).
- Recuperación dinámica de la informaciónIntelligentsia puede consultar API o bases de datos externas para obtener los datos más recientes. Esto resulta útil para tareas como el análisis de datos, la obtención de cotizaciones bursátiles o información meteorológica1.
- Ejecución e interpretación del códigoIntelligentsia puede ejecutar código o secuencias de comandos para resolver problemas matemáticos, generar informes o realizar simulaciones 1.
- Automatización del flujo de trabajoAutomatización de flujos de trabajo: se trata de automatizar flujos de trabajo repetitivos o de varios pasos mediante la integración de herramientas como programadores de tareas, servicios de correo electrónico o canalizaciones de datos1.
- Atención al clienteInteligencia: las inteligencias pueden interactuar con sistemas CRM, plataformas de órdenes de trabajo o bases de conocimiento para resolver las consultas de los usuarios 1.
- Generación y edición de contenidos: Intelligentsia puede utilizar herramientas como correctores gramaticales, resumidores de texto o evaluadores de la seguridad de los contenidos para ayudar en las tareas de creación de contenidos..
A continuación, veamos con más detalle las llamadas a funciones/herramientas.
Llamadas a funciones/herramientas
Las llamadas a funciones son la principal forma que tenemos de permitir que los Modelos de Lenguaje Extenso (LLM) interactúen con las herramientas. A menudo, "función" y "herramienta" se utilizan indistintamente, ya que las "funciones" (bloques de código reutilizables) son las "herramientas" que utilizan las inteligencias para realizar tareas. herramientas". Para invocar el código de una función, el Gran Modelo Lingüístico (LLM) debe comparar la petición del usuario con la descripción de la función. Para ello, se envía al LLM un esquema que contiene todas las descripciones de funciones disponibles. A continuación, el Large Language Model (LLM) selecciona la función que mejor se adapta a la tarea y devuelve su nombre y sus parámetros. La función seleccionada se llama y su respuesta se envía de nuevo al Modelo de Lenguaje Grande (LLM), que utiliza esta información para responder a la solicitud del usuario.
Para los desarrolladores que implementan las llamadas de función para las inteligencias, se necesita:
- Modelo de lenguaje amplio (LLM) con soporte de llamadas a funciones
- Patrones que contienen descripciones de funciones
- Código de cada función descrita
Vamos a ilustrarlo con un ejemplo para obtener la hora actual de una ciudad:
- Inicializar el Modelo de Lenguaje Grande (LLM) que soporta llamadas a funciones:
No todos los modelos admiten llamadas a funciones, por lo que es importante comprobar que el Modelo de Lenguaje Extenso (LLM) que está utilizando sí las admite.Azure OpenAI Soporte para llamadas a funciones. Podemos empezar inicializando el cliente Azure OpenAI.# Initialize the Azure OpenAI client client = AzureOpenAI( azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), api_key=os.getenv("AZURE_OPENAI_API_KEY"), api_version="2024-05-01-preview" )
- Creación de patrones de funciones::
A continuación, definiremos un esquema JSON que contenga el nombre de la función, una descripción de la función de la función y los nombres y descripciones de los parámetros de la función. A continuación, tomaremos este esquema y lo pasaremos junto con la solicitud del usuario al cliente creado anteriormente para encontrar la hora en San Francisco. Es importante tener en cuenta que el retorno de la función Llamada a la herramienta(matemáticas) géneroen lugar de La respuesta final a la pregunta. Como ya se ha mencionado, el Modelo de Lenguaje Grande (LLM) devuelve el nombre de la función que ha elegido para la tarea, así como los argumentos que se le pasarán.
# Function description for the model to read
tools = [
{
"type": "function",
"function": {
"name": "get_current_time",
"description": "Get the current time in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. San Francisco",
},
},
"required": ["location"],
},
}
}
]
# Initial user message
messages = [{"role": "user", "content": "What's the current time in San Francisco"}]
# First API call: Ask the model to use the function
response = client.chat.completions.create(
model=deployment_name,
messages=messages,
tools=tools,
tool_choice="auto",
)
# Process the model's response
response_message = response.choices[0].message
messages.append(response_message)
print("Model's response:")
print(response_message)
Model's response:
ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_pOsKdUlqvdyttYB67MOj434b', function=Function(arguments='{"location":"San Francisco"}', name='get_current_time'), type='function')])
- El código de la función necesaria para realizar la tarea:
Ahora que el Modelo de Lenguaje Grande (LLM) ha seleccionado la función que necesita ser ejecutada, el código para realizar la tarea necesita ser implementado y ejecutado. Podemos implementar código para obtener la hora actual en Python. También necesitamos escribir código para extraer el nombre y los parámetros del response_message para obtener el resultado final.def get_current_time(location): """Get the current time for a given location""" print(f"get_current_time called with location: {location}") location_lower = location.lower() for key, timezone in TIMEZONE_DATA.items(): if key in location_lower: print(f"Timezone found for {key}") current_time = datetime.now(ZoneInfo(timezone)).strftime("%I:%M %p") return json.dumps({ "location": location, "current_time": current_time }) print(f"No timezone data found for {location_lower}") return json.dumps({"location": location, "current_time": "unknown"})
# Handle function calls if response_message.tool_calls: for tool_call in response_message.tool_calls: if tool_call.function.name == "get_current_time": function_args = json.loads(tool_call.function.arguments) time_response = get_current_time( location=function_args.get("location") ) messages.append({ "tool_call_id": tool_call.id, "role": "tool", "name": "get_current_time", "content": time_response, }) else: print("No tool calls were made by the model.") # Second API call: Get the final response from the model final_response = client.chat.completions.create( model=deployment_name, messages=messages, ) return final_response.choices[0].message.content
get_current_time called with location: San Francisco Timezone found for san francisco The current time in San Francisco is 09:24 AM.
La llamada a funciones está en el corazón de la mayoría (si no de todos) los diseños de uso de herramientas smartbody, pero implementarla desde cero a veces puede ser todo un reto. Como hemos visto en el Lección 2 Como hemos aprendido, el marco Agentic nos proporciona bloques de construcción preconstruidos para permitir el uso de herramientas.
Ejemplos de uso de herramientas con el marco Agentic
He aquí algunos ejemplos de cómo utilizar patrones de diseño con diferentes herramientas de implementación de marcos agénticos:
Núcleo semántico
Semantic Kernel es un marco de IA de código abierto para desarrolladores .NET, Python y Java que utilizan grandes modelos de lenguaje (LLM). NET, Python y Java que utilizan grandes modelos de lenguaje (LLM). serialización describe automáticamente tu función y sus argumentos al modelo, simplificando así el proceso de uso de llamadas a funciones. También se encarga de la comunicación de ida y vuelta entre el modelo y el código. Otra ventaja de utilizar un marco de trabajo agéntico como Semantic Kernel es que permite acceder a herramientas preconfiguradas como la herramienta Búsqueda de documentos responder cantando intérprete de código.
El siguiente diagrama ilustra el proceso de realizar llamadas a funciones utilizando el Semantic Kernel:

En Semantic Kernel, las funciones/herramientas se denominan interponerPiezas. Podemos hacer esto combinando lo que vimos antes con la función get_current_time
en una clase y colocar esa función en ella, convirtiéndola así en un plugin. También podemos importar la clase kernel_function
que acepta la descripción de la función. A continuación, al crear el núcleo mediante el GetCurrentTimePlugin, el núcleo serializa automáticamente la función y sus argumentos para crear el esquema que se enviará al Modelo de Lenguaje Grande (LLM) en el proceso.
from semantic_kernel.functions import kernel_function
class GetCurrentTimePlugin:
async def __init__(self, location):
self.location = location
@kernel_function(
description="Get the current time for a given location"
)
def get_current_time(location: str = ""):
...
from semantic_kernel import Kernel
# Create the kernel
kernel = Kernel()
# Create the plugin
get_current_time_plugin = GetCurrentTimePlugin(location)
# Add the plugin to the kernel
kernel.add_plugin(get_current_time_plugin)
Servicio de agente Azure AI
Azure AI Agent Service es un marco agéntico más reciente diseñado para permitir a los desarrolladores crear, desplegar y escalar de forma segura inteligencias de IA escalables y de alta calidad sin necesidad de gestionar los recursos informáticos y de almacenamiento subyacentes. Es especialmente útil para aplicaciones empresariales porque es un servicio totalmente gestionado con seguridad de nivel empresarial.
El servicio Azure AI Agent Service ofrece varias ventajas sobre el desarrollo directo con la API Large Language Model (LLM), entre las que se incluyen:
- Llamadas automatizadas a herramientas: ya no es necesario analizar las llamadas a herramientas, invocarlas y procesar las respuestas; todo esto se hace ahora en el servidor.
- Datos gestionados de forma segura: puede confiar en los hilos para almacenar toda la información que necesite, en lugar de gestionar su propio estado de diálogo.
- Herramientas listas para usar: herramientas que puede utilizar para interactuar con fuentes de datos como Bing, Azure AI Search y Azure Functions.
Las herramientas disponibles en Azure AI Agent Service pueden dividirse en dos categorías:
- Herramientas de conocimiento:
- Uso de Bing Search para el procesamiento básico
- Búsqueda de documentos
- Búsqueda Azure AI
- Herramientas operativas:
- llamada de función
- intérprete de código
- Herramientas definidas por OpenAI
- Funciones Azure
Agent Service nos permite utilizar estas herramientas conjuntamente como toolset
. También utiliza threads
para seguir el historial de mensajes de una conversación concreta.
Suponga que es usted un agente de ventas de Contoso Corporation. Quiere desarrollar un agente de diálogo que pueda responder a preguntas sobre sus datos de ventas.
El siguiente diagrama ilustra cómo puede utilizar Azure AI Agent Service para analizar sus datos de ventas:

Para utilizar cualquiera de estas herramientas con un servicio, podemos crear un cliente y definir una herramienta o conjunto de herramientas. Para ello, podemos utilizar el siguiente código Python. El Large Language Model (LLM) será capaz de mirar el conjunto de herramientas y decidir si utilizar una función creada por el usuario o no. fetch_sales_data_using_sqlite_query
o un intérprete de código preconstruido, en función de la solicitud del usuario.
import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from fecth_sales_data_functions import fetch_sales_data_using_sqlite_query # fetch_sales_data_using_sqlite_query function which can be found in a fetch_sales_data_functions.py file.
from azure.ai.projects.models import ToolSet, FunctionTool, CodeInterpreterTool
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=os.environ["PROJECT_CONNECTION_STRING"],
)
# Initialize function calling agent with the fetch_sales_data_using_sqlite_query function and adding it to the toolset
fetch_data_function = FunctionTool(fetch_sales_data_using_sqlite_query)
toolset = ToolSet()
toolset.add(fetch_data_function)
# Initialize Code Interpreter tool and adding it to the toolset.
code_interpreter = code_interpreter = CodeInterpreterTool()
toolset = ToolSet()
toolset.add(code_interpreter)
agent = project_client.agents.create_agent(
model="gpt-4o-mini", name="my-agent", instructions="You are helpful agent",
toolset=toolset
)
¿Qué consideraciones especiales hay que tener en cuenta a la hora de utilizar herramientas para crear inteligencias de IA fiables utilizando patrones de diseño?
Un problema común con el SQL generado dinámicamente para los modelos de grandes lenguajes (LLM) es la seguridad, concretamente el riesgo de inyección SQL u operaciones maliciosas como borrar o manipular la base de datos. Aunque estas preocupaciones son legítimas, pueden mitigarse eficazmente configurando adecuadamente los derechos de acceso a la base de datos. Para la mayoría de las bases de datos, esto implica configurar la base de datos como de sólo lectura. Para servicios de bases de datos como PostgreSQL o Azure SQL, se deben asignar roles de sólo lectura (SELECT) a las aplicaciones.
La protección puede reforzarse aún más ejecutando las aplicaciones en un entorno seguro. En un escenario empresarial, los datos suelen extraerse de los sistemas operativos y transformarse en una base de datos de sólo lectura o en un almacén de datos con un esquema fácil de usar. Este enfoque garantiza que los datos estén seguros, optimizados en cuanto a rendimiento y accesibilidad, y que las aplicaciones tengan un acceso restringido de sólo lectura.
© declaración de copyright
Derechos de autor del artículo Círculo de intercambio de inteligencia artificial Todos, por favor no reproducir sin permiso.
Artículos relacionados
Sin comentarios...