Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Aprenda a integrar Azure Functions con agentes de Microsoft Foundry mediante un enfoque de herramienta basado en cola. En este artículo se muestra cómo crear herramientas personalizadas sin servidor a las que el modelo Foundry de un agente puede llamar de forma asincrónica a través de Azure Queue Storage. Con este enfoque, los agentes pueden acceder a sistemas empresariales y lógica empresarial compleja con precios escalables hacia cero.
Los agentes de Foundry se conectan directamente a la cola de entrada supervisada por Azure Functions mediante una definición de herramienta proporcionada por AzureFunctionsTool. Cuando un agente necesita usar esta herramienta hospedada Azure Functions, usa la definición de herramienta para colocar un mensaje en una cola de entrada supervisada por la aplicación de funciones en Azure Functions. Un desencadenador de cola de Azure Storage invoca el código de función para procesar el mensaje y devolver un resultado a través de un enlace de cola de salida. El agente lee el mensaje de la cola de salida para continuar la conversación.
Functions ofrece varios planes de hospedaje. El plan de consumo flexible es ideal para hospedar sus herramientas personalizadas, ya que proporciona:
- Hospedaje sin servidor que escala a cero con precios según el consumo.
- Acceso basado en identidades a los recursos de Azure, incluidos los recursos de las redes virtuales.
- Conexiones de origen de datos declarativas mediante enlaces de entrada y salida.
Soporte de uso
En la tabla siguiente se muestra la compatibilidad con el SDK y la configuración.
| compatibilidad con Microsoft Foundry | SDK de Python | C# SDK | JavaScript SDK | SDK de Java | REST API | Configuración básica del agente | Configuración del agente estándar |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | - | ✔️ |
Requisitos previos
La biblioteca cliente Azure AI Projects para Python (
azure-ai-projects>=2.0.0). Consulte el inicio rápido para obtener más información sobre la instalación.Un agente implementado con la configuración estándar
Nota
No se admite la configuración básica del agente.
Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
Ejemplos de código
Los ejemplos de código siguientes muestran cómo definir una herramienta de función de Azure que obtiene información meteorológica para una ubicación especificada mediante la integración basada en cola.
Instalación del paquete
Instale la biblioteca cliente Azure AI Projects:
pip install "azure-ai-projects>=2.0.0"
Definición de la herramienta y creación de un agente
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
AzureFunctionBinding,
AzureFunctionDefinition,
AzureFunctionStorageQueue,
AzureFunctionDefinitionFunction,
AzureFunctionTool,
PromptAgentDefinition,
)
# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
STORAGE_QUEUE_ENDPOINT = "your_storage_queue_service_endpoint"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# Define the Azure Function tool
tool = AzureFunctionTool(
azure_function=AzureFunctionDefinition(
input_binding=AzureFunctionBinding(
storage_queue=AzureFunctionStorageQueue(
queue_name="get-weather-input-queue",
queue_service_endpoint=STORAGE_QUEUE_ENDPOINT,
)
),
output_binding=AzureFunctionBinding(
storage_queue=AzureFunctionStorageQueue(
queue_name="get-weather-output-queue",
queue_service_endpoint=STORAGE_QUEUE_ENDPOINT,
)
),
function=AzureFunctionDefinitionFunction(
name="GetWeather",
description="Get the weather in a location.",
parameters={
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The location to look up.",
}
},
},
),
)
)
# Create the agent with the Azure Function tool
agent = project.agents.create_version(
agent_name="azure-function-agent-get-weather",
definition=PromptAgentDefinition(
model="gpt-5.1",
instructions="You are a helpful support agent. Answer the user's questions to the best of your ability.",
tools=[tool],
),
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")
Creación de una respuesta
response = openai.responses.create(
input="What is the weather in Seattle, WA?",
extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
print(f"Response: {response.output_text}")
Limpieza
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
print("Agent deleted")
Escribe la función de Azure
Los ejemplos de código anteriores muestran cómo definir la herramienta Azure Function en el lado del agente. También debe escribir la función que procesa los mensajes de cola. La función recibe la entrada de la cola de entrada, ejecuta la lógica personalizada y devuelve un resultado a través de la cola de salida.
En el ejemplo siguiente se muestra una función desencadenada por cola que obtiene información meteorológica de una ubicación. La función analiza el mensaje entrante, extrae los argumentos de la función y devuelve una respuesta con un CorrelationId que el agente usa para hacer coincidir el resultado con la solicitud original.
import azure.functions as func
import logging
import json
app = func.FunctionApp()
# Queue trigger receives agent tool calls from the input queue
# and returns results through the output queue binding
@app.queue_trigger(
arg_name="msg",
queue_name="get-weather-input-queue",
connection="STORAGE_CONNECTION",
)
@app.queue_output(
arg_name="outputQueue",
queue_name="get-weather-output-queue",
connection="STORAGE_CONNECTION",
)
def queue_trigger(
msg: func.QueueMessage, outputQueue: func.Out[str]
):
try:
# Parse the incoming message from the agent
messagepayload = json.loads(
msg.get_body().decode("utf-8")
)
logging.info("Received: %s", json.dumps(messagepayload))
# Extract the function arguments
function_args = messagepayload.get("function_args", {})
location = function_args.get("location")
# Run your custom logic (replace with real API calls)
weather_result = (
f"Weather is {len(location)} degrees "
f"and sunny in {location}"
)
# Return result with the CorrelationId from the request
response_message = {
"Value": weather_result,
"CorrelationId": messagepayload["CorrelationId"],
}
outputQueue.set(json.dumps(response_message))
except Exception as e:
logging.error("Error processing message: %s", e)
Importante
El mensaje de respuesta debe incluir el CorrelationId del mensaje original. El agente usa este valor a fin de emparejar la salida de la función con la invocación de la herramienta correcta.
Para obtener el ejemplo completo, consulte ejemplo de clima de Azure Functions en el repositorio SDK de Azure para Python.
Instalación de los paquetes
Instale las bibliotecas cliente de Azure AI Projects:
dotnet add package Azure.AI.Projects
dotnet add package Azure.AI.Extensions.OpenAI
dotnet add package Azure.Identity
Definición de la herramienta y creación de un agente
using System;
using System.Text.Json;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var storageQueueUri = "your_storage_queue_service_endpoint";
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
AzureFunctionDefinitionFunction functionDefinition = new(
name: "GetWeather",
parameters: BinaryData.FromObjectAsJson(
new
{
Type = "object",
Properties = new
{
location = new
{
Type = "string",
Description = "The location to look up.",
}
}
},
new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }
)
)
{
Description = "Get the weather in a location.",
};
AzureFunctionTool azureFnTool = new(
new AzureFunctionDefinition(
function: functionDefinition,
inputBinding: new AzureFunctionBinding(
new AzureFunctionStorageQueue(
queueServiceEndpoint: storageQueueUri,
queueName: "input")),
outputBinding: new AzureFunctionBinding(
new AzureFunctionStorageQueue(
queueServiceEndpoint: storageQueueUri,
queueName: "output"))
)
);
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-5-mini")
{
Instructions = "You are a helpful support agent. Answer the user's questions "
+ "to the best of your ability.",
Tools = { azureFnTool },
};
AgentVersion agentVersion = await projectClient.AgentAdministrationClient.CreateAgentVersionAsync(
agentName: "azure-function-agent-get-weather",
options: new(agentDefinition));
Console.WriteLine($"Agent created (id: {agentVersion.Id}, name: {agentVersion.Name}, "
+ $"version: {agentVersion.Version})");
Creación de una respuesta
ProjectResponsesClient responseClient =
projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
CreateResponseOptions responseOptions = new()
{
InputItems =
{
ResponseItem.CreateUserMessageItem("What is the weather in Seattle, WA?")
},
};
ResponseResult response = await responseClient.CreateResponseAsync(responseOptions);
Console.WriteLine(response.GetOutputText());
Limpieza
await projectClient.AgentAdministrationClient.DeleteAgentVersionAsync(
agentName: agentVersion.Name,
agentVersion: agentVersion.Version);
Console.WriteLine("Agent deleted");
Escribe la función de Azure
Los ejemplos de código anteriores muestran cómo definir la herramienta Azure Function en el lado del agente. También debe escribir la función que procesa los mensajes de cola. La función recibe la entrada de la cola de entrada, ejecuta la lógica personalizada y devuelve un resultado a través de la cola de salida.
En el ejemplo siguiente se muestra una función desencadenada por cola que obtiene información meteorológica de una ubicación. En este ejemplo se usa el modelo de trabajo aislado. La función analiza el mensaje entrante, extrae los argumentos de la función y devuelve una respuesta con un CorrelationId que el agente usa para hacer coincidir el resultado con la solicitud original.
using System.Text.Json;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
public class GetWeather
{
private readonly ILogger<GetWeather> _logger;
public GetWeather(ILogger<GetWeather> logger)
{
_logger = logger;
}
// Queue trigger receives agent tool calls from the input
// queue and returns results through the output queue
[Function("GetWeather")]
[QueueOutput(
"get-weather-output-queue",
Connection = "STORAGE_CONNECTION")]
public string Run(
[QueueTrigger(
"get-weather-input-queue",
Connection = "STORAGE_CONNECTION")]
string message)
{
_logger.LogInformation("Received: {Message}", message);
// Parse the incoming message from the agent
var payload = JsonSerializer.Deserialize<JsonElement>(
message);
var correlationId = payload
.GetProperty("CorrelationId").GetString();
var functionArgs = payload
.GetProperty("function_args");
var location = functionArgs
.GetProperty("location").GetString();
// Run your custom logic (replace with real API calls)
var weatherResult =
$"Weather is {location!.Length} degrees "
+ $"and sunny in {location}";
// Return result with the CorrelationId from the request
var response = new
{
Value = weatherResult,
CorrelationId = correlationId,
};
return JsonSerializer.Serialize(response);
}
}
Importante
El mensaje de respuesta debe incluir el CorrelationId del mensaje original. El agente usa este valor a fin de emparejar la salida de la función con la invocación de la herramienta correcta.
Instalación del paquete
Para agregar la dependencia de Azure AI Agents a su pom.xml:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
</dependency>
Definición de la herramienta y creación de un agente
import com.azure.ai.agents.*;
import com.azure.ai.agents.models.*;
import com.azure.core.util.BinaryData;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import java.util.*;
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
String projectEndpoint = "your_project_endpoint";
String storageQueueUri = "your_storage_queue_service_endpoint";
AgentsClientBuilder builder = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint)
.serviceVersion(AgentsServiceVersion.getLatest());
AgentsClient agentsClient = builder.buildAgentsClient();
ResponsesClient responsesClient = builder.buildResponsesClient();
// Define the function parameters
Map<String, BinaryData> parameters = new HashMap<>();
parameters.put("type", BinaryData.fromString("\"object\""));
parameters.put("properties", BinaryData.fromString(
"{\"location\": {\"type\": \"string\", "
+ "\"description\": \"The location to look up.\"}}"));
AzureFunctionDefinitionDetails function =
new AzureFunctionDefinitionDetails("GetWeather", parameters)
.setDescription("Get the weather in a location.");
AzureFunctionTool azureFnTool = new AzureFunctionTool(
new AzureFunctionDefinition(
function,
new AzureFunctionBinding(
new AzureFunctionStorageQueue(storageQueueUri, "input")),
new AzureFunctionBinding(
new AzureFunctionStorageQueue(storageQueueUri, "output"))
)
);
PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-5.1")
.setInstructions("You are a helpful support agent. Answer the user's "
+ "questions to the best of your ability.")
.setTools(Collections.singletonList(azureFnTool));
AgentVersionDetails agent = agentsClient.createAgentVersion(
"azure-function-agent-get-weather", agentDefinition);
System.out.printf("Agent created (id: %s, name: %s, version: %s)%n",
agent.getId(), agent.getName(), agent.getVersion());
Creación de una respuesta
AgentReference agentReference = new AgentReference(agent.getName())
.setVersion(agent.getVersion());
Response response = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentReference),
ResponseCreateParams.builder()
.input("What is the weather in Seattle, WA?"));
System.out.println("Response: " + response.output());
Limpieza
agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
System.out.println("Agent deleted");
Escribe la función de Azure
Los ejemplos de código anteriores muestran cómo definir la herramienta Azure Function en el lado del agente. También debe escribir la función que procesa los mensajes de cola. La función recibe la entrada de la cola de entrada, ejecuta la lógica personalizada y devuelve un resultado a través de la cola de salida.
En el ejemplo siguiente se muestra una función desencadenada por cola que obtiene información meteorológica de una ubicación. La función analiza el mensaje entrante, extrae los argumentos de la función y devuelve una respuesta con un CorrelationId que el agente usa para hacer coincidir el resultado con la solicitud original.
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import java.util.logging.Logger;
public class GetWeather {
// Queue trigger receives agent tool calls from the input
// queue and returns results through the output queue
@FunctionName("GetWeather")
@QueueOutput(
name = "output",
queueName = "get-weather-output-queue",
connection = "STORAGE_CONNECTION")
public String run(
@QueueTrigger(
name = "msg",
queueName = "get-weather-input-queue",
connection = "STORAGE_CONNECTION")
String message,
final ExecutionContext context) {
Logger logger = context.getLogger();
logger.info("Received: " + message);
// Parse the incoming message from the agent
JsonObject payload =
JsonParser.parseString(message)
.getAsJsonObject();
String correlationId =
payload.get("CorrelationId").getAsString();
JsonObject functionArgs =
payload.getAsJsonObject("function_args");
String location =
functionArgs.get("location").getAsString();
// Run your custom logic (replace with real API calls)
String weatherResult =
"Weather is " + location.length()
+ " degrees and sunny in " + location;
// Return result with the CorrelationId
JsonObject response = new JsonObject();
response.addProperty("Value", weatherResult);
response.addProperty(
"CorrelationId", correlationId);
return response.toString();
}
}
Importante
El mensaje de respuesta debe incluir el CorrelationId del mensaje original. El agente usa este valor a fin de emparejar la salida de la función con la invocación de la herramienta correcta.
Instalación de los paquetes
Instale la biblioteca cliente Azure AI Projects:
npm install @azure/ai-projects @azure/identity
Definición de la herramienta y creación de un agente
import { AIProjectClient } from "@azure/ai-projects";
import { DefaultAzureCredential } from "@azure/identity";
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const STORAGE_QUEUE_ENDPOINT = "your_storage_queue_service_endpoint";
// Create clients to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = project.getOpenAIClient();
const agent = await project.agents.createVersion(
"azure-function-agent-get-weather",
{
kind: "prompt",
model: "gpt-5.1",
instructions:
"You are a helpful support agent. Answer the user's questions to the best of your ability.",
tools: [
{
type: "azure_function",
azure_function: {
function: {
name: "GetWeather",
description: "Get the weather in a location.",
parameters: {
type: "object",
properties: {
location: {
type: "string",
description: "The location to look up.",
},
},
},
},
input_binding: {
type: "storage_queue",
storage_queue: {
queue_service_endpoint: STORAGE_QUEUE_ENDPOINT,
queue_name: "get-weather-input-queue",
},
},
output_binding: {
type: "storage_queue",
storage_queue: {
queue_service_endpoint: STORAGE_QUEUE_ENDPOINT,
queue_name: "get-weather-output-queue",
},
},
},
},
],
},
);
console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);
Creación de una respuesta
const response = await openai.responses.create(
{
input: "What is the weather in Seattle, WA?",
},
{
body: {
agent: { name: agent.name, type: "agent_reference" },
},
},
);
console.log(`Response: ${response.output_text}`);
Limpieza
await project.agents.deleteVersion(agent.name, agent.version);
console.log("Agent deleted");
Escribe la función de Azure
Los ejemplos de código anteriores muestran cómo definir la herramienta Azure Function en el lado del agente. También debe escribir la función que procesa los mensajes de cola. La función recibe la entrada de la cola de entrada, ejecuta la lógica personalizada y devuelve un resultado a través de la cola de salida.
En el ejemplo siguiente se muestra una función desencadenada por cola que obtiene información meteorológica de una ubicación. En este ejemplo se usa el modelo de programación v4. La función analiza el mensaje entrante, extrae los argumentos de la función y devuelve una respuesta con un CorrelationId que el agente usa para hacer coincidir el resultado con la solicitud original.
import {
app,
InvocationContext,
output,
} from "@azure/functions";
// Define the output queue binding
const queueOutput = output.storageQueue({
queueName: "get-weather-output-queue",
connection: "STORAGE_CONNECTION",
});
interface AgentMessage {
CorrelationId: string;
function_args: { location: string };
}
// Queue trigger receives agent tool calls from the input
// queue and returns results through the output queue
async function getWeather(
message: unknown,
context: InvocationContext
): Promise<void> {
const payload = message as AgentMessage;
context.log("Received:", JSON.stringify(payload));
// Extract the function arguments
const location = payload.function_args.location;
// Run your custom logic (replace with real API calls)
const weatherResult =
`Weather is ${location.length} degrees ` +
`and sunny in ${location}`;
// Return result with the CorrelationId from the request
const response = {
Value: weatherResult,
CorrelationId: payload.CorrelationId,
};
context.extraOutputs.set(queueOutput, response);
}
// Register the queue trigger function
app.storageQueue("getWeather", {
queueName: "get-weather-input-queue",
connection: "STORAGE_CONNECTION",
extraOutputs: [queueOutput],
handler: getWeather,
});
Importante
El mensaje de respuesta debe incluir el CorrelationId del mensaje original. El agente usa este valor a fin de emparejar la salida de la función con la invocación de la herramienta correcta.
Crear una versión del agente
Cree una versión del agente mediante la definición de la herramienta Azure Function.
curl --request POST \
--url $FOUNDRY_PROJECT_ENDPOINT/agents/azure-function-agent-get-weather/versions?api-version=$API_VERSION \
-H "Authorization: Bearer $AGENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"description": "Agent with Azure Function tool",
"definition": {
"kind": "prompt",
"model": "gpt-5.1",
"instructions": "You are a helpful support agent. Answer the user's questions to the best of your ability.",
"tools": [
{
"type": "azure_function",
"azure_function": {
"function": {
"name": "GetWeather",
"description": "Get the weather in a location.",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "The location to look up."}
},
"required": ["location"]
}
},
"input_binding": {
"type": "storage_queue",
"storage_queue": {
"queue_service_endpoint": "https://storageaccount.queue.core.windows.net",
"queue_name": "input"
}
},
"output_binding": {
"type": "storage_queue",
"storage_queue": {
"queue_service_endpoint": "https://storageaccount.queue.core.windows.net",
"queue_name": "output"
}
}
}
}
]
}
}'
Creación de una respuesta
Cree una respuesta que use la versión del agente para obtener información meteorológica.
curl --request POST \
--url $FOUNDRY_PROJECT_ENDPOINT/openai/responses?api-version=$API_VERSION \
-H "Authorization: Bearer $AGENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"input": "What is the weather in Seattle, WA?",
"agent": {
"name": "azure-function-agent-get-weather",
"type": "agent_reference"
}
}'
Escribe la función de Azure
Los ejemplos de la API REST muestran cómo configurar la definición de la herramienta función de Azure. La función Azure es código del lado servidor que se escribe en un lenguaje de Functions compatible. Seleccione uno de los otros lenguajes (Python, C#, Java o TypeScript) para ver la implementación de la función.
Cuándo usar Azure Functions frente a llamadas a funciones
Aunque función de llamada le permite definir herramientas que se ejecutan en proceso con el código del agente, hospedar herramientas personalizadas en Azure Functions proporciona funcionalidades empresariales adicionales cuando lo necesite:
- Separación de preocupaciones: aísle la lógica de negocios del código del agente, por lo que puede desarrollar, probar e implementar de forma independiente.
- Administración centralizada: cree herramientas reutilizables que varios agentes, aplicaciones o equipos puedan usar de forma coherente.
- Aislamiento de seguridad: controle que los agentes accedan a las herramientas de forma independiente al acceso a los recursos empresariales. Este enfoque significa que solo puede asignar agentes los permisos específicos que necesitan para llamar a la herramienta sin tener que proporcionar acceso directo a bases de datos, API o redes subyacentes.
- Dependencias externas: Use bibliotecas que no son de Microsoft, entornos de tiempo de ejecución específicos o integraciones del sistema heredadas.
- Operaciones complejas: controle flujos de trabajo y transformaciones de datos de varios pasos o descargue operaciones de uso intensivo de cálculo.
- Procesamiento asincrónico: ejecute operaciones de larga duración con funcionalidades de reintento y control resistente de mensajes.
Opciones de integración
Foundry Agent Service proporciona dos formas principales de que los agentes accedan a las herramientas hospedadas Azure Functions:
| Característica | Servidores de Protocolo de contexto de modelo (MCP) | herramientas basadas en Queue Storage de Azure |
|---|---|---|
| ¿Cómo funciona? | Los agentes se conectan a la aplicación de funciones en Azure mediante el protocolo MCP. La propia aplicación de funciones actúa como un servidor MCP personalizado, exponiendo las funciones individuales como herramientas. Un servidor MCP personalizado abstrae la complejidad de hospedar y exponer herramientas del proyecto del agente y promueve la reutilización del código. | Los agentes se comunican con el código de herramienta de la aplicación de funciones en Azure a través de Queue Storage colocando mensajes en una cola, lo que desencadena la ejecución del código de la herramienta. La aplicación de funciones escucha las colas de entrada, procesa los mensajes de forma asincrónica y devuelve una respuesta a una segunda cola. |
| ¿Cuándo usarlo? | Ideal para aprovechar el protocolo estándar del sector para la integración de herramientas para agentes. ✔ Proporciona interacciones sincrónicas y en tiempo real con respuestas inmediatas. |
✔ Ideal para flujos de trabajo asincrónicos que no requieren respuestas en tiempo real. ✔ Ideal para el procesamiento en segundo plano y la entrega de mensajes confiable con funcionalidades de reintento. |
| Configuración del SDK | Herramienta MCP genérica | Específico (consulte ejemplos de código anteriores) |
| Introducción | Cómo usar Azure Functions con MCP | Consulte Ejemplos de código anteriores. |
En el caso de las funciones de desencadenador HTTP, también puede integrar mediante la descripción de la función a través de una especificación de OpenAPI y registrarla como una herramienta invocable mediante la herramienta OpenAPI en la configuración del agente. Este enfoque proporciona flexibilidad para las funciones basadas en HTTP existentes, pero requiere una configuración adicional para definir la especificación de la API.
Modelos admitidos
Para usar todas las características de las llamadas a funciones, incluidas las funciones paralelas, use un modelo que se publicó después del 6 de noviembre de 2023.
Crear e implementar el ejemplo de integración de herramientas basada en colas
Para usar un ejemplo de la CLI de desarrollador de Azure (azd) que configura un agente con Functions para admitir la integración de herramientas basada en cola para agentes, siga estos pasos:
Nota
Para obtener instrucciones detalladas sobre cómo definir y hospedar herramientas basadas en Funciones como servidores MCP, consulte Host MCP servers in Azure Functions.
Inicialización de la plantilla de proyecto
Este proyecto usa azd para simplificar la creación de recursos Azure e implementar el código. Esta implementación sigue los procedimientos recomendados actuales para las implementaciones seguras y escalables de Functions. Puede encontrar la plantilla y el código que se usa aquí en GitHub.
Ejecute el siguiente
azd initcomando en una ventana de terminal para inicializar el proyecto desde la plantilla azd:azd init --template azure-functions-ai-services-agent-python
Cuando se le solicite, proporcione un nombre de entorno, como ai-services-agent-python. En azd, el entorno mantiene un contexto de implementación único para la aplicación y puede definir más de uno. El nombre del entorno también se usa en el nombre del grupo de recursos y en otros recursos que cree en Azure.
Ejecute este comando para permitir que los scripts de instalación local se ejecuten correctamente, lo que depende del sistema operativo local:
Aprovisionamiento de recursos
Ejecute el comando azd provision para crear los recursos necesarios en Azure:
azd provision
Cuando se le solicite, proporcione estos parámetros de implementación necesarios:
| Indicación | Descripción |
|---|---|
| Selección de una suscripción de Azure que se va a usar | Elija la suscripción en la que desea crear los recursos. |
| parámetro de ubicación para la implementación | Región de Azure para crear el grupo de recursos que contiene los nuevos recursos de Azure. Solo se muestran las regiones que admiten actualmente el plan de consumo flexible. |
| Parámetro de implementación vnetEnabled | Aunque la plantilla admite la creación de recursos dentro de una red virtual, elija False simplificar la implementación y las pruebas. |
- Plan de consumo flexible y aplicación de funciones
- Plataforma del agente en Foundry, entre las que se incluyen:
- Cuenta de servicios
- Implementación de modelos
- Proyecto
- Agentes
- Búsqueda
- La cuenta de Azure Cosmos DB (utilizada en la búsqueda)
- Azure Storage (requerido por los agentes de Functions e IA) y Application Insights (recomendado)
- Directivas y roles de acceso para las cuentas
- Conexiones de servicio a servicio que usan identidades administradas (en lugar de cadenas de conexión almacenadas)
Los scripts posteriores al aprovisionamiento también crean un local.settings.json archivo, que Functions requiere que se ejecute localmente. El archivo generado debe tener este aspecto:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"STORAGE_CONNECTION__queueServiceUri": "https://<storageaccount>.queue.core.windows.net",
"PROJECT_CONNECTION_STRING": "<project connnection for AI Project>"
}
}
Ejecución de la aplicación en Visual Studio Code
- Abra la carpeta en un nuevo terminal.
- Ejecute el comando
code .para abrir el proyecto en Visual Studio Code. - En la paleta de comandos (F1), escriba
Azurite: Start. Esta acción permite la depuración mediante el almacenamiento local para el entorno de ejecución de Functions. - Presione Ejecutar/Depurar (F5) para ejecutar el depurador. Seleccione Depurar de todos modos si se le indica que el emulador local no está en funcionamiento.
- Envíe endpoints POST
promptusando respectivamente su herramienta de prueba HTTP. Si tiene instalada la extensión RestClient, puede ejecutar solicitudes directamente desde el archivo de proyectotest.http.
Implementación en Azure
Ejecute este comando azd deploy para publicar el código del proyecto en la aplicación de funciones y los recursos Azure relacionados que acaba de aprovisionar:
azd deploy
Después de que la publicación se complete correctamente, azd le proporciona los puntos de conexión de dirección URL de las nuevas funciones, pero sin los valores de clave de función necesarios para acceder a los puntos de conexión. Puede usar el comando Azure Functions Core Tools func azure functionapp list-functions con la opción --show-keys para obtener las claves de los extremos de función. Para obtener más información, consulte Trabajar con claves de acceso en Funciones de Azure.
Reimplementación del código
Ejecute el comando azd up tantas veces como necesite aprovisionar los recursos de Azure e implementar actualizaciones de código en la aplicación de funciones.
Nota
El paquete de implementación más reciente siempre sobrescribe los archivos de código implementados.
Limpieza de recursos
Cuando haya terminado de trabajar con la aplicación de funciones y los recursos relacionados, use este comando para eliminar la aplicación de funciones y sus recursos relacionados de Azure y evitar incurrir en costos adicionales. La --purge opción no deja una eliminación temporal del recurso de IA y recupera la cuota:
azd down --purge