Antwoorden genereren met de Antwoorden-API

Voltooid

De OoenAI Response-API combineert mogelijkheden van twee eerder afzonderlijke API's (ChatCompletions en Assistenten) in een uniforme ervaring. Het biedt stateful, multi-turn respons generatie, waardoor het ideaal is voor conversationele AI-toepassingen. U kunt de antwoorden-API openen via een openAI-compatibele client met behulp van de Foundry SDK of de OpenAI SDK.

Inzicht in de antwoorden-API

De Response-API biedt verschillende voordelen ten opzichte van traditionele chat-voltooiingen:

  • Stateful gesprekken: houdt de gesprekscontext over meerdere beurten bij
  • Geïntegreerde ervaring: combineert chatvoltooiingen en API-patronen voor assistenten
  • Foundry directe modellen: Werkt met modellen die rechtstreeks worden gehost in Microsoft Foundry, niet alleen Azure OpenAI-modellen
  • Eenvoudige integratie: Toegang via de OpenAI-compatibele client

Opmerking

De Antwoorden-API is de aanbevolen benadering voor het genereren van AI-antwoorden in Microsoft Foundry-toepassingen. Deze vervangt de oudere ChatCompletions-API voor de meeste scenario's.

Een eenvoudig antwoord genereren

Met een openAI-compatibele client kunt u antwoorden genereren met behulp van de methode responses.create():

# Generate a response using the OpenAI-compatible client
response = openai_client.responses.create(
    model="gpt-4.1",  # Your model deployment name
    input="What is Microsoft Foundry?"
)

# Display the response
print(response.output_text)

De invoerparameter accepteert een tekenreeks met uw prompt. Het model genereert een antwoord op basis van deze invoer.

Inzicht in antwoordstructuur

Een antwoordobject bevat verschillende nuttige eigenschappen:

  • output_text: het gegenereerde tekstantwoord
  • id: unieke id voor dit antwoord
  • status: Antwoordstatus (bijvoorbeeld 'voltooid')
  • gebruik: Gebruiksgegevens van tokens (invoer, uitvoer en totaaltokens)
  • model: Het model dat wordt gebruikt om het antwoord te genereren

U kunt deze eigenschappen benaderen om antwoorden effectief te verwerken.

response = openai_client.responses.create(
    model="gpt-4.1",
    input="Explain machine learning in simple terms."
)

print(f"Response: {response.output_text}")
print(f"Response ID: {response.id}")
print(f"Tokens used: {response.usage.total_tokens}")
print(f"Status: {response.status}")

Instructies toevoegen

Naast de gebruikersinvoer kunt u instructies opgeven (ook wel systeemprompt genoemd) om het gedrag van het model te begeleiden:

response = client.responses.create(
    model="gpt-4.1",
    instructions="You are a helpful AI assistant that answers questions clearly and concisely.",
    input="Explain neural networks."
)

print(response.output_text)

Het genereren van antwoorden beheren

U kunt het genereren van antwoorden beheren met aanvullende parameters:

response = openai_client.responses.create(
    model="gpt-4.1",
    instructions="You are a helpful AI assistant that answers questions clearly and concisely.",
    input="Write a creative story about AI.",
    temperature=0.8,  # Higher temperature for more creativity
    max_output_tokens=200  # Limit response length
)

print(response.output_text)
  • temperatuur: Bepaalt willekeurigheid (0,0-2.0). Hogere waarden maken uitvoer creatiever en gevarieerder
  • max_output_tokens: beperkt het maximum aantal tokens in het antwoord
  • top_p: Alternatief voor temperatuur voor het beheren van willekeurigheid

Werken met directe Foundry-modellen

Wanneer u de FoundrySDK- of AzureOpenAI-client gebruikt om verbinding te maken met een projecteindpunt , werkt de Response-API met zowel Azure OpenAI-modellen als Foundry directe modellen (zoals Microsoft Phi, DeepSeek of andere modellen die rechtstreeks in Microsoft Foundry worden gehost):

# Using a Foundry direct model
response = openai_client.responses.create(
    model="microsoft-phi-4",  # Example Foundry direct model
    instructions="You are a helpful AI assistant that answers questions clearly and concisely.",
    input="What are the benefits of small language models?"
)

print(response.output_text)

Gesprekservaringen maken

Voor complexere gespreksscenario's kunt u systeeminstructies opstellen en gesprekken met meerdere uitwisselingen bouwen.

# First turn in the conversation
response1 = openai_client.responses.create(
    model="gpt-4.1",
    instructions="You are a helpful AI assistant that explains technology concepts clearly.",
    input="What is machine learning?"
)

print("Assistant:", response1.output_text)

# Continue the conversation
response2 = openai_client.responses.create(
    model="gpt-4.1",
    instructions="You are a helpful AI assistant that explains technology concepts clearly.",
    input="Can you give me an example?",
    previous_response_id=response1.id
)

print("Assistant:", response2.output_text)

In werkelijkheid is de implementatie waarschijnlijk opgebouwd als een lus waarin een gebruiker interactief berichten kan invoeren op basis van elk antwoord dat is ontvangen van het model:

# Track responses
last_response_id = None

# Loop until the user wants to quit
print("Assistant: Enter a prompt (or type 'quit' to exit)")
while True:
    input_text = input('\nYou: ')
    if input_text.lower() == "quit":
        print("Assistant: Goodbye!")
        break

    # Get a response
    response = openai_client.responses.create(
                model=model_name,
                instructions="You are a helpful AI assistant that explains technology concepts clearly.",
                input=input_text,
                previous_response_id=last_response_id
    )
    assistant_text = response.output_text
    print("\nAssistant:", assistant_text)
    last_response_id = response.id 

De uitvoer van dit voorbeeld ziet er ongeveer als volgt uit:

Assistant: Enter a prompt (or type 'quit' to exit)

You: What is machine learning?

Assistant: Machine learning is a type of artificial intelligence (AI) that enables computers to learn from data and improve their performance over time without being explicitly programmed. It involves training algorithms on large datasets to recognize patterns, make predictions, or take actions based on those patterns. This allows machines to become more accurate and efficient in their tasks as they are exposed to more data.

You: Can you give me an example?

Assistant: Certainly! Let's look at a simple example of supervised learning—predicting house prices based on features like size, location, and number of rooms.
Imagine you want to build a machine learning model that can predict the price of a house based on various factors.
...
    { the example provided in the model response may be extensive}
...

You: quit

Assistant: Goodbye!

Wanneer de gebruiker op elke beurt nieuwe invoer invoer invoert, bevatten de gegevens die naar het model worden verzonden het systeembericht Instructies , de invoer van de gebruiker en het vorige antwoord dat van het model is ontvangen. Op deze manier wordt de nieuwe invoer geaard in de context die wordt geleverd door het antwoord dat het model heeft gegenereerd voor de vorige invoer.

Alternatief: Handmatige gespreksketen

U kunt gesprekken handmatig beheren door de berichtgeschiedenis zelf te bouwen. Met deze aanpak heb je meer controle over welke context is inbegrepen.

try:
    # Start with initial message
    conversation_history = [
        {
            "type": "message",
            "role": "user",
            "content": "What is machine learning?"
        }
    ]
    
    # First response
    response1 = openai_client.responses.create(
        model="gpt-4.1",
        input=conversation_history
    )
    
    print("Assistant:", response1.output_text)
    
    # Add assistant response to history
    conversation_history += response1.output
    
    # Add new user message
    conversation_history.append({
        "type": "message",
        "role": "user", 
        "content": "Can you give me an example?"
    })
    
    # Second response with full history
    response2 = openai_client.responses.create(
        model="gpt-4.1",
        input=conversation_history
    )
    
    print("Assistant:", response2.output_text)

except Exception as ex:
    print(f"Error: {ex}")

Deze handmatige benadering is handig wanneer u het volgende moet doen:

  • Welke berichten in context worden opgenomen aanpassen
  • Gesprekssnoeiing implementeren om tokenlimieten te beheren
  • Gespreksgeschiedenis opslaan en herstellen vanuit een database

Specifieke eerdere antwoorden ophalen

De Antwoorden-API onderhoudt de antwoordgeschiedenis, zodat u eerdere antwoorden kunt ophalen:

try:   
   
    # Retrieve a previous response
    response_id = "resp_67cb61fa3a448190bcf2c42d96f0d1a8"  # Example ID
    previous_response = openai_client.responses.retrieve(response_id)
    
    print(f"Previous response: {previous_response.output_text}")

except Exception as ex:
    print(f"Error: {ex}")

Overwegingen voor contextvensters

De previous_response_id parameter koppelt antwoorden aan elkaar, waarbij de gesprekscontext tussen meerdere API-aanroepen wordt gehandhaafd.

Het is belangrijk te weten dat het bijhouden van de gespreksgeschiedenis het tokengebruik kan verhogen. Voor één uitvoering kan het actieve contextvenster het volgende omvatten:

  • Systeeminstructies (instructies, veiligheidsregels)
  • Uw huidige prompt
  • Gespreksgeschiedenis (vorige berichten van gebruiker en assistent)
  • Hulpprogrammaschema's (functies, OpenAPI-specificaties, MCP-hulpprogramma's, enzovoort)
  • Uitvoer van hulpprogramma's (zoekresultaten, uitvoer van code-interpreter, bestanden)
  • Opgehaald geheugen of documenten (uit geheugenarchieven, RAG, zoeken naar bestanden)

Al deze worden samengevoegd, getokeniseerd en samen naar het model verzonden bij elk verzoek. Met de SDK kunt u de status beheren, maar het tokengebruik wordt niet automatisch goedkoper.

Responsieve chat-apps maken

Antwoorden van een model kunnen enige tijd in beslag nemen om te genereren, afhankelijk van factoren zoals het specifieke model dat wordt gebruikt, de grootte van het contextvenster en de grootte van de prompt. Gebruikers kunnen gefrustreerd raken als de app lijkt te 'blokkeren' tijdens het wachten op een reactie, dus het is belangrijk om rekening te houden met de reactiesnelheid van apps in uw implementatie.

Streamingantwoorden

Voor lange antwoorden kunt u streaming gebruiken om incrementeel uitvoer te ontvangen, zodat de gebruiker gedeeltelijk volledige antwoorden ziet wanneer de uitvoer beschikbaar is:

stream = openai_client.responses.create(
    model="gpt-4.1",
    input="Write a short story about a robot learning to paint.",
    stream=True
)

for event in stream:
    print(event, end="", flush=True)

Als u de gespreksgeschiedenis bijhoudt bij het streamen, kunt u de antwoord-id ophalen wanneer de stream eindigt, zoals deze:

stream = openai_client.responses.create(
    model="gpt-4.1",
    input="Write a short story about a robot learning to paint.",
    stream=True
)
for event in stream:
                if event.type == "response.output_text.delta":
                    print(event.delta, end="")
                elif event.type == "response.completed":
                    response_id = event.response.id

Asynchroon gebruik

Voor toepassingen met hoge prestaties kunt u een asynchrone client gebruiken waarmee u niet-blokkerende API-aanroepen kunt maken. Asynchroon gebruik is ideaal voor langlopende aanvragen of wanneer u meerdere aanvragen gelijktijdig wilt verwerken zonder uw toepassing te blokkeren. Importeer AsyncOpenAI in plaats van OpenAI en gebruik await bij elke API-aanroep.

import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI(
    base_url="https://<resource-name>.openai.azure.com/openai/v1/",
    api_key=token_provider,
)

async def main():
    response = await client.responses.create(
        model="gpt-4.1",
        input="Explain quantum computing briefly."
    )
    print(response.output_text)

asyncio.run(main())

Asynchroon streamen werkt op dezelfde manier:

async def stream_response():
    stream = await client.responses.create(
        model="gpt-4.1",
        input="Write a haiku about coding.",
        stream=True
    )
    
    async for event in stream:
        print(event, end="", flush=True)

asyncio.run(stream_response())

Met behulp van de Response-API via de Microsoft Foundry SDK kunt u geavanceerde conversationele AI-toepassingen bouwen die context onderhouden, meerdere modeltypen ondersteunen en een responsieve gebruikerservaring bieden.