One Door to the Models, Μέρος 8: Orchestration Πάνω από το Gateway
Ένα orchestration framework που κάνει retry και reroute ανταγωνίζεται το gateway. Το Μέρος 8 κρατά το framework λεπτό και βάζει τα tools στην ίδια ταυτότητα.

Τη στιγμή που μια εφαρμογή αρχίζει να καλεί tools, η έξοδος του μοντέλου παύει να είναι κείμενο για διάβασμα και γίνεται εντολή για δράση, και κάθε εγγύηση που έχτισε μέχρι εδώ αυτή η σειρά αφορούσε tokens. Ένα framework μπορεί να κάνει αυτό το loop εύκολο στο γράψιμο και, με την ίδια κίνηση, να κρύψει το throttling, να παρακάμψει το routing του gateway, και να μετατρέψει ένα μετρημένο request σε έντεκα που δεν σχεδίασε κανείς. Το Μέρος 7 έδωσε στις εφαρμογές retrieval. Αυτό το μέρος αφορά ό,τι κάθεται από πάνω του, και συγκεκριμένα ποιες δουλειές δεν πρέπει να κάνει το framework επειδή τις κάνει ήδη η πλατφόρμα.
Στρέψε το framework στο gateway, και σταμάτα εκεί
Η μηχανική είναι τετριμμένη, και ακριβώς γι' αυτό η πειθαρχία πρέπει να είναι ρητή. Ένα orchestration framework μιλά το OpenAI Chat Completions format, το gateway εκθέτει ακριβώς αυτό, οπότε η ενσωμάτωση είναι ένα base URL και ένα credential:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url="https://apim-genai-prod.azure-api.net/llm/v1",
api_key=gateway_token, # Entra ID token, not a model key
model="chat-default", # gateway alias, never a deployment name
max_retries=0, # the gateway owns retry and failover
timeout=60,
)
Το max_retries=0 είναι η γραμμή που μετράει, και είναι αυτή που σβήνουν πρώτη. Τα frameworks έρχονται με client-side retry, exponential backoff, και συχνά provider fallback, όλα λογικά defaults για μια εφαρμογή που μιλά απευθείας σε έναν model provider και όλα ενεργά επιβλαβή μπροστά από ένα gateway που κάνει ήδη routing, load balancing, και circuit breaking.
Σκέψου τι κάνει το client-side retry στο circuit breaker του Μέρους 3. Ο breaker ανοίγει και επιστρέφει 503 ακριβώς για να σταματήσουν οι callers να σφυροκοπούν ένα backend που αποτυγχάνει. Ένα framework ρυθμισμένο να ξαναδοκιμάζει το 503 πέντε φορές με backoff μετατρέπει αυτό το σήμα σε πενταπλάσιο φορτίο, που φτάνει ακριβώς όταν το backend μπορεί λιγότερο από ποτέ να το αντέξει. Το ίδιο ισχύει για το 429: ένα token limit υπάρχει για να διαμορφώνει τη ζήτηση, και ένας client που κάνει retry μέσα από αυτό δεν διαμορφώνεται. Τα retries ανήκουν σε ένα μέρος, και αυτό το μέρος υπάρχει ήδη.
Το ειλικρινές αντίβαρο: ένα μόνο retry σε αποτυχία επιπέδου σύνδεσης, στον client, είναι εντάξει. Ο κανόνας αφορά το να ξαναδοκιμάζεις τις ίδιες τις απαντήσεις του gateway, όχι την αστάθεια του δικτύου.
Τι πρέπει να κάνει ακόμα το framework
Αφού αφαιρεθούν από την περιγραφή της δουλειάς του το provider abstraction, το routing, το retry, και το fallback, σε ένα framework μένουν τα κομμάτια που είναι πραγματικά κουραστικό να γράψεις με το χέρι και δεν κουβαλούν καμία ανησυχία πλατφόρμας: prompt templating με typed inputs, παραγωγή tool schema από function signatures, parsing της εξόδου σε structured types, και η λογιστική του loop που μετατρέπει ένα tool call σε επόμενο μήνυμα. Αυτό είναι πραγματικός όγκος δουλειάς και εύλογος λόγος να πάρεις το dependency.
Αυτό που δεν πρέπει να γίνει είναι το μέρος όπου ζει η επιλογή μοντέλου. Το alias στον παραπάνω κώδικα είναι gateway alias, που επιλύεται από το model catalog του Μέρους 2. Το δικό του model registry ενός framework, οι δικές του αλυσίδες fallback, η δική του λίστα providers, όλα αυτά είναι ένας δεύτερος κατάλογος που θα διαφωνήσει με τον πρώτο τη μέρα που ένα μοντέλο θα αποσυρθεί.
Τα tools είναι η δεύτερη επιφάνεια, και μπορούν να μοιραστούν την πρώτη πόρτα
Τα tools ενός agent αξίζουν την ίδια μεταχείριση με τα μοντέλα του: ένα ελεγχόμενο σημείο εισόδου, πρόσβαση ανά tenant, ένα audit trail. Το API Management μπορεί να εκθέσει ένα REST API που ήδη διαχειρίζεται ως remote MCP server, δημοσιεύοντας επιλεγμένα operations ως tools που καλούν οι MCP clients, διαθέσιμο στα tiers Developer, Basic, Standard, και Premium μαζί με τις v2 παραλλαγές τους. Η σύνδεση αυτού του MCP server με ένα product σημαίνει ότι η πρόσβαση στα tools διέπεται από τα ίδια products και subscriptions με την πρόσβαση στα μοντέλα, που είναι όλο το νόημα: μία ταυτότητα, μία ιστορία quota, ένα σημείο ανάκλησης.
Δύο περιορισμοί κρίνουν πόσο μακριά φτάνει αυτό σήμερα. Το API Management υποστηρίζει MCP server tools, αλλά όχι MCP resources ή prompts, για servers που εκτίθενται από managed REST APIs. Και οι δυνατότητες MCP server δεν υποστηρίζονται σε workspaces, κάτι που μετράει ακριβώς για τις απομονωμένες ομάδες που το Μέρος 5 έστειλε στα workspaces. Μια ομάδα που χρειάζεται και workspace gateway και δημοσίευση MCP tools πρέπει να διαλέξει ένα από τα δύο, και είναι καλύτερα να το μάθεις όσο ακόμα σχεδιάζεις την αρχιτεκτονική.
Content safety στη διαδρομή του prompt
Ένα agent loop διευρύνει την επιφάνεια εισόδου: ανακτημένα έγγραφα, έξοδοι από tools, και κείμενο χρήστη καταλήγουν όλα σε ένα prompt. Η πολιτική llm-content-safety δρομολογεί το περιεχόμενο στο Azure AI Content Safety πριν το δει το μοντέλο.
<llm-content-safety backend-id="content-safety-backend" shield-prompt="true">
<categories output-type="EightSeverityLevels">
<category name="Hate" threshold="4" />
<category name="Violence" threshold="4" />
</categories>
</llm-content-safety>
Τρία attributes θέλουν προσεκτικό διάβασμα, όχι αντιγραφή. Το threshold λειτουργεί όπως λειτουργεί μια ανοχή, όχι όπως ένα όριο: με threshold="4" το φίλτρο επιτρέπει severity 0 έως 3 και μπλοκάρει 4 έως 7, οπότε ανεβάζοντας τον αριθμό ανεβάζεις την ανοχή και μπλοκάρεις λιγότερα. Είναι η ίδια αντιστροφή με το threshold του cache score στο Μέρος 6, και πιάνει τον κόσμο με τον ίδιο τρόπο.
Το shield-prompt="true" ενεργοποιεί τον έλεγχο για adversarial επιθέσεις χρηστών, και έχει default το false. Για έναν agent που συνενώνει ανακτημένα έγγραφα στο context του, αυτό το default είναι το λάθος: το prompt injection που φτάνει μέσα από ένα έγγραφο είναι η ρεαλιστική απειλή, όχι ένας χρήστης που πληκτρολογεί μια επίθεση σε ένα chat box.
Το enforce-on-completions, επίσης false ως default, επεκτείνει τον έλεγχο στις αποκρίσεις του μοντέλου όταν η πολιτική κάθεται στο inbound. Και το window-size, με default το όριο των 10.000 χαρακτήρων του Content Safety, είναι ρυθμίσιμο μόνο για τις αποκρίσεις· για τα requests χρησιμοποιείται πάντα το default παράθυρο. Ένα πολύ μεγάλο ανακτημένο context αξιολογείται επομένως από το ίδιο windowing που δεν ελέγχεις, που είναι επιχείρημα υπέρ του να κρατάς τα αποτελέσματα του retrieval οριοθετημένα, όχι υπέρ του να εμπιστεύεσαι ότι το φίλτρο θα κλιμακωθεί μαζί τους.
Τι κάνει ένα loop σε κάθε αριθμό του Μέρους 5
Μία ερώτηση χρήστη που πυροδοτεί τέσσερα tool calls δεν είναι ένα request, είναι πέντε κλήσεις μοντέλου, με καθεμία να ξαναστέλνει το ολοένα μεγαλύτερο transcript. Τρεις συνέπειες για την πλατφόρμα:
- Το quota ανά λεπτό παύει να αφορά τον όγκο χρηστών. Γίνεται όγκος χρηστών επί μέσο βάθος loop, και το βάθος του loop είναι ιδιότητα του prompt της εφαρμογής, που αλλάζει χωρίς platform review.
- Ένα ανεξέλεγκτο loop δεν ξεχωρίζει από φορτίο. Το gateway βλέπει καλοσχηματισμένα requests μέσα στο quota. Η εφαρμογή πρέπει να οριοθετεί μόνη της τις επαναλήψεις της, και η πλατφόρμα πρέπει να το δημοσιεύει ως απαίτηση αντί να το υποθέτει.
- Το chargeback χρειάζεται ένα correlation ID ανά αλληλεπίδραση χρήστη, όχι ανά request, αλλιώς οι αριθμοί ανά ομάδα είναι αληθινοί και άχρηστοι. Αυτό το ID ανήκει στο log record, εκεί ακριβώς όπου το Μέρος 5 έβαλε τα δεδομένα υψηλής πληθικότητας για αυτόν ακριβώς τον λόγο.
Ένα ταβάνι tokens ανά request στο gateway είναι χρήσιμο backstop και όχι υποκατάστατο. Περιορίζει τη ζημιά μιας τεράστιας κλήσης· δεν κάνει τίποτα για ένα loop που κάνει διακόσιες μικρές.
Τρόποι αποτυχίας που αξίζει να προσέχεις
- Retry του framework που ακυρώνει το circuit breaker. Το default είναι ενεργό. Απενεργοποίησέ το συνειδητά και τεκμηρίωσε γιατί, αλλιώς ο μηχανισμός προστασίας της πλατφόρμας γίνεται ενισχυτής φορτίου.
- Ένας δεύτερος model catalog μέσα στο framework. Θα διαφωνήσει με του gateway τη μέρα της απόσυρσης, και η εφαρμογή θα βρεθεί καρφωμένη σε ένα deployment name που κανείς δεν ήξερε ότι είχε.
- Threshold του content safety διαβασμένο ως όριο. Υψηλότερο σημαίνει πιο επιτρεπτικό. Μια ομάδα που ρυθμίζει για να διώξει τα false positives μπορεί στην πράξη να απενεργοποιήσει το φίλτρο πιστεύοντας ότι το έσφιξε.
- Το
shield-promptαφημένο στο default του. Ανενεργό. Σε έναν agent που καταναλώνει ανακτημένα έγγραφα, αυτή είναι η διαδρομή του injection που μένει ανοιχτή. - Loops χωρίς όριο. Καμία πολιτική του gateway δεν εκφράζει το «σταμάτα μετά από έξι επαναλήψεις». Μόνο η εφαρμογή μπορεί, οπότε είναι συμβόλαιο, όχι έλεγχος.
- MCP μαζί με workspaces. Δεν υποστηρίζονται μαζί σήμερα. Το να το ανακαλύψεις αφού υποσχέθηκες και τα δύο σε μια ομάδα είναι architecture rollback.
Τι κληρονομεί το Μέρος 9
Εφαρμογές με orchestration, tools δημοσιευμένα μέσα από το ίδιο gateway, και content safety στη διαδρομή του request. Όλα ρυθμισμένα σε policy XML, alias mappings, και ορισμούς products που σήμερα φτάνουν στην παραγωγή όπως κάθε άλλη αλλαγή, που είναι το κομμάτι που δεν έχει εξεταστεί ακόμα. Επόμενο: Azure DevOps, και τι σημαίνει να βάζεις μια αλλαγή έκδοσης μοντέλου πίσω από ένα evaluation αντί για ένα review comment.
Διάβασε επίσης
- Μέρος 9, Eval Gates και Απόσυρση Μοντέλων, όπου όλη αυτή η ρύθμιση φτάνει στην παραγωγή, και μια ληγμένη έγκριση αποδεικνύεται ότι μοιάζει με επιτυχία.
- Bedrock Agents Έναντι της Δικής σου Loop, το ίδιο ερώτημα build-versus-adopt ένα επίπεδο πιο πάνω, με επιχειρήματα πάνω στον έλεγχο και όχι στην ευκολία.
- Το Prompt Injection Είναι Επιφάνεια Επίθεσης του RAG, γιατί το
shield-promptμετράει περισσότερο ακριβώς εκεί όπου το retrieval τροφοδοτεί το context.
Για την πλευρά υποδομής και πλατφόρμας της λειτουργίας κάτι τέτοιου σε κλίμακα, οι σημειώσεις πεδίου είναι στο ercan.cloud, και ο κόμβος είναι στο ercanermis.com.
Αναφορές
Περισσότερα από τον Ercan
Δύο ακόμη ιστότοποι, ίδιος συγγραφέας, διαφορετικό έδαφος.
Cloud, AWS, EKS, Terraform, platform engineering.
Σημειώσεις πεδίου από συστήματα παραγωγής. EKS, IAM, Terraform σε κλίμακα οργανισμού, observability, βελτιστοποίηση κόστους.
Επισκεφθείτε ercan.cloud →Ο κόμβος. Σχετικά, συμβουλευτική, επικοινωνία.
Προσωπικός κόμβος και για τις δύο διαδρομές γραφής. Ποιος είμαι, πώς λειτουργεί η συμβουλευτική, πώς να επικοινωνήσετε.
Επισκεφθείτε ercanermis.com →