![]()
Μέχρι αυτό το σημείο στο μάθημα έχετε δημιουργήσει πράκτορες που τρέχουν στον φορητό υπολογιστή σας, μέσα σε ένα τετράδιο, τροφοδοτούμενοι από το az login και μερικές περιβαλλοντικές μεταβλητές. Αυτή είναι ακριβώς η σωστή προσέγγιση για μάθηση. Δεν είναι ο σωστός τρόπος για να τρέξετε έναν πράκτορα από τον οποίο εξαρτώνται χιλιάδες πελάτες στις 3 το πρωί.
Αυτό το μάθημα αφορά το χάσμα μεταξύ του “λειτουργεί στον υπολογιστή μου” και του “λειτουργεί αξιόπιστα και οικονομικά στην παραγωγή”. Κλείνουμε αυτό το χάσμα χρησιμοποιώντας το Microsoft Foundry και την Υπηρεσία Πρακτόρων του Microsoft Foundry, και το κάνουμε δημιουργώντας έναν πραγματικό πελατειακό πράκτορα υποστήριξης που διαθέτει εργαλεία, ανάκτηση, μνήμη, αξιολόγηση και παρακολούθηση.
Αυτό το μάθημα θα καλύψει:
Μετά την ολοκλήρωση αυτού του μαθήματος, θα γνωρίζετε πώς να:
Αυτό το μάθημα υποθέτει ότι έχετε ολοκληρώσει τα προηγούμενα μαθήματα και είστε άνετοι με:
Θα χρειαστείτε επίσης:
az login).requirements.txt.Ένας πρωτότυπος πράκτορας και ένας παραγωγικός πράκτορας μοιράζονται τον ίδιο βασικό βρόχο — συλλογισμός, κλήση εργαλείων, απόκριση. Αυτό που αλλάζει είναι όλα όσα περιβάλλουν αυτόν τον βρόχο. Το μοντέλο ίσως αποτελεί το 20% ενός παραγωγικού πράκτορα· το υπόλοιπο 80% είναι ο λειτουργικός σκελετός.
| Θέμα | Πρωτότυπο | Παραγωγή |
|---|---|---|
| Φιλοξενία | Τρέχει στο τετράδιό σας | Τρέχει ως φιλοξενούμενη υπηρεσία, με έκδοση και εισαγωγή |
| Ταυτότητα | Το διακριτικό az login σας |
Διαχειριζόμενη ταυτότητα με RBAC περιορισμένη |
| Κατάσταση | Στη μνήμη, χάνεται σε επανεκκίνηση | Εξωτερικοποιημένη (κατάστημα threads, υπηρεσία μνήμης) |
| Σφάλμα | Βλέπετε το traceback | Επανεκκινήσεις, εναλλακτικές λύσεις, dead-letter, ειδοποιήσεις |
| Κόστος | “Είναι λίγα λεπτά” | Παρακολουθείται ανά αίτημα, δρομολογείται, προσωρινά αποθηκεύεται, προϋπολογίζεται |
| Ποιότητα | Κρίνετε οπτικά το αποτέλεσμα | Αξιολογείται αυτόματα πριν από κάθε έκδοση |
| Εμπιστοσύνη | Εγκρίνετε κάθε ενέργεια | Πολιτική + άνθρωπος στη ροή για επικίνδυνες ενέργειες |
Κρατήστε αυτό τον πίνακα στο μυαλό. Κάθε ενότητα παρακάτω αντιστοιχεί σε μία από αυτές τις γραμμές.
Υπάρχουν τρία πρότυπα που θα χρησιμοποιήσετε, συχνά σε συνδυασμό.
Το αντικείμενο πράκτορα ζει μέσα στη δική σας διεργασία εφαρμογής. Ο κώδικάς σας καλεί απευθείας τον πάροχο μοντέλου· ο βρόχος συλλογισμού τρέχει στην υπηρεσία σας. Αυτό έχει γίνει σε κάθε προηγούμενο μάθημα.
Ο πράκτορας καταχωρείται ως πόρος στο Microsoft Foundry. Το Foundry φιλοξενεί τον βρόχο συλλογισμού, αποθηκεύει threads, επιβάλλει ασφάλεια περιεχομένου και RBAC, και κάνει τον πράκτορα ορατό στην πύλη Foundry. Η εφαρμογή σας γίνεται ένας λεπτός πελάτης που δημιουργεί threads και διαβάζει απαντήσεις.
Πολλαπλοί πράκτορες (και εργαλεία) συντίθενται σε γράφο με ρητό έλεγχο ροής — διαδοχικά βήματα, διακλαδώσεις, κόμβοι ανθρώπινης έγκρισης, και ανθεκτικά σημεία ελέγχου που μπορούν να παγώσουν και να συνεχίσουν. Αυτή είναι η δυνατότητα Ροές Εργασίας του Microsoft Agent Framework που εφαρμόζεται σε κλίμακα ανάπτυξης.
flowchart TB
subgraph P1[Φιλοξενούμενο από τον Πελάτη]
A1[Διαδικασία Εφαρμογής Σας] --> M1[Πάροχος Μοντέλου]
end
subgraph P2[Φιλοξενούμενος Πράκτορας]
A2[Λεπτός Πελάτης] --> F2[Υπηρεσία Πράκτορα Foundry]
F2 --> M2[Μοντέλο + Εργαλεία + Αποθήκη Θεμάτων]
end
subgraph P3[Ροή Εργασίας Πράκτορα]
A3[Ορχηστρωτής] --> S1[Πράκτορας Τριάς]
S1 --> S2[Πράκτορας Επίλυσης]
S2 --> H[Κόμβος Ανθρώπινης Έγκρισης]
H --> S3[Πράκτορας Δράσης]
end
Η ανάπτυξη ενός πράκτορα δεν είναι μια εφάπαξ push. Είναι ένας βρόχος, και μοιάζει πολύ με τον κύκλο ζωής μιας έκδοσης λογισμικού, γιατί ακριβώς αυτό είναι.
flowchart LR
Create[Δημιουργία / Συγγραφέας] --> Version[Έκδοση]
Version --> Evaluate[Αξιολόγηση εκτός σύνδεσης]
Evaluate -->|περνάει τη πύλη| Deploy[Ανάπτυξη φιλοξενούμενη]
Evaluate -->|αποτυγχάνει στη πύλη| Create
Deploy --> Observe[Παρατήρηση σε απευθείας σύνδεση]
Observe --> Improve[Συλλογή αποτυχιών]
Improve --> Create
Deploy --> Retire[Απόσυρση παλιάς έκδοσης]
Η βασική ιδέα, που προέρχεται από το Μάθημα 10: η αξιολόγηση εκτός σύνδεσης είναι μια πύλη, όχι μια δεύτερη σκέψη. Μια νέα έκδοση πράκτορα δεν κυκλοφορεί αν δεν περάσει τα όρια αξιολόγησής σας. Η παρατηρησιμότητα στο δίκτυο τροφοδοτεί στη συνέχεια τα πραγματικά σφάλματα πίσω στο σετ δοκιμών εκτός σύνδεσης. Αυτός είναι ο ολόκληρος βρόχος.
Η κλιμάκωση ενός πράκτορα διαφέρει από την κλιμάκωση ενός web API χωρίς κατάσταση, γιατί κάθε αίτημα μπορεί να ενεργοποιήσει πολλαπλές δαπανηρές κλήσεις μοντέλου και εργαλείων. Τέσσερις τεχνικές σηκώνουν το μεγαλύτερο φόρτο.
Χειρισμός αιτήσεων χωρίς κατάσταση. Μην κρατάτε καθόλου κατάστασης ανά χρήστη στη μνήμη της διεργασίας. Αποθηκεύστε τα threads συνομιλίας στο κατάστημα threads του Foundry ή σε υπηρεσία μνήμης ώστε οποιαδήποτε περίπτωση να μπορεί να χειριστεί οποιοδήποτε αίτημα. Αυτό επιτρέπει οριζόντια κλιμάκωση — προσθέστε περιπτώσεις, χωρίς κολλημένες συνεδρίες.
Δρομολόγηση μοντέλου. Δεν χρειάζεται κάθε αίτημα το πιο ικανό (και ακριβό) μοντέλο σας. Δρομολογήστε απλά αιτήματα — ταξινόμηση προθέσεων, σύντομες απαντήσεις — σε μικρό και γρήγορο μοντέλο, και αφήστε το μεγάλο μοντέλο για τον πραγματικό συλλογισμό. Ο Model Router του Foundry το κάνει για εσάς, ή μπορείτε να υλοποιήσετε μόνοι σας έναν ελαφρύ ταξινομητή. Θα φτιάξετε την έκδοση DIY στο εργαστήριο.
Προσωρινή αποθήκευση απαντήσεων. Πολλές ερωτήσεις υποστήριξης είναι σχεδόν-διπλότυπες (“πώς επαναφέρω τον κωδικό μου;”). Αποθηκεύστε τις απαντήσεις σε συχνές ερωτήσεις και σερβίρετέ τις χωρίς να καλέσετε το μοντέλο καθόλου. Ακόμα και ένα μέτριο ποσοστό χτυπημάτων cache μειώνει σημαντικά κόστος και καθυστέρηση.
Ταυτόχρονη εκτέλεση και πίεση ροής. Οι πάροχοι μοντέλων έχουν όρια ρυθμού. Περιορίστε την ταυτόχρονη εκτέλεση, χρησιμοποιήστε επανεκκινήσεις με εκθετική απόσβεση, και αποτύχετε ομαλά (μια ουρά “το δουλεύουμε” κερδίζει έναν 500).
flowchart LR
Q[Ερώτημα χρήστη] --> C{Επιτυχία στην προσωρινή μνήμη;}
C -->|ναι| R[Επιστροφή αποθηκευμένης απάντησης]
C -->|όχι| Router{Πολυπλοκότητα;}
Router -->|απλή| SLM[Μικρό μοντέλο]
Router -->|περίπλοκη| LLM[Μεγάλο μοντέλο]
SLM --> Out[Απόκριση]
LLM --> Out
Out --> Store[Προσωρινή μνήμη + ιχνηλάτηση]
Δεν μπορείτε να λειτουργείτε κάτι που δεν βλέπετε. Όπως καλύφθηκε στο Μάθημα 10, το Microsoft Agent Framework εκπέμπει ιχνηλάτηση OpenTelemetry εγγενώς — κάθε κλήση μοντέλου, χρήση εργαλείου και βήμα ορχήστρωσης γίνεται μια διαστολή. Στην παραγωγή, εξάγετε αυτές τις διαστολές στο Microsoft Foundry (ή οτιδήποτε backend συμβατό με OTel) ώστε να μπορείτε:
from agent_framework.observability import get_tracer
tracer = get_tracer()
with tracer.start_as_current_span("support_request") as span:
span.set_attribute("customer.tier", "enterprise")
span.set_attribute("routed.model", "gpt-5-nano")
# η εκτέλεση του πράκτορα παρακολουθείται αυτόματα μέσα σε αυτή τη χρονική περίοδο
Χαρακτηριστικά όπως customer.tier και routed.model μετατρέπουν έναν τοίχο ιχνών σε απαντήσιμες ερωτήσεις (“κατευθύνονται πολύ συχνά οι πελάτες επιχειρήσεων στο μικρό μοντέλο;”).
Το κόστος στους παραγωγικούς πράκτορες κυριαρχείται από tokens. Τρεις μοχλοί, κατά σειρά επιρροής:
Οι πύλες αξιολόγησης και ο έλεγχος κόστους είναι η ίδια πειθαρχία που φαίνεται από δύο γωνίες: η αξιολόγηση καθορίζει το κατώτατο όριο ποιότητας, η δρομολόγηση και η προσωρινή αποθήκευση διατηρούν το κόστος όσο πιο κοντά γίνεται σε αυτό το όριο.
Διακυβέρνηση. Οι Φιλοξενούμενοι Πράκτορες κληρονομούν το RBAC, την ασφάλεια περιεχομένου, και την καταγραφή ελέγχου του Foundry. Δώστε σε κάθε πράκτορα μια διαχειριζόμενη ταυτότητα με τα λιγότερα προνόμια που χρειάζεται — μόνο ανάγνωση στη βάση γνώσης, περιορισμένη πρόσβαση στο API καταγραφής εισιτηρίων, τίποτα παραπάνω.
Άνθρωπος στη ροή. Ορισμένες ενέργειες είναι πολύ σημαντικές για να αυτοματοποιηθούν πλήρως — επιστροφή χρημάτων, διαγραφή λογαριασμού, κλιμάκωση σε νομική ομάδα. Το Microsoft Agent Framework υποστηρίζει εργαλεία που απαιτούν έγκριση: ο πράκτορας προτείνει την ενέργεια, η εκτέλεση παγώνει, ένας άνθρωπος εγκρίνει ή απορρίπτει, και η ροή εργασίας συνεχίζεται. Είδατε τον πρωταρχικό μηχανισμό στο Μάθημα 6· εδώ τον αναπτύσσετε.
MCP στην παραγωγή. Το MCP επιτρέπει στον πράκτορά σας να χρησιμοποιεί εξωτερικά εργαλεία μέσω ενός τυποποιημένου interface. Στην παραγωγή, αντιμετωπίζετε κάθε διακομιστή MCP ως μη αξιόπιστο όριο: καρφιτσώστε την έκδοση του διακομιστή, τρέξτε τον με μια περιορισμένη ταυτότητα, επαληθεύστε τις εξόδους του, και μην αποκαλύπτετε ποτέ μυστικά σε αυτόν. Ένας διακομιστής MCP είναι μια εξάρτηση, και οι εξαρτήσεις ενημερώνονται, ελέγχονται και έχουν όρια ρυθμού.
flowchart TB
subgraph Dev[Αρχιτεκτονική Ανάπτυξης]
D1[Τετράδιο] --> D2[Πλαίσιο Πράκτορα]
D2 --> D3[Πάροχος Μοντέλου]
D2 --> D4[Τοπικά εργαλεία]
end
subgraph Deploy[Αρχιτεκτονική Ανάπτυξης]
E1[Γραμμή CI] --> E2[Πύλη Αξιολόγησης]
E2 -->|πέρασμα| E3[Υπηρεσία Πράκτορα Foundry]
E3 --> E4[Φιλοξενούμενος πράκτορας με εκδόσεις]
end
subgraph Run[Αρχιτεκτονική Εκτέλεσης]
F1[Εφαρμογή πελάτη] --> F2[Φιλοξενούμενος πράκτορας]
F2 --> F3[Δρομολογητής Μοντέλου]
F2 --> F4[Αναζήτηση Azure AI RAG]
F2 --> F5[Υπηρεσία μνήμης]
F2 --> F6[Εργαλεία MCP]
F2 --> F7[OTel -> ανίχνευση Foundry]
F2 --> F8[Ανθρώπινη έγκριση]
end
Αυτά τα τρία διαγράμματα — ανάπτυξη, υλοποίηση, εκτέλεση — είναι ο ίδιος πράκτορας σε τρία στάδια της ζωής του. Το εργαστήριο που ακολουθεί σας περνάει από τη δημιουργία του.
Ανοίξτε το code_samples/16-python-agent-framework.ipynb και επεξεργαστείτε το από την αρχή μέχρι το τέλος. Θα συναρμολογήσετε έναν πράκτορα υποστήριξης πελατών Contoso με κάθε παραγωγικό θέμα ενσωματωμένο:
Το τετράδιο είναι οργανωμένο ώστε κάθε παραγωγικό θέμα να είναι μια αυτοτελής, εκτελέσιμη ενότητα. Η καρδιά του είναι ο χειριστής αιτήσεων δρομολόγησης και προσωρινής αποθήκευσης:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Εξυπηρετήστε από την cache όταν μπορούμε.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Κατευθύνετε ανάλογα με την πολυπλοκότητα για να ελέγξετε το κόστος.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Εκτελέστε τον πράκτορα μέσα σε ένα trace span για παρατηρησιμότητα.
with tracer.start_as_current_span("support_request") as span:
span.set_attribute("routed.model", model)
span.set_attribute("customer.id", customer_id)
response = await support_agent.run(query, model=model)
# 4. Κάντε cache και επιστρέψτε.
response_cache.set(normalize(query), response.text)
return response.text
Η πύλη αξιολόγησης που φυλάει μια έκδοση μοιάζει με αυτό:
async def evaluation_gate(agent, test_cases, threshold: float = 0.8) -> bool:
passed = 0
for case in test_cases:
result = await agent.run(case["input"])
if score_response(result.text, case["expected"]) >= 0.8:
passed += 1
pass_rate = passed / len(test_cases)
print(f"Evaluation pass rate: {pass_rate:.0%} (gate: {threshold:.0%})")
return pass_rate >= threshold # ανάπτυξη μόνο εάν η πύλη περάσει
Διαβάστε κάθε γραμμή — το τετράδιο κρατά τα πρωταρχικά στοιχεία σκόπιμα μικρά ώστε τίποτα να μην κρύβεται πίσω από μια κλήση framework.
Η πύλη αξιολόγησης παραπάνω τρέχει εκτός σύνδεσης ενάντια στο αντικείμενο πράκτορά σας. Μόλις ο πράκτορας αναπτυχθεί ως Hosted Agent, χρειάζεστε έναν ακόμη, ακόμα πιο φθηνό έλεγχο: η αναπτυγμένη τελική σημείο απαντά πραγματικά;
Η “επιτυχημένη” ανάπτυξη αποδεικνύει μόνο ότι το control plane αποδέχτηκε τον ορισμό — δεν αποδεικνύει ότι ο πράκτορας απαντά. Μια ελλιπής εξάρτηση, μια κακή δρομολόγηση μοντέλου, ή μια ληγμένη σύνδεση μπορεί να αφήσουν μια πράσινη ανάπτυξη που δεν επιστρέφει τίποτα. Ένας έλεγχος smoke το εντοπίζει αυτό μέσα σε δευτερόλεπτα, σε κάθε ανάπτυξη, χωρίς το κόστος μιας ολοκληρωμένης αξιολόγησης.
Αυτό το αποθετήριο παρέχει ένα έτοιμο προς χρήση pipeline ελέγχου smoke βασισμένο στο AI Smoke Test GitHub Action:
tests/lesson-16-smoke-tests.json περιέχει ερωτήσεις και επιβεβαιώσεις για τον πράκτορα υποστήριξης Contoso (βασισμένες απαντήσεις πολιτικής, αναζήτηση παραγγελίας, παραμονή στο θέμα, και συνέχεια συνομιλίας πολλών βημάτων). Κατάλογοι για άλλους πράκτορες μαθημάτων υπάρχουν δίπλα σε αυτόν — δείτε το tests/README.md..github/workflows/smoke-test.yml κάνει είσοδο με Azure OIDC και στέλνει με POST κάθε πρόταση στο τελικό σημείο Responses του πράκτορα, και αποτυγχάνει τη δουλειά σε οποιαδήποτε παράλειψη επιβεβαίωσης.- name: Smoke-test hosted agent
uses: JFolberth/ai-smoketest@v1
with:
project_endpoint: $
agent_name: ContosoSupportAgent
tests_file: tests/lesson-16-smoke-tests.json
Εκτελέστε το από την καρτέλα Actions μόλις αναπτυχθεί ο agent σας, παρέχοντας το endpoint του έργου Foundry και το όνομα του agent. Η ομοσπονδιακή ταυτότητα χρειάζεται το ρόλο Azure AI User στο επίπεδο του έργου Foundry. Σκεφτείτε τις στρώσεις σαν μια πυραμίδα: δοκιμές καπνού (προσβάσιμο και ανταποκρίνεται;) εκτελούνται σε κάθε ανάπτυξη, offline αξιολόγηση (αρκετά καλή για κυκλοφορία;) εκτελείται πριν την προώθηση, και online αξιολόγηση (πώς τα πάει σε πραγματικό περιβάλλον;) εκτελείται συνεχώς.
Δοκιμάστε την κατανόησή σας πριν προχωρήσετε στην ανάθεση.
1. Περίπου πόσο από έναν παραγωγικό agent είναι “το μοντέλο”, και τι είναι το υπόλοιπο;
2. Πότε θα επιλέγατε Hosted Agent αντί για agent που φιλοξενείται από τον πελάτη;
3. Γιατί ένας agent που κλιμακώνεται πρέπει να είναι stateless στη δική του μνήμη διεργασίας;
4. Ποιο πρόβλημα επιλύει το routing μοντέλου και πώς σχετίζεται με την αξιολόγηση;
5. Τι είναι “evaluation gate” και πού βρίσκεται στον κύκλο ζωής;
6. Γιατί ένας διακομιστής MCP πρέπει να θεωρείται ως μη αξιόπιστο όριο στην παραγωγή;
7. Ποια μεμονωμένη αλλαγή έχει συνήθως το μεγαλύτερο αντίκτυπο στο κόστος παραγωγικού agent, και γιατί;
8. Τι ρόλο παίζουν τα attributes span όπως customer.tier και routed.model στην παρατηρησιμότητα;
Πάρτε τον agent υποστήριξης πελατών από το εργαστήριο και ενισχύστε τον για ένα συγκεκριμένο σενάριο: έναν agent υποστήριξης χρέωσης συνδρομών για μια εταιρεία SaaS.
Η υποβολή σας πρέπει να:
get_subscription_status, get_invoice, και issue_credit (πιστώσεις άνω των $50 απαιτούν ανθρώπινη έγκριση).Γράψτε μια σύντομη παράγραφο (σε ένα markdown κελί) που εξηγεί ποιο κανόνα routing μοντέλου επιλέξατε και πώς θα τον επικυρώνατε με πραγματική κίνηση. Δεν υπάρχει μία σωστή απάντηση — αξιολογείστε αν οι ανησυχίες παραγωγής συνδέονται συνεκτικά.
Σε αυτό το μάθημα μεταφέρατε έναν agent από πρωτότυπο σε παραγωγή με το Microsoft Foundry:
Το επόμενο μάθημα ακολουθεί την αντίθετη πορεία: αντί να κλιμακώνετε agents στο cloud, θα τους κατεβάσετε κάτω σε έναν μόνο υπολογιστή προγραμματιστή και θα τους τρέχετε αποκλειστικά τοπικά.
Κατασκευή Agents Χρήσης Υπολογιστή (CUA)
Αποποίηση ευθυνών: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη Co-op Translator. Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.