Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Saiba como integrar Azure Functions a agentes do Microsoft Foundry usando uma abordagem de ferramenta baseada em fila. Este artigo mostra como criar ferramentas personalizadas serverless que o modelo Foundry de um agente pode chamar de forma assíncrona por meio do armazenamento de filas do Azure. Usando essa abordagem, seus agentes podem acessar sistemas empresariais e lógica de negócios complexa com preços que se ajustam até zero.
Os agentes de fundição se conectam diretamente na fila de entrada monitorada por Azure Functions usando uma definição de ferramenta fornecida por AzureFunctionsTool. Quando um agente precisa usar esta ferramenta hospedada no Azure Functions, ele utiliza a definição da ferramenta para colocar uma mensagem em uma fila de entrada monitorada pelo Azure Functions. Um gatilho de fila do Armazenamento do Azure invoca o código da função para processar a mensagem e retornar um resultado por meio de uma vinculação de fila de saída. O agente lê a mensagem da fila de saída para continuar a conversa.
As funções oferecem vários planos de hospedagem. O plano de consumo flex é ideal para hospedar suas ferramentas personalizadas porque fornece:
- Hospedagem sem servidor com dimensionamento até zero e precificação baseada em consumo.
- Acesso baseado em identidade a recursos em Azure, incluindo recursos em redes virtuais.
- Conexões declarativas de fonte de dados por meio de associações de entrada/saída.
Suporte ao uso
A tabela a seguir mostra o SDK e o suporte à instalação.
| Suporte ao Microsoft Foundry | SDK do Python | C# SDK | JavaScript SDK | SDK do Java | API REST | Configuração básica do agente | Configuração do agente padrão |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | - | ✔️ |
Pré-requisitos
Biblioteca cliente do Azure AI Projects para Python (
azure-ai-projects>=2.0.0). Consulte o início rápido para obter detalhes da instalação.Um agente implantado com a configuração padrão
Nota
Não há suporte para a configuração básica do agente.
Uma conta Azure com uma assinatura ativa. Crie uma conta gratuitamente.
Exemplos de código
Os exemplos de código a seguir demonstram como definir uma ferramenta de função Azure que obtém informações meteorológicas para um local especificado usando a integração baseada em fila.
Instalar o pacote
Instale a biblioteca de clientes do Azure AI Projects:
pip install "azure-ai-projects>=2.0.0"
Definir a ferramenta e criar 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})")
Criar 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 no lado do agente. Você também precisa escrever a função que processa as mensagens da fila. A função recebe entrada da fila de entrada, executa sua lógica personalizada e retorna um resultado por meio da fila de saída.
O exemplo a seguir mostra uma função disparada por fila que obtém informações de clima para um local. A função analisa a mensagem de entrada, extrai os argumentos da função e retorna uma resposta com uma CorrelationId que o agente usa para corresponder o resultado à solicitação 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 esse valor para corresponder a saída da função à chamada de ferramenta correta.
Para obter a amostra completa, consulte amostra de clima do Azure Functions no repositório do SDK do Azure para Python.
Instalar os pacotes
Instale as bibliotecas de cliente do Azure AI Projects:
dotnet add package Azure.AI.Projects
dotnet add package Azure.AI.Extensions.OpenAI
dotnet add package Azure.Identity
Definir a ferramenta e criar 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})");
Criar 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 no lado do agente. Você também precisa escrever a função que processa as mensagens da fila. A função recebe entrada da fila de entrada, executa sua lógica personalizada e retorna um resultado por meio da fila de saída.
O exemplo a seguir mostra uma função disparada por fila que obtém informações de clima para um local. Este exemplo usa o modelo de trabalho isolado. A função analisa a mensagem de entrada, extrai os argumentos da função e retorna uma resposta com uma CorrelationId que o agente usa para corresponder o resultado à solicitação 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 esse valor para corresponder a saída da função à chamada de ferramenta correta.
Instalar o pacote
Adicione a dependência Agentes de IA do Azure ao 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>
Definir a ferramenta e criar 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());
Criar 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 no lado do agente. Você também precisa escrever a função que processa as mensagens da fila. A função recebe entrada da fila de entrada, executa sua lógica personalizada e retorna um resultado por meio da fila de saída.
O exemplo a seguir mostra uma função disparada por fila que obtém informações de clima para um local. A função analisa a mensagem de entrada, extrai os argumentos da função e retorna uma resposta com uma CorrelationId que o agente usa para corresponder o resultado à solicitação 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 esse valor para corresponder a saída da função à chamada de ferramenta correta.
Instalar os pacotes
Instale a biblioteca de clientes do Azure AI Projects:
npm install @azure/ai-projects @azure/identity
Definir a ferramenta e criar 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})`);
Criar 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 no lado do agente. Você também precisa escrever a função que processa as mensagens da fila. A função recebe entrada da fila de entrada, executa sua lógica personalizada e retorna um resultado por meio da fila de saída.
O exemplo a seguir mostra uma função disparada por fila que obtém informações de clima para um local. Este exemplo usa o modelo de programação v4. A função analisa a mensagem de entrada, extrai os argumentos da função e retorna uma resposta com uma CorrelationId que o agente usa para corresponder o resultado à solicitação 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 esse valor para corresponder a saída da função à chamada de ferramenta correta.
Criar uma versão do 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"
}
}
}
}
]
}
}'
Criar uma resposta
Crie uma resposta que use a versão do agente para obter informações sobre o clima.
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 função Azure em si é um código do lado do servidor que você escreve em uma linguagem do Functions com suporte. Selecione um dos outros idiomas (Python, C#, Java ou TypeScript) para ver a implementação da função.
Quando usar Azure Functions versus chamada de função
Embora function calling permite definir ferramentas que são executadas em processo com o código do agente, hospedar ferramentas personalizadas no Azure Functions fornece recursos empresariais extras quando você precisa:
- Separação de preocupações: isole sua lógica de negócios do código do agente, para que você possa desenvolver, testar e implantar de forma independente.
- Gerenciamento centralizado: crie ferramentas reutilizáveis que vários agentes, aplicativos ou equipes podem usar consistentemente.
- Isolamento de segurança: controle o acesso do agente às ferramentas separadamente do acesso de ferramentas aos recursos corporativos. Essa abordagem significa que você pode atribuir aos agentes apenas as permissões específicas necessárias para chamar a ferramenta sem precisar fornecer acesso direto a bancos de dados, APIs ou redes subjacentes.
- Dependências externas: use bibliotecas não Microsoft, ambientes de execução específicos ou integrações de sistema herdadas.
- Operações complexas: lidar com fluxos de trabalho e transformações de dados de várias etapas ou descarregar operações computacionalmente intensivas.
- Processamento assíncrono: execute operações de execução longa com capacidade de repetição e manipulação de mensagens resilientes.
Opções de integração
O Serviço do Foundry Agent fornece duas maneiras principais de seus agentes acessarem ferramentas hospedadas Azure Functions:
| Funcionalidade | Servidores MCP (Model Context Protocol) | Ferramentas baseadas no Armazenamento de Filas do Azure |
|---|---|---|
| Como funciona? | Os agentes se conectam ao aplicativo de funções em Azure usando o protocolo MCP. O próprio aplicativo de funções serve como um servidor MCP personalizado, expondo suas funções individuais como ferramentas. Um servidor MCP personalizado abstrai a complexidade de hospedar e expor ferramentas do seu projeto de agente e promove a reutilização do código. | Os agentes se comunicam com o código da ferramenta em seu aplicativo de funções no Azure por meio do Armazenamento de Filas, colocando mensagens em uma fila, o que dispara a execução do código da ferramenta. O aplicativo de funções escuta as filas de entrada, processa mensagens de forma assíncrona e retorna uma resposta a uma segunda fila. |
| Quando usá-lo? | ✔ Melhor para aproveitar o protocolo padrão do setor para a integração de ferramentas de agente. ✔ Fornece interações síncronas em tempo real com respostas imediatas. |
✔ Melhor para fluxos de trabalho assíncronos que não exigem respostas em tempo real. ✔ Ideal para processamento em segundo plano e entrega de mensagens confiáveis com capacidades de nova tentativa. |
| Configuração do SDK | Ferramenta MCP genérica | Específico (consulte exemplos de código acima) |
| Introdução | Como usar Azure Functions com MCP | Veja exemplos de código acima. |
Para funções de gatilho HTTP, você também pode se integrar descrevendo a função por meio de uma especificação OpenAPI e registrando-a como uma ferramenta que pode ser chamada usando a ferramenta OpenAPI na configuração do agente. Essa abordagem fornece flexibilidade para funções baseadas em HTTP existentes, mas requer configuração adicional para definir a especificação da API.
Modelos com suporte
Para usar todos os recursos de chamada de função, incluindo funções paralelas, use um modelo que foi lançado após 6 de novembro de 2023.
Criar e implantar o exemplo de integração de ferramentas baseada em fila
Para usar um exemplo Azure CLI do Desenvolvedor (azd) que configura um agente com o Functions para dar suporte à integração de ferramentas baseada em fila para agentes, siga estas etapas:
Nota
Para obter instruções detalhadas sobre como definir e hospedar ferramentas baseadas em funções como servidores MCP, consulte Host MCP servers in Azure Functions.
Inicializar o modelo de projeto
Este projeto usa azd para simplificar a criação de recursos do Azure e a implantação do seu código. Essa implantação segue as práticas recomendadas atuais para implantações de funções seguras e escalonáveis. Você pode encontrar o modelo e o código usados aqui em GitHub.
Execute o seguinte
azd initcomando em uma janela de terminal para inicializar seu projeto do modelo 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 implantação exclusivo para seu aplicativo e você pode definir mais de um. O nome do ambiente também é usado no nome do grupo de recursos e em outros recursos criados em Azure.
Execute este comando para permitir que os scripts de instalação local são executados com êxito, o que depende do sistema operacional local:
Provisionar recursos
Execute o comando azd provision para criar os recursos necessários no Azure:
azd provision
Quando solicitado, forneça estes parâmetros de implantação necessários:
| Prompt | Descrição |
|---|---|
| Selecione uma assinatura de Azure a ser usada | Escolha a assinatura na qual você deseja criar seus recursos. |
| parâmetro de implantação de localização | Região do Azure para criar o grupo de recursos que contém os novos recursos do Azure. Somente as regiões que atualmente dão suporte ao plano de consumo flex são mostradas. |
| Parâmetro de implantação vnetEnabled | Embora o modelo dê suporte à criação de recursos dentro de uma rede virtual, escolha False para simplificar a implantação e o teste. |
azd lê o arquivo de implantação main.bicep e o usa para criar esses recursos no Azure:
- Plano Flex Consumption e aplicativo de função
- Plataforma do agente na Foundry, incluindo:
- Conta de serviços
- Implementação de modelo
- Projeto
- Agentes
- Pesquisa
- conta do Azure Cosmos DB (usada pela funcionalidade de pesquisa)
- Armazenamento do Azure (exigido por agentes de IA e funções) e Application Insights (recomendado)
- Políticas e funções de acesso para suas contas
- Conexões de serviço a serviço que usam identidades gerenciadas (em vez de cadeias de conexão armazenadas)
Os scripts de pós-provisionamento também criam um local.settings.json arquivo, que o Functions exige para rodar localmente. O arquivo gerado deve ter esta aparência:
{
"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>"
}
}
Execute seu aplicativo no Visual Studio Code
- Abra a pasta em um novo terminal.
- Execute o comando
code .para abrir o projeto no Visual Studio Code. - Na paleta de comandos (F1), digite
Azurite: Start. Essa ação permite a depuração usando o armazenamento local para o runtime do Functions. - Pressione Executar/Depurar (F5) para executar o depurador. Selecione Depurar assim mesmo caso seja solicitado sobre o emulador local não estar em execução.
- Envie solicitações POST para os endpoints
promptrespectivamente, usando sua ferramenta de teste HTTP. Se você tiver a extensão RestClient instalada, poderá executar solicitações diretamente do arquivo de projetotest.http.
Implantar no Azure
Execute este comando azd deploy para publicar o código do projeto no aplicativo de funções e recursos relacionados Azure que você acabou de provisionar:
azd deploy
Depois que a publicação for concluída com êxito, azd fornecerá os endereços URL das suas novas funções, mas sem os valores das chaves de função necessários para acessar os endereços. Você pode usar o comando Azure Functions Core Tools func azure functionapp list-functions com a opção --show-keys para obter as chaves para os endpoints de função. Para obter mais informações, consulte Trabalhar com chaves de acesso nas Funções do Azure.
Reimplantar seu código
Execute o comando azd up quantas vezes precisar para provisionar seus recursos de Azure e implantar atualizações de código em seu aplicativo de funções.
Nota
O pacote de implantação mais recente sempre substitui arquivos de código implantados.
Limpar recursos
Quando terminar de trabalhar com seu aplicativo de funções e recursos relacionados, use esse comando para excluir o aplicativo de funções e seus recursos relacionados de Azure e evitar incorrer em custos adicionais. A opção --purge não realiza uma exclusão temporária do recurso de IA e recupera sua cota de uso:
azd down --purge
Conteúdo relacionado
- visão geral Azure Functions
- Usar a chamada de função com agentes do Foundry
- Hospedar servidores MCP no Azure Functions