Use a ferramenta de geração de imagens (pré-visualização)

Importante

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

A ferramenta geração de imagens no Microsoft Foundry Agent Service gera imagens a partir de prompts de texto em conversas e fluxos de trabalho em várias etapas. O modelo Foundry do agente orquestra o pedido de geração de imagem e devolve uma saída codificada em base64 que pode ser guardada num ficheiro.

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

  • Uma conta no Azure com uma subscrição ativa.
  • Um projeto da Foundry.
  • Um ambiente básico ou padrão de agente. Ver configuração do ambiente do agente.
  • Permissões para criar e gerir versões do agente no projeto.
  • Duas implementações de modelos no mesmo projeto Foundry:
    • Uma implementação compatível de um modelo OpenAI Azure para o agente (por exemplo, gpt-4o).
    • Uma implementação de modelo de geração de imagem (gpt-image-1).

Configurar a ferramenta de geração de imagens

  1. Implementa o teu modelo de orquestrador (por exemplo, gpt-4o) no teu projeto Foundry.
  2. Implementar gpt-image-1 para o mesmo projeto Foundry.
  3. Confirma o suporte da tua região e modelo para geração de imagens. Consulte Melhores práticas para usar ferramentas no Microsoft Foundry Agent Service.

Exemplos de código

Antes de começares, instala o pacote mais recente do SDK. O SDK .NET está atualmente em fase de pré-visualização. Para instruções de instalação do pacote, consulte o quickstart.

Crie um agente com a ferramenta de geração de imagens

Este exemplo cria um agente com a ferramenta de geração de imagem, gera uma imagem e guarda-a num ficheiro.

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 para geração de imagens no Azure. IA. Extensões.OpenAI

Neste exemplo, geras uma imagem com base num prompt simples. O código neste exemplo é síncrono. Para um exemplo assíncrono, veja o exemplo de código de amostra no repositório do SDK do Azure para .NET 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);
    }
}

Produção esperada

Quando executa a amostra, vê o seguinte resultado:

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

Crie um agente com a ferramenta de geração de imagens

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 seguinte cria um agente que utiliza a ferramenta de geração de imagens.

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

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

Produção esperada

O JSON de resposta inclui um image_generation_call item de saída com um result campo contendo 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 guardar a imagem, canalize 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

Crie um agente com uma ferramenta de geração de imagens

Este exemplo demonstra como criar um agente de IA com capacidades de geração de imagens utilizando o cliente Azure AI Projects. O agente gera imagens com base em prompts de texto e guarda-as em ficheiros. Para um exemplo de JavaScript, veja o código exemplo no repositório SDK do Azure para JavaScript sobre 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);
});

Produção esperada

Quando executa a amostra, vê o seguinte resultado:

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

Usar geração de imagens num agente 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>

Crie 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 escrevê-los num ficheiro.

Produção esperada

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

Quando usar a ferramenta de geração de imagens

A ferramenta de geração de imagens no Agent Service oferece vantagens em relação à API OpenAI Image do Azure:

Vantagem Descrição
Streaming Mostrar saídas parciais de imagem durante a geração para melhorar a latência percebida.
Entradas flexíveis Aceitar IDs de ficheiros de imagem como entradas, além dos bytes de imagem em bruto.

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, 1536x1024, ou auto.
quality Qualidade de imagem. Um de low, medium, high, ou auto.
background Tipo de fundo. Um de transparent, opaque, ou auto.
output_format Formato de saída. Um de png, webp, ou jpeg.
output_compression Nível de compressão para a saída webp e jpeg (0-100).
moderation Nível de moderação para a imagem gerada. Um de auto ou low.
partial_images Número de imagens parciais a gerar em modo de streaming (0-3).
input_image_mask Máscara opcional para pintura. Fornecer image_url (base64) ou file_id.

Nota

O tempo de geração da imagem varia consoante a quality definição e a complexidade do prompt. Para aplicações sensíveis ao tempo, considere usar quality: "low" ou ativar o streaming partial_images.

Use a API Respostas se quiser:

  • Construa experiências de imagem conversacional com o GPT Image.
  • Transmita resultados parciais de imagem durante a geração para uma experiência de utilizador mais fluida.

Escreva prompts eficazes para transformar texto em imagem

Prompts eficazes produzem imagens melhores. Descreve o tema, o estilo visual e a composição que queres. Use palavras de ação como "desenhar", "criar" ou "editar" para guiar a saída do modelo.

A filtragem de conteúdo pode bloquear a geração de imagens se o serviço detetar conteúdo inseguro na sua sugestão. Para mais informações, consulte Visão Geral de Guarda-Corpos e Controlos.

Dica

Para uma visão detalhada de como pode ajustar os 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 destas abordagens para confirmar que a geração de imagens correu com sucesso:

  • Na carga útil de resposta, procure um item de saída com type definido como image_generation_call.
  • No portal Foundry, abre o rastreio/debug para a tua execução para confirmar a chamada à 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 contendo dados de imagem codificados em base64.

Se vir resultado apenas em texto e nenhum item image_generation_call, a requisição pode não ser direcionada para a geração de imagens. Veja a secção de resolução de problemas.

Resolução de problemas

Problema Causa Resolução
Falhas na geração de imagens Implementação em falta Verifique se tanto o modelo do orquestrador (por exemplo, gpt-4o) como as implementações de gpt-image-1 existem no mesmo projeto Foundry.
Falhas na geração de imagens Cabeçalho em falta ou incorreto Verifique se o cabeçalho x-ms-oai-image-generation-deployment está presente no pedido de Respostas e corresponde ao nome da sua implementação de geração de imagem.
O agente utiliza uma implementação incorreta Erro de configuração do nome do modelo Confirme que o nome do modelo Orchestrator na definição do seu agente difere do nome de implementação da geração de imagem.
O prompt não produz uma imagem O filtro de conteúdo bloqueou o pedido Verifique os registos de filtragem de conteúdo. Consulte Guardrails e a visão geral de controles para orientações sobre prompts aceitáveis.
Ferramenta não disponível Limitação regional ou de modelos Confirma que a ferramenta de geração de imagens está disponível na tua região e com o modelo do teu Orchestrator. Consulte as melhores práticas para a utilização de ferramentas.
A imagem gerada tem baixa qualidade O prompt carece de detalhes Forneça prompts mais específicos e detalhados que descrevam o estilo de imagem desejado, a composição e os elementos.
A geração de imagem excedeu o tempo limite Pedido de imagem grande ou complexa Simplifique o prompt ou aumente as definições de timeout. Considere dividir pedidos complexos em múltiplos mais simples.
Conteúdo de imagem inesperado Prompt ambíguo Refina o teu enunciado para seres mais específico. Incluir comandos negativos para excluir elementos indesejados.