Utilize o Funções do Azure com o Foundry Agent Service

Aprenda a integrar Funções do Azure com agentes Microsoft Foundry utilizando uma aproximação instrumental baseada em filas. Este artigo mostra-lhe como construir ferramentas serverless personalizadas que o modelo Foundry de um agente possa chamar de forma assíncrona através do armazenamento do Azure Queue. Ao utilizar esta abordagem, os seus agentes podem aceder a sistemas empresariais e lógica de negócio complexa com preços escaláveis até zero.

Os agentes Foundry ligam-se diretamente à fila de entrada monitorizada por Funções do Azure usando uma definição de ferramenta fornecida por AzureFunctionsTool. Quando um agente precisa de usar esta ferramenta alojada no Funções do Azure, utiliza a definição da ferramenta para colocar uma mensagem numa fila de entrada que é monitorizada pela aplicação function no Funções do Azure. Um gatilho de fila do Armazenamento do Azure aciona o código da função para processar a mensagem e devolver um resultado através de uma associação de fila de saída. O agente lê a mensagem da fila de saída para continuar a conversa.

Functions oferece vários planos de alojamento. O plano Flex Consumption é ideal para alojar as suas ferramentas personalizadas porque proporciona:

  • Alojamento serverless com escalabilidade até zero e preços com base no consumo.
  • Acesso baseado em identidade a recursos no Azure, incluindo recursos dentro de redes virtuais.
  • Ligações declarativas à fonte de dados através de ligações de entrada/saída.

Suporte de utilização

A tabela seguinte mostra o suporte para SDK e configuração.

Suporte ao Microsoft Foundry Python SDK C# SDK JavaScript SDK Java SDK API REST Configuração básica do agente Configuração padrão do agente
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ - ✔️

Pré-requisitos

Exemplos de código

Os exemplos de código seguintes demonstram como definir uma ferramenta Azure Function que obtém informações meteorológicas para um local especificado através da integração baseada em fila.

Instale o pacote

Instale a biblioteca cliente do Azure AI Projects:

pip install "azure-ai-projects>=2.0.0"

Define a ferramenta e cria um 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})")

Crie uma resposta

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}")

Limpar

project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
print("Agent deleted")

Escrever a Função Azure

Os exemplos de código anteriores mostram como definir a ferramenta Azure Function do lado do agente. Também precisas de escrever a função que processa as mensagens da fila. A função recebe entrada da fila de entrada, executa a sua lógica personalizada e devolve um resultado através da fila de saída.

O exemplo seguinte mostra uma função ativada pela fila que obtém informações meteorológicas para uma localização. A função analisa a mensagem recebida, extrai os argumentos da função e devolve uma resposta com a CorrelationId que o agente usa para associar o resultado ao pedido 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

A mensagem de resposta deve incluir o CorrelationId da mensagem original. O agente usa este valor para corresponder a saída da função à chamada correta à ferramenta.

Para ver a amostra completa, consulte o Funções do Azure weather sample no repositório do SDK do Azure para Python.

Instale os pacotes

Instale as bibliotecas de cliente dos Projetos de Azure IA:

dotnet add package Azure.AI.Projects
dotnet add package Azure.AI.Extensions.OpenAI
dotnet add package Azure.Identity

Define a ferramenta e cria um 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})");

Crie uma resposta

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());

Limpar

await projectClient.AgentAdministrationClient.DeleteAgentVersionAsync(
    agentName: agentVersion.Name,
    agentVersion: agentVersion.Version);
Console.WriteLine("Agent deleted");

Escrever a Função Azure

Os exemplos de código anteriores mostram como definir a ferramenta Azure Function do lado do agente. Também precisas de escrever a função que processa as mensagens da fila. A função recebe entrada da fila de entrada, executa a sua lógica personalizada e devolve um resultado através da fila de saída.

O exemplo seguinte mostra uma função ativada pela fila que obtém informações meteorológicas para uma localização. Este exemplo utiliza o modelo do trabalhador isolado. A função analisa a mensagem recebida, extrai os argumentos da função e devolve uma resposta com a CorrelationId que o agente usa para associar o resultado ao pedido 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

A mensagem de resposta deve incluir o CorrelationId da mensagem original. O agente usa este valor para corresponder a saída da função à chamada correta à ferramenta.

Instale o pacote

Adicione a dependência Azure AI Agents ao seu 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>

Define a ferramenta e cria um 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());

Crie uma resposta

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());

Limpar

agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
System.out.println("Agent deleted");

Escrever a Função Azure

Os exemplos de código anteriores mostram como definir a ferramenta Azure Function do lado do agente. Também precisas de escrever a função que processa as mensagens da fila. A função recebe entrada da fila de entrada, executa a sua lógica personalizada e devolve um resultado através da fila de saída.

O exemplo seguinte mostra uma função ativada pela fila que obtém informações meteorológicas para uma localização. A função analisa a mensagem recebida, extrai os argumentos da função e devolve uma resposta com a CorrelationId que o agente usa para associar o resultado ao pedido 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

