Usar a ferramenta de geração de imagem (versão prévia)

Importante

  • A ferramenta de geração de imagem requer o gpt-image-1 modelo. Consulte a nota de transparência Azure OpenAI para obter limitações e considerações de IA responsáveis.
  • Você também precisa de um modelo de orquestrador compatível da série (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o3, ou gpt-5) implantado no mesmo projeto Foundry.

A ferramenta de geração de imagens no Microsoft Foundry Agent Service gera imagens a partir de prompts de texto em conversas e fluxos de trabalho de múltiplas etapas. O modelo foundry do agente orquestra a solicitação de geração de imagem e retorna a saída codificada em base64 que você pode salvar em um arquivo.

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

  • Uma conta Azure com uma assinatura ativa.
  • Um projeto do Foundry.
  • Um ambiente de agente básico ou padrão. Consulte a configuração do ambiente do agente.
  • Permissões para criar e gerenciar versões do agente no projeto.
  • Duas implantações de modelo no mesmo projeto Foundry:
    • Uma implantação de modelo OpenAI da Azure compatível para o agente (por exemplo, gpt-4o).
    • Uma implantação de modelo gerador de imagens (gpt-image-1).

Configurar a ferramenta de geração de imagem

  1. Implante seu modelo de orquestrador (por exemplo, gpt-4o) em seu projeto do Foundry.
  2. Implante gpt-image-1 no mesmo projeto do Foundry.
  3. Confirme seu suporte de região e modelo para geração de imagem. Consulte as Melhores práticas para usar ferramentas no Microsoft Foundry Agent Service.

Exemplos de código

Antes de começar, instale o pacote do SDK mais recente. O SDK do .NET está atualmente em versão prévia. Para obter instruções de instalação do pacote, consulte o início rápido.

Criar um agente com a ferramenta de geração de imagem

Este exemplo cria um agente com a ferramenta de geração de imagem, gera uma imagem e a salva em um arquivo.

import base64
import os

from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import PromptAgentDefinition, ImageGenTool

# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
IMAGE_MODEL = "gpt-image-1"

# Create clients to call Foundry API
project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()

# Create an agent with the image generation tool
agent = project.agents.create_version(
    agent_name="agent-image-generation",
    definition=PromptAgentDefinition(
        model="gpt-4.1-mini",
        instructions="Generate images based on user prompts.",
        tools=[ImageGenTool(model=IMAGE_MODEL, quality="low", size="1024x1024")],
    ),
    description="Agent for image generation.",
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")

# Generate an image using the agent
response = openai.responses.create(
    input="Generate an image of the Microsoft logo.",
    extra_headers={
        "x-ms-oai-image-generation-deployment": IMAGE_MODEL,
    },
    extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)

# Clean up the agent
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)

# Extract and save the generated image
image_data = [output.result for output in response.output if output.type == "image_generation_call"]
if image_data and image_data[0]:
    file_path = os.path.abspath("microsoft.png")
    with open(file_path, "wb") as f:
        f.write(base64.b64decode(image_data[0]))
    print(f"Image saved to: {file_path}")

Exemplo de geração de imagem em Azure. IA. Extensions.OpenAI

Neste exemplo, você gera uma imagem com base em um prompt simples. O código neste exemplo é síncrono. Para obter um exemplo assíncrono, consulte o exemplo sample code no SDK do Azure para .NET repositório no GitHub.

using System;
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 imageModel = "gpt-image-1";

// Create the AI Project client with custom header policy
AIProjectClientOptions projectOptions = new();
projectOptions.AddPolicy(new HeaderPolicy(imageModel), PipelinePosition.PerCall);

// Create the AI Project client
AIProjectClient projectClient = new(
    endpoint: new Uri(projectEndpoint),
    tokenProvider: new DefaultAzureCredential(),
    options: projectOptions
);

// Use the client to create the versioned agent object.
// To generate images, we need to provide agent with the ImageGenerationTool
// when creating this tool. The ImageGenerationTool parameters include
// the image generation model, image quality and resolution.
// Supported image generation models include gpt-image-1.
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
Instructions = "Generate images based on user prompts.",
Tools = {
        ResponseTool.CreateImageGenerationTool(
            model: imageModel,
            quality: ImageGenerationToolQuality.Low,
            size:ImageGenerationToolSize.W1024xH1024
        )
    }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myAgent",
    options: new(agentDefinition));

ProjectOpenAIClient openAIClient = projectClient.GetProjectOpenAIClient();
ProjectResponsesClient responseClient = openAIClient.GetProjectResponsesClientForAgent(new AgentReference(name: agentVersion.Name));

ResponseResult response = responseClient.CreateResponse("Generate parody of Newton with apple.");

// Parse the ResponseResult object and save the generated image.
foreach (ResponseItem item in response.OutputItems)
{
    if (item is ImageGenerationCallResponseItem imageItem)
    {
        File.WriteAllBytes("newton.png", imageItem.ImageResultBytes.ToArray());
        Console.WriteLine($"Image downloaded and saved to: {Path.GetFullPath("newton.png")}");
    }
}

// Clean up resources by deleting the Agent.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);

// To use image generation, provide the custom header to web requests,
// which contain the model deployment name, for example:
// `x-ms-oai-image-generation-deployment: gpt-image-1`.
// To implement it, create a custom header policy.
internal class HeaderPolicy(string image_deployment) : PipelinePolicy
{
    private const string image_deployment_header = "x-ms-oai-image-generation-deployment";

    public override void Process(PipelineMessage message, IReadOnlyList<PipelinePolicy> pipeline, int currentIndex)
    {
        message.Request.Headers.Add(image_deployment_header, image_deployment);
        ProcessNext(message, pipeline, currentIndex);
    }

    public override async ValueTask ProcessAsync(PipelineMessage message, IReadOnlyList<PipelinePolicy> pipeline, int currentIndex)
    {
        // Add your desired header name and value
        message.Request.Headers.Add(image_deployment_header, image_deployment);
        await ProcessNextAsync(message, pipeline, currentIndex);
    }
}

Saída esperada

Ao executar o exemplo, você verá a seguinte saída:

Agent created (id: <agent-id>, name: myAgent, version: 1)
Image downloaded and saved to: /path/to/newton.png
Agent deleted

Criar um agente com a ferramenta de geração de imagem

Obtenha um token de acesso:

export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)

O exemplo a seguir cria um agente que usa a ferramenta de geração de imagem.

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/agents?api-version=v1" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -d '{
    "name": "image-gen-agent",
    "description": "Test agent for image generation capabilities",
    "definition": {
      "kind": "prompt",
      "model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
      "tools": [
        {
          "type": "image_generation"
        }
      ],
      "instructions": "You are a creative assistant that generates images when requested. Please respond to image generation requests clearly and concisely."
    }
  }'

Criar uma resposta

curl -X POST "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "x-ms-oai-image-generation-deployment: $IMAGE_GENERATION_MODEL_DEPLOYMENT_NAME" \
  -d '{
    "agent": {
      "type": "agent_reference",
      "name": "image-gen-agent"
    },
    "input": [{
      "type": "message",
      "role": "user",
      "content": [
        {
          "type": "input_text",
          "text": "Please generate small image of a sunset over a mountain lake."
        }
      ]
    }],
    "stream": false
  }'

Saída esperada

O JSON de resposta inclui um image_generation_call item de saída com um result campo que contém dados de imagem codificados em base64:

{
  "id": "resp_<id>",
  "status": "completed",
  "output": [
    {
      "type": "image_generation_call",
      "result": "<base64-encoded-image-data>",
      "status": "completed"
    },
    {
      "type": "message",
      "role": "assistant",
      "content": [
        {
          "type": "output_text",
          "text": "Here is the image of a sunset over a mountain lake."
        }
      ]
    }
  ]
}

Para extrair e salvar a imagem, encaminhe a resposta através de jq e base64:

RESPONSE=$(curl -s -X POST "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "x-ms-oai-image-generation-deployment: $IMAGE_GENERATION_MODEL_DEPLOYMENT_NAME" \
  -d '{ ... }')

echo "$RESPONSE" | jq -r '.output[] | select(.type=="image_generation_call") | .result' \
  | base64 --decode > generated_image.png

Criar um agente com a ferramenta de geração de imagem

Este exemplo demonstra como criar um agente de IA com recursos de geração de imagem usando o cliente Azure projetos de IA. O agente gera imagens com base em prompts de texto e as salva em arquivos. Para obter um exemplo de JavaScript, consulte o código sample no repositório SDK do Azure para JavaScript em GitHub.

import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
import * as fs from "fs";
import * as path from "path";
import { fileURLToPath } from "url";

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const IMAGE_MODEL = "gpt-image-1";

export async function main(): Promise<void> {
  // Create clients to call Foundry API
  const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
  const openai = project.getOpenAIClient();

  // Create Agent with image generation tool
  const agent = await project.agents.createVersion("agent-image-generation", {
    kind: "prompt",
    model: "gpt-4.1-mini",
    instructions: "Generate images based on user prompts",
    tools: [
      {
        type: "image_generation",
        quality: "low",
        size: "1024x1024",
      },
    ],
  });
  console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);

  // Generate image using the agent
  const response = await openai.responses.create(
    {
      input: "Generate an image of Microsoft logo.",
    },
    {
      body: { agent: { name: agent.name, type: "agent_reference" } },
      headers: { "x-ms-oai-image-generation-deployment": IMAGE_MODEL },
    },
  );

  // Extract and save the generated image
  const imageData = response.output?.filter((output) => output.type === "image_generation_call");

  if (imageData && imageData.length > 0 && imageData[0].result) {
    const __filename = fileURLToPath(import.meta.url);
    const __dirname = path.dirname(__filename);
    const filename = "microsoft.png";
    const filePath = path.join(__dirname, filename);

    // Decode base64 and save to file
    const imageBuffer = Buffer.from(imageData[0].result, "base64");
    fs.writeFileSync(filePath, imageBuffer);

    console.log(`Image downloaded and saved to: ${path.resolve(filePath)}`);
  } else {
    console.log("No image data found in the response.");
  }

  // Clean up resources
  await project.agents.deleteVersion(agent.name, agent.version);
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Saída esperada

Ao executar o exemplo, você verá a seguinte saída:

Agent created (id: <agent-id>, name: agent-image-generation, version: 1)
Image downloaded and saved to: /path/to/microsoft.png

Usar a geração de imagem em um agente de Java

Adicione a dependência ao seu pom.xml:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-agents</artifactId>
    <version>2.0.0</version>
</dependency>

Criar um agente com geração de imagem

import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.*;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;

import java.util.Collections;

public class ImageGenerationExample {
    public static void main(String[] args) {
        // Format: "https://resource_name.ai.azure.com/api/projects/project_name"
        String projectEndpoint = "your_project_endpoint";
        String imageModel = "gpt-image-1";

        AgentsClientBuilder builder = new AgentsClientBuilder()
            .credential(new DefaultAzureCredentialBuilder().build())
            .endpoint(projectEndpoint);

        AgentsClient agentsClient = builder.buildAgentsClient();
        ResponsesClient responsesClient = builder.buildResponsesClient();

        // Create image generation tool with model, quality, and size
        ImageGenTool imageGenTool = new ImageGenTool()
            .setModel(ImageGenToolModel.fromString(imageModel))
            .setQuality(ImageGenToolQuality.LOW)
            .setSize(ImageGenToolSize.fromString("1024x1024"));

        // Create agent with image generation tool
        PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-4.1-mini")
            .setInstructions("You are a creative assistant that can generate images based on descriptions.")
            .setTools(Collections.singletonList(imageGenTool));

        AgentVersionDetails agent = agentsClient.createAgentVersion("image-gen-agent", agentDefinition);
        System.out.printf("Agent created: %s (version %s)%n", agent.getName(), agent.getVersion());

        // Create a response
        AgentReference agentReference = new AgentReference(agent.getName())
            .setVersion(agent.getVersion());

        Response response = responsesClient.createAzureResponse(
            new AzureCreateResponseOptions().setAgentReference(agentReference),
            ResponseCreateParams.builder()
                .input("Generate an image of a sunset over a mountain range"));

        // The response output includes image_generation_call items with base64-encoded image data.
        // Extract and save the image using the response output items.
        System.out.println("Response status: " + response.status().map(Object::toString).orElse("unknown"));
        System.out.println("Output items: " + response.output().size());

        // Clean up
        agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
    }
}

Nota

A response.output() lista contém image_generation_call itens com dados de imagem codificados em base64 no campo result. Use java.util.Base64.getDecoder().decode() para converter o resultado em bytes e gravá-lo em um arquivo.

Saída esperada

Agent created: image-gen-agent (version 1)
Response status: completed
Output items: 2

Quando usar a ferramenta de geração de imagem

A ferramenta de geração de imagem no Serviço do Agente oferece vantagens em relação à API de Imagem Azure OpenAI:

Vantagem Descrição
Streaming Exiba saídas parciais de imagem durante a geração para melhorar a latência percebida.
Entradas flexíveis Aceite IDs de arquivo de imagem como entradas, além de bytes de imagem brutos.

Parâmetros opcionais

Personalize a geração de imagens especificando estes parâmetros opcionais ao criar a ferramenta:

Parâmetro Descrição
size Tamanho da imagem. Um de 1024x1024, 1024x1536, 1536x1024ou auto.
quality Qualidade da imagem. Um de low, medium, highou auto.
background Tipo de plano de fundo. Um de transparent, opaqueou auto.
output_format Formato de saída. Um de png, webpou jpeg.
output_compression Nível de compactação para a saída webp e jpeg (0-100).
moderation Nível de moderação para a imagem gerada. Um dos auto ou low.
partial_images Número de imagens parciais a serem geradas no modo de streaming (0-3).
input_image_mask Máscara opcional para a insintação. Forneça image_url (base64) ou file_id.

Nota

O tempo de geração da imagem varia de acordo com a quality configuração e a complexidade do prompt. Para aplicativos sensíveis ao tempo, considere usar quality: "low" ou habilitar partial_images para streaming.

Use a API de Respostas se desejar:

  • Crie experiências conversacionais de imagem com GPT Image.
  • Transmitir resultados parciais de imagem durante a geração para uma experiência de usuário mais suave.

Escrever prompts eficazes para geração de imagens a partir de texto

Prompts eficazes resultam em imagens melhores. Descreva o assunto, o estilo visual e a composição desejadas. Use palavras de ação como "desenhar", "criar" ou "editar" para orientar a saída do modelo.

A filtragem de conteúdo poderá bloquear a geração de imagem se o serviço detectar conteúdo não seguro em seu prompt. Para obter mais informações, consulte a visão geral de Guardrails e controles.

Dica

Para obter uma análise completa de como você pode ajustar seus prompts de texto para gerar diferentes tipos de imagens, consulte técnicas de engenharia de prompts de imagem.

Verificar a execução da ferramenta

Use qualquer uma dessas abordagens para confirmar se a geração de imagem foi executada com êxito:

  • No payload de resposta, procure um item de saída com type definido como image_generation_call.
  • No portal do Foundry, abra o rastreamento/depuração para sua execução para confirmar a chamada da ferramenta e inspecionar entradas e saídas.

Quando a geração de imagem é bem-sucedida, a resposta inclui um image_generation_call item de saída com um result campo que contém dados de imagem codificados em base64.

Se você vir apenas a saída de texto e nenhum image_generation_call item, a solicitação poderá não ser roteada para a geração de imagem. Examine a seção de solução de problemas.

Solucionando problemas

Questão Causa Resolução
Falha na geração de imagem Implantação ausente Verifique se o modelo de orquestrador (por exemplo, gpt-4o) e as implantações gpt-image-1 existem no mesmo projeto Foundry.
Falha na geração de imagem Cabeçalho ausente ou incorreto Verifique se o cabeçalho x-ms-oai-image-generation-deployment está presente na solicitação de Respostas e corresponde ao nome da implantação de geração de imagens.
O agente usa a implantação errada Configuração incorreta do nome do modelo Confirme se o nome do modelo do orquestrador na definição do agente é diferente do nome da implantação de geração de imagem.
O prompt não produz uma imagem A filtragem de conteúdo bloqueou a solicitação Verifique os logs de filtragem de conteúdo. Consulte Visão Geral de Guardrails e Controles para obter diretrizes sobre prompts aceitáveis.
Ferramenta não disponível Limitação regional ou de modelo Confirme se a ferramenta de geração de imagem está disponível em sua região e com seu modelo de orquestrador. Consulte as práticas recomendadas para usar ferramentas.
A imagem gerada tem baixa qualidade O prompt não tem detalhes Forneça prompts mais específicos e detalhados que descrevem o estilo de imagem, a composição e os elementos desejados.
Tempo esgotado para geração de imagem Solicitação de imagem grande ou complexa Simplifique o prompt ou aumente as configurações de tempo limite. Considere dividir solicitações complexas em várias mais simples.
Conteúdo de imagem inesperado Prompt ambíguo Refine o seu prompt para ser mais específico. Inclua prompts negativos para remover elementos indesejados.