Início Rápido: Criar uma caixa de ferramentas e usá-la com um agente hospedado

Importante

Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares para Versões Prévias do Microsoft Azure.

Neste guia de início rápido, você cria um kit de ferramentas que combina duas ferramentas em um único endpoint gerenciado:

  • Pesquisa na Web, que fundamenta respostas em resultados da Web públicos em tempo real.
  • O servidor mcp do Microsoft Learn, que fundamenta respostas na documentação oficial do Microsoft. É um endpoint público que não exige autenticação.

Em seguida, você consome a caixa de ferramentas de um agente hospedado escrito em Python. O kit de ferramentas expõe um endpoint MCP, de modo que o agente se conecta a uma única URL e descobre todas as ferramentas em tempo de execução. Você pode alterar as ferramentas posteriormente sem alterar o código do agente.

Se você usar um agente de codificação como GitHub Copilot, o Microsoft Foundry Skill poderá ajudar a criar o ponto de extremidade da caixa de ferramentas, conectá-lo a um agente hospedado e ajustar as ferramentas de exemplo.

Pré-requisitos

Este guia de início rápido se baseia no conjunto de ferramentas do agente hospedado. Conclua os pré-requisitos no início rápido do agente hospedado primeiro, que abrangem a assinatura Azure, as funções de projeto, Python, a CLI do Desenvolvedor do Azure (azd) e a microsoft.foundry extensão.

No caso do SDK do Python, use a seção sobre Python mais adiante neste artigo, em vez do fluxo de trabalho do Azure Developer CLI ou do VS Code. Este caminho cria a caixa de ferramentas com project_client.toolboxes.create_version(...), em seguida, carrega o código do agente hospedado como uma nova versão e aponta-o para essa caixa de ferramentas pelo nome.

Instale os pacotes de Python usados neste caminho:

pip install "azure-ai-projects>=2.3.0" azure-identity python-dotenv

Você precisa de um projeto do Foundry existente com um modelo com capacidade de chat implantado. O caminho do Python SDK neste início rápido cria a caixa de ferramentas e a versão do agente hospedado, mas não cria um novo projeto do Foundry ou uma implantação de modelo para você.

Você também precisa do Visual Studio Code com a extensão Caixa de Ferramentas do Microsoft Foundry, conectado ao Azure.

Etapa 1: inicializar o agente hospedado

Inicializar um agente hospedado a partir do exemplo de caixa de ferramentas do Foundry, que se conecta a uma caixa de ferramentas via MCP e expõe suas ferramentas ao modelo. Você cria a caixa de ferramentas (my-toolbox) na próxima etapa e aponta o agente para o ponto de extremidade dela. Execute esses comandos em um diretório vazio.

mkdir my-toolbox-agent && cd my-toolbox-agent
azd ai agent init -m "https://github.com/microsoft-foundry/foundry-samples/blob/main/samples/python/hosted-agents/agent-framework/responses/04-foundry-toolbox/azure.yaml" --src src/toolbox-agent

Siga as instruções para selecionar seu projeto e uma implantação de modelo existente. Quando você for solicitado a selecionar a alocação de recursos de contêiner, escolha 1 núcleo, memória 2Gi. A imagem de contêiner do agente precisa mais do que a camada padrão. O --src sinalizador configura o agente em src/toolbox-agent.

Note

Manifestos do agente (agent.manifest.yaml) e definições de agente autônomo (agent.yaml) são preteridos. A partir das extensões azd do Foundry (azure.ai.agents 1.0.0-beta.1), toda a configuração do agente hospedado reside em um único azure.yaml. Consulte Author azure.yaml para agentes hospedados.

Etapa 2: Criar a caixa de ferramentas

Crie a caixa de ferramentas e depois copie o ponto de extremidade MCP retornado. Defina esse ponto de extremidade como uma variável de ambiente em etapas posteriores.

O azure.yaml do exemplo define a caixa de ferramentas como um serviço azure.ai.toolbox e conecta essa caixa de ferramentas ao serviço de agente hospedado com uses:. Se você alterar a configuração da caixa de ferramentas, edite o serviço da caixa de ferramentas em azure.yaml, não src/toolbox-agent/agent.yaml.

Primeiro, aponte os comandos do toolbox para o projeto Foundry que você selecionou durante a inicialização. Use novamente o endpoint que a inicialização já armazenou no seu ambiente azd:

azd env set FOUNDRY_PROJECT_ENDPOINT "$(azd env get-value FOUNDRY_PROJECT_ENDPOINT)"

O exemplo inclui um toolbox.yaml em src/toolbox-agent que define as duas ferramentas por trás de um único ponto de extremidade. Crie a caixa de ferramentas desse arquivo:

