Μετάβαση στο κύριο περιεχόμενο
OpenAI

4 Φεβρουαρίου 2026

Ξεκλείδωμα μηχανισμού Codex: πώς δημιουργήσαμε το App Server

Από την Celia Chen, μέλος του τεχνικού προσωπικού

Φόρτωση…

Ο πράκτορας προγραμματισμού Codex της OpenAI είναι διαθέσιμος σε πολλές διαφορετικές επιφάνειες: την εφαρμογή web(ανοίγει σε νέο παράθυρο), το CLI(ανοίγει σε νέο παράθυρο), την επέκταση IDE(ανοίγει σε νέο παράθυρο) και τη νέα εφαρμογή Codex για macOS. Κάτω από το καπό, όλα τροφοδοτούνται από τον ίδιο μηχανισμό Codex —ο βρόχος του πράκτορα και η λογική που αποτελεί τη βάση όλων των εμπειριών Codex. Ο κρίσιμος σύνδεσμος μεταξύ τους; Ο Codex App Server(ανοίγει σε νέο παράθυρο), ένα φιλικό προς τον πελάτη, αμφίδρομο API JSON-RPC1.

Σε αυτήν την ανάρτηση, θα παρουσιάσουμε τον Codex App Server. Θα μοιραστούμε όσα έχουμε μάθει μέχρι τώρα σχετικά με τους καλύτερους τρόπους για να ενσωματώσετε τις δυνατότητες του Codex στο προϊόν σας, ώστε να βοηθήσετε τους χρήστες σας να απογειώσουν τις ροές εργασίας τους. Θα καλύψουμε την αρχιτεκτονική και το πρωτόκολλο του App Server και το πώς ενσωματώνεται με διαφορετικές επιφάνειες του Codex, καθώς και συμβουλές για την αξιοποίηση του Codex, είτε θέλετε να μετατρέψετε το Codex σε αξιολογητή κώδικα, σε πράκτορα SRE ή σε βοηθό προγραμματισμού.

Προέλευση του App Server

Πριν εμβαθύνουμε στην αρχιτεκτονική, είναι χρήσιμο να γνωρίζετε το παρασκήνιο του App Server. Αρχικά, ο App Server ήταν ένας πρακτικός τρόπος να επαναχρησιμοποιηθεί σε προϊόντα ο μηχανισμός του Codex, ο οποίος σταδιακά εξελίχθηκε στο πρότυπο πρωτόκολλό μας.

Το Codex CLI ξεκίνησε ως TUI (διεπαφή χρήστη τερματικού), που σημαίνει ότι το Codex είναι προσβάσιμο μέσω του τερματικού. Όταν δημιουργήσαμε την επέκταση VS Code (έναν πιο φιλικό προς το IDE τρόπο αλληλεπίδρασης με πράκτορες Codex), χρειαζόμασταν έναν τρόπο να χρησιμοποιούμε το ίδιο σύστημα ώστε να οδηγούμε τον ίδιο βρόχο πράκτορα από ένα IDE UI χωρίς να τον επαναϋλοποιήσουμε. Αυτό σήμαινε υποστήριξη πλούσιων μοτίβων αλληλεπίδρασης πέρα από το request/response, όπως η εξερεύνηση του χώρου εργασίας, η ροή προόδου καθώς ο πράκτορας συλλογίζεται και η έκδοση διαφορών. Αρχικά πειραματιστήκαμε με την έκθεση του Codex ως διακομιστή MCP(ανοίγει σε νέο παράθυρο), αλλά η διατήρηση της σημασιολογίας του MCP με τρόπο που να έχει νόημα για το VS Code αποδείχθηκε δύσκολη. Αντίθετα, εισαγάγαμε ένα πρωτόκολλο JSON-RPC που αντικατόπτριζε το TUI loop, το οποίο έγινε η ανεπίσημη πρώτη έκδοση(ανοίγει σε νέο παράθυρο) του App Server. Εκείνη την εποχή, δεν περιμέναμε άλλοι πελάτες να εξαρτώνται από τον App Server, οπότε δεν το σχεδιάσαμε ως σταθερό API.

Καθώς η υιοθέτηση του Codex αυξανόταν τους επόμενους μήνες, οι εσωτερικές ομάδες και οι εξωτερικοί συνεργάτες ήθελαν τη δυνατότητα να ενσωματώσουν το ίδιο εργαλείο στα δικά τους προϊόντα, ώστε να επιταχύνουν τις ροές εργασίας ανάπτυξης λογισμικού των χρηστών τους. Για παράδειγμα, οι JetBrains και Xcode ήθελαν μια εμπειρία πράκτορα επιπέδου IDE, ενώ η εφαρμογή Codex για επιτραπέζιους υπολογιστές έπρεπε να ενορχηστρώνει πολλούς πράκτορες Codex παράλληλα. Αυτές οι απαιτήσεις μας ώθησαν να σχεδιάσουμε μια επιφάνεια πλατφόρμας στην οποία τόσο τα προϊόντα μας όσο και οι ενσωματώσεις συνεργατών θα μπορούσαν να βασίζονται με ασφάλεια με την πάροδο του χρόνου. Έπρεπε να είναι εύκολο να ενσωματωθεί και να είναι συμβατό με προηγούμενες εκδόσεις, πράγμα που σήμαινε να μπορούμε να εξελίσσουμε το πρωτόκολλο χωρίς να διακόπτουμε τη λειτουργία των υφιστάμενων πελατών.

Στη συνέχεια, θα εξετάσουμε πώς σχεδιάσαμε την αρχιτεκτονική και το πρωτόκολλο, ώστε διαφορετικοί πελάτες να μπορούν να χρησιμοποιούν τον ίδιο μηχανισμό.

Στο εσωτερικό του μηχανισμού του Codex

Πρώτα, ας εστιάσουμε στο τι περιέχει ο μηχανισμός του Codex και πώς το Codex App Server τον εκθέτει στους πελάτες. Στην τελευταία μας ανάρτηση ιστολογίου για το Codex, αναλύσαμε τον βασικό βρόχο του πράκτορα που ενορχηστρώνει την αλληλεπίδραση μεταξύ του χρήστη, του μοντέλου και των εργαλείων. Αυτή είναι η βασική λογική του μηχανισμού του Codex, αλλά η πλήρης εμπειρία του πράκτορα περιλαμβάνει περισσότερα:

1. Κύκλος ζωής και διατήρηση νημάτων. Ένα νήμα είναι μια συνομιλία Codex μεταξύ ενός χρήστη και ενός πράκτορα. Το Codex δημιουργεί, συνεχίζει, διακλαδώνει και αρχειοθετεί νήματα και διατηρεί το ιστορικό συμβάντων, ώστε οι πελάτες να μπορούν να επανασυνδεθούν και να αποδώσουν ένα συνεπές χρονολόγιο.

2. Διαμόρφωση και έλεγχος ταυτότητας. Το Codex φορτώνει τη διαμόρφωση, διαχειρίζεται τις προεπιλογές και εκτελεί ροές ελέγχου ταυτότητας όπως «Σύνδεση με το ChatGPT», συμπεριλαμβανομένης της κατάστασης των διαπιστευτηρίων.

3. Εκτέλεση εργαλείου και επεκτάσεις. Το Codex εκτελεί εργαλεία shell/file σε περιβάλλον δοκιμών και συνδέει ενσωματώσεις, όπως διακομιστές MCP και δεξιότητες, ώστε να μπορούν να συμμετέχουν στον βρόχο πρακτόρων υπό ένα συνεπές μοντέλο πολιτικής.

Όλη η λογική πράκτορα που αναφέραμε εδώ, συμπεριλαμβανομένου του βασικού βρόχου πράκτορα, βρίσκεται σε ένα τμήμα της βάσης κώδικα Codex CLI που ονομάζεται «Πυρήνας Codex(ανοίγει σε νέο παράθυρο)». Ο Πυρήνας Codex είναι τόσο μια βιβλιοθήκη όπου βρίσκεται όλος ο κώδικας πράκτορα όσο και ένας χρόνος εκτέλεσης που μπορεί να εκκινηθεί για να εκτελέσει τον βρόχο πράκτορα και να διαχειριστεί τη διατήρηση ενός νήματος Codex (συνομιλία).

Για να είναι χρήσιμος, ο μηχανισμός Codex πρέπει να είναι προσβάσιμος στους πελάτες. Εκεί είναι που μπαίνει στο παιχνίδι το App Server.

Διάγραμμα με τίτλο «Ροή διαδικασίας App server». Ένας πελάτης στέλνει μηνύματα JSON-RPC σε έναν αναγνώστη stdio, που δρομολογεί αιτήματα σε έναν επεξεργαστή μηνυμάτων Codex. Ο επεξεργαστής αλληλεπιδρά με έναν διαχειριστή νημάτων και το νήμα πυρήνα μέσω νημάτων αναζήτησης, δεικτών χειρισμού νημάτων, υποβληθέντων αιτημάτων και συμβάντων/ενημερώσεων, και στη συνέχεια επιστρέφει αποκρίσεις στον πελάτη.

Το App Server είναι τόσο το πρωτόκολλο JSON-RPC μεταξύ του πελάτη και του διακομιστή όσο και μια μακρόχρονη διεργασία που φιλοξενεί τα νήματα του πυρήνα του Codex. Όπως μπορούμε να δούμε από το παραπάνω διάγραμμα, μια διεργασία App Server έχει τέσσερα κύρια στοιχεία: τον αναγνώστη stdio, τον επεξεργαστή μηνυμάτων Codex, τον διαχειριστή νημάτων και τα νήματα του πυρήνα. Ο διαχειριστής νημάτων εκκινεί μία περίοδο λειτουργίας πυρήνα για κάθε νήμα και στη συνέχεια ο επεξεργαστής μηνυμάτων Codex επικοινωνεί απευθείας με κάθε περίοδο λειτουργίας πυρήνα για να υποβάλει αιτήματα πελατών και να λαμβάνει ενημερώσεις.

Ένα αίτημα πελάτη μπορεί να οδηγήσει σε πολλές ενημερώσεις συμβάντων, και αυτά τα λεπτομερή συμβάντα είναι αυτά που μας επιτρέπουν να δημιουργήσουμε ένα πλούσιο περιβάλλον χρήστη (UI) πάνω από τον App Server. Επιπλέον, ο αναγνώστης stdio και ο επεξεργαστής μηνυμάτων Codex λειτουργούν ως το επίπεδο μετάφρασης μεταξύ του πελάτη και των νημάτων του πυρήνα του Codex. Μεταφράζουν αιτήματα JSON-RPC πελάτη σε λειτουργίες του πυρήνα Codex, παρακολουθούν την εσωτερική ροή συμβάντων του πυρήνα Codex και στη συνέχεια μετατρέπουν αυτά τα χαμηλού επιπέδου συμβάντα σε ένα μικρό σύνολο σταθερών ειδοποιήσεων JSON-RPC που είναι έτοιμες για το περιβάλλον χρήστη.

Το πρωτόκολλο JSON-RPC μεταξύ του πελάτη και του App Server είναι πλήρως αμφίδρομο. Ένα τυπικό νήμα περιλαμβάνει ένα αίτημα πελάτη και πολλές ειδοποιήσεις από τον διακομιστή. Επιπλέον, ο διακομιστής μπορεί να ξεκινήσει αιτήματα όταν ο πράκτορας χρειάζεται εισαγωγή, όπως μια έγκριση, και στη συνέχεια να θέσει σε παύση την αλληλεπίδραση μέχρι να απαντήσει ο πελάτης.

Τα πρωταρχικά στοιχεία της συνομιλίας

Στη συνέχεια, θα παρουσιάσουμε διεξοδικά τα πρωταρχικά στοιχεία της συνομιλίας, τα δομικά στοιχεία του πρωτοκόλλου App Server. Ο σχεδιασμός ενός API για έναν βρόχο πράκτορα είναι περίπλοκος, επειδή η αλληλεπίδραση χρήστη/πράκτορα δεν είναι μια απλή διαδικασία αιτήματος/απόκρισης. Ένα αίτημα χρήστη μπορεί να εξελιχθεί σε μια δομημένη ακολουθία ενεργειών που ο πελάτης πρέπει να αναπαριστά πιστά: την εισαγωγή του χρήστη, την σταδιακή πρόοδο του πράκτορα, τα τεχνουργήματα που παράγονται στην πορεία (π.χ., διαφορές). Για να διευκολύνουμε την ενσωμάτωση αυτής της ροής αλληλεπίδρασης και να την κάνουμε ανθεκτική σε όλα τα περιβάλλοντα χρήστη, καταλήξαμε σε τρία πρωταρχικά στοιχεία πυρήνα με σαφή όρια και κύκλους ζωής:

1. Στοιχείο: Ένα στοιχείο είναι η ατομική μονάδα εισόδου/αποτελέσματος στο Codex. Τα στοιχεία είναι τυποποιημένα (π.χ., μήνυμα χρήστη, μήνυμα πράκτορα, εκτέλεση εργαλείου, αίτημα έγκρισης, διαφορά) και το καθένα έχει έναν σαφή κύκλο ζωής:

  • item/started όταν το στοιχείο ξεκινά
  • προαιρετικά συμβάντα item/*/delta ως ροές περιεχομένου (για τύπους στοιχείων ροής)
  • item/completed όταν το στοιχείο ολοκληρώνεται με το τελικό του φορτίο

Αυτός ο κύκλος ζωής επιτρέπει στους πελάτες να ξεκινήσουν την απόδοση αμέσως στο started, να μεταδίδουν σταδιακές ενημερώσεις στο delta και να ολοκληρώνουν στο completed.

2. Αλληλεπίδραση: Μια αλληλεπίδραση είναι μία μονάδα εργασίας του πράκτορα που ξεκινά από την εισαγωγή του χρήστη. Αρχίζει όταν ο πελάτης εισάγει περιεχόμενο (για παράδειγμα, «εκτέλεσε δοκιμές και συνόψισε τα σφάλματα») και τελειώνει όταν ο πράκτορας ολοκληρώνει την παραγωγή αποτελεσμάτων για αυτήν την εισαγωγή. Μια αλληλεπίδραση περιλαμβάνει μια ακολουθία στοιχείων που αντιπροσωπεύουν τα ενδιάμεσα βήματα και τα αποτελέσματα που παράγονται κατά τη διάρκεια της διαδικασίας.

3. Νήμα: Ένα νήμα είναι το ανθεκτικό κοντέινερ για μια συνεχιζόμενη περίοδο λειτουργίας του Codex μεταξύ ενός χρήστη και ενός πράκτορα. Περιέχει πολλαπλές αλληλεπιδράσεις. Τα νήματα μπορούν να δημιουργηθούν, να συνεχιστούν, να διακλαδωθούν και να αρχειοθετηθούν. Το ιστορικό του νήματος διατηρείται, ώστε οι πελάτες να μπορούν να επανασυνδεθούν και να αποδώσουν ένα συνεπές χρονολόγιο.

Τώρα, θα εξετάσουμε μια απλοποιημένη συνομιλία μεταξύ ενός πελάτη και ενός πράκτορα, όπου η συνομιλία αναπαρίσταται από πρωταρχικά στοιχεία:

Διάγραμμα με την ένδειξη «Ροή μηνυμάτων πρωτοκόλλου πελάτη-διακομιστή: Χειραψία αρχικοποίησης». Ένας πελάτης στέλνει ένα αίτημα αρχικοποίησης με clientInfo στον διακομιστή. Ο διακομιστής απαντά με ένα συμβάν αποτελέσματος που περιέχει τη συμβολοσειρά userAgent «my_client/1.0».

Στην αρχή της συνομιλίας, ο πελάτης και ο διακομιστής πρέπει να πραγματοποιήσουν τη χειραψία initialize. Ο πελάτης πρέπει να στείλει ένα μόνο αίτημα initialize πριν από οποιαδήποτε άλλη μέθοδο και ο διακομιστής το επιβεβαιώνει με μια απάντηση. Αυτό δίνει στον διακομιστή την ευκαιρία να προβάλλει τις δυνατότητές του και επιτρέπει και στις δύο πλευρές να συμφωνήσουν στην έκδοση του πρωτοκόλλου, στις σημαίες χαρακτηριστικών και στις προεπιλογές πριν ξεκινήσει η πραγματική εργασία. Ακολουθεί ένα παράδειγμα φορτίου από την επέκταση VS Code της OpenAI:

JSON

1
{
2
"method": "initialize",
3
"id": 0,
4
"params": {
5
"clientInfo": {
6
"name": "codex_vscode",
7
"title": "Codex VS Code Extension",
8
"version": "0.1.0"
9
}
10
}
11
}

Αυτό επιστρέφει ο διακομιστής:

JSON

1
{
2
"id": 0,
3
"result": {
4
"userAgent": "codex_vscode/0.94.0-alpha.7 (Mac OS 26.2.0; arm64) vscode/2.4.22 (codex_vscode; 0.1.0)"
5
}
6
}
Διάγραμμα με τίτλο «Ροή μηνυμάτων πρωτοκόλλου πελάτη-διακομιστή: Κύκλος ζωής νημάτων και αλληλεπιδράσεων». Ο πελάτης στέλνει αιτήματα thread/start και turn/start στον διακομιστή. Ο διακομιστής εκπέμπει συμβάντα —thread/started, turn/started, item/started και item/completed— που δείχνουν μια αλληλεπίδραση όπου το μήνυμα του χρήστη είναι «εκτελέστε δοκιμές και συνοψίστε τις αποτυχίες».

Όταν ένας πελάτης κάνει ένα νέο αίτημα, θα δημιουργήσει πρώτα ένα νήμα και μετά μια αλληλεπίδραση. Ο διακομιστής θα στείλει πίσω ειδοποιήσεις για την πρόοδο (thread/started και turn/started). Θα στείλει επίσης πίσω τις εισαγωγές που καταγράφει ως στοιχεία, όπως το μήνυμα του χρήστη εδώ.

Διάγραμμα με τίτλο «Ροή μηνυμάτων πρωτοκόλλου πελάτη-διακομιστή: Εκτέλεση εργαλείου με προαιρετική έγκριση». Κατά τη διάρκεια μιας κλήσης εργαλείου, ο διακομιστής εκπέμπει item/started και στη συνέχεια item/commandExecution/requestApproval με αιτιολογία («run tests»). Ο πελάτης επιστρέφει ένα συμβάν έγκρισης (allow/deny). Στη συνέχεια, ο διακομιστής εκπέμπει item/completed που δείχνει την εκτέλεση της εντολής («pnpm test»).

Οι κλήσεις εργαλείων αποστέλλονται επίσης πίσω στον πελάτη ως στοιχεία. Επιπλέον, ο διακομιστής μπορεί να ζητήσει έγκριση από τον πελάτη πριν μπορέσει να εκτελέσει μια ενέργεια, στέλνοντας ένα αίτημα διακομιστή. Η έγκριση θα θέσει σε παύση την αλληλεπίδραση μέχρι να απαντήσει ο πελάτης με «allow» (να επιτραπεί) ή «deny» (να μην επιτραπεί). Έτσι εμφανίζεται η ροή έγκρισης στην επέκταση του VS Code:

Προτροπή άδειας σε περιβάλλον με σκοτεινό θέμα που ρωτά: «Θέλετε να μου επιτρέψετε να εκτελέσω το pnpm test για αυτόν τον χώρο εργασίας;» Παραθέτει επιλογές: 1) Ναι, 2) Ναι και να μην ξαναρωτήσετε για εντολές που ξεκινούν με pnpm test, και 3) Όχι, με ένα κουμπί Υποβολή στο κάτω μέρος.
Διάγραμμα με τίτλο «Ροή μηνυμάτων πρωτοκόλλου πελάτη-διακομιστή: Ροή μηνυμάτων πράκτορα ροών». Ο διακομιστής μεταδίδει ένα μήνυμα βοηθού σε μέρη: item/started, δύο συμβάντα agentMessage/delta («ran 3 tests.», «all passed»), έπειτα item/completed. Η αλληλεπίδραση τελειώνει με turn/completed.

Στο τέλος, ο διακομιστής στέλνει ένα μήνυμα πράκτορα και στη συνέχεια ολοκληρώνει την αλληλεπίδραση με turn/completed. Τα συμβάντα delta του μηνύματος του πράκτορα μεταδίδουν ξανά τμήματα του μηνύματος μέχρι να ολοκληρωθεί το μήνυμα με item/completed.

Τα μηνύματα στο διάγραμμα είναι απλοποιημένα για να είναι ευανάγνωστα. Αν θέλετε να δείτε το JSON για να έχετε ολοκληρωμένη εικόνα, μπορείτε να εκτελέσετε τον test client από το αποθετήριο του Codex CLI:

Bash

1
codex debug app-server send-message-v2 "run tests and summarize failures"

Ενσωμάτωση με πελάτες

Τώρα, ας εξετάσουμε πώς ενσωματώνουν το Codex διαφορετικές επιφάνειες πελάτη μέσω του App Server. Θα καλύψουμε τρία μοτίβα: τοπικές εφαρμογές και IDE, το Codex web runtime και το TUI.

Διάγραμμα με τίτλο «Πελάτες Codex ενσωματωμένοι με το μηχανισμό Codex μέσω διακομιστή εφαρμογών». Οι πελάτες πρώτου μέρους (Codex Desktop App, TUI/CLI, Web Runtime) και οι ενσωματώσεις τρίτων (JetBrains IDE, VS Code, Xcode) επικοινωνούν με τον μηχανισμό Codex μέσω κλήσεων JSON-RPC.

Και στα τρία εξ αυτών, η μεταφορά είναι JSON-RPC μέσω stdio (JSONL). Το JSON-RPC καθιστά εύκολη τη δημιουργία συνδέσεων πελάτη στη γλώσσα της επιλογής σας. Οι επιφάνειες του Codex και οι ενσωματώσεις συνεργατών έχουν υλοποιήσει πελάτες App Server σε γλώσσες όπως Go, Python, TypeScript, Swift και Kotlin. Για το TypeScript, μπορείτε να δημιουργήσετε ορισμούς απευθείας από το πρωτόκολλο Rust εκτελώντας:

Bash

1
codex app-server generate-ts

Για άλλες γλώσσες, μπορείτε να δημιουργήσετε ένα πακέτο JSON Schema και να το τροφοδοτήσετε στον προτιμώμενο δημιουργό κώδικα εκτελώντας:

Bash

1
codex app-server generate-json-schema
Τοπικές εφαρμογές και IDE
Στιγμιότυπο οθόνης του VS Code με την επέκταση Codex σε λειτουργία. Ένα αρχείο δοκιμών Rust είναι ανοιχτό και, από κάτω, το πάνελ Codex περιγράφει την εκτέλεση μόνο των εντολών fmt και cargo test -p codex-app-server, αναφέροντας ότι η μορφοποίηση και οι δοκιμές βρίσκονται σε εξέλιξη, ενώ αναμένει ένα τελικό αποτέλεσμα επιτυχίας/αποτυχίας.

Οι τοπικοί πελάτες συνήθως ομαδοποιούν ή ανακτούν ένα δυαδικό αρχείο App Server ειδικό για την πλατφόρμα, το εκκινούν ως θυγατρική διεργασία μεγάλης διάρκειας και διατηρούν ανοιχτό ένα αμφίδρομο κανάλι stdio για JSON-RPC. Στην επέκταση VS Code και την εφαρμογή Desktop, για παράδειγμα, το τεχνούργημα που διατέθηκε περιλαμβάνει το δυαδικό αρχείο Codex που είναι ειδικό για την πλατφόρμα και είναι συνδεδεμένο σε μια δοκιμασμένη έκδοση, ώστε ο πελάτης να εκτελεί πάντα ακριβώς τα δεδομένα που επικυρώσαμε.

Δεν μπορούν όλες οι ενσωματώσεις να διαθέτουν συχνά ενημερώσεις πελάτη. Ορισμένοι συνεργάτες, όπως το Xcode, αποσυνδέουν τους κύκλους κυκλοφορίας διατηρώντας τον client σταθερό και επιτρέποντας να δείχνει σε ένα νεότερο δυαδικό αρχείο App Server όταν χρειάζεται. Με αυτόν τον τρόπο μπορούν να υιοθετούν βελτιώσεις από την πλευρά του διακομιστή (π.χ., καλύτερη αυτόματη συμπίεση στον πυρήνα του Codex ή νέα υποστηριζόμενα κλειδιά διαμόρφωσης) και να κυκλοφορούν διορθώσεις σφαλμάτων χωρίς να περιμένουν μια έκδοση πελάτη. Η επιφάνεια JSON-RPC του App Server έχει σχεδιαστεί για να είναι συμβατή με προηγούμενες εκδόσεις, ώστε οι παλαιότεροι πελάτες να μπορούν να επικοινωνούν με νεότερους διακομιστές με ασφάλεια.

Codex Web
Στιγμιότυπο οθόνης μιας διεπαφής web του Codex που δείχνει μια ενημέρωση με τίτλο «Update login success message». Το αριστερό πάνελ συνοψίζει αλλαγές, δοκιμές και τροποποιημένα αρχεία, ενώ το δεξί πάνελ εμφανίζει μια διαφορά κώδικα για το login.rs με ενημερωμένη διατύπωση του μηνύματος επιτυχούς σύνδεσης.

Το Codex Web χρησιμοποιεί τον μηχανισμό Codex, αλλά τον εκτελεί σε περιβάλλον κοντέινερ. Ένας εργαζόμενος προετοιμάζει ένα κοντέινερ με τον χώρο εργασίας που έχει ελεγχθεί, εκκινεί το δυαδικό αρχείο του App Server μέσα σε αυτό και διατηρεί ένα μακράς διάρκειας κανάλι JSON-RPC μέσω stdio2. Η εφαρμογή web (που εκτελείται στην καρτέλα του προγράμματος περιήγησης του χρήστη) επικοινωνεί με το backend του Codex μέσω HTTP και SSE, που μεταδίδει σε ροή συμβάντα εργασιών που παράγονται από τον εργαζόμενο. Αυτό διατηρεί το περιβάλλον χρήστη (UI) στην πλευρά του προγράμματος περιήγησης ελαφρύ, ενώ μας προσφέρει έναν συνεπή χρόνο εκτέλεσης τόσο σε επιτραπέζιους υπολογιστές όσο και στο web.

Επειδή οι περίοδοι λειτουργίας ιστού είναι εφήμερες (οι καρτέλες κλείνουν, τα δίκτυα αποσυνδέονται), η εφαρμογή web δεν μπορεί να είναι η πηγή αλήθειας για εργασίες μεγάλης διάρκειας. Η διατήρηση της κατάστασης και της προόδου στον διακομιστή σημαίνει ότι η εργασία συνεχίζεται ακόμη και αν η καρτέλα εξαφανιστεί. Το πρωτόκολλο ροής και οι αποθηκευμένες περίοδοι λειτουργίας νημάτων διευκολύνουν μια νέα περίοδο λειτουργίας να επανασυνδεθεί, να συνεχίσει από εκεί που σταμάτησε και να συγχρονιστεί χωρίς να χρειάζεται να αναδημιουργήσει την κατάσταση στον πελάτη.

TUI/Codex CLI
Στιγμιότυπο οθόνης ενός τερματικού που εκτελεί το Codex CLI. Εμφανίζει το banner του OpenAI Codex με το μοντέλο GPT-5.2-Codex μεσαίο, μια εντολή χρήστη «εξηγήστε μου το app server», και μια κατάσταση «Working». Παρακάτω, εμφανίζεται μια πρόταση: «γράψτε δοκιμές για @filename», με επιλογές για συντομεύσεις.

Ιστορικά, το TUI ήταν ένας «native» πελάτης που εκτελούνταν στην ίδια διεργασία με τον βρόχο του πράκτορα και επικοινωνούσε απευθείας με τους βασικούς τύπους της Rust αντί για το πρωτόκολλο του app-server. Αυτό έκανε την πρώιμη επανάληψη γρήγορη, αλλά έκανε επίσης το TUI μια επιφάνεια ειδικής περίπτωσης.

Τώρα που υπάρχει το App Server, σκοπεύουμε να αναδιαμορφώσουμε το TUI(ανοίγει σε νέο παράθυρο) ώστε να το χρησιμοποιεί, έτσι ώστε να συμπεριφέρεται όπως κάθε άλλος πελάτης: να εκκινεί μια θυγατρική διεργασία App Server, να επικοινωνεί με JSON-RPC μέσω stdio και να αποδίδει τα ίδια συμβάντα ροής και εγκρίσεις. Έτσι ξεκλειδώνονται ροές εργασίας όπου το TUI μπορεί να συνδεθεί σε έναν διακομιστή Codex που εκτελείται σε απομακρυσμένο μηχάνημα, διατηρώντας τον πράκτορα κοντά στους υπολογιστικούς πόρους και συνεχίζοντας την εργασία ακόμη κι αν ο φορητός υπολογιστής τεθεί σε αναστολή ή αποσυνδεθεί, ενώ εξακολουθεί να παρέχει ζωντανές ενημερώσεις και ελέγχους τοπικά.

Η επιλογή του σωστού πρωτοκόλλου

Το Codex App Server θα είναι η πρώτης τάξεως μέθοδος ενσωμάτωσης που θα διατηρούμε στο εξής, αλλά υπάρχουν και άλλες μέθοδοι με πιο περιορισμένη λειτουργικότητα. Από προεπιλογή, θα προτείναμε οι πελάτες να χρησιμοποιούν το Codex App Server για την ενσωμάτωση με το Codex, αλλά αξίζει να εξετάσουν διαφορετικές μεθόδους ενσωμάτωσης και να κατανοήσουν τα πλεονεκτήματα και τα μειονεκτήματά τους. Παρακάτω παρατίθενται οι πιο συνηθισμένοι τρόποι για να διαχειρίζεστε το Codex και οι περιπτώσεις όπου ο καθένας μπορεί να είναι η κατάλληλη επιλογή.

Πρωτόκολλα JSON-RPC

Codex ως διακομιστής MCP

Εκτελέστε codex mcp-server(ανοίγει σε νέο παράθυρο) και συνδεθείτε από οποιονδήποτε πελάτη MCP που υποστηρίζει διακομιστές stdio (π.χ. OpenAI Agents SDK(ανοίγει σε νέο παράθυρο)). Αυτό είναι μια καλή επιλογή αν έχετε ήδη μια ροή εργασιών βασισμένη σε MCP και θέλετε να χρησιμοποιήσετε το Codex ως εργαλείο με δυνατότητα κλήσης. Το μειονέκτημα είναι ότι λαμβάνετε μόνο ό,τι εκθέτει το MCP, επομένως οι αλληλεπιδράσεις ειδικά για το Codex οι οποίες βασίζονται σε πλουσιότερη σημασιολογία περιόδου λειτουργίας (π.χ., ενημερώσεις διαφορών) ενδέχεται να μην αντιστοιχίζονται καθαρά μέσω των τελικών σημείων MCP.

Πρωτόκολλα μηχανισμού πρακτόρων μεταξύ παρόχων

Ορισμένα οικοσυστήματα προσφέρουν μια φορητή διεπαφή που μπορεί να στοχεύει πολλούς παρόχους μοντέλων και χρόνους εκτέλεσης. Αυτό μπορεί να είναι μια καλή επιλογή, αν εσείς θέλετε μία αφαίρεση που να συντονίζει πολλούς πράκτορες. Ο συμβιβασμός είναι ότι αυτά τα πρωτόκολλα συχνά συγκλίνουν στο κοινό υποσύνολο δυνατοτήτων, γεγονός που μπορεί να δυσχεράνει την αναπαράσταση για τις πιο πλούσιες αλληλεπιδράσεις, ειδικά όταν έχουν σημασία τα σημασιολογικά χαρακτηριστικά εργαλείων και περιόδων λειτουργίας που είναι ειδικά για τον πάροχο. Αυτός ο χώρος εξελίσσεται γρήγορα, και αναμένουμε ότι θα προκύψουν πιο κοινά πρότυπα καθώς ανακαλύπτουμε τα καλύτερα πρωταρχικά στοιχεία για να αναπαραστήσουμε ροές εργασίας πραγματικών πρακτόρων (οι δεξιότητες(ανοίγει σε νέο παράθυρο) είναι ένα καλό παράδειγμα αυτού).

Codex App Server

Επιλέξτε το App Server όταν θέλετε ο πλήρης μηχανισμός του Codex να εκτεθεί ως μια σταθερή ροή συμβάντων που να είναι φιλική για το περιβάλλον χρήστη. Αποκτάτε τόσο την πλήρη λειτουργικότητα του βρόχου του πράκτορα όσο και άλλες υποστηρικτικές λειτουργίες, όπως το Sign in with ChatGPT, την ανακάλυψη μοντέλου και τη διαχείριση ρυθμίσεων. Το κύριο κόστος είναι η εργασία ενσωμάτωσης, καθώς εσείς πρέπει να δημιουργήσετε τη σύνδεση JSON-RPC στην πλευρά του πελάτη στη γλώσσα σας. Στην πράξη, ωστόσο, το Codex μπορεί να αναλάβει μεγάλο μέρος της βαριάς δουλειάς, εάν του παρέχετε το σχήμα και την τεκμηρίωση JSON. Πολλές ομάδες με τις οποίες συνεργαστήκαμε κατάφεραν να υλοποιήσουν γρήγορα μια λειτουργική ενσωμάτωση χρησιμοποιώντας το Codex.

Άλλοι τρόποι για να ενσωματώσετε το Codex

Μια ελαφριά λειτουργία CLI με δυνατότητα για δέσμες ενεργειών καθώς και εφάπαξ εργασίες και εκτελέσεις CI. Είναι κατάλληλο για αυτοματοποίηση και διαδικασίες όπου επιθυμείτε μία εντολή να εκτελείται μέχρι την ολοκλήρωση χωρίς αλληλεπίδραση, να μεταδίδει δομημένα αποτελέσματα για αρχεία καταγραφής και να τερματίζει με σαφές σήμα επιτυχίας ή αποτυχίας.

Μια βιβλιοθήκη TypeScript για τον προγραμματικό έλεγχο τοπικών πρακτόρων Codex από τη δική σας εφαρμογή. Είναι καλύτερο όταν θέλετε μια εγγενή διεπαφή βιβλιοθήκης για εργαλεία και ροές εργασίας από την πλευρά του διακομιστή, χωρίς να δημιουργήσετε έναν ξεχωριστό πελάτη JSON-RPC. Επειδή κυκλοφόρησε νωρίτερα από το App Server, προς το παρόν υποστηρίζει λιγότερες γλώσσες και μικρότερη επιφάνεια. Εάν υπάρξει ενδιαφέρον από προγραμματιστές, ενδέχεται να προσθέσουμε επιπλέον SDK που να αξιοποιούν το πρωτόκολλο App Server, ώστε οι ομάδες να μπορούν να καλύψουν μεγαλύτερο μέρος της επιφάνειας του μηχανισμού χωρίς να γράφουν συνδέσεις JSON-RPC.

Πώς θα το προχωρήσουμε

Σε αυτή την ανάρτηση, μοιραστήκαμε πώς προσεγγίζουμε τον σχεδιασμό ενός νέου προτύπου για την αλληλεπίδραση με πράκτορες και πώς να μετατρέψουμε τον μηχανισμό Codex σε ένα σταθερό, φιλικό προς τον πελάτη πρωτόκολλο. Καλύψαμε πώς το App Server εκθέτει τον πυρήνα του Codex, επιτρέπει στους πελάτες να καθοδηγούν τον πλήρη βρόχο του πράκτορα και υποστηρίζει ένα ευρύ φάσμα επιφανειών, συμπεριλαμβανομένων του TUI, των τοπικών ενσωματώσεων IDE και του web runtime.

Αν αυτό σας έδωσε ιδέες για την ενσωμάτωση του Codex στις δικές σας ροές εργασίας, αξίζει να δοκιμάσετε το App Server. Όλος ο πηγαίος κώδικας βρίσκεται στο αποθετήριο(ανοίγει σε νέο παράθυρο) ανοιχτού κώδικα Codex CLI. Μη διστάσετε να μοιραστείτε μαζί μας σχόλια και αιτήματα για λειτουργίες. Ανυπομονούμε να επικοινωνήσετε μαζί μας και να συνεχίσουμε να κάνουμε τους πράκτορες πιο προσβάσιμους σε όλους.

Συντάκτης

Celia Chen

Ευχαριστίες

Ιδιαίτερες ευχαριστίες στους Michael Bolin, Owen Lin, Eric Traut και Rasmus Rygaard, οι οποίοι συνέβαλαν σε αυτήν την ανάρτηση, και σε ολόκληρη την ομάδα του Codex που εργάστηκε στο App Server.

Υποσημειώσεις

  1. 1

    Χρησιμοποιούμε μια παραλλαγή «JSON‑RPC lite»: διατηρεί τη μορφή αιτήματος/απόκρισης/ειδοποίησης, αλλά παραλείπει την κεφαλίδα "jsonrpc": "2.0" και διαμορφώνεται ως JSONL μέσω stdio αντί για αυστηρό JSON‑RPC 2.0.

  2. 2

     Το «stdio» αναφέρεται στο stdin/stdout του app-server μέσα στο κοντέινερ. Σε φιλοξενούμενες εγκαταστάσεις, αυτές οι ροές συχνά διοχετεύονται μέσω μόνιμης σύνδεσης δικτύου (π.χ. τύπου WebSocket) προς το container runtime —ώστε να συμπεριφέρεται σαν το stdio ακόμη κι αν δεν είναι κυριολεκτικά ένας τοπικός δίαυλος.