Μεταφορά Εφαρμογών Python από Azure OpenAI Chat Completions στο Responses API
ΑΥΣΤΗΡΕΣ ΟΔΗΓΙΕΣ — ΑΚΡΙΒΩΣ ΕΦΑΡΜΟΣΤΕΣ
Αυτή η δεξιότητα μεταφέρει βάσεις κώδικα Python που χρησιμοποιούν Azure OpenAI Chat Completions στο ενιαίο Responses API. Ακολουθήστε αυτές τις οδηγίες πιστά. Μην αυτοσχεδιάζετε αντιστοιχίσεις παραμέτρων ή εφευρίσκετε μορφές API.
Προϋποθέσεις ενεργοποίησης
Ενεργοποιήστε αυτή τη δεξιότητα όταν ο χρήστης θέλει να:
- Μεταφέρει μια εφαρμογή Python από Azure OpenAI Chat Completions στο Responses API
- Αναβαθμίσει τη χρήση του Python OpenAI SDK στη νεότερη μορφή API στην Azure OpenAI
- Προετοιμάσει κώδικα Python για μοντέλα GPT-5 ή νεότερα που απαιτούν Responses στο Azure
- Μεταβεί από
AzureOpenAI/AsyncAzureOpenAIσε τυπικόOpenAI/AsyncOpenAIπελάτη με το v1 endpoint - Διορθώσει προειδοποιήσεις απόσυρσης που σχετίζονται με
AzureOpenAIconstructors ήapi_version
⚠️ Συμβατότητα μοντέλων — ΕΛΕΓΞΤΕ ΠΡΩΤΑ
Πριν τη μετεγκατάσταση, βεβαιωθείτε ότι η ανάπτυξη Azure OpenAI υποστηρίζει το Responses API.
1. Δοκιμή καπνού της ανάπτυξής σας (ταχύτερη)
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["AZURE_OPENAI_API_KEY"],
base_url=f"{os.environ['AZURE_OPENAI_ENDPOINT'].rstrip('/')}/openai/v1/",
)
try:
resp = client.responses.create(
model=os.environ["AZURE_OPENAI_DEPLOYMENT"],
input="ping",
max_output_tokens=50,
store=False,
)
print(f"✅ Deployment supports Responses API: {resp.output_text}")
except Exception as e:
print(f"❌ Deployment does NOT support Responses API: {e}")
Σημείωση: Το
max_output_tokensέχει ελάχιστο όριο 16 στο Azure OpenAI. Τιμές κάτω από 16 επιστρέφουν σφάλμα 400. Χρησιμοποιήστε 50+ για δοκιμές καπνού.
Αν αυτό επιστρέψει 404, το μοντέλο της ανάπτυξης δεν υποστηρίζει ακόμα Responses — ελέγξτε την παρακάτω αναφορά ή αναπτύξτε ξανά με υποστηριζόμενο μοντέλο.
2. Ελέγξτε τα διαθέσιμα μοντέλα στην περιοχή σας (συνιστάται)
Εκτελέστε το ενσωματωμένο εργαλείο συμβατότητας μοντέλων για να δείτε τι είναι διαθέσιμο με υποστήριξη Responses API στην περιοχή σας:
python migrate.py models --subscription YOUR_SUB_ID --location YOUR_REGION
Αυτό ερωτά το Azure ARM live και δείχνει πίνακα συμβατότητας — ποια μοντέλα υποστηρίζουν Responses, δομημένη έξοδο, εργαλεία κ.λπ. Χρησιμοποιήστε --filter gpt-5.1,gpt-5.2 για να περιορίσετε αποτελέσματα ή --json για σενάριο.
3. Πλήρης αναφορά υποστήριξης μοντέλων
- Ζωντανή ερώτηση:
python migrate.py models(βλέπε παραπάνω — ειδικό για περιοχή, πάντα ενημερωμένη) - Περιηγηθείτε τη διαθεσιμότητα: Πίνακας περίληψης μοντέλων και διαθεσιμότητας περιοχών
- Γρήγορη εκκίνηση & οδηγίες: https://aka.ms/openai/start
⚠️ Περιορισμοί παλιότερων μοντέλων
ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Τα παλαιότερα μοντέλα (προ του
gpt-4.1) ενδέχεται να μην υποστηρίζουν πλήρως όλες τις δυνατότητες του Responses API.Γνωστοί περιορισμοί με παλιά μοντέλα:
- παράμετρος
reasoning: Δεν υποστηρίζεται σε πολλά μοντέλα χωρίς reasoning. Μεταφέρετε τοreasoningμόνο αν υπήρχε ήδη στον αρχικό κώδικα.- παράμετρος
seed: Δεν υποστηρίζεται καθόλου στο Responses API — αφαιρέστε την από όλα τα αιτήματα.- Δομημένη έξοδος μέσω
text.format: Τα παλιά μοντέλα μπορεί να μην εφαρμόζουν αξιόπιστα σχήματα JSON μεstrict: true.- Ορχήστρωση εργαλείων: Το GPT-5+ οργανώνει κλήσεις εργαλείων ως μέρος εσωτερικού reasoning. Τα παλιά μοντέλα στο Responses λειτουργούν αλλά χωρίς αυτήν την ενσωμάτωση.
- Περιορισμοί θερμοκρασίας: Κατά τη μετεγκατάσταση σε
gpt-5, η θερμοκρασία πρέπει να παραληφθεί ή να οριστεί σε1. Τα παλιά μοντέλα δεν έχουν τέτοιο περιορισμό.
Μοντέλα λογικής σειράς O (o1, o3-mini, o3, o4-mini)
Τα μοντέλα O-series έχουν μοναδικούς περιορισμούς παραμέτρων. Κατά τη μετεγκατάσταση εφαρμογών που στοχεύουν μοντέλα O-series:
temperature: Πρέπει να είναι1(ή να παραληφθεί). Τα μοντέλα O-series δεν δέχονται άλλες τιμές.max_completion_tokens→max_output_tokens: Οι εφαρμογές που χρησιμοποιούν το Azure-ειδικόmax_completion_tokensπρέπει να περάσουν σεmax_output_tokens. Θέστε υψηλές τιμές (4096+) γιατί οι tokens του reasoning υπολογίζονται στο όριο.reasoning_effort: Αν η εφαρμογή χρησιμοποιείreasoning_effort(χαμηλή/μεσαία/υψηλή), κρατήστε το — το Responses API υποστηρίζει αυτή την παράμετρο για μοντέλα o-series.- Συμπεριφορά ροής (streaming): Τα μοντέλα O-series μπορεί να αποθηκεύουν την έξοδο μέχρι να ολοκληρωθεί το reasoning πριν εκπέμψουν συμβάντα κειμένου delta. Το streaming λειτουργεί ακόμα, αλλά το πρώτο
response.output_text.deltaμπορεί να φτάσει με καθυστέρηση μεγαλύτερη από τα μοντέλα GPT. top_p: Δεν υποστηρίζεται στα o-series — αφαιρέστε το αν υπάρχει.- Χρήση εργαλείων: Τα μοντέλα O-series υποστηρίζουν εργαλεία μέσω Responses API όπως και τα μοντέλα GPT, αλλά η ποιότητα ορχήστρωσης κλήσεων εργαλείων ποικίλλει ανάλογα με το μοντέλο.
Ενέργεια — προληπτική συμβουλή μοντέλου: Κατά τη φάση ανίχνευσης, ελέγξτε ποιο μοντέλο στοχεύει η εφαρμογή (ονόματα ανάπτυξης, μεταβλητές περιβάλλοντος, ρυθμίσεις). Αν το μοντέλο προηγήθηκε του gpt-4.1 (όχι gpt-4.1+), ενημερώστε προληπτικά τον χρήστη:
- Η μετεγκατάσταση θα λειτουργήσει για βασικό κείμενο, chat, streaming και εργαλεία στο τρέχον μοντέλο τους.
- Νεότερα μοντέλα (
gpt-5.1,gpt-5.2) προσφέρουν καλύτερη ορχήστρωση εργαλείων, επιβολή δομημένης εξόδου, reasoning και διαθεσιμότητα σε διάφορες περιοχές. - Πρέπει να εξετάσουν την αναβάθμιση της ανάπτυξής τους όταν είναι έτοιμοι — δεν μπλοκάρει τη μετεγκατάσταση.
Μην μπλοκάρετε ή αρνείστε τη μετεγκατάσταση βάσει έκδοσης μοντέλου. Η συμβουλή είναι ενημερωτική.
Τα GitHub Models δεν υποστηρίζουν το Responses API
Τα GitHub Models (
models.github.ai,models.inference.ai.azure.com) δεν υποστηρίζουν το Responses API.
Αν η βάση κώδικα έχει διαδρομή κώδικα GitHub Models (ψάξτε για base_url που δείχνει σε models.github.ai ή models.inference.ai.azure.com), αφαιρέστε την ολικά κατά τη μετεγκατάσταση. Το Responses API απαιτεί Azure OpenAI, OpenAI ή συμβατό τοπικό endpoint (π.χ., Ollama με υποστήριξη Responses).
Ενέργεια κατά τη σάρωση:
- Επισημάνετε οποιεσδήποτε διαδρομές κώδικα GitHub Models για αφαίρεση.
Μετεγκατάσταση Πλαισίου Εργασίας
Πολλές εφαρμογές χρησιμοποιούν ανώτερα πλαίσια πάνω από OpenAI. Κατά τη μετεγκατάσταση αυτών, αλλάζει το ίδιο το API του πλαισίου — όχι μόνο οι κλήσεις OpenAI από κάτω.
Microsoft Agent Framework (MAF)
Ελέγξτε πρώτα την έκδοση MAF — η μετεγκατάσταση εξαρτάται αν είστε σε MAF 1.0.0+ ή προ-1.0.0 beta/rc.
MAF 1.0.0+ (agent-framework-openai >= 1.0.0)
Το OpenAIChatClient χρησιμοποιεί ήδη το Responses API — δεν απαιτείται μετεγκατάσταση. Αν η βάση κώδικα χρησιμοποιεί τον παλιό OpenAIChatCompletionClient (που καλεί chat.completions.create), αντικαταστήστε τον με OpenAIChatClient.
| Πριν | Μετά |
|---|---|
from agent_framework.openai import OpenAIChatCompletionClient |
from agent_framework.openai import OpenAIChatClient |
OpenAIChatCompletionClient(...) |
OpenAIChatClient(...) |
Για να ελέγξετε την έκδοση: python -c "import agent_framework_openai; print(agent_framework_openai.__version__)"
MAF προ-1.0.0 (beta/rc εκδόσεις)
Στο MAF προ-1.0.0, το OpenAIChatClient χρησιμοποιούσε Chat Completions. Αναβαθμίστε σε agent-framework-openai>=1.0.0 όπου το OpenAIChatClient χρησιμοποιεί το Responses API από προεπιλογή.
Δεν χρειάζονται άλλες αλλαγές — τα APIs του Agent και των εργαλείων παραμένουν ίδια.
LangChain (langchain-openai)
Προσθέστε use_responses_api=True στο ChatOpenAI(). Επίσης ενημερώστε την πρόσβαση στα αποτελέσματα από .content σε .text.
| Πριν | Μετά |
|---|---|
ChatOpenAI(model=..., base_url=..., api_key=...) |
ChatOpenAI(model=..., base_url=..., api_key=..., use_responses_api=True) |
result['messages'][-1].content |
result['messages'][-1].text |
Για πλήρη παραδείγματα κώδικα πριν/μετά, δείτε cheat-sheet.md.
Οδηγίες Μετεγκατάστασης Frontend
Το Responses API είναι θέμα πλευράς διακομιστή. Μεταφέρετε το backend Python σας· η σύμβαση HTTP του frontend πρέπει να παραμείνει αμετάβλητη εκτός αν το backend είναι λεπτό πέρασμα — τότε εξετάστε την υιοθέτηση της μορφής αιτήματος Responses για να εξαλειφθεί ένα επίπεδο μετάφρασης. Αν το frontend καλεί το OpenAI απευθείας με κλειδί client-side, μετακινήστε αυτές τις κλήσεις πρώτα σε backend.
Απόσυρση @microsoft/ai-chat-protocol
Το npm πακέτο @microsoft/ai-chat-protocol είναι αποσυρμένο και πρέπει να αντικατασταθεί με το ndjson-readablestream. Αν το συναντήσετε σε frontend:
- Αντικαταστήστε το CDN script tag:
<!-- Before --> <script src="https://cdn.jsdelivr.net/npm/@microsoft/ai-chat-protocol@.../dist/iife/index.js"></script> <!-- After --> <script src="https://cdn.jsdelivr.net/npm/ndjson-readablestream@1.0.7/dist/ndjson-readablestream.umd.js"></script> - Αφαιρέστε τη δημιουργία
AIChatProtocolClient(new ChatProtocol.AIChatProtocolClient("/chat")). - Αντικαταστήστε το
client.getStreamedCompletion(messages)με άμεση κλήσηfetch()στο backend streaming endpoint. - Αντικαταστήστε
for await (const response of result)μεfor await (const chunk of readNDJSONStream(response.body)). - Ενημερώστε την πρόσβαση στις ιδιότητες από
response.delta.content/response.errorσεchunk.delta.content/chunk.error.
Στόχοι
- Καταγράψτε όλες τις κλήσεις Python που χρησιμοποιούν Chat Completions ή legacy Completions στην Azure OpenAI.
- Προτείνετε σχέδιο και αλληλουχία μετεγκατάστασης για τον κώδικα Python.
- Εφαρμόστε ασφαλείς, ελάχιστες αλλαγές για να γίνει μετάβαση στο Responses API.
- Ενημερώστε τους καλούντες να καταναλώνουν το σχήμα εξόδου Responses· χωρίς wrappers συμβατότητας.
- Εκτελέστε δοκιμές και linters· διορθώστε μικρά σφάλματα από τη μετεγκατάσταση.
- Προετοιμάστε μικρές σειρές αλλαγών προς αναθεώρηση και δώστε τελική περίληψη με διαφορές (μην κάνετε commit).
Κανόνες προστασίας
- Τροποποιήστε μόνο αρχεία μέσα στον χώρο εργασίας git. Ποτέ έξω από αυτόν.
- Μην διατηρείτε shim συμβατότητας προς τα πίσω· μεταφέρετε τον κώδικα στην νέα μορφή API.
- Μην αφήνετε σχόλια προσωρινής χρήσης ή αρχεία backup.
- Διατηρήστε τις ροές (streaming) αν χρησιμοποιούνταν· αλλιώς χρησιμοποιήστε μη-ροή.
- Ζητήστε έγκριση πριν εκτελέσετε εντολές ή δικτυακές κλήσεις αν βρίσκεστε σε λειτουργία έγκρισης.
- Μην τρέχετε
git add/git commit/git push; παράγετε μόνο επεξεργασίες δέντρου εργασίας.
Βήμα 0: Μετεγκατάσταση πελάτη Azure OpenAI (προαπαιτούμενο)
Αν η βάση κώδικα χρησιμοποιεί τους constructors AzureOpenAI ή AsyncAzureOpenAI, μεταβείτε πρώτα στους τυπικούς constructors OpenAI / AsyncOpenAI. Οι Azure-ειδικοί constructors έχουν αποσυρθεί στο openai>=1.108.1.
Γιατί το endpoint v1 API;
Το νέο endpoint /openai/v1 χρησιμοποιεί τον τυπικό πελάτη OpenAI() αντί AzureOpenAI(), δεν απαιτεί παράμετρο api_version και λειτουργεί ταυτόσημα σε OpenAI και Azure OpenAI. Ο ίδιος κώδικας πελάτη είναι μελλοντικά ασφαλής — χωρίς ανάγκη διαχείρισης εκδόσεων.
Κύριες αλλαγές
| Πριν | Μετά |
|---|---|
AzureOpenAI |
OpenAI |
AsyncAzureOpenAI |
AsyncOpenAI |
azure_endpoint |
base_url |
azure_ad_token_provider |
api_key |
api_version=... |
Αφαιρέστε ολικά |
Λίστα ελέγχου καθαρισμού
- Αφαιρέστε την παράμετρο
api_versionαπό τη δημιουργία πελάτη. - Αφαιρέστε τις μεταβλητές περιβάλλοντος
AZURE_OPENAI_VERSION/AZURE_OPENAI_API_VERSIONαπό.env, ρυθμίσεις app και αρχεία Bicep/infra. - Μετονομάστε
AZURE_OPENAI_CLIENT_ID→AZURE_CLIENT_IDσε.env, ρυθμίσεις app, Bicep/infra και fixtures τεστ (τυπική σύμβαση Azure Identity SDK). - Βεβαιωθείτε ότι έχετε
openai>=1.108.1στοrequirements.txtήpyproject.toml.
Μετεγκατάσταση μεταβλητών περιβάλλοντος
| Παλιά env var | Ενέργεια | Σημειώσεις |
|---|---|---|
AZURE_OPENAI_VERSION |
Αφαιρέστε | Δεν χρειάζεται api_version με το endpoint v1 |
AZURE_OPENAI_API_VERSION |
Αφαιρέστε | Όπως παραπάνω |
AZURE_OPENAI_CLIENT_ID |
Μετονομάστε → AZURE_CLIENT_ID |
Τυπική σύμβαση Azure Identity SDK για ManagedIdentityCredential(client_id=...) |
AZURE_OPENAI_ENDPOINT |
Διατηρείστε | Ακόμα χρειάζεται για τη δημιουργία base_url |
AZURE_OPENAI_CHAT_DEPLOYMENT |
Διατηρείστε | Χρησιμοποιείται ως παράμετρος model στο responses.create |
AZURE_OPENAI_API_KEY |
Διατηρείστε | Χρησιμοποιείται ως api_key για έλεγχο ταυτότητας με κλειδί |
Για παραδείγματα κώδικα ρύθμισης πελάτη (συγχρονισμένο, ασύγχρονο, EntraID, API key, πολλαπλοί tenants), δείτε cheat-sheet.md.
Βήμα 1: Εντοπισμός Legacy Call Sites
Εκτελέστε το σενάριο detect_legacy.py για να βρείτε όλες τις κλήσεις που χρειάζονται μετεγκατάσταση:
python skills/azure-openai-to-responses/scripts/detect_legacy.py .
Ή εκτελέστε αυτές τις αναζητήσεις χειροκίνητα — κάθε εύρημα είναι στόχος μετεγκατάστασης:
# Κλήσεις παλαιού API (πρέπει να ξαναγραφούν)
rg "chat\.completions\.create"
rg "ChatCompletion\.create"
rg "Completion\.create"
# Αποσυρθέντες κατασκευαστές πελατών Azure (πρέπει να αντικατασταθούν)
rg "AzureOpenAI\("
rg "AsyncAzureOpenAI\("
# Πρότυπα πρόσβασης σχήματος απάντησης (πρέπει να ενημερωθούν)
rg "choices\[0\]\.message\.content"
rg "choices\[0\]\.delta\.content"
rg "choices\[0\]\.message\.function_call"
rg "choices\[0\]\.message\.tool_calls"
# Ορισμοί εργαλείων σε παλαιό εμφωλευμένο μορφότυπο (πρέπει να απο-φωλιάσουν)
rg '"function":\s*{\s*"name"'
rg "pydantic_function_tool"
# Αποτελέσματα εργαλείων σε παλαιό μορφότυπο (πρέπει να μετατραπούν σε function_call_output)
rg '"role":\s*"tool"'
rg '"tool_call_id"'
# Αποσυρθέντες παράμετροι (πρέπει να αφαιρεθούν ή να μετονομαστούν)
rg "response_format"
rg "max_tokens\b" # μετονομασία σε max_output_tokens
rg "['\"]seed['\"]" # remove entirely
# Αποσυρθέντες μεταβλητές περιβάλλοντος (καθαρισμός)
rg "AZURE_OPENAI_API_VERSION|AZURE_OPENAI_VERSION"
rg "AZURE_OPENAI_CLIENT_ID" # πρέπει να είναι AZURE_CLIENT_ID
# Τερματικά μοντέλων GitHub (πρέπει να αφαιρεθούν — η API απαντήσεων δεν υποστηρίζεται)
rg "models\.github\.ai|models\.inference\.ai\.azure"
# Πρότυπα παλαιάς έκδοσης σε επίπεδο πλαισίου (πρέπει να ενημερωθούν)
rg "OpenAIChatCompletionClient" # MAF 1.0.0+: αντικατάσταση με OpenAIChatClient
rg "ChatOpenAI\(" | grep -v "use_responses_api" # LangChain: απαιτεί use_responses_api=True
# Υποδομή δοκιμών (πρέπει να ενημερωθεί)
rg "ChatCompletionChunk|AsyncCompletions\.create" tests/
rg "_azure_ad_token_provider" tests/
rg "prompt_filter_results|content_filter_results" tests/
rg "choices\[0\]" tests/
# Πρόσβαση στο σώμα σφάλματος φίλτρου περιεχομένου (πρέπει να ενημερωθεί — αλλάζει δομή)
rg 'innererror.*content_filter_result|error\.body\["innererror"\]'
rg "content_filter_result\[" # παλαιός ενικός τύπος — τώρα content_filter_results (πληθυντικός) μέσα στον πίνακα content_filters
# Ακατέργαστες κλήσεις HTTP στο τερματικό Chat Completions (πρέπει να ενημερωθεί το URL)
rg "/openai/deployments/.*/chat/completions"
rg "api-version="
Ευρετικές (ανίχνευση και επανεγγραφή)
Πελάτης Chat Completions:
client.chat.completions.create→client.responses.create(...).Κατασκευαστές πελατών Azure:
AzureOpenAI(...)→OpenAI(base_url=..., api_key=...).Εργαλεία: μετατρέψτε τους ορισμούς εργαλείων κλήσης λειτουργιών από εμφωλευμένη μορφή (
{"type": "function", "function": {"name": ...}}) σε επίπεδη μορφή Responses ({"type": "function", "name": ...}); χρησιμοποιήστεtool_choice; επιστρέψτε αποτελέσματα εργαλείων ως στοιχεία{"type": "function_call_output", "call_id": ..., "output": ...}(όχι{"role": "tool", ...}).Περίοδοι εργαλείων: όταν το μοντέλο επιστρέφει κλήσεις λειτουργιών, προσθέστε τα στοιχεία
response.outputστη συνομιλία (όχι ένα χειροκίνητο λεξικό{"role": "assistant", "tool_calls": [...]}), μετά προσθέστε στοιχείαfunction_call_outputγια κάθε αποτέλεσμα.Παραδείγματα εργαλείων λίγων βολών: εάν η συνομιλία περιλαμβάνει σκληροκωδικοποιημένα παραδείγματα κλήσεων εργαλείων, μετατρέψτε τα σε στοιχεία
{"type": "function_call", "id": "fc_...", "call_id": "fc_...", ...}+{"type": "function_call_output", ...}. Τα αναγνωριστικά πρέπει να ξεκινούν μεfc_.pydantic_function_tool(): αυτό το βοηθητικό εξακολουθεί να παράγει την παλιά εμφωλευμένη μορφή και δεν είναι συμβατό μεresponses.create(). Αντικαταστήστε με χειροκίνητους ορισμούς εργαλείων ή έναν wrapper για επίπεδη μορφή.Πολλαπλούς γύρους: διατηρήστε το ιστορικό συνομιλίας στην εφαρμογή· περάστε προηγούμενους γύρους μέσω στοιχείων
input.Μορφοποίηση: αντικαταστήστε το επίπεδο κορυφής
response_formatτου Chat μεtext.formatστις Responses. Κανονική μορφή:text={"format": {"type": "json_schema", "name": "Output", "strict": True, "schema": {...}}}.Στοιχεία περιεχομένου: αντικαταστήστε το Chat
content[].type: "text"με Responsescontent[].type: "input_text"για στροφές χρήστη/συστήματος.Στοιχεία περιεχομένου εικόνας: αντικαταστήστε το Chat
content[].type: "image_url"με Responsescontent[].type: "input_image". Το πεδίοimage_urlαλλάζει από εμφωλευμένο αντικείμενο{"url": "..."}σε απλή συμβολοσειρά. Δείτε το cheat sheet για παραδείγματα πριν/μετά.Προσπάθεια λογικής: μεταφέρετε το
reasoningμόνο αν υπάρχει ήδη στον αρχικό κώδικα.Διαχείριση σφαλμάτων φίλτρου περιεχομένου: η δομή του σώματος σφάλματος άλλαξε. Τα Chat Completions χρησιμοποιούσαν
error.body["innererror"]["content_filter_result"](ενικός); η Responses API χρησιμοποιείerror.body["content_filters"][0]["content_filter_results"](πληθυντικός, μέσα σε πίνακα). Κώδικας που προσπελαύνει τοinnererrorθα προκαλέσειKeyError. Ξαναγράψτε για να χρησιμοποιήσετε το νέο μονοπάτι.Απευθείας HTTP κλήσεις: αν η εφαρμογή κάνει κλήσεις Azure OpenAI REST API απευθείας (μέσω
requests,httpx, κλπ.) χρησιμοποιώντας/openai/deployments/{name}/chat/completions?api-version=..., ξαναγράψτε σε/openai/v1/responses. Το σώμα του αιτήματος αλλάζει:messages→input, προσθέστεmax_output_tokensκαιstore: false, αφαιρέστε το query paramapi-version. Το σώμα της απάντησης αλλάζει:choices[0].message.content→output[0].content[0].text(σημείωση: τοoutput_textείναι ιδιότητα ευκολίας SDK, απουσιάζει από το ακατέργαστο JSON).
Βήμα 2: Εφαρμογή Μεταφοράς
Σημειώσεις Μεταφοράς (Chat Completions → Responses)
- Γιατί να μεταφερθεί: Το Responses είναι η ενοποιημένη API για κείμενο, εργαλεία και ροή· το Chat Completions είναι παλαιό. Με GPT-5, το Responses απαιτείται για καλύτερη απόδοση.
- HTTP: Το Azure endpoint αλλαγές από
/openai/deployments/{name}/chat/completionsσε/openai/v1/responses. - Πεδία:
messages→input,max_tokens→max_output_tokens.temperatureπαραμένει ίση. - Μορφοποίηση:
response_format→text.formatμε κατάλληλο αντικείμενο. - Στοιχεία περιεχομένου: Αντικαταστήστε το Chat
content[].type: "text"με Responsescontent[].type: "input_text"για στροφές συστήματος/χρήστη. - Στοιχεία περιεχομένου εικόνας: Αντικαταστήστε το Chat
content[].type: "image_url"με Responsescontent[].type: "input_image". Απλοποιήστε το πεδίοimage_urlαπό{"image_url": {"url": "..."}}σε{"image_url": "..."}(απλή συμβολοσειρά — είτε HTTPS URL είτε URI δεδομένωνdata:image/...;base64,...).
Αναφορά Αντιστοίχισης Παραμέτρων
| Chat Completions | Responses API |
|---|---|
prompt |
input |
messages |
input (πίνακας στοιχείων) |
max_tokens |
max_output_tokens |
response_format |
text.format (αντικείμενο) |
temperature |
temperature (αμετάβλητο) |
stop |
stop (αμετάβλητο) |
frequency_penalty |
frequency_penalty (αμετάβλητο) |
presence_penalty |
presence_penalty (αμετάβλητο) |
tools / function-calling |
tools (αμετάβλητο) |
seed |
Καταργήστε (μη υποστηριζόμενο) |
store |
store (ορίστε σε false) |
content[].type: "text" |
content[].type: "input_text" |
content[].type: "image_url" |
content[].type: "input_image" |
"image_url": {"url": "..."} |
"image_url": "..." (απλή συμβολοσειρά) |
Για πλήρη παραδείγματα κώδικα πριν/μετά, δείτε cheat-sheet.md.
Για μεταφορά υποδομής δοκιμών (mocks, snapshots, assertions), δείτε test-migration.md.
Για αντιμετώπιση σφαλμάτων και προβλημάτων, δείτε troubleshooting.md.
Διατήρηση Δεδομένων & Κατάσταση
- Ορίστε
store: falseσε όλα τα αιτήματα Responses. - Μην βασίζεστε σε προηγούμενα αναγνωριστικά μηνυμάτων ή συμφραζόμενα αποθηκευμένα στον διακομιστή· κρατήστε κατάσταση διαχειριζόμενη από τον πελάτη και ελαχιστοποιήστε τα μεταδεδομένα.
Κριτήρια Αποδοχής
Διαύλους επιπέδου κώδικα (όλοι πρέπει να περάσουν)
- Μηδενικές εμφανίσεις για
rg "chat\.completions\.create|ChatCompletion\.create|Completion\.create"σε αρχεία μετά τη μεταφορά. - Μηδενικές εμφανίσεις για
rg "AzureOpenAI\(|AsyncAzureOpenAI\("— όλοι οι κατασκευαστές χρησιμοποιούνOpenAI/AsyncOpenAIμε το v1 endpoint. - Μηδενικές εμφανίσεις για
rg "models\.github\.ai|models\.inference\.ai\.azure"— οι διαδρομές κώδικα GitHub Models αφαιρέθηκαν. - Μηδενικές εμφανίσεις για
rg "OpenAIChatCompletionClient"— o κώδικας MAF 1.0.0+ χρησιμοποιείOpenAIChatClient(που χρησιμοποιεί Responses API). Σε pre-1.0.0, αναβαθμίστε σεagent-framework-openai>=1.0.0. - Όλες οι κλήσεις
ChatOpenAI(...)περιλαμβάνουνuse_responses_api=True. - Μηδενικές εμφανίσεις για
rg "choices\[0\]"— όλη η πρόσβαση απαντήσεων χρησιμοποιείresp.output_textή το σχήμα εξόδου Responses. - Καμία χρήση
response_formatσε επίπεδο κορυφής· όλη η δομημένη έξοδος χρησιμοποιείtext={"format": {...}}. -
openai>=1.108.1καιazure-identityστοrequirements.txtήpyproject.toml; οι εξαρτήσεις έχουν επανεγκατασταθεί. -
store=Falseορισμένο σε κάθε κλήσηresponses.create. - Καμία
api_versionστην κατασκευή πελάτη·AZURE_OPENAI_API_VERSIONαφαιρέθηκε από αρχεία περιβάλλοντος και υποδομή.
Διαύλους υποδομής δοκιμών (όλοι πρέπει να περάσουν)
- Μηδενικές εμφανίσεις για
rg "ChatCompletionChunk|AsyncCompletions\.create|chat\.completions" tests/. - Μηδενικές εμφανίσεις για
rg "_azure_ad_token_provider" tests/— οι assertions ενημερώθηκαν να ελέγχουνisinstance(client, AsyncOpenAI)ήbase_url. - Μηδενικές εμφανίσεις για
rg "prompt_filter_results|content_filter_results" tests/— τα Azure-specific φίλτρα mocks αφαιρέθηκαν. - Τα mock fixtures χρησιμοποιούν
kwargs.get("input")όχιkwargs.get("messages"). - Snapshot / golden αρχεία ανανεώθηκαν στο σχήμα ροής Responses (χωρίς
choices[0],function_call,logprobs, κλπ.). -
pytestπερνάει χωρίς αποτυχίες μετά τις ενημερώσεις όλων των δοκιμών.
Διαύλους συμπεριφοράς (επαληθεύστε χειροκίνητα ή με test harness)
- Βασική ολοκλήρωση: το μη ροής
responses.createεπιστρέφει μη κενόoutput_text. - Ισοτιμία ροής: αν ο αρχικός κώδικας χρησιμοποιούσε ροή, ο μεταφερμένος κώδικας κάνει ροή και παράγει γεγονότα
response.output_text.deltaμε μη κενά δελτά. - Δομημένη έξοδος: αν χρησιμοποιείται
text.formatμεjson_schema, τοjson.loads(resp.output_text)επιτυγχάνει και ταιριάζει με το σχήμα. - Βρόχος κλήσης εργαλείων: αν χρησιμοποιούνται εργαλεία, το μοντέλο εκδίδει κλήσεις εργαλείων, η εφαρμογή τις εκτελεί, και το επόμενο αίτημα επιστρέφει τελικό
output_text(χωρίς άπειρο βρόχο). - Ισοτιμία Async: αν χρησιμοποιήθηκε
AsyncAzureOpenAI, το αντίστοιχοAsyncOpenAIλειτουργεί μεawait. - Ποσοστό σφαλμάτων: δεν υπάρχουν νέα σφάλματα 400/401/404 σε σύγκριση με τη βάση πριν τη μεταφορά.
Παραδοτέα
- Η περίληψη περιλαμβάνει επεξεργασμένα αρχεία, μετρήσεις πριν/μετά των παλαιών σημείων κλήσης, και επόμενα βήματα.
- Οι αλλαγές είναι μόνο επεξεργασίες δέντρου εργασίας (χωρίς commits).
Απαιτήσεις Έκδοσης SDK
| Πακέτο | Ελάχιστη Έκδοση |
|---|---|
openai |
>=1.108.1 |
azure-identity |
Νεότερο (για πιστοποίηση EntraID) |
Αναφορές
- Φύλλο Αναφοράς — όλα τα αποσπάσματα κώδικα
- Μεταφορά Δοκιμών — mocks, snapshots, assertions
- Αντιμετώπιση προβλημάτων — σφάλματα, πίνακας κινδύνων, προβλήματα
- detect_legacy.py — αυτόματος σαρωτής
- Azure OpenAI Starter Kit
- Τεκμηρίωση Azure OpenAI Responses API
- Κύκλος ζωής έκδοσης Azure OpenAI API
- OpenAI Responses API αναφορά
Αποποίηση ευθυνών: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη Co-op Translator. Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.
Source: microsoft/ai-agents-for-beginners → translations/el/.agents/skills/azure-openai-to-responses/SKILL.md