azd ai toolbox create my-toolbox --from-file ./src/toolbox-agent/toolbox.yaml

A primeira versão se torna a versão padrão automaticamente. O comando exibe o endpoint MCP versionado da caixa de ferramentas. Copie o Endpoint valor da saída. Defina-a como a TOOLBOX_ENDPOINT variável de ambiente nas próximas etapas. Tem esta aparência:

https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/my-toolbox/versions/1/mcp?api-version=v1
  1. Abra Visual Studio Code e selecione o Foundry Toolkit na Barra de Atividades.

  2. Entre em sua conta de Azure se for solicitado.

  3. Em Meus Recursos, expanda seu projeto e expanda Ferramentas.

  4. No modo de exibição Ferramentas , selecione o ícone + Adicionar Caixa de Ferramentas .

  5. Insira o nome da caixa de ferramentas (my-toolbox) e uma descrição.

  6. Selecione a pesquisa na Web.

  7. Selecione + Adicionar ferramenta, escolha adicionar um servidor MCP remoto e insira a URL https://learn.microsoft.com/api/mcpdo servidor. O servidor é público, portanto, nenhuma autenticação é necessária.

  8. Selecione Publicar. A publicação cria a primeira versão da caixa de ferramentas.

  9. Copie o ponto de extremidade MCP da caixa de ferramentas. Execute o comando a seguir e copie o endpoint valor da saída. Defina-a como a TOOLBOX_ENDPOINT variável de ambiente nas próximas etapas:

    azd ai toolbox show my-toolbox --output json
    

Etapa 3: Provisionar recursos de Azure

O agente lê o ponto de extremidade do MCP da caixa de ferramentas da variável de ambiente TOOLBOX_ENDPOINT, que o azure.yaml resolve a partir do seu ambiente azd. Defina esse valor nas próximas etapas. Provisione os recursos de Azure do agente:

azd provision

Etapa 4: Executar o agente localmente

  1. Aponte o agente local para sua toolbox definindo estes valores no arquivo .env em src/toolbox-agent. Cole o ponto de extremidade copiado na Etapa 2:

    FOUNDRY_MODEL_NAME=<your-model-deployment-name>
    TOOLBOX_ENDPOINT=<versioned-endpoint-from-step-2>
    

    azd ai agent run injeta FOUNDRY_PROJECT_ENDPOINT e lê o arquivo .env em execuções locais. O exemplo cuida da conexão com a caixa de ferramentas, dos cabeçalhos e da autenticação para você.

  2. Inicie o agente:

    azd ai agent run
    

    Esse comando cria um ambiente virtual, instala dependências e atende ao agente em http://localhost:8088. Os pacotes de prévia podem gerar avisos do pip durante a instalação. Esses avisos não bloqueiam.

  3. Em um terminal separado, envie prompts que exercitem as ferramentas:

    azd ai agent invoke --local "Find the latest release notes for the Azure CLI on the web."
    azd ai agent invoke --local "How do I create a hosted agent in Microsoft Foundry? Use the Microsoft Learn documentation."
    

Etapa 5: Implantar no Serviço de Agente do Foundry

Armazene o ponto de extremidade copiado na etapa 2 no seu ambiente azd, que é resolvido azure.yaml no momento da implantação. Em seguida, crie e implante o contêiner do agente:

azd env set TOOLBOX_ENDPOINT "<versioned-endpoint-from-step-2>"
azd deploy

Quando o comando termina, a saída mostra links para o playground do agente e o ponto de extremidade do agente. Invoque o agente implantado:

azd ai agent invoke "What's new in Microsoft Foundry? Use the Microsoft Learn documentation."

Caminho do SDK do Python

Use as etapas a seguir se quiser criar a caixa de ferramentas e implantar a versão do agente hospedado usando o SDK do Python em vez do fluxo da CLI do Desenvolvedor Azure ou do VS Code.

1. Criar ou escolher um projeto do Foundry

  1. Abra o portal do Foundry e crie um projeto do Foundry ou selecione um existente.
  2. No projeto, implante um modelo compatível com chat, como gpt-5.4-mini.
  3. Copie o endpoint do projeto em Visão geral e o nome da implantação em Build>Deployments.

2. Baixe o exemplo de agente hospedado da caixa de ferramentas

Faça um clone do repositório de exemplos do Foundry:

git clone https://github.com/microsoft-foundry/foundry-samples.git

Crie uma pasta de trabalho para os scripts de implantação. Nessa pasta, crie um .env arquivo com estes valores:

FOUNDRY_PROJECT_ENDPOINT=<your-project-endpoint>
AZURE_AI_MODEL_DEPLOYMENT_NAME=<your-model-deployment-name>
FOUNDRY_HOSTED_AGENT_NAME=toolbox-agent
TOOLBOX_NAME=my-toolbox
FOUNDRY_SAMPLE_PATH=<full-path-to-foundry-samples/samples/python/hosted-agents/agent-framework/responses/04-foundry-toolbox/src/agent-framework-agent-with-foundry-toolbox-responses>

Etapa 3: Criar a caixa de ferramentas com Python

Crie um arquivo nomeado create_toolbox.py na mesma pasta de trabalho que .env:

import os

from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import MCPToolboxTool, WebSearchToolboxTool
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv

load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"].rstrip("/")
toolbox_name = os.environ["TOOLBOX_NAME"]

with (
    DefaultAzureCredential() as credential,
    AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
):
    created = project_client.toolboxes.create_version(
        name=toolbox_name,
        description="Toolbox with web search and Microsoft Learn MCP.",
        tools=[
            WebSearchToolboxTool(
                name="web_search",
                search_context_size="medium",
            ),
            MCPToolboxTool(
                server_label="mslearn",
                server_url="https://learn.microsoft.com/api/mcp",
                require_approval="never",
            ),
        ],
    )
    print(f"Created toolbox version {created.version} for {created.name}")

    mcp_endpoint = (
        f"{endpoint}/toolboxes/{created.name}/versions/"
        f"{created.version}/mcp?api-version=v1"
    )
    print(f"Toolbox version: {created.version}")
    print(f"Toolbox MCP endpoint: {mcp_endpoint}")

Executar o script:

python create_toolbox.py

O agente hospedado de exemplo pode resolver a caixa de ferramentas a partir de TOOLBOX_ENDPOINT ou de FOUNDRY_PROJECT_ENDPOINT mais TOOLBOX_NAME. Esse caminho usa TOOLBOX_NAME, então você não precisa armazenar o endpoint versionado em .env.

4. Implantar o agente hospedado com Python

Crie um arquivo nomeado deploy_toolbox_agent.py na mesma pasta de trabalho que .env:

import os
import tempfile
import time
import zipfile
from pathlib import Path

from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
    AgentEndpointConfig,
    CodeConfiguration,
    CodeDependencyResolution,
    FixedRatioVersionSelectionRule,
    HostedAgentDefinition,
    ProtocolConfiguration,
    ProtocolVersionRecord,
    ResponsesProtocolConfiguration,
    VersionSelector,
)
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv

load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
model_name = os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"]
agent_name = os.environ.get("FOUNDRY_HOSTED_AGENT_NAME", "toolbox-agent")
toolbox_name = os.environ["TOOLBOX_NAME"]
sample_path = Path(os.environ["FOUNDRY_SAMPLE_PATH"]).resolve()


def create_code_zip(source_dir: Path) -> Path:
    zip_path = Path(tempfile.gettempdir()) / f"{agent_name}.zip"
    excluded = {".git", ".venv", "__pycache__", ".env"}

    with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zip_file:
        for path in source_dir.rglob("*"):
            if not path.is_file():
                continue
            if any(part in excluded for part in path.parts):
                continue
            zip_file.write(path, path.relative_to(source_dir))

    return zip_path


def wait_for_active_version(project_client: AIProjectClient, version: str) -> None:
    for attempt in range(60):
        time.sleep(10)
        details = project_client.agents.get_version(
            agent_name=agent_name,
            agent_version=version,
        )
        status = details["status"]
        print(f"Provisioning status: {status} (attempt {attempt + 1}/60)")

        if status == "active":
            return

        if status == "failed":
            raise RuntimeError(f"Hosted agent provisioning failed: {dict(details)}")

    raise RuntimeError("Timed out waiting for the hosted agent version to become active.")


code_zip_path = create_code_zip(sample_path)

