Bagikan melalui


API Tanggapan Azure OpenAI

Responses API adalah API stateful baru dari Azure OpenAI. Ini menggabungkan kemampuan terbaik dari penyelesaian obrolan dan API asisten dalam satu pengalaman terpadu. API Response juga menambahkan dukungan untuk model computer-use-preview baru yang mendukung kemampuan penggunaan komputer.

Respons API

Dukungan API

Ketersediaan Wilayah

API respons saat ini tersedia di wilayah berikut:

  • australiaeast
  • Brasil Selatan
  • kanadacentral
  • kanada timur
  • eastus
  • eastus2
  • francecentral
  • Jerman Barat Tengah
  • Italia Utara
  • japaneast
  • koreacentral
  • northcentralus
  • norwayeast
  • polandcentral
  • southafricanorth
  • southcentralus
  • southeastasia
  • southindia
  • spaincentral
  • swedencentral
  • switzerlandnorth
  • uaenorth
  • uksouth
  • westus
  • westus3

Dukungan model

  • gpt-5.1-codex-max (Versi: 2025-12-04)
  • gpt-5.1 (Versi: 2025-11-13)
  • gpt-5.1-chat (Versi: 2025-11-13)
  • gpt-5.1-codex (Versi: 2025-11-13)
  • gpt-5.1-codex-mini (Versi: 2025-11-13)
  • gpt-5-pro (Versi: 2025-10-06)
  • gpt-5-codex (Versi: 2025-09-11)
  • gpt-5 (Versi: 2025-08-07)
  • gpt-5-mini (Versi: 2025-08-07)
  • gpt-5-nano (Versi: 2025-08-07)
  • gpt-5-chat (Versi: 2025-08-07)
  • gpt-5-chat (Versi: 2025-10-03)
  • gpt-5-codex (Versi: 2025-09-15)
  • gpt-4o (Versi: 2024-11-20, 2024-08-06, 2024-05-13)
  • gpt-4o-mini (Versi: 2024-07-18)
  • computer-use-preview
  • gpt-4.1 (Versi: 2025-04-14)
  • gpt-4.1-nano (Versi: 2025-04-14)
  • gpt-4.1-mini (Versi: 2025-04-14)
  • gpt-image-1 (Versi: 2025-04-15)
  • gpt-image-1-mini (Versi: 2025-10-06)
  • o1 (Versi: 2024-12-17)
  • o3-mini (Versi: 2025-01-31)
  • o3 (Versi: 2025-04-16)
  • o4-mini (Versi: 2025-04-16)

Tidak setiap model tersedia di wilayah yang didukung oleh API respons. Periksa halaman model untuk ketersediaan wilayah model.

Note

Saat ini tidak didukung:

  • Pemadatan dengan /responses/compact
  • Pembuatan gambar menggunakan pengeditan multi-tahap dan streaming.
  • Gambar tidak dapat diunggah sebagai file lalu direferensikan sebagai input.

Ada masalah yang diketahui dengan hal berikut:

  • PDF sebagai file input sekarang didukung, tetapi pengaturan tujuan unggahan file user_data saat ini tidak didukung.
  • Masalah performa saat mode latar belakang digunakan dengan streaming. Masalah ini diperkirakan akan segera diselesaikan.

Dokumentasi rujukan

Mulai menggunakan API respons

Untuk mengakses perintah API respons, Anda perlu meningkatkan versi pustaka OpenAI Anda.

pip install --upgrade openai

Membuat respons teks

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),
    base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
)

response = client.responses.create(   
  model="gpt-4.1-nano", # Replace with your model deployment name 
  input="This is a test.",
)

print(response.model_dump_json(indent=2)) 

Important

Gunakan kunci API dengan hati-hati. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik. Jika Anda menggunakan kunci API, simpan dengan aman di Azure Key Vault. Untuk informasi selengkapnya tentang menggunakan kunci API dengan aman di aplikasi Anda, lihat Kunci API dengan Azure Key Vault.

Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.

Mendapatkan tanggapan

Untuk mengambil respons dari panggilan sebelumnya ke API respons.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),
    base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
)

response = client.responses.retrieve("resp_67cb61fa3a448190bcf2c42d96f0d1a8")

Important

Gunakan kunci API dengan hati-hati. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik. Jika Anda menggunakan kunci API, simpan dengan aman di Azure Key Vault. Untuk informasi selengkapnya tentang menggunakan kunci API dengan aman di aplikasi Anda, lihat Kunci API dengan Azure Key Vault.

Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.

