Azure OpenAI Yanıtları API'sini kullanma

Durum bilgisi olan, çok aşamalı yanıtlar oluşturmak için Azure OpenAI Yanıtları API'sini kullanın. Sohbet tamamlamaları ve Yardımcılar API'sindeki özellikleri tek bir birleşik deneyimde bir araya getirir. Yanıtlar API'si, computer-use-preview destekleyen modeli de destekler.

Önkoşullar

  • Dağıtılmış Azure OpenAI modeli
  • Kimlik doğrulama yöntemi:
    • API anahtarı (örneğin, AZURE_OPENAI_API_KEY) veya
    • Microsoft Entra ID (önerilir).

OpenAI paketini yükleme veya yükseltme

OpenAI Python paketini yükleyin veya yükseltin.

pip install --upgrade openai

Metin yanıtı oluşturma

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)) 

Önemli

API anahtarlarını dikkatli kullanın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin. API anahtarı kullanıyorsanız, Azure Key Vault güvenli bir şekilde depolayın. Uygulamalarınızda API anahtarlarını güvenli bir şekilde kullanma hakkında daha fazla bilgi için bkz. Azure Key Vault ile API anahtarları.

Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz. Azure Yapay Zeka Hizmetleri istekleri doğrulama.

Yanıtı geri getirme

Yanıtlar API'sine önceki bir çağrıdan yanıt almak için.

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")

Önemli

API anahtarlarını dikkatli kullanın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin. API anahtarı kullanıyorsanız, Azure Key Vault güvenli bir şekilde depolayın. Uygulamalarınızda API anahtarlarını güvenli bir şekilde kullanma hakkında daha fazla bilgi için bkz. Azure Key Vault ile API anahtarları.

Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz. Azure Yapay Zeka Hizmetleri istekleri doğrulama.

Yanıtı silme

Varsayılan olarak, yanıt verileri 30 gün boyunca saklanır. Depolanan yanıtı silmek için çağrısında bulunur client.responses.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)

Yanıtları birbirine zincirleme

Önceki yanıttan response.id'yi previous_response_id parametresine geçirerek yanıtları birbirine zincirleyebilirsiniz.

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)) 

API çağrısıyla ilk giriş sorusunu second_response paylaşmamış olsak da, çıktıyı göz önünde bulundurarak, previous_response_id ile modeli ilettiğimizde, modelin önceki soru ve yanıtın bağlamının tamamına sahip olduğunu ve yeni soruyu bu şekilde yanıtlayabildiğini unutmayın.

Çıkış:

{
  "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
}

Yanıtları el ile zincirleme

Alternatif olarak, aşağıdaki yöntemi kullanarak yanıtları el ile zincirleyebilirsiniz:

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))  

Bir Yanıtı Sıkıştır

Sıkıştırma, modelin anlaşılması için gerekli bilgileri koruyarak modele gönderilen bağlam penceresini küçültmenizi sağlar.

Döndürülen öğeleri kullanarak sıkıştır

Önceki isteklerden döndürülen tüm öğeleri (örneğin, mantık, ileti, işlev çağrısı vb.) sıkıştırabilirsiniz.

curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses/compact \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
  -d '{
        "model": "gpt-4.1",
        "input": [
          {
            "role"   : "user",
            "content": "Create a simple landing page for a dog petting café."
          },
          {
            "id": "msg_001",
            "type": "message",
            "status": "completed",
            "content": [
              {
                "type": "output_text",
                "annotations": [],
                "logprobs": [],
                "text": "Below is a single file, ready-to-use landing page for a dog petting café:..."
              }
            ],
            "role": "assistant"
          }
        ]
    }'
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")  
)

compacted_response = client.responses.compact(
    model="gpt-4.1",
    input=[
    {
        "role": "user",
        "content": "Create a simple landing page for a dog petting cafe.",
    },
    # All items returned from previous requests are included here, like reasoning, message, function call, etc.
    {
        "id": "msg_001",
        "type": "message",
        "status": "completed",
        "content": [
        {
            "type": "output_text",
            "annotations": [],
            "logprobs": [],
            "text": "Below is a single file, ready-to-use landing page for a dog petting café:...",
        },
        ],
        "role": "assistant",
    },
    ]
)
# Pass the compacted_response.output as input to the next request
print(compacted_response)

Önceki yanıt kimliğini kullanarak sıkıştırma

Önceki yanıt kimliğini kullanarak da sıkıştırabilirsiniz.

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")  
)

# Get back a full response
initial_response = client.responses.create(
        model="gpt-4.1",
        input="What is the size of France?"
    )

print(f"Initial Response: {initial_response.output_text}")

# Now compact the response
compacted_response = client.responses.compact(
    model="gpt-4.1",
    previous_response_id=initial_response.id
)

# use the compacted response in a follow up
followup_response = client.responses.create(
    model="gpt-4.1",
    input=[
        *compacted_response.output,
        {"role": "user", "content": "And what is the capital/major city"}
    ]
)
print(f"Follow-up Response: {followup_response.output_text}")

Sunucu tarafı sıkıştırma

Sunucu tarafı sıkıştırmayı, POST /responses ile bir client.responses.create ayarlayarak (context_management veya compact_threshold) Yanıtlar içinde doğrudan kullanabilirsiniz.

  • Çıkış belirteci sayısı yapılandırılan eşiği aştığında, Yanıtlar API'si otomatik olarak sıkıştırma çalıştırır.
  • Bu modda /responses/compact aramanız ayrıca gerekmiyor.
  • Yanıt şifreli bir sıkıştırma öğesi içerir.
  • Yanıt oluşturma isteklerinizde store=false değerini ayarladığınızda sunucu tarafı sıkıştırması çalışır.

Sıkıştırma öğesi, daha az belirteç kullanarak temel ve gerekli olan önceki durumu ve mantığı bir sonraki aşamaya taşır. Opaktır ve insan tarafından okunabilir olması amaçlanmamıştır.

Durum bilgisi olmayan giriş dizisi zincirleme kullanıyorsanız, çıkış öğelerini her zamanki gibi ekleyin. Eğer previous_response_id kullanıyorsanız, her turda yalnızca yeni kullanıcı mesajını iletin. Her iki desende de sıkıştırma öğesi bir sonraki pencere için ihtiyaç duyulan bağlamı taşır.

Ipucu

Çıkış öğelerini önceki giriş öğelerine ekledikten sonra, istekleri daha küçük tutmak ve uzun kuyruk gecikme süresini azaltmak için en son sıkıştırma öğesinden önce gelen öğeleri bırakabilirsiniz. En son sıkıştırma öğesi, konuşmaya devam etmek için gerekli bağlamı taşır. Zincirleme previous_response_id kullanıyorsanız, el ile budama yapmayın.

Akış

  1. Her zamanki gibi ara responses . Sunucu tarafı sıkıştırmayı etkinleştirmek için context_management ile compact_threshold ekleyin.
  2. Çıkış eşiği geçerse, hizmet sıkıştırmayı tetikler, çıkış akışında bir sıkıştırma öğesi üretir ve çıkarıma devam etmeden önce kapsamı temizler.
  3. Şu desenlerden birini kullanarak konuşmaya devam edin:
    1. Durumsuz girdi dizisi zincirleme işlemi: Sıkıştırma öğeleri de dahil olmak üzere çıktı öğelerini bir sonraki girdi dizisine ekleyin.
    2. previous_response_id zincirleme: Her turda yalnızca yeni kullanıcı iletisini iletin ve en son yanıt kimliğini aktarmaya devam edin.

Örnek

conversation = [
  {
    "type": "message",
    "role": "user",
    "content": "Let's begin a long coding task.",
  }
]

while keep_going:
  response = client.responses.create(
    model="gpt-5.3-codex",
    input=conversation,
    store=False,
    context_management=[{"type": "compaction", "compact_threshold": 200000}],
  )

  conversation.append(
    {
      "type": "message",
       "role": "user",
      "content": get_next_user_input(),
    }
  )

Yayın Akışı

Not

Akış sırasında, hizmet belirteç sınırları veya ayrıştırma sorunları gibi bir hatayla karşılaşırsa Yanıtlar API'si bir hata olayı ( 500429, ve benzer hatalar) döndürebilir. Uygulamalar bu olayı algılamalı ve akışı düzgün bir şekilde durdurmalı veya yeniden başlatmalıdır. Başarısız akış yanıtları sırasında oluşturulan belirteçler için sizden ücret alınmaz.

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='')

İşlev çağrısı

Yanıtlar API'si işlev çağrısını destekler.

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)) 

Kod Yorumlayıcı

Kod Yorumlayıcı aracı, modellerin güvenli, korumalı bir ortamda Python kod yazmasına ve yürütmesine olanak tanır. Aşağıdakiler dahil olmak üzere bir dizi gelişmiş görevi destekler:

  • Çeşitli veri biçimlerine ve yapılara sahip dosyaları işleme
  • Veri ve görselleştirmeler içeren dosyalar oluşturma (örneğin, grafikler)
  • Sorunları çözmek için kodu yinelemeli olarak yazma ve çalıştırma— modeller başarılı olana kadar kodun hatalarını ayıklayabilir ve yeniden deneyebilir
  • Kırpma, yakınlaştırma ve döndürme gibi görüntü dönüşümlerini etkinleştirerek desteklenen modellerde görsel mantığı geliştirme (örneğin, o3, o4-mini)
  • Bu araç özellikle veri analizi, matematiksel hesaplama ve kod oluşturma gibi senaryolar için kullanışlıdır.
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)

Konteyner

Önemli

Kod Yorumlayıcı'nın Azure OpenAI kullanımı için belirteç tabanlı ücretlerin dışındaki ek ücretleri vardır. Yanıtlar API'niz kod yorumlayıcıyı aynı anda iki farklı iş parçacığında çağırırsa, iki kod yorumlayıcı oturumu oluşturulur. Her oturum varsayılan olarak 1 saat boyunca etkindir ve boşta kalma süresi 20 dakikadır.

Kod Yorumlayıcı aracı, modelin Python kodu yürütebildiği tam korumalı bir sanal makine olan bir kapsayıcı gerektirir. Kapsayıcılar, karşıya yüklenen dosyaları veya yürütme sırasında oluşturulan dosyaları içerebilir.

Kapsayıcı oluşturmak için, yeni bir Yanıt nesnesi oluştururken araç yapılandırmasında belirtin "container": { "type": "auto", "file_ids": ["file-1", "file-2"] } . Bu, otomatik olarak yeni bir kapsayıcı oluşturur veya modelin bağlamında önceki bir code_interpreter_call etkin bir kapsayıcıyı yeniden kullanır. code_interpreter_call API çıkışında oluşturulan container_id içerecektir. 20 dakika boyunca kullanılmazsa bu kapsayıcının süresi dolar.

Dosya girişleri ve çıkışları

Kod Yorumlayıcı'yı çalıştırırken model kendi dosyalarını oluşturabilir. Örneğin, çizim oluşturmasını veya CSV oluşturmasını isterseniz, bu görüntüler doğrudan kapsayıcınızda oluşturulur. Bu dosyaları sonraki iletisinin ek açıklamalarında alıntı yapacaktır.

Model girişindeki tüm dosyalar kapsayıcıya otomatik olarak yüklenir. Kapsayıcıya açıkça yüklemeniz gerekmez.

Desteklenen Dosyalar

Dosya biçimi MIME türü
.c metin/x-c
.cs text/x-csharp
.cpp text/x-c++
.csv metin/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 uygulama/pdf
.php text/x-php
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation (Open XML Format of Presentation Files)
.py text/x-python
.py text/x-script.python
.rb text/x-ruby
.tex metin/x-tex
.txt düz metin
.css text/css
.js text/JavaScript
.sh application/x-sh
.ts application/TypeScript
.csv application/csv
.jpeg image/jpeg
.jpg image/jpeg
.gif resim/gif
.pkl application/octet-stream
.png resim/png
.tar application/x-tar
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet (Excel elektronik tablo dosya biçimi)
.xml application/xml veya "text/xml"
.zip application/zip

Giriş öğelerini listeleme

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))

Çıkış:

{
  "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"
}

Görüntü girişi

Görüntü işleme özellikli modeller için PNG (.png), JPEG (.jpeg ve .jpg), WEBP (.webp) içindeki görüntüler desteklenir.

Resim url'si

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)

Base64 kodlanmış görüntüsü

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)

Dosya girişi

Görüntü işleme özelliklerine sahip modeller PDF girişini destekler. PDF dosyaları Base64 ile kodlanmış veriler veya dosya kimlikleri olarak sağlanabilir. Modellerin PDF içeriğini yorumlamasına yardımcı olmak için hem ayıklanan metin hem de her sayfanın görüntüsü modelin bağlamında yer alır. Bu, önemli bilgiler diyagramlar veya metinsel olmayan içerik aracılığıyla iletildiğinde kullanışlıdır.

Not

  • Ayıklanan tüm metinler ve görüntüler modelin bağlamına yerleştirilir. PDF'leri giriş olarak kullanmanın fiyatlandırma ve belirteç kullanımı üzerindeki etkilerini anladığınızdan emin olun.

  • Tek bir API isteğinde, birden çok girişe (dosyalar) yüklenen içeriğin boyutu modelin bağlam uzunluğu içinde olmalıdır.

  • Yalnızca hem metin hem de görüntü girişlerini destekleyen modeller PDF dosyalarını giriş olarak kabul edebilir.

  • bir'i purposeuser_data şu anda desteklenmiyor. Geçici bir çözüm olarak amacı assistants ayarlamanız gerekir.

PDF'yi Base64'e dönüştürme ve analiz etme

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)

PDF yükle ve analiz et

PDF dosyasını karşıya yükleyin. bir'i purposeuser_data şu anda desteklenmiyor. Geçici bir çözüm olarak amacı assistants olarak ayarlamanız gerekir.

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

Çıkış:

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

Ardından id değerini alır ve file_id altında işlenmek üzere bir modele geçirirsiniz.

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

Uzak MCP sunucularını kullanma

Modelinizi uzak Model Bağlam Protokolü (MCP) sunucularında barındırılan araçlara bağlayarak özelliklerini genişletebilirsiniz. Bu sunucular geliştiriciler ve kuruluşlar tarafından korunur ve Yanıtlar API'si gibi MCP uyumlu istemciler tarafından erişilebilen araçları kullanıma sunar.

Model Bağlam Protokolü (MCP), uygulamaların büyük dil modellerine (LLM) nasıl araç ve bağlamsal veri sağladığını tanımlayan açık bir standarttır. Dış araçların model iş akışlarıyla tutarlı ve ölçeklenebilir bir şekilde tümleştirilmesini sağlar.

Aşağıdaki örnekte, Azure REST API hakkındaki bilgileri sorgulamak için kurgusal MCP sunucusunun nasıl kullanılacağı gösterilmektedir. Bu, modelin depo içeriğini gerçek zamanlı olarak almasına ve bu içerik üzerinde mantık yürütmesine olanak tanır.

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)

MCP aracı yalnızca Yanıtlar API'sinde çalışır ve tüm yeni modellerde (gpt-4o, gpt-4.1 ve akıl yürütme modellerimiz) kullanılabilir. MCP aracını kullanırken yalnızca araç tanımlarını içeri aktarırken veya araç çağrıları yaparken kullanılan belirteçler için ödeme yapılır; ek ücret uygulanmaz.

Onaylar

Varsayılan olarak, Yanıtlar API'sinin herhangi bir veri uzak bir MCP sunucusuyla paylaşılmadan önce açık onay gerektirir. Bu onay adımı saydamlığı sağlamaya yardımcı olur ve dışarıdan gönderilen bilgiler üzerinde size denetim sağlar.

Uzak MCP sunucularıyla paylaşılan tüm verileri gözden geçirmenizi ve isteğe bağlı olarak denetim amacıyla günlüğe kaydetmenizi öneririz.

Onay gerektiğinde, model yanıt çıkışında bir mcp_approval_request öğe döndürür. Bu nesne bekleyen isteğin ayrıntılarını içerir ve devam etmeden önce verileri incelemenize veya değiştirmenize olanak tanır.

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

Uzak MCP çağrısına devam etmek için, mcp_approval_response öğe içeren yeni bir yanıt nesnesi oluşturarak onay isteğine yanıt vermelisiniz. Bu nesne, modelin belirtilen verileri uzak MCP sunucusuna göndermesine izin verme amacınızı onaylar.

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"
    }],
)

Kimlik doğrulama

Önemli

  • Yanıtlar API'sinin içindeki MCP istemcisi TLS 1.2 veya üzerini gerektirir.
  • karşılıklı TLS (mTLS) şu anda desteklenmemektedir.
  • Azure hizmet etiketleri şu anda MCP istemci trafiği için desteklenmiyor.

GitHub MCP sunucusunun aksine, uzak MCP sunucularının çoğu kimlik doğrulaması gerektirir. Yanıtlar API'sindeki MCP aracı, özel üst bilgileri destekler ve ihtiyaç duydukları kimlik doğrulama düzenini kullanarak bu sunuculara güvenli bir şekilde bağlanmanızı sağlar.

API anahtarları, OAuth erişim belirteçleri veya diğer kimlik bilgileri gibi üst bilgileri doğrudan isteğinizde belirtebilirsiniz. En yaygın kullanılan üst bilgi, Authorization üst bilgisidir.

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)

Arka plan görevleri

Arka plan modu, o3 ve o1-pro gibi modelleri kullanarak uzun süre çalışan görevleri zaman uyumsuz olarak çalıştırmanızı sağlar. Bu özellikle Codex veya Deep Research gibi aracılar tarafından işlenenler gibi tamamlanması birkaç dakika sürebilen karmaşık akıl yürütme görevleri için kullanışlıdır.

Arka plan modunu etkinleştirerek, zaman aşımlarından kaçınabilir ve genişletilmiş işlemler sırasında güvenilirliği koruyabilirsiniz. Bir istek "background": true ile gönderildiğinde, görev asenkron olarak işlenir ve durumu zaman içinde sorgulayabilirsiniz.

Bir arka plan görevi başlatmak için isteğinizde background parametresini true olarak ayarlayın:

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 Arka plan yanıtının durumunu denetlemek için uç noktayı kullanın. Durum kuyruğa alınmış veya devam ediyor durumundayken anket yapmaya devam edin. Yanıt son (terminal) durumuna ulaştığında alınabilir.

curl -X 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}")

Devam etmekte olan bir arka plan görevini cancel uç noktasını kullanarak iptal edebilirsiniz. İptal işlemi idempotenttir; sonraki çağrılar son yanıt nesnesini döndürecektir.

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)

Arka planda yanıt akışı

Arka plan yanıtını yayınlamak için hem background hem de stream değerlerini true olarak ayarlayın. Bağlantının bırakılması durumunda akışı daha sonra sürdürmek istiyorsanız bu yararlı olur. Konumunuzu takip etmek için her olayın sıra numarasını kullanın.

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"]

Not

Arka plan yanıtları şu anda eşzamanlı yanıtlardan daha uzun bir ilk belirteç için gecikme süresine sahiptir. Bu açığı azaltmaya yönelik iyileştirmeler devam ediyor.

Sınırlama

  • Arka plan modu gerektirir store=true. Durumsuz istekler desteklenmez.
  • Akışı yalnızca orijinal istek stream=true içeriyorsa sürdürebilirsiniz.
  • Zaman uyumlu yanıtı iptal etmek için bağlantıyı doğrudan sonlandırın.

Akışı belirli bir noktadan sürdürme

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"

Şifrelenmiş Akıl Yürütme Öğeleri

False olarak ayarlayarak store Yanıtlar API'sini durum bilgisi olmayan modda kullanırken, konuşma dönüşleri arasında mantık bağlamını korumaya devam etmeniz gerekir. Bunu yapmak için API isteklerinize şifreli mantık öğeleri ekleyin.

Dönüşler arasında akıl yürütme öğelerini tutmak için, isteğinizdeki reasoning.encrypted_content parametresine include ekleyin. Bu, yanıtın gelecekteki isteklerde iletilebilen, akıl yürütme izlemesinin bir şifrelenmiş sürümünü içermesini sağlar.

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

Görüntü oluşturma (önizleme)

Yanıtlar API'si, konuşmaların ve çok adımlı iş akışlarının bir parçası olarak görüntü oluşturmayı etkinleştirir. Bağlam içindeki görüntü girişlerini ve çıkışlarını destekler ve görüntü oluşturmak ve düzenlemek için yerleşik araçlar içerir.

Tek başına Görüntü API'sine kıyasla Yanıtlar API'sinin çeşitli avantajları vardır:

  • Akış: Algılanan gecikme süresini geliştirmek için oluşturma sırasında kısmi görüntü çıkışlarını görüntüleyin.
  • Esnek girişler: Ham görüntü baytlarına ek olarak görüntü Dosya Kimliklerini giriş olarak kabul edin.

Not

Yanıtlar API'sindeki görüntü oluşturma aracı yalnızca gpt-image-1-serisi modeller tarafından desteklenir. Ancak bu modeli desteklenen modeller listesinden çağırabilirsiniz: , , , , , , gpt-4ogpt-4o-minive gpt-4.1 serisi modelleri. gpt-4.1-minigpt-4.1-nanoo3gpt-5gpt-5.1

Yanıtlar API'sinin görüntü oluşturma aracı şu anda akış modunu desteklemiyor. Akış modunu kullanmak ve kısmi görüntüler oluşturmak için, doğrudan Yanıtlar API'sinin dışında görüntü oluşturma API'sini çağırın.

GPT Görüntüsü ile konuşma görüntüsü deneyimleri oluşturmak istiyorsanız Yanıtlar API'sini kullanın.

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

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://ai.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.5", "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))

Akıl yürütme modelleri

Yanıtlar API'siyle akıl yürütme modellerinin nasıl kullanılacağına ilişkin örnekler için neden modelleri kılavuzuna bakın.

Bilgisayar kullanımı

Playwright ile bilgisayar kullanımı ayrılmış bilgisayar kullanım modeli kılavuzuna taşındı

Yanıtlar API'si

API desteği

Bölge Kullanılabilirliği

Yanıtlar API'si şu anda aşağıdaki bölgelerde kullanılabilir:

  • australiaeast
  • brazilsouth
  • canadacentral
  • canadaeast
  • eastus
  • eastus2
  • francecentral
  • AlmanyaBatıMerkez
  • italynorth
  • japaneast
  • Kore Merkez
  • northcentralus
  • norwayeast
  • polonyamerkezi
  • southafricanorth
  • southcentralus
  • southeastasia
  • Güney Hindistan
  • spaincentral
  • swedencentral
  • İsviçre Kuzey
  • uaenorth
  • uksouth
  • westus
  • westus3

Model desteği

  • gpt-5.5 (Sürüm: 2026-04-24)
  • gpt-5.4-nano (Sürüm: 2026-03-17)
  • gpt-5.4-mini (Sürüm: 2026-03-17)
  • gpt-5.4-pro (Sürüm:2026-03-05)
  • gpt-5.4 (Sürüm:2026-03-05)
  • gpt-5.3-chat (Sürüm: 2026-03-03)
  • gpt-5.3-codex (Sürüm: 2026-02-24)
  • gpt-5.2-codex (Sürüm: 2026-01-14)
  • gpt-5.2 (Sürüm: 2025-12-11)
  • gpt-5.2-chat (Sürüm: 2025-12-11)
  • gpt-5.2-chat (Sürüm: 2026-02-10)
  • gpt-5.1-codex-max (Sürüm: 2025-12-04)
  • gpt-5.1 (Sürüm: 2025-11-13)
  • gpt-5.1-chat (Sürüm: 2025-11-13)
  • gpt-5.1-codex (Sürüm: 2025-11-13)
  • gpt-5.1-codex-mini (Sürüm: 2025-11-13)
  • gpt-5-pro (Sürüm: 2025-10-06)
  • gpt-5-codex (Sürüm: 2025-09-11)
  • gpt-5 (Sürüm: 2025-08-07)
  • gpt-5-mini (Sürüm: 2025-08-07)
  • gpt-5-nano (Sürüm: 2025-08-07)
  • gpt-5-chat (Sürüm: 2025-08-07)
  • gpt-5-chat (Sürüm: 2025-10-03)
  • gpt-5-codex (Sürüm: 2025-09-15)
  • gpt-4o (Sürümler: 2024-11-20, 2024-08-06, 2024-05-13)
  • gpt-4o-mini (Sürüm: 2024-07-18)
  • computer-use-preview
  • gpt-4.1 (Sürüm: 2025-04-14)
  • gpt-4.1-nano (Sürüm: 2025-04-14)
  • gpt-4.1-mini (Sürüm: 2025-04-14)
  • gpt-image-1 (Sürüm: 2025-04-15)
  • gpt-image-1-mini (Sürüm: 2025-10-06)
  • gpt-image-1.5 (Sürüm: 2025-12-16)
  • o1 (Sürüm: 2024-12-17)
  • o3-mini (Sürüm: 2025-01-31)
  • o3 (Sürüm: 2025-04-16)
  • o4-mini (Sürüm: 2025-04-16)

Yanıtlar API'sinin desteklediği bölgelerde her model kullanılamaz. Model bölgesi kullanılabilirliği için modeller sayfasına bakın.

Not

Şu anda desteklenmiyor:

  • Çok aşamalı düzenleme ve akış kullanarak görüntü oluşturma.
  • Görüntüler dosya olarak yüklenemez ve ardından girdi olarak kullanılamaz.

Aşağıdakilerle ilgili bilinen bir sorun vardır:

  • Giriş dosyası olarak PDF artık destekleniyor ancak dosya karşıya yükleme amacını user_data olarak ayarlamak şu anda desteklenmiyor.
  • Arka plan modu akışla kullanıldığında performans sorunları. Sorunun yakında çözülmesi bekleniyor.

Başvuru belgeleri

Sorun giderme

  • 401/403: Microsoft Entra ID kullanıyorsanız belirtecinizin kapsamının https://ai.azure.com/.default olduğunu doğrulayın. API anahtarı kullanıyorsanız kaynak için doğru anahtarı kullandığınızı onaylayın.
  • 404: model ifadesinin dağıtım adınızla eşleştiğini onaylayın.