with (
    code_zip_path.open("rb") as code_stream,
    DefaultAzureCredential() as credential,
    AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
):
    original_agent_endpoint = None
    created = None

    try:
        created = project_client.agents.create_version_from_code(
            agent_name=agent_name,
            description="Hosted agent with Foundry Toolbox integration.",
            definition=HostedAgentDefinition(
                cpu="1",
                memory="2Gi",
                code_configuration=CodeConfiguration(
                    runtime="python_3_13",
                    entry_point=["python", "main.py"],
                    dependency_resolution=CodeDependencyResolution.REMOTE_BUILD,
                ),
                environment_variables={
                    "FOUNDRY_PROJECT_ENDPOINT": endpoint,
                    "AZURE_AI_MODEL_DEPLOYMENT_NAME": model_name,
                    "TOOLBOX_NAME": toolbox_name,
                },
                protocol_versions=[
                    ProtocolVersionRecord(protocol="responses", version="2.0.0")
                ],
            ),
            code=code_stream,
        )

        print(f"Created hosted agent version {created.version}")
        wait_for_active_version(project_client, created.version)

        original_agent_endpoint = project_client.agents.get(
            agent_name=agent_name
        ).agent_endpoint
        project_client.agents.update_details(
            agent_name=agent_name,
            agent_endpoint=AgentEndpointConfig(
                version_selector=VersionSelector(
                    version_selection_rules=[
                        FixedRatioVersionSelectionRule(
                            agent_version=created.version,
                            traffic_percentage=100,
                        ),
                    ]
                ),
                protocol_configuration=ProtocolConfiguration(
                    responses=ResponsesProtocolConfiguration()
                ),
            ),
        )

        with project_client.get_openai_client(agent_name=agent_name) as openai_client:
            response = openai_client.responses.create(
                input=(
                    "How do I create a hosted agent in Microsoft Foundry? "
                    "Use the Microsoft Learn documentation."
                ),
            )
            if response.status != "completed":
                raise RuntimeError(f"Agent invocation failed: {response.error}")
            print(response.output_text)
    finally:
        if original_agent_endpoint is not None:
            project_client.agents.update_details(
                agent_name=agent_name,
                agent_endpoint=original_agent_endpoint,
            )

        if created is not None:
            project_client.agents.delete_version(
                agent_name=agent_name,
                agent_version=created.version,
                force=True,
            )

Executar o script:

python deploy_toolbox_agent.py

Este script envia o exemplo do Toolbox como uma nova versão do agente hospedado, aponta temporariamente o agente hospedado para essa versão, invoca-o com uma pergunta do Microsoft Learn e restaura a configuração anterior do endpoint ao finalizar.

5. Verifique a resposta baseada na caixa de ferramentas

Se você configurar a caixa de ferramentas corretamente, a resposta mostra que o agente hospedado descobriu as ferramentas da caixa de ferramentas e respondeu usando a documentação do Microsoft Learn.

Limpar os recursos

Exclua os recursos quando terminar de usá-los para deixar de gerar cobranças.

Exclua a caixa de ferramentas:

azd ai toolbox delete my-toolbox --force

Depois de excluir a toolbox, o endpoint para de funcionar. Remova-o de src/toolbox-agent/.env e remova-o do seu ambiente azd:

azd env set TOOLBOX_ENDPOINT ""

Exclua o agente e seus recursos de Azure:

Aviso

Se o ambiente atual azd criou o projeto Foundry, azd down exclui permanentemente o grupo de recursos do projeto e tudo o que está nele. Se você selecionou um projeto existente durante a inicialização, azd down deixa o projeto, seu grupo de recursos, o agente hospedado e outros recursos de início rápido em vigor. Para excluir recursos que você não precisa mais do projeto existente, exclua-os separadamente.

azd down

Exclua a caixa de ferramentas por nome:

import os

from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv

load_dotenv()

with (
    DefaultAzureCredential() as credential,
    AIProjectClient(
        endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
        credential=credential,
    ) as project_client,
):
    project_client.toolboxes.delete(name=os.environ["TOOLBOX_NAME"])

Se você criou um grupo de recursos dedicado ou projeto para este início rápido, exclua-o do portal do Azure depois de não precisar mais da caixa de ferramentas, da implantação de chat ou do agente hospedado.

Solução de problemas

Issue Solução
tools/list não retorna ferramentas do Microsoft Learn Confirme se a ferramenta mslearn em toolbox.yaml aponta para https://learn.microsoft.com/api/mcp.
O agente inicia, mas retorna TOOLBOX_ENDPOINT is set but empty ou não tem ferramentas Defina TOOLBOX_ENDPOINT como o endpoint versionado da Etapa 2 em .env para execuções locais e execute azd env set TOOLBOX_ENDPOINT "<endpoint>" antes de implantar.
As chamadas ao endpoint do Toolbox retornam um erro de autorização Confirme que cada solicitação inclui um token Entra com escopo em https://ai.azure.com/.default. O exemplo lida com isso para você.
Connection refused em execução local Verifique se nenhum outro processo está usando a porta 8088.

O que você aprendeu

Neste guia de início rápido, você:

  • Criou um kit de ferramentas que combina a busca na Web e o servidor MCP do Microsoft Learn em um único endpoint.
  • Consumiu a caixa de ferramentas de um agente hospedado em Python que se conecta por meio do Protocolo de Contexto do Modelo usando o Azure Developer CLI ou o Python SDK.
  • Executou o agente localmente ou o validou remotamente e o implantou no Foundry Agent Service.

Próxima etapa