Hapus tanggapan

Secara default, data respons dipertahankan selama 30 hari. Untuk menghapus respons, Anda dapat menggunakan response.delete ("{response_id}")

import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.delete("resp_67cb61fa3a448190bcf2c42d96f0d1a8")

print(response)

Menautkan respons bersama

Anda dapat menautkan respons bersama-sama dengan meneruskan response.id dari respons sebelumnya ke previous_response_id parameter .

import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.create(
    model="gpt-4o",  # replace with your model deployment name
    input="Define and explain the concept of catastrophic forgetting?"
)

second_response = client.responses.create(
    model="gpt-4o",  # replace with your model deployment name
    previous_response_id=response.id,
    input=[{"role": "user", "content": "Explain this at a level that could be understood by a college freshman"}]
)
print(second_response.model_dump_json(indent=2)) 

Catat dari outputnya bahwa meskipun kami tidak pernah membagikan pertanyaan input pertama dengan panggilan API second_response, dengan meneruskan previous_response_id, model memiliki konteks penuh dari pertanyaan dan respons sebelumnya untuk menjawab pertanyaan baru.

Output:

{
  "id": "resp_67cbc9705fc08190bbe455c5ba3d6daf",
  "created_at": 1741408624.0,
  "error": null,
  "incomplete_details": null,
  "instructions": null,
  "metadata": {},
  "model": "gpt-4o-2024-08-06",
  "object": "response",
  "output": [
    {
      "id": "msg_67cbc970fd0881908353a4298996b3f6",
      "content": [
        {
          "annotations": [],
          "text": "Sure! Imagine you are studying for exams in different subjects like math, history, and biology. You spend a lot of time studying math first and get really good at it. But then, you switch to studying history. If you spend all your time and focus on history, you might forget some of the math concepts you learned earlier because your brain fills up with all the new history facts. \n\nIn the world of artificial intelligence (AI) and machine learning, a similar thing can happen with computers. We use special programs called neural networks to help computers learn things, sort of like how our brain works. But when a neural network learns a new task, it can forget what it learned before. This is what we call \"catastrophic forgetting.\"\n\nSo, if a neural network learned how to recognize cats in pictures, and then you teach it how to recognize dogs, it might get really good at recognizing dogs but suddenly become worse at recognizing cats. This happens because the process of learning new information can overwrite or mess with the old information in its \"memory.\"\n\nScientists and engineers are working on ways to help computers remember everything they learn, even as they keep learning new things, just like students have to remember math, history, and biology all at the same time for their exams. They use different techniques to make sure the neural network doesn’t forget the important stuff it learned before, even when it gets new information.",
          "type": "output_text"
        }
      ],
      "role": "assistant",
      "status": null,
      "type": "message"
    }
  ],
  "parallel_tool_calls": null,
  "temperature": 1.0,
  "tool_choice": null,
  "tools": [],
  "top_p": 1.0,
  "max_output_tokens": null,
  "previous_response_id": "resp_67cbc96babbc8190b0f69aedc655f173",
  "reasoning": null,
  "status": "completed",
  "text": null,
  "truncation": null,
  "usage": {
    "input_tokens": 405,
    "output_tokens": 285,
    "output_tokens_details": {
      "reasoning_tokens": 0
    },
    "total_tokens": 690
  },
  "user": null,
  "reasoning_effort": null
}

Penghubungan tanggapan secara manual

Atau Anda dapat menautkan respons secara manual bersama-sama menggunakan metode di bawah ini:

import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)


inputs = [{"type": "message", "role": "user", "content": "Define and explain the concept of catastrophic forgetting?"}] 
  
response = client.responses.create(  
    model="gpt-4o",  # replace with your model deployment name  
    input=inputs  
)  
  
inputs += response.output

inputs.append({"role": "user", "type": "message", "content": "Explain this at a level that could be understood by a college freshman"}) 
               

second_response = client.responses.create(  
    model="gpt-4o",  
    input=inputs
)  
      
print(second_response.model_dump_json(indent=2))  

Streaming

import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.create(
    input = "This is a test",
    model = "o4-mini", # replace with model deployment name
    stream = True
)

for event in response:
    if event.type == 'response.output_text.delta':
        print(event.delta, end='')

Panggilan fungsi

API respons mendukung panggilan fungsi.