A mensagem de resposta deve incluir o CorrelationId da mensagem original. O agente usa este valor para corresponder a saída da função à chamada correta à ferramenta.

Instale os pacotes

Instale a biblioteca cliente do Azure AI Projects:

npm install @azure/ai-projects @azure/identity

Define a ferramenta e cria um 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})`);

Crie uma resposta

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}`);

Limpar

await project.agents.deleteVersion(agent.name, agent.version);
console.log("Agent deleted");

Escrever a Função Azure

Os exemplos de código anteriores mostram como definir a ferramenta Azure Function do lado do agente. Também precisas de escrever a função que processa as mensagens da fila. A função recebe entrada da fila de entrada, executa a sua lógica personalizada e devolve um resultado através da fila de saída.

O exemplo seguinte mostra uma função ativada pela fila que obtém informações meteorológicas para uma localização. Este exemplo utiliza o modelo de programação v4. A função analisa a mensagem recebida, extrai os argumentos da função e devolve uma resposta com a CorrelationId que o agente usa para associar o resultado ao pedido 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

A mensagem de resposta deve incluir o CorrelationId da mensagem original. O agente usa este valor para corresponder a saída da função à chamada correta à ferramenta.

Criar uma versão agente

Crie uma versão do agente usando a definição da ferramenta 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"
                  }
              }
          }
        }
      ]
    }
  }'

Crie uma resposta

Crie uma resposta que use a versão do agente para obter informações meteorológicas.

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"
    }
  }'

Escrever a Função Azure

Os exemplos da API REST mostram como configurar a definição da ferramenta Azure Function. A Azure Function é um código de servidor que se escreve numa linguagem de Funções suportada. Selecione uma das outras linguagens (Python, C#, Java ou TypeScript) para ver a implementação da função.

Quando usar Funções do Azure em comparação com a invocação de funções

Embora a chamada de funções permita definir ferramentas que executam no mesmo processo do seu código de agente, alojar ferramentas personalizadas no Funções do Azure oferece capacidades empresariais adicionais quando necessário.

  • Separação de preocupações: Isole a sua lógica de negócio do código do agente, para que possa desenvolver, testar e implementar de forma independente.
  • Gestão centralizada: Crie ferramentas reutilizáveis que múltiplos agentes, aplicações ou equipas possam usar de forma consistente.
  • Isolamento de segurança: Controla o acesso dos agentes às ferramentas separadamente do acesso às ferramentas aos recursos empresariais. Esta abordagem significa que pode atribuir aos agentes apenas as permissões específicas de que precisam para chamar a ferramenta, sem ter de fornecer acesso direto a bases de dados, APIs ou redes subjacentes.
  • Dependências externas: Use bibliotecas não Microsoft, ambientes de execução específicos ou integrações de sistemas legados.
  • Operações complexas: Lidar com fluxos de trabalho em vários passos e transformações de dados, ou descarregar operações computacionalmente intensivas.
  • Processamento assíncrono: Executar operações de longa duração com capacidade de repetição e manipulação resiliente de mensagens.

Opções de integração

O Foundry Agent Service oferece duas formas principais para os seus agentes acedirem às ferramentas alojadas no Funções do Azure:

Destaque Servidores do Modelo de Protocolo de Contexto (MCP) Ferramentas baseadas em armazenamento no Azure Queue
Como funciona? Os agentes ligam-se à sua aplicação de funções no Azure usando o protocolo MCP. A própria aplicação de funções serve como um servidor MCP personalizado, expondo as tuas funções individuais como ferramentas. Um servidor MCP personalizado abstrai a complexidade de alojar e expor ferramentas do seu projeto de agente e promove a reutilização do seu código. Os agentes comunicam com código de ferramenta na sua aplicação de funções no Azure através do armazenamento em fila, colocando mensagens numa fila, o que desencadeia a execução do código da ferramenta. A aplicação de funções ouve as filas de entrada, processa mensagens de forma assíncrona e devolve uma resposta a uma segunda fila.
Quando devo usá-lo? ✔ É ideal para aproveitar o protocolo padrão da indústria para integração de ferramentas de agentes.
✔ Proporciona interações síncronas em tempo real com respostas imediatas.
✔ É ideal para fluxos de trabalho assíncronos que não exigem respostas em tempo real.
✔ Ideal para processamento em segundo plano e entrega confiável de mensagens com capacidade de repetição.
Configuração do SDK Ferramenta MCP genérica Específicos (ver exemplos de código acima)
Iniciar Como usar Funções do Azure com MCP Veja exemplos de código acima.

Para funções de trigger HTTP, também pode integrar descrevendo a função através de uma especificação OpenAPI e registando-a como uma ferramenta chamável usando a ferramenta OpenAPI na configuração do seu agente. Esta abordagem oferece flexibilidade para funções já existentes baseadas em HTTP, mas requer uma configuração adicional para definir a especificação da API.

Modelos suportados

Para usar todas as funcionalidades da chamada de funções, incluindo funções paralelas, utilize um modelo que foi lançado após 6 de novembro de 2023.

Crie e implemente a amostra de integração de ferramentas baseadas em fila

Para usar um exemplo de Azure Developer CLI (azd) que configura um agente com Funções para suportar a integração de ferramentas baseadas em fila para agentes, siga estes passos:

Nota

Para instruções detalhadas sobre como definir e alojar ferramentas baseadas em Funções como servidores MCP, consulte Host servidores MCP em Funções do Azure.

Inicializar o modelo do projeto

Este projeto utiliza azd para simplificar a criação de recursos de Azure e a implementação do seu código. Esta implementação segue as melhores práticas atuais para implementações de Funções seguras e escaláveis. Pode encontrar o modelo e o código usados aqui em GitHub.

  1. Execute o seguinte azd init comando numa janela de terminal para inicializar o seu projeto a partir do template azd:

    azd init --template azure-functions-ai-services-agent-python
    

Quando solicitado, forneça um nome de ambiente, como ai-services-agent-python. Em azd, o ambiente mantém um contexto de implementação único para a sua aplicação, e pode definir mais do que um. O nome do ambiente também é usado no nome do grupo de recursos e de outros recursos que cria no Azure.

  1. Execute este comando para permitir que scripts de configuração locais corram com sucesso, o que depende do seu sistema operativo local:

    chmod +x ./infra/scripts/*.sh 
    

Recursos de provisão

Execute o comando azd provision para criar os recursos necessários em Azure:

azd provision

Quando solicitado, forneça estes parâmetros de implementação obrigatórios:

Enunciado Descrição
Selecione uma subscrição do Azure para usar Escolhe a subscrição onde queres criar os teus recursos.
Parâmetro de localização de implantação Para a região do Azure, criar o grupo de recursos que contém os novos recursos do Azure. Apenas as regiões que atualmente suportam o plano Flex Consumption são mostradas.
Parâmetro de implementação vnetEnabled Embora o modelo suporte a criação de recursos dentro de uma rede virtual, opte False por simplificar a implementação e os testes.

azd lê o ficheiro de implementação main.bicep e usa-o para criar estes recursos em Azure:

  • Plano de Consumo Flexível e função app
  • Plataforma de agentes na Foundry, incluindo:
    • Conta de serviços
    • Implementação do modelo
    • Projeto
    • Agentes
    • Pesquisa
    • Conta Azure Cosmos DB (usada pela pesquisa)
  • Armazenamento do Azure (exigido pelos agentes Functions e IA) e Application Insights (recomendado)
  • Políticas de acesso e funções para as suas contas
  • Ligações serviço-a-serviço que utilizam identidades geridas (em vez de cadeias de ligação armazenadas)

Os scripts pós-provisão também criam um local.settings.json ficheiro, que o Functions exige para ser executado localmente. O ficheiro gerado deve ser assim:

{
  "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>"
    }
}

Executa a tua aplicação no Visual Studio Code

  1. Abra a pasta num novo terminal.
  2. Executa o comando code . para abrir o projeto em Visual Studio Code.
  3. Na paleta de comandos (F1), escreva Azurite: Start. Esta ação permite a depuração usando armazenamento local para o runtime das Funções.
  4. Pressione Run/Debug (F5) para executar o depurador. Selecione Depurar mesmo assim se for solicitado sobre o emulador local não estar a executar.
  5. Envie endpoints POST prompt , respetivamente, usando a sua ferramenta de teste HTTP. Se tiveres a extensão RestClient instalada, podes executar pedidos diretamente a partir do ficheiro do projeto test.http.

Implementar no Azure

Executa este comando azd deploy para publicar o código do teu projeto na aplicação de funções e nos recursos Azure relacionados que acabaste de provisionar:

azd deploy

Depois de a publicação concluir com sucesso, azd fornece-lhe os endpoints URL das suas novas funções, mas sem os valores da chave de função necessários para aceder aos endpoints. Pode usar o comando Funções do Azure Core Tools func azure functionapp list-functions com a opção --show-keys para obter as chaves dos seus endpoints de função. Para mais informações, consulte Trabalhar com chaves de acesso em Funções do Azure.

Redistribua o teu código

Executa o comando azd up tantas vezes quanto precisares para provisionar os teus recursos de Azure e implementar atualizações de código na tua aplicação de funções.

Nota

O pacote de implementação mais recente sobrescreve sempre ficheiros de código implementados.

Liberar recursos

Quando terminar de trabalhar com a sua function app e recursos relacionados, use este comando para eliminar a function app e os seus recursos relacionados do Azure e evitar custos adicionais. A --purge opção não deixa uma eliminação suave do recurso de IA e recupera a sua quota:

azd down --purge