Αν θέλεις να δημιουργήσεις το πρώτο σου AI agent σε Python χωρίς να αναλωθείς σε περίπλοκη θεωρία από την πρώτη στιγμή, βρίσκεσαι στο κατάλληλο μέρος. Η διαδικασία είναι πιο προσιτή απ όσο φαντάζεσαι, ειδικά αν κατανοήσεις πώς τα Large Language Models λειτουργούν ως η “μηχανή” πίσω από τη λήψη αποφάσεων.
Η βασική ιδέα είναι απλή. Δίνεις στον agent ένα μοντέλο, μερικά εργαλεία που μπορεί να καλέσει και έναν καθαρό τρόπο εκτέλεσης σε Python. Αν το στήσεις σωστά από την αρχή, δεν έχεις μόνο ένα εντυπωσιακό demo. Έχεις ένα εργαλείο που συνεχίζει να λειτουργεί αποτελεσματικά ακόμα και όταν το script σου παρουσιάζει σφάλματα ή διακόπτεται απρόσμενα.
Key Takeaways
- Σωστό Setup: Για την επιτυχημένη δημιουργία AI agent, η βάση είναι το καθαρό περιβάλλον (Python 3.10+, uv, JDK) και η σωστή διαχείριση των environment variables για το API key του μοντέλου σου.
- Τα 3 Δομικά Στοιχεία: Ένας αποδοτικός agent βασίζεται σε τρία θεμέλια: τα καλογραμμένα εργαλεία (tools με σαφή docstrings), τον σωστό ορισμό του agent (όνομα, μοντέλο, system prompt) και την εκτέλεση που διαχειρίζεται το state.
- Debug και Ορατότητα: Η χρήση ενός dashboard για την παρακολούθηση των executions επιτρέπει την άμεση κατανόηση του
Στήσε πρώτα το περιβάλλον σου σωστά
Αν το setup είναι μισό, ο agent θα σε παιδέψει από το πρώτο λεπτό. Οπότε ξεκίνα από τα βασικά και κράτα το απλό.
Θα χρειαστείς Python 3.10 ή νεότερη, ένα JDK και έναν τρόπο να διαχειρίζεσαι το project σου. Στο βίντεο χρησιμοποιείται το Agentspan, ένα open-source framework, και για package manager προτείνεται το uv, γιατί κάνει τη διαδικασία γρήγορη και καθαρή.
Για να έχεις μια καθαρή εικόνα, αυτά είναι τα βασικά:
| Εργαλείο | Τι χρειάζεται να ξέρεις |
|---|---|
| Python | Θέλεις έκδοση 3.10+ |
| JDK | Προτείνεται το LTS 25, αλλά και το 21 παίζει κανονικά |
| uv | Σου φτιάχνει project και dependencies χωρίς φασαρία |
| VS Code | Αρκεί ένας άδειος φάκελος και το ενσωματωμένο terminal |
Αν δεν τα έχεις ήδη, μπορείς να κατεβάσεις την τελευταία έκδοση της Python, να βάλεις το Temurin JDK και να ακολουθήσεις τον οδηγό εγκατάστασης του uv. Για όλες τις εντολές του tutorial μαζεμένες, βολεύει πολύ ο resource guide του βίντεο.

### Προετοιμασία για το πρώτο AI agent σε Python στο VS Code
Ανοίγεις έναν άδειο φάκελο στο VS Code και μετά το terminal από το View > Terminal. Από εκεί ξεκινάνε όλα.
Η λογική είναι:
- τρέχεις
uv initγια να στηθεί το Python project - προσθέτεις το Agentspan στο project
- ελέγχεις αν όλα μπήκαν σωστά με το diagnostic command
doctor
Στο tutorial γίνεται με uv, οπότε το flow είναι πολύ άμεσο. Αν έχεις δικό σου τρόπο για virtual environments και dependencies, μπορείς να τον κρατήσεις. Απλώς εδώ όλη η επίδειξη πατάει πάνω στο uv, άρα βολεύει να ακολουθήσεις την ίδια διαδρομή.
Για να επικοινωνήσει ο κώδικάς σου με το μοντέλο, θα χρειαστεί να περάσεις το API key μέσω των environment variables στο σύστημά σου. Αν θες ένα πιο “AI-first” περιβάλλον για να γράφεις κώδικα με βοήθεια μέσα στον editor, δες και αυτόν τον οδηγό χρήσης του Cursor AI. Δεν είναι απαραίτητο για το tutorial, αλλά βοηθά αν μαθαίνεις τώρα.
Πώς καταλαβαίνεις ότι το setup είναι έτοιμο
Το diagnostic check είναι το πρώτο φίλτρο. Αν όλα πάνε καλά, βλέπεις πράσινο. Αν όχι, συνήθως φταίνε δύο πράγματα.
Το πρώτο είναι ότι δεν έχεις συνδέσει σωστά provider για το μοντέλο AI. Το δεύτερο είναι πρόβλημα με certificate verification, κάτι που εμφανίζεται αρκετά συχνά σε Mac.
Εδώ αξίζει να σταθείς ένα λεπτό. Μην πας κατευθείαν στον agent αν το περιβάλλον σου δεν είναι καθαρό. Θα κυνηγάς λάθη που δεν είναι καν δικά σου.
Διάλεξε πώς θα μιλάει ο agent με το μοντέλο
Ο agent χρειάζεται μια υποδομή για να επεξεργάζεται τα prompts του. Αυτό μπορεί να γίνει τοπικά ή μέσω κάποιου cloud provider. Η επιλογή του κατάλληλου LLM είναι το πρώτο βήμα για κάθε εφαρμογή στον χώρο του Machine Learning.
Στο tutorial αναφερόμαστε σε τοπικό setup με Ollama, αλλά μπορείς επίσης να επιλέξεις το OpenAI ή το Anthropic. Αν θέλεις να χρησιμοποιήσεις ένα τοπικό μοντέλο για τις δοκιμές σου, αυτό το στήσιμο τοπικού μοντέλου με Ollama σου δίνει μια εξαιρετική βάση.
OpenAI, Anthropic, Google Gemini ή local;
Αν ξεκινάς τώρα, σκέψου το έτσι:
- local μοντέλο (μέσω Ollama ή Hugging Face) για πειραματισμό χωρίς να εξαρτάσαι από εξωτερικό API.
- OpenAI ή Anthropic όταν χρειάζεσαι άμεση σύνδεση με ένα ισχυρό, εμπορικό μοντέλο.
- Google Gemini αν προτιμάς την ευελιξία και τις δυνατότητες που προσφέρει το οικοσύστημα της Google.
- ένα ελαφρύ μοντέλο όταν η ταχύτητα απόκρισης είναι πιο σημαντική από τη σύνθετη συλλογιστική.
Για το OpenAI, παίρνεις το κλειδί από τη σελίδα με τα OpenAI API keys. Αντίστοιχα, για το Claude, η πρόσβαση γίνεται από την Anthropic Console. Στη συνέχεια, ορίζεις το κατάλληλο environment variable στο terminal σου.
Το σημαντικό εδώ δεν είναι το brand, αλλά το να έχεις μια σταθερή σύνδεση με το LLM που επέλεξες και το σωστό model string στη μορφή provider/model-name.
Τα δύο λάθη που βλέπεις πιο συχνά
Το πρώτο λάθος είναι απλό. Είτε δεν έχεις API key, είτε δεν το έχεις περάσει σωστά στο περιβάλλον σου.
Το δεύτερο είναι πιο ύπουλο. Το certificate verification failure, ειδικά σε Mac, μπορεί να σε οδηγήσει στο να πιστέψεις ότι το framework φταίει, ενώ το πρόβλημα εντοπίζεται αλλού. Σε αυτή την περίπτωση, ακολουθείς την εντολή διόρθωσης που αναφέρεται στον resource guide και συνήθως ξεμπερδεύεις γρήγορα.
Δημιουργώντας έναν AI agent σε Python: Τα 3 δομικά στοιχεία
Εδώ είναι όλο το ζουμί. Για να φτιάξεις έναν αποδοτικό AI agent σε Python, το σύστημα βασίζεται σε τρία θεμελιώδη κομμάτια: το tool, το agent definition και τον κώδικα εκτέλεσης.
Αν σπάσεις τη διαδικασία έτσι, το όλο εγχείρημα παύει να μοιάζει με ακατανόητο μαύρο κουτί.
Πρώτα γράφεις τα tools
Στο παράδειγμά μας, το πρώτο εργαλείο είναι μια απλή συνάρτηση για τον καιρό, όπως η get_weather. Ο agent μπορεί να την καλέσει μόνο επειδή την έχουμε ορίσει ως tool.
Αυτό είναι το σημείο όπου οι αρχάριοι συχνά μπερδεύονται. Ο agent δεν μαντεύει τις συναρτήσεις σου. Βλέπει μόνο ό,τι του δώσεις πρόσβαση.
Για να λειτουργήσει σωστά το function calling, πρέπει να προσέξεις το όνομα της συνάρτησης, τα type hints και το docstring.
Αυτά δεν είναι διακοσμητικά. Είναι απαραίτητα σήματα προς το μοντέλο. Αν αφαιρέσεις το docstring, ο agent μπορεί να μη χρησιμοποιήσει ποτέ το εργαλείο.
Αν και χρησιμοποιούμε το Agentspan, αξίζει να ξέρεις ότι η λογική αυτή για τα tools παραμένει κοινή και σε frameworks όπως το LangChain, το CrewAI ή το Autogen.
Στο demo, το αποτέλεσμα είναι hardcoded για να κατανοήσεις το pattern. Αφού μάθεις τη ροή, μπορείς να συνδέσεις ένα πραγματικό API.
Μετά ορίζεις τον agent
Ο agent χρειάζεται τρία υποχρεωτικά πεδία για να λειτουργήσει:
| Στοιχείο | Τι κάνει |
|---|---|
| Όνομα | Δίνει ταυτότητα στο run |
| Μοντέλο | Ορίζει ποιο AI model θα χρησιμοποιηθεί |
| Tools | Λίστα με τα εργαλεία που μπορεί να καλέσει |
Πέρα από αυτά, μπορείς να προσθέσεις ένα system prompt. Το system prompt είναι το σημείο όπου ορίζεις τους κανόνες συμπεριφοράς, για παράδειγμα να απαντά μόνο όταν καλεί ένα εργαλείο.
Αυτό συνδέεται άμεσα με το prompt engineering. Η διαδικασία αυτή δεν είναι απλώς μια δοκιμή εντολών, αλλά μια συστηματική βελτιστοποίηση για να γίνει το αποτέλεσμα πιο σταθερό.
Όσο πιο καθαρά ορίζεις τον ρόλο, τα εργαλεία και τα όρια, τόσο πιο προβλέψιμη θα είναι η λειτουργία του agent.
Τέλος γράφεις τον τρόπο εκτέλεσης
Στο κομμάτι του κώδικα, φτιάχνεις ένα runtime που επικοινωνεί με τον Agentspan server. Εδώ κρύβεται μια σημαντική αρχιτεκτονική επιλογή.
Ο agent δεν ζει μέσα στο τοπικό Python process σου. Τρέχει στον server, ενώ το script σου λειτουργεί ως client. Αυτό μπορεί να σου φανεί ασυνήθιστο, αλλά είναι μια πρακτική που διευκολύνει τη διαχείριση πόρων.
Για να τρέξεις το demo, ξεκινάς τον server και μετά εκτελείς το Python αρχείο σου. Η πρώτη εκκίνηση του server απαιτεί λίγα δευτερόλεπτα, ενώ οι επόμενες είναι πολύ πιο γρήγορες.
Το απλό weather run ολοκληρώνεται συνήθως σε λιγότερο από 10 δευτερόλεπτα, επιβεβαιώνοντας ότι το function calling λειτουργεί σωστά.
Το dashboard είναι εκεί που αρχίζεις να καταλαβαίνεις τι έκανε ο agent
Το ωραίο με το Agentspan είναι ότι δεν σου δίνει μόνο ένα τελικό αποτέλεσμα. Κρατάει ιστορικό των εκτελέσεων και σου δείχνει το workflow οπτικά, επιτρέποντάς σου να παρακολουθείς το Agent loop σε πραγματικό χρόνο.
Κάθε run καταγράφεται σαν execution. Πατάς πάνω στο execution ID και βλέπεις βήμα προς βήμα τι ακριβώς συνέβη.
Τι βλέπεις μέσα σε ένα execution
Στο απλό weather bot, η ροή είναι αρκετά καθαρή:
- ο χρήστης ρωτά για τον καιρό
- το prompt πηγαίνει στο μοντέλο
- το μοντέλο αποφασίζει ότι χρειάζεται το tool
- καλείται το tool
- το αποτέλεσμα επιστρέφει στο μοντέλο
- βγαίνει η τελική απάντηση
Αν πατήσεις πάνω σε οποιοδήποτε node, βλέπεις λεπτομέρειες. Στα tool calls, το tab Input δείχνει ακριβώς ποιες παράμετροι πέρασαν, ενώ το tab Output δείχνει τι επέστρεψε το εργαλείο. Το πιο σημαντικό είναι ότι το dashboard αποκαλύπτει πώς διαχειρίζεται το σύστημα το conversation history, ώστε να κατανοείς τι γνώριζε ο agent σε κάθε φάση της επικοινωνίας. Επιπλέον, βλέπεις πώς η Memory του πράκτορα διατηρείται ανάμεσα στα βήματα, διασφαλίζοντας τη συνέχεια της διαδικασίας.
Αυτό είναι φοβερά χρήσιμο όταν κάτι πάει στραβά. Δεν ψάχνεις στα τυφλά, αλλά βλέπεις το ακριβές σημείο που στράβωσε η ροή.
Γιατί βοηθά τόσο στο debugging
Αν ο agent απαντήσει λάθος, το dashboard σε βοηθά να εντοπίσεις άμεσα το πρόβλημα:
- φταίει το prompt;
- φταίει το model choice;
- φταίει το tool input;
- φταίει το tool output;
- φταίει το ότι το tool δεν κλήθηκε ποτέ;
Αυτή η ορατότητα είναι που μετατρέπει ένα απλό πείραμα με τεχνητή νοημοσύνη σε ένα επαγγελματικό development workflow.
Το πιο χρήσιμο demo είναι ο agent που γράφει pytest tests
Μετά το weather bot, το tutorial πάει σε κάτι πιο ουσιαστικό. Έναν agent σε Python που διαβάζει ένα module και γράφει unit tests για κάθε function του.
Το example module είναι ένας απλός price calculator με τέσσερις functions, για discounts, taxes, shipping και total cost. Ωραίο παράδειγμα, γιατί έχεις καθαρές, μικρές μονάδες λογικής.
Πώς δουλεύει το save_test tool
Εδώ το tool δεν επιστρέφει απλώς ένα string. Παίρνει το όνομα της function που γίνεται test και τον test code που παρήγαγε το μοντέλο, και γράφει αυτόν τον κώδικα σε αρχείο.
Ουσιαστικά, το μοντέλο σκέφτεται και παράγει τον κώδικα, ενώ το tool αναλαμβάνει το χειρωνακτικό μέρος, δηλαδή την εγγραφή στο σωστό αρχείο. Για να διασφαλίσουμε τη συνέπεια και την εγκυρότητα των δεδομένων που παράγονται, χρησιμοποιούμε Pydantic για να επιτύχουμε structured output. Αυτή η προσέγγιση είναι ένα καλό pattern γενικά. Άφησε το μοντέλο να αποφασίζει περιεχόμενο και άφησε το tool να κάνει τη συγκεκριμένη πράξη στο σύστημα.
Στο αρχείο εκτέλεσης, το flow σπάει σε τρία μέρη:
- γράφονται πρώτα τα imports του test file
- διαβάζεται ο κώδικας του source file
- ξεκινά ο agent με prompt που του λέει τι ακριβώς να κάνει
Το prompt που αποφεύγει τη χαοτική έξοδο
Η οδηγία που κάνει διαφορά εδώ είναι η εξής: ο agent καλείται να γράψει tests για κάθε function και να καλέσει το tool μία φορά ανά function. Επίσης, του λέγεται ρητά να επιστρέψει raw Python και όχι markdown.
Αυτό το τελευταίο είναι μικρό, αλλά κρίσιμο. Αν δεν το πεις, υπάρχει μεγάλη πιθανότητα να πάρεις code fences, extra εξηγήσεις ή μορφοποίηση που δεν θες μέσα σε αρχείο test.
Όταν τρέχει αυτό το demo, δημιουργείται νέο test file στο workspace σου και μέσα του εμφανίζονται tests για όλες τις functions του price calculator. Στο dashboard βλέπεις και κάτι ακόμα ενδιαφέρον: τα tool calls γίνονται παράλληλα. Δηλαδή τα τέσσερα tests μπορούν να χτιστούν ταυτόχρονα.
Αν συγκρίνουμε αυτή τη διαδικασία με το LangChain, βλέπουμε ότι η διαχείριση των αρχείων και η αυτοματοποίηση του workflow ακολουθούν παρόμοια λογική, αν και το LangChain συχνά προσθέτει επιπλέον επίπεδα αφαίρεσης για πιο πολύπλοκα συστήματα. Αν μετά από αυτό θες να δεις και άλλη λογική χτισίματος agents, έχει ενδιαφέρον και το Introduction to LangChain για Python, κυρίως για να συγκρίνεις νοοτροπίες και όχι για να μπερδέψεις τα frameworks.
Το σημείο που το tutorial απογειώνεται είναι το crash και το resume
Το πιο δυνατό κομμάτι δεν είναι ότι ο agent γράφει tests. Είναι ότι συνεχίζει τη λειτουργία του ακόμα και μετά από ένα crash. Σε αντίθεση με απλά σενάρια, οι επαγγελματικοί Autonomous agents απαιτούν ανθεκτικότητα σε διακοπές για να ολοκληρώσουν σύνθετες εργασίες.
Εδώ φαίνεται γιατί το state του agent ζει στον server και όχι στο τοπικό σου script σε Python. Παρόμοιες δυνατότητες για orchestration και διαχείριση κατάστασης προσφέρουν και τα Azure AI Agents, που βοηθούν στην ομαλή εκτέλεση σε περιβάλλοντα παραγωγής.
runtime.run() και runtime.start() δεν είναι το ίδιο πράγμα
Στο απλό demo χρησιμοποιείται το runtime.run(). Αυτό είναι βολικό όταν θες να ξεκινήσεις ένα run και να περιμένεις να τελειώσει.
Για ανθεκτικότητα όμως, το pattern αλλάζει:
| Μέθοδος | Τι κάνει | Πότε τη χρησιμοποιείς |
|---|---|---|
runtime.run() | Ξεκινά και ολοκληρώνει ένα νέο run | Για απλά demos |
runtime.start() | Ξεκινά run και σου δίνει execution_id | Όταν θες να κάνεις resume μετά από διακοπή |
Με το runtime.start() παίρνεις πίσω ένα handle με execution_id. Αν το script σου σκάσει στη μέση, δεν χρειάζεται να ξεκινήσεις από το μηδέν. Χρησιμοποιείς αυτό το ID και επανασυνδέεσαι στο ίδιο execution.
Στο demo, το tool καθυστερεί επίτηδες για 2 δευτερόλεπτα. Αυτό αφήνει χρόνο να σκοτώσεις τη διαδικασία πριν ολοκληρωθούν όλα τα tool calls. Μετά από το crash, ο client μπορεί να δείχνει ότι πρόλαβε κάτι, αλλά στο dashboard φαίνεται η αλήθεια: τα tool calls δεν ολοκληρώθηκαν.
Τι σημαίνει idempotent και γιατί σε νοιάζει
Μετά έρχεται η λέξη που πρέπει να θυμάσαι: idempotent.
Με απλά λόγια, είναι ένα tool που μπορεί να τρέξει ξανά χωρίς να χαλάσει το τελικό αποτέλεσμα. Σκέψου το σαν κουμπί επανάληψης που δεν γεμίζει το αρχείο σου με διπλότυπα.
Αν το tool σου γράφει σε αρχείο, στέλνει email ή αλλάζει δεδομένα, πρέπει να μπορεί να αντέξει retry χωρίς παρενέργειες.
Στο παράδειγμα, το save_test δεν ξαναγράφει tests αν τα βρει ήδη μέσα στο αρχείο. Γι’ αυτό, όταν το run συνεχίζει μετά το crash, δεν καταλήγεις με δύο ίδιες ενότητες test code.
Και κάπου εδώ φαίνεται το πραγματικό μάθημα του tutorial. Ένας agent που κάνει μία δουλειά σωστά, με καθαρά tools και σωστό state management, αξίζει περισσότερο από δέκα έξυπνα demos που σπάνε στο πρώτο restart.
Για περισσότερα παραδείγματα και το πλήρες project setup, αξίζει να ρίξεις μια ματιά και στα Agentspan docs στο GitHub.
Συχνές ερωτήσεις
Χρειάζεσαι εμπειρία σε Python για να το δοκιμάσεις;
Όχι πολλή. Αν ξέρεις τι είναι function, αρχείο και terminal, μπορείς να ακολουθήσεις το βασικό παράδειγμα. Το πιο δύσκολο κομμάτι δεν είναι η Python, είναι να σκεφτείς καθαρά τι πρέπει να κάνει ο agent χρησιμοποιώντας τις αρχές του Machine Learning.
Τι είναι ακριβώς ένα tool σε AI agent;
Είναι μια Python function που ο agent μπορεί να καλέσει όταν τη χρειάζεται. Το μοντέλο αποφασίζει πότε θα τη χρησιμοποιήσει, αλλά εσύ ορίζεις τι κάνει.
Πρέπει να χρησιμοποιήσεις OpenAI για το LLM;
Όχι. Μπορείς να δουλέψεις και με τοπικό setup, όπως το Ollama, ή με άλλον provider που υποστηρίζεται από το framework. Το σημαντικό είναι να έχεις σωστή σύνδεση και το κατάλληλο μοντέλο LLM επιλεγμένο για την εργασία σου.
Γιατί χρειάζεται JDK σε αυτό το setup;
Είναι μέρος των προαπαιτούμενων που χρειάζεται το συγκεκριμένο framework για να λειτουργήσει σωστά. Αν λείπει, μπορεί το περιβάλλον να μη σηκωθεί καθόλου.
Γιατί το docstring στο tool είναι τόσο σημαντικό;
Γιατί δίνει νόημα στο μοντέλο. Αν του κρύψεις τι κάνει η function, είναι πιο πιθανό να μην την καλέσει ή να τη χρησιμοποιήσει λάθος.
Μπορώ να συνδυάσω τον agent με Flask ή Vector store;
Βεβαίως. Μπορείς να ενσωματώσεις τον agent σε ένα περιβάλλον Flask αν θέλεις να χτίσεις ένα web interface για τον χρήστη. Επίσης, αν η εφαρμογή σου απαιτεί ανάκτηση δεδομένων από μεγάλη βάση, μπορείς να συνδέσεις τον agent με ένα Vector store για να υλοποιήσεις εφαρμογές τύπου RAG.
Ποια είναι η διαφορά ανάμεσα σε run και start;
Το run είναι το απλό τρέξε το και περίμενε. Το start είναι για σενάρια όπου θες execution ID και δυνατότητα συνέχισης μετά από διακοπή.
Τι σημαίνει ότι ο agent είναι idempotent;
Σημαίνει ότι μπορείς να ξανατρέξεις την ίδια πράξη χωρίς να αλλάζει στραβά το τελικό αποτέλεσμα. Στο παράδειγμα, δεν δημιουργούνται διπλά tests όταν ξαναγίνει το run.
Μπορεί ο server και το Python script να τρέχουν σε διαφορετικά μηχανήματα;
Ναι. Και αυτό είναι από τα πιο χρήσιμα στοιχεία της αρχιτεκτονικής του tutorial. Ο server κρατάει το state, άρα ο client μπορεί να πέσει, να ξανασηκωθεί ή να μεταφερθεί αλλού.
Το βασικό που να κρατήσεις
Το πρώτο σου AI agent σε Python δεν χρειάζεται να είναι εντυπωσιακό. Χρειάζεται να είναι καθαρό. Ένα σωστό εργαλείο, ένα ξεκάθαρο prompt, μια λογική επιλογή μοντέλου και μια εκτέλεση που μπορεί να συνεχίσει μετά από ένα σφάλμα, αυτά είναι που κάνουν τη διαφορά στην πράξη.
Αν το δεις σαν μια μικρή υποδομή και όχι σαν ένα πρόχειρο script, όλα κουμπώνουν πολύ πιο εύκολα. Η δημιουργία ενός τέτοιου agent αποτελεί την ιδανική αφετηρία για να εμβαθύνεις στον ευρύτερο κόσμο του Machine Learning, καθώς κατανοείς πώς η Python λειτουργεί ως συνδετικός κρίκος ανάμεσα στη λογική σου και την τεχνητή νοημοσύνη. Όπως συμβαίνει και με το καλό περιεχόμενο στο web, η ποιότητα εδώ κερδίζει τον όγκο. Λίγα κομμάτια, καθαρά ορισμένα, που κάνουν μία δουλειά σωστά.
Από εκεί και πέρα, το επόμενο βήμα είναι απλό: πάρε ένα μικρό πρόβλημα που αντιμετωπίζεις ήδη, βρες ποιο εργαλείο χρειάζεται και άσε τον agent να το λύσει χωρίς περιττές φανφάρες.