import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.create(  
    model="gpt-4o",  # replace with your model deployment name  
    tools=[  
        {  
            "type": "function",  
            "name": "get_weather",  
            "description": "Get the weather for a location",  
            "parameters": {  
                "type": "object",  
                "properties": {  
                    "location": {"type": "string"},  
                },  
                "required": ["location"],  
            },  
        }  
    ],  
    input=[{"role": "user", "content": "What's the weather in San Francisco?"}],  
)  

print(response.model_dump_json(indent=2))  
  
# To provide output to tools, add a response for each tool call to an array passed  
# to the next response as `input`  
input = []  
for output in response.output:  
    if output.type == "function_call":  
        match output.name:  
            case "get_weather":  
                input.append(  
                    {  
                        "type": "function_call_output",  
                        "call_id": output.call_id,  
                        "output": '{"temperature": "70 degrees"}',  
                    }  
                )  
            case _:  
                raise ValueError(f"Unknown function call: {output.name}")  
  
second_response = client.responses.create(  
    model="gpt-4o",  
    previous_response_id=response.id,  
    input=input  
)  

print(second_response.model_dump_json(indent=2)) 

Penerjemah Kode

Alat Penerjemah Kode memungkinkan model menulis serta menjalankan kode Python di lingkungan yang aman dan sandbox. Ini mendukung berbagai tugas tingkat lanjut, termasuk:

  • Memproses file dengan format dan struktur data yang bervariasi
  • Membuat file yang menyertakan data dan visualisasi (misalnya, grafik)
  • Menulis dan menjalankan kode secara berulang untuk menyelesaikan masalah—model dapat men-debug dan mencoba kembali kode hingga berhasil
  • Meningkatkan penalaran visual dalam model yang didukung (misalnya, o3, o4-mini) dengan mengaktifkan transformasi gambar seperti pemotongan, perbesar tampilan, dan rotasi
  • Alat ini sangat berguna untuk skenario yang melibatkan analisis data, komputasi matematika, dan pembuatan kode.
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses?api-version=preview \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
  -d '{
        "model": "gpt-4.1",
        "tools": [
            { "type": "code_interpreter", "container": {"type": "auto"} }
        ],
        "instructions": "You are a personal math tutor. When asked a math question, write and run code using the python tool to answer the question.",
        "input": "I need to solve the equation 3x + 11 = 14. Can you help me?"
    }'
import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

instructions = "You are a personal math tutor. When asked a math question, write and run code using the python tool to answer the question."

response = client.responses.create(
    model="gpt-4.1",
    tools=[
        {
            "type": "code_interpreter",
            "container": {"type": "auto"}
        }
    ],
    instructions=instructions,
    input="I need to solve the equation 3x + 11 = 14. Can you help me?",
)

print(response.output)

Containers

Important

Penerjemah Kode memiliki biaya tambahan di luar biaya berbasis token untuk penggunaan Azure OpenAI. Jika API Respons Anda memanggil Penerjemah Kode secara bersamaan dalam dua utas yang berbeda, dua sesi penerjemah kode dibuat. Setiap sesi aktif secara default selama 1 jam dengan batas waktu diam 20 menit.

Alat Penerjemah Kode memerlukan kontainer—mesin virtual yang sepenuhnya terisolasi di mana model dapat menjalankan kode Python. Kontainer dapat menyertakan file yang diunggah atau file yang dihasilkan selama eksekusi.

Untuk membuat kontainer, tentukan "container": { "type": "auto", "file_ids": ["file-1", "file-2"] } dalam konfigurasi alat saat membuat objek Respons baru. Ini secara otomatis membuat kontainer baru atau menggunakan kembali kontainer aktif dari code_interpreter_call sebelumnya dalam konteks model. code_interpreter_call dalam output API akan berisi container_id yang dihasilkan. Kontainer ini kedaluwarsa jika tidak digunakan selama 20 menit.

Input dan output berkas

Saat menjalankan Penerjemah Kode, model dapat membuat filenya sendiri. Misalnya, jika Anda memintanya untuk membuat plot, atau membuat CSV, itu membuat gambar-gambar ini langsung di kontainer Anda. Ini akan mengutip file-file ini dalam anotasi pesan berikutnya.

File apa pun dalam input model diunggah secara otomatis ke kontainer. Anda tidak perlu mengunggahnya secara eksplisit ke kontainer.

File yang Didukung

Format berkas MIME type
.c text/x-c
.cs text/x-csharp
.cpp text/x-c++
.csv text/csv
.doc application/msword
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.html text/html
.java text/x-java
.json application/json
.md text/markdown
.pdf application/pdf
.php text/x-php
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
.py text/x-python
.py text/x-script.python
.rb text/x-ruby
.tex text/x-tex
.txt text/plain
.css text/css
.js text/JavaScript
.sh application/x-sh
.ts application/TypeScript
.csv application/csv
.jpeg image/jpeg
.jpg image/jpeg
.gif image/gif
.pkl application/octet-stream
.png image/png
.tar application/x-tar
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xml application/xml atau "text/xml"
.zip application/zip

Mencantumkan item input

import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.input_items.list("resp_67d856fcfba0819081fd3cffee2aa1c0")

print(response.model_dump_json(indent=2))

Output:

{
  "data": [
    {
      "id": "msg_67d856fcfc1c8190ad3102fc01994c5f",
      "content": [
        {
          "text": "This is a test.",
          "type": "input_text"
        }
      ],
      "role": "user",
      "status": "completed",
      "type": "message"
    }
  ],
  "has_more": false,
  "object": "list",
  "first_id": "msg_67d856fcfc1c8190ad3102fc01994c5f",
  "last_id": "msg_67d856fcfc1c8190ad3102fc01994c5f"
}

Input gambar

Untuk model yang mendukung visi, gambar di PNG (.png), JPEG (.jpeg dan .jpg), WEBP (.webp) didukung.

URL gambar

import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.create(
    model="gpt-4o",
    input=[
        {
            "role": "user",
            "content": [
                { "type": "input_text", "text": "what is in this image?" },
                {
                    "type": "input_image",
                    "image_url": "<image_URL>"
                }
            ]
        }
    ]
)

print(response)

Gambar yang dikodekan Base64

import base64
import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

# Path to your image
image_path = "path_to_your_image.jpg"

# Getting the Base64 string
base64_image = encode_image(image_path)

response = client.responses.create(
    model="gpt-4o",
    input=[
        {
            "role": "user",
            "content": [
                { "type": "input_text", "text": "what is in this image?" },
                {
                    "type": "input_image",
                    "image_url": f"data:image/jpeg;base64,{base64_image}"
                }
            ]
        }
    ]
)

print(response)

Input file

Model dengan kemampuan penglihatan mendukung input PDF. File PDF dapat disediakan baik sebagai data yang dikodekan Base64 atau sebagai ID file. Untuk membantu model menafsirkan konten PDF, teks yang diekstrak dan gambar setiap halaman disertakan dalam konteks model. Ini berguna ketika informasi utama disampaikan melalui diagram atau konten non-tekstual.

Note

  • Semua teks dan gambar yang diekstrak dimasukkan ke dalam konteks model. Pastikan Anda memahami implikasi harga dan penggunaan token menggunakan PDF sebagai input.

  • Dalam satu permintaan API, ukuran konten yang diunggah di beberapa input (file) harus berada dalam panjang konteks model.

  • Hanya model yang mendukung input teks dan gambar yang dapat menerima file PDF sebagai input.

  • purpose dari user_data saat ini tidak didukung. Sebagai solusi sementara, Anda harus mengatur tujuan ke assistants.

Mengonversi PDF ke Base64 dan menganalisis

import base64
import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

with open("PDF-FILE-NAME.pdf", "rb") as f: # assumes PDF is in the same directory as the executing script
    data = f.read()

base64_string = base64.b64encode(data).decode("utf-8")

response = client.responses.create(
    model="gpt-4o-mini", # model deployment name
    input=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_file",
                    "filename": "PDF-FILE-NAME.pdf",
                    "file_data": f"data:application/pdf;base64,{base64_string}",
                },
                {
                    "type": "input_text",
                    "text": "Summarize this PDF",
                },
            ],
        },
    ]
)

print(response.output_text)

Unggah PDF dan analisis

Unggah file PDF. purpose dari user_data saat ini tidak didukung. Sebagai solusinya, Anda harus mengatur tujuan ke assistants.

import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)


# Upload a file with a purpose of "assistants"
file = client.files.create(
  file=open("nucleus_sampling.pdf", "rb"), # This assumes a .pdf file in the same directory as the executing script
  purpose="assistants"
)

print(file.model_dump_json(indent=2))
file_id = file.id

Output:

{
  "id": "assistant-KaVLJQTiWEvdz8yJQHHkqJ",
  "bytes": 4691115,
  "created_at": 1752174469,
  "filename": "nucleus_sampling.pdf",
  "object": "file",
  "purpose": "assistants",
  "status": "processed",
  "expires_at": null,
  "status_details": null
}

Anda kemudian akan mengambil nilai id dan meneruskan itu ke model untuk diproses di bawah file_id:

import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.create(
    model="gpt-4o-mini",
    input=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_file",
                    "file_id":"assistant-KaVLJQTiWEvdz8yJQHHkqJ"
                },
                {
                    "type": "input_text",
                    "text": "Summarize this PDF",
                },
            ],
        },
    ]
)

print(response.output_text)
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/files \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
  -F purpose="assistants" \
  -F file="@your_file.pdf" \

curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
  -d '{
        "model": "gpt-4.1",
        "input": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_file",
                        "file_id": "assistant-123456789"
                    },
                    {
                        "type": "input_text",
                        "text": "ASK SOME QUESTION RELATED TO UPLOADED PDF"
                    }
                ]
            }
        ]
    }'

Menggunakan server MCP jarak jauh

Anda dapat memperluas kemampuan model Anda dengan menghubungkannya ke alat yang dihosting di server Protokol Konteks Model Jarak Jauh (MCP). Server ini dikelola oleh pengembang dan organisasi dan mengekspos alat yang dapat diakses oleh klien yang kompatibel dengan MCP, seperti API Respons.

Model Context Protocol (MCP) adalah standar terbuka yang menentukan bagaimana aplikasi menyediakan alat dan data kontekstual ke model bahasa besar (LLM). Ini memungkinkan integrasi alat eksternal yang konsisten dan dapat diskalakan ke dalam alur kerja model.

Contoh berikut menunjukkan cara menggunakan server MCP fiktif untuk mengkueri informasi tentang Azure REST API. Ini memungkinkan model untuk mengambil dan menganalisis konten repositori secara real time.

curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
  -d '{
  "model": "gpt-4.1",
  "tools": [
    {
      "type": "mcp",
      "server_label": "github",
      "server_url": "https://contoso.com/Azure/azure-rest-api-specs",
      "require_approval": "never"
    }
  ],
  "input": "What is this repo in 100 words?"
}'
import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)
response = client.responses.create(
    model="gpt-4.1", # replace with your model deployment name 
    tools=[
        {
            "type": "mcp",
            "server_label": "github",
            "server_url": "https://contoso.com/Azure/azure-rest-api-specs",
            "require_approval": "never"
        },
    ],
    input="What transport protocols are supported in the 2025-03-26 version of the MCP spec?",
)

print(response.output_text)

Alat MCP hanya berfungsi di Responses API, dan tersedia di semua model yang lebih baru (gpt-4o, gpt-4.1, dan model penalaran kami). Saat menggunakan alat MCP, Anda hanya membayar token yang digunakan saat mengimpor definisi alat atau melakukan panggilan alat—tidak ada biaya tambahan yang terlibat.

Approvals

Secara default, API Respons memerlukan persetujuan eksplisit sebelum data dibagikan dengan server MCP jarak jauh. Langkah persetujuan ini membantu memastikan transparansi dan memberi Anda kontrol atas informasi apa yang dikirim secara eksternal.

Sebaiknya tinjau semua data yang dibagikan dengan server MCP jarak jauh dan secara opsional mencatatnya untuk tujuan audit.

Saat persetujuan diperlukan, model akan mengembalikan item mcp_approval_request dalam output respons. Objek ini berisi detail permintaan yang tertunda dan memungkinkan Anda memeriksa atau memodifikasi data sebelum melanjutkan.

{
  "id": "mcpr_682bd9cd428c8198b170dc6b549d66fc016e86a03f4cc828",
  "type": "mcp_approval_request",
  "arguments": {},
  "name": "fetch_azure_rest_api_docs",
  "server_label": "github"
}

Untuk melanjutkan panggilan MCP jarak jauh, Anda harus menanggapi permintaan persetujuan dengan membuat objek respons baru yang menyertakan item mcp_approval_response. Objek ini mengonfirmasi niat Anda untuk mengizinkan model mengirim data yang ditentukan ke server MCP jarak jauh.

curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
  -d '{
  "model": "gpt-4.1",
  "tools": [
    {
      "type": "mcp",
      "server_label": "github",
      "server_url": "https://contoso.com/Azure/azure-rest-api-specs",
      "require_approval": "never"
    }
  ],
  "previous_response_id": "resp_682f750c5f9c8198aee5b480980b5cf60351aee697a7cd77",
  "input": [{
    "type": "mcp_approval_response",
    "approve": true,
    "approval_request_id": "mcpr_682bd9cd428c8198b170dc6b549d66fc016e86a03f4cc828"
  }]
}'
import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.create(
    model="gpt-4.1", # replace with your model deployment name 
    tools=[
        {
            "type": "mcp",
            "server_label": "github",
            "server_url": "https://contoso.com/Azure/azure-rest-api-specs",
            "require_approval": "never"
        },
    ],
    previous_response_id="resp_682f750c5f9c8198aee5b480980b5cf60351aee697a7cd77",
    input=[{
        "type": "mcp_approval_response",
        "approve": True,
        "approval_request_id": "mcpr_682bd9cd428c8198b170dc6b549d66fc016e86a03f4cc828"
    }],
)

Authentication

Important

  • Klien MCP dalam API Respons memerlukan TLS 1.2 atau lebih tinggi.
  • TLS bersama (mTLS) saat ini tidak didukung.
  • Tag layanan Azure saat ini tidak didukung untuk lalu lintas klien MCP.

Tidak seperti server GitHub MCP, sebagian besar server MCP jarak jauh memerlukan autentikasi. Alat MCP di API Respons mendukung header kustom, memungkinkan Anda terhubung dengan aman ke server ini menggunakan skema autentikasi yang mereka butuhkan.

Anda dapat menentukan header seperti kunci API, token akses OAuth, atau info masuk lainnya langsung dalam permintaan Anda. Header yang paling umum digunakan adalah Authorization header .

curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
  -d '{
        "model": "gpt-4.1",
        "input": "What is this repo in 100 words?"
        "tools": [
            {
                "type": "mcp",
                "server_label": "github",
                "server_url": "https://contoso.com/Azure/azure-rest-api-specs",
                "headers": {
                    "Authorization": "Bearer $YOUR_API_KEY"
            }
        ]
    }'
import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.create(
    model="gpt-4.1",
    input="What is this repo in 100 words?",
    tools=[
        {
            "type": "mcp",
            "server_label": "github",
            "server_url": "https://gitmcp.io/Azure/azure-rest-api-specs",
            "headers": {
                "Authorization": "Bearer $YOUR_API_KEY"
        }
    ]
)

print(response.output_text)

Tugas latar belakang

Mode latar belakang memungkinkan Anda menjalankan tugas jangka panjang secara asinkron menggunakan model seperti o3 dan o1-pro. Ini sangat berguna untuk tugas penalaran kompleks yang dapat memakan waktu beberapa menit untuk diselesaikan, seperti yang ditangani oleh agen seperti Codex atau Deep Research.

Dengan mengaktifkan mode latar belakang, Anda dapat menghindari batas waktu dan mempertahankan keandalan selama operasi yang diperpanjang. Ketika permintaan dikirim dengan "background": true, tugas diproses secara asinkron, dan Anda dapat melakukan polling untuk statusnya dari waktu ke waktu.

Untuk memulai tugas latar belakang, atur parameter latar belakang ke true dalam permintaan Anda:

curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
  -d '{
    "model": "o3",
    "input": "Write me a very long story",
    "background": true
  }'
import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.create(
    model = "o3",
    input = "Write me a very long story",
    background = True
)

print(response.status)

GET Gunakan titik akhir untuk memeriksa status respons latar belakang. Lanjutkan polling saat status diantrekan atau sedang berlangsung. Setelah respons mencapai status akhir (terminal), respons akan tersedia untuk diambil.

curl GET https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses/resp_1234567890 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN"
from time import sleep
import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.create(
    model = "o3",
    input = "Write me a very long story",
    background = True
)

while response.status in {"queued", "in_progress"}:
    print(f"Current status: {response.status}")
    sleep(2)
    response = client.responses.retrieve(response.id)

print(f"Final status: {response.status}\nOutput:\n{response.output_text}")

Anda dapat membatalkan tugas latar belakang yang sedang berlangsung menggunakan cancel endpoint. Pembatalan bersifat idempotensi—panggilan berikutnya akan mengembalikan objek respons akhir.

curl -X POST https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses/resp_1234567890/cancel \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN"
import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

response = client.responses.cancel("resp_1234567890")

print(response.status)

Menyiarkan respons di latar belakang

Untuk melakukan streaming respons latar belakang, atur background dan stream ke true. Ini berguna jika Anda ingin melanjutkan streaming nanti jika koneksi terputus. Gunakan sequence_number dari setiap peristiwa untuk melacak posisi Anda.

curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
  -d '{
    "model": "o3",
    "input": "Write me a very long story",
    "background": true,
    "stream": true
  }'

import os
from openai import OpenAI

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")  
)

# Fire off an async response but also start streaming immediately
stream = client.responses.create(
    model="o3",
    input="Write me a very long story",
    background=True,
    stream=True,
)

cursor = None
for event in stream:
    print(event)
    cursor = event["sequence_number"]

Note

Respons yang dilakukan di latar belakang saat ini memiliki latensi waktu-ke-token pertama yang lebih tinggi daripada respons sinkron. Penyempurnaan sedang berlangsung untuk mengurangi kesenjangan ini.

Limitations

  • Mode latar belakang memerlukan store=true. Permintaan stateless tidak didukung.
  • Anda hanya dapat melanjutkan streaming jika permintaan asli disertakan stream=true.
  • Untuk membatalkan respons sinkron, hentikan koneksi secara langsung.

Melanjutkan streaming dari titik tertentu

curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses/resp_1234567890?stream=true&starting_after=42 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN"

Item Terenkripsi untuk Penalaran

Saat menggunakan API Respons dalam mode stateless — baik dengan mengatur store ke false atau saat organisasi Anda terdaftar dalam kebijakan tanpa retensi data — Anda masih harus mempertahankan konteks penalaran di seluruh pergantian percakapan. Untuk melakukan ini, sertakan item penalaran terenkripsi dalam permintaan API Anda.

Untuk mempertahankan elemen logika di seluruh giliran, tambahkan reasoning.encrypted_content dalam parameter include di permintaan Anda. Ini memastikan bahwa respons menyertakan versi terenkripsi dari jejak penalaran, yang dapat diteruskan dalam permintaan di masa mendatang.

curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
  -d '{
    "model": "o4-mini",
    "reasoning": {"effort": "medium"},
    "input": "What is the weather like today?",
    "tools": [<YOUR_FUNCTION GOES HERE>],
    "include": ["reasoning.encrypted_content"]
  }'

Pembuatan gambar (pratinjau)

API Respons memungkinkan pembuatan gambar sebagai bagian dari percakapan dan alur kerja multi-langkah. Ini mendukung input dan output gambar dalam konteks dan mencakup alat bawaan untuk menghasilkan dan mengedit gambar.

Dibandingkan dengan API Gambar mandiri, API Respons menawarkan beberapa keuntungan:

  • Streaming: Menampilkan output gambar parsial selama pembuatan untuk meningkatkan latensi yang dirasakan.
  • Input fleksibel: Terima ID File gambar sebagai input, selain byte gambar mentah.

Note

Alat pembangkit gambar pada API Respons hanya didukung oleh model gpt-image-1-series. Namun, Anda dapat memanggil model ini dari daftar model yang didukung berikut: model seri gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o3, gpt-5, dan gpt-5.1.

Alat pembuatan gambar API Respons saat ini tidak mendukung mode streaming. Untuk menggunakan mode streaming dan menghasilkan gambar parsial, panggil API pembuatan gambar langsung di luar API Respons.

Gunakan API Respons jika Anda ingin membangun pengalaman gambar percakapan dengan Gambar GPT.

from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
  default_headers={"x-ms-oai-image-generation-deployment":"gpt-image-1", "api_version":"preview"}
)

response = client.responses.create(
    model="o3",
    input="Generate an image of gray tabby cat hugging an otter with an orange scarf",
    tools=[{"type": "image_generation"}],
)

# Save the image to a file
image_data = [
    output.result
    for output in response.output
    if output.type == "image_generation_call"
]
    
if image_data:
    image_base64 = image_data[0]
    with open("otter.png", "wb") as f:
        f.write(base64.b64decode(image_base64))

Model Penalaran

Untuk contoh cara menggunakan model penalaran dengan API respons, lihat panduan model penalaran.

Penggunaan komputer

Penggunaan komputer dengan Playwright telah berpindah ke panduan model penggunaan komputer khusus