Δοκιμάζοντας AI Agents στο Drupal

Στέλνεις την ίδια ερώτηση στον Drupal AI agent σου δύο φορές και παίρνεις διαφορετικές απαντήσεις. Τροποποιείς το system prompt και κάτι που δούλευε πριν, σταματά να δουλεύει. Αλλάζεις μοντέλο, και ενώ όλα φαίνονται καλά στην επιφάνεια, η συμπεριφορά του συστήματος είναι αισθητά διαφορετική.

Αυτό που μας λείπει είναι ένας τρόπος να μετράμε και να αξιολογούμε συστηματικά την απόδοση του AI και την ποιότητα των αποτελεσμάτων του σε αλλαγές prompt και μοντέλου. Δεν θέλουμε μόνο να διασφαλίσουμε ότι το σύστημα συνεχίζει να λειτουργεί, αλλά και να ξέρουμε πόσο καλά το κάνει. Μπορούμε να κάνουμε κάτι καλύτερο από το «κάποιος το δοκίμασε χειροκίνητα και φαινόταν εντάξει»;

Τι φτιάξαμε

Το ai_eval είναι ένα Drupal module για αυτοματοποιημένη αξιολόγηση AI agents και chat prompts. Είναι ήδη διαθέσιμο στο drupal.org ως alpha έκδοση.

Η βασική μονάδα είναι ένα eval target: μια config entity που δείχνει σε έναν agent (ή οποιονδήποτε AI provider) συν ένα YAML dataset με ερωτήσεις και κριτήρια βαθμολόγησης. Τρέχεις το eval, το module καλεί τον agent για κάθε ερώτηση, βαθμολογεί κάθε απάντηση με αρθρωτά grader plugins, και σου δίνει ένα σκορ με ετυμηγορία pass/fail.

Ένα dataset μοιάζει έτσι:

questions:
  - id: S01
    input: "What is Drupal?"
    criteria: "Should provide a brief, accurate description of Drupal CMS
               including that it is open-source and PHP-based"

  - id: S02
    input: "How do I create a custom module in Drupal?"
    criteria: "Should mention .info.yml file, src/ directory
               with PSR-4 namespacing, and enabling via drush"

  - id: S05
    input: "Return a JSON object with keys: name, version, status"
    criteria: "Response must be valid JSON with the requested keys"
    expected:
      format: json

Κάθε target ορίζει ποια graders θα εφαρμοστούν. Το module έρχεται με πέντε grader plugins:

  • Relevance, Completeness, Accuracy, Actionability: τέσσερα LLM-as-judge graders που στέλνουν την ερώτηση, τα κριτήρια και την απάντηση σε ένα judge μοντέλο και βαθμολογούν από 1 έως 5
  • Format: ένα ντετερμινιστικό grader που επικυρώνει τη δομή JSON ή κανόνες μορφοποίησης κειμένου χωρίς κλήση API

Τα graders είναι Drupal plugins. Η συγγραφή ενός νέου απαιτεί ένα PHP attribute και λίγες μεθόδους: μια περιγραφή διάστασης για LLM judges, ή μια μέθοδο grade() για ντετερμινιστικά graders.

Κάθε target ορίζει επίσης ένα quality gate: ένα κατώφλι σκορ και έναν τύπο gate. Τα hard gates επιστρέφουν non-zero exit code όταν το σκορ πέσει κάτω από το κατώφλι. Βάλε drush ai-eval:run στο deployment pipeline σου και ένα σπασμένο prompt μπλοκάρει το deploy.

# Τρέξε όλα τα eval targets
drush ai-eval:run

# Τρέξε ένα target, έξοδος σε JSON
drush ai-eval:run --target=my_agent --json

# Ανάλυσε αποτυχίες και πρότεινε βελτιωμένα prompts
drush ai-eval:optimize --propose

Η εντολή optimize αξίζει ιδιαίτερης αναφοράς: τρέχει baseline evals, εντοπίζει τις αποτυχημένες ερωτήσεις, και χρησιμοποιεί LLM για να δημιουργήσει βελτιωμένο system prompt βασισμένο στα μοτίβα αποτυχίας. Οι προτάσεις περνούν από ροή αναθεώρησης στο admin UI πριν εφαρμοστούν. Είναι πειραματικό και τα αποτελέσματα ποικίλουν, αλλά όταν λειτουργεί, εξοικονομεί ώρες δοκιμών και παραλλαγών των prompts.

Γιατί το φτιάξαμε

Τρέχουμε πολλαπλούς AI agents σε παραγωγή που χειρίζονται πραγματικά ερωτήματα της ομάδας: code review, αναζήτηση projects, γενική αναζήτηση (search), ανάκληση μνήμης. Όταν αλλάζαμε ένα prompt ή εναλλάσσαμε μοντέλο, δεν είχαμε τρόπο να ξέρουμε αν σπάσαμε κάτι, εκτός αν περιμέναμε κάποιος να παραπονεθεί.

Μια φορά, μια αλλαγή prompt έκανε τον router agent να στέλνει ερωτήσεις ανάκλησης μνήμης στο εργαλείο διαχείρισης έργων. Το ανακαλύψαμε τυχαία, και αυτό ήταν που μας κινητοποίησε να ενσωματώσουμε το eval στη ροή εργασίας μας.

Τώρα κάθε αλλαγή prompt δοκιμάζεται σε ένα dataset πριν μπει σε παραγωγή. Τα eval runs παίρνουν λίγα λεπτά και κοστίζουν μερικά cents σε κλήσεις API.

Ενδιαφέροντα ευρήματα

Την περασμένη εβδομάδα χρησιμοποιήσαμε το ai_eval για να κάνουμε benchmark σε πέντε LLM providers που λειτουργούν ως backbone για τους production agents μας. Το evaluation dataset αποτελούνταν από 24 ερωτήσεις ανάκτησης σε entity lookup, aggregation, semantic search, keyword search, cross-source queries και safety checks. Κάθε ερώτηση απαιτεί χρήση εργαλείων. Καθώς κανένα μοντέλο δεν έχει τα δεδομένα μας στο training set του, κάθε hallucination είναι αμέσως ορατό.

Μοντέλο Pass Rate Μέσο Σκορ Κόστος (24 Ερωτήσεις) Tool Reliability
Gemma 4 26B 38% 3.24 EUR 0.05 63%
GPT-4o-mini 42% 3.41 EUR 0.10 63%
Qwen 3 32B 88% 4.21 EUR 0.03 100%
Sonnet 4.6 89%* 4.62* EUR 4.00 100%

*Μερική εκτέλεση Sonnet (9/24 ερωτήσεις πριν εξαντληθούν τα credits).

Το Qwen 3 32B έφτασε σε απόσταση 1% από το pass rate του Sonnet στο ένα κλάσμα του κόστους, με μηδέν hallucinations. Αυτό μας εντυπωσίασε τόσο πολύ που αλλάξαμε τους production agents μας σε αυτό την ίδια μέρα. Όσο για τα μικρότερα μοντέλα, τα αποτελέσματά τους ήταν φτωχά και απαράδεκτα — κατασκεύαζαν απαντήσεις με σιγουριά χωρίς να καλούν ποτέ τα σωστά εργαλεία που θα τα οδηγούσαν στις σωστές απαντήσεις.

Δεν θα το βρίσκαμε αυτό χωρίς αυτοματοποιημένο eval. Χειροκίνητες δοκιμές με 5 ερωτήσεις θα έδειχναν όλα τα μοντέλα να «δουλεύουν». Μόνο μια συστηματική εκτέλεση σε 24 ερωτήσεις με βαθμολόγηση τόσο ντετερμινιστική όσο και LLM-judge αποκάλυψε ότι τα μικρότερα μοντέλα παραλείπουν αθόρυβα κλήσεις εργαλείων στο 37% των περιπτώσεων.

Πώς εντάσσεται στο οικοσύστημα

Υπάρχουν και άλλες προσεγγίσεις για αξιολόγηση AI στο Drupal, η καθεμία εξυπηρετεί διαφορετικές ανάγκες και απευθύνεται σε διαφορετικό κοινό:

  • Το module ai_evaluations εστιάζει σε ένα φιλικό προς τον sitebuilder UI για δημιουργία και εκτέλεση αξιολογήσεων.
  • Το ai_agents_test είναι ένα ξεχωριστό module για δοκιμή λήψης αποφάσεων agent έναντι κανόνων συμπεριφοράς.

Το ai_eval τοποθετείται στο επίπεδο CI/developer: τα YAML datasets ζουν στο version control δίπλα στον κώδικά σου. Οι εντολές Drush τρέχουν σε pipelines. Τα quality gates μπλοκάρουν τα deploys. Εξαρτάται από το AI module ως υποχρεωτική προϋπόθεση και υποστηρίζει τα ai_agents ως προαιρετική εξάρτηση.

Το Drupal AI οικοσύστημα ακόμα διαμορφώνει τι σημαίνει «ποιότητα» για μη-ντετερμινιστικά συστήματα. Πολλαπλές προσεγγίσεις είναι καλύτερες από ένα πρόωρο πρότυπο. Ελπίζουμε το ai_eval να παίξει σημαντικό ρόλο σε αυτή τη συζήτηση.

Τι ακολουθεί

Σχεδιάζουμε να πραγματοποιήσουμε BoF session στο Drupal Dev Days Athens (22–25 Απριλίου): «Testing AI Agents: Live Eval Session.» Σύντομο live demo ακολουθούμενο από συζήτηση για το ποια graders και datasets χρειάζεται πραγματικά η κοινότητα.

Πράγματα που ξέρουμε ότι λείπουν:

  • Grader plugins για τομείς που δεν έχουμε καλύψει. Ποιότητα μετάφρασης, content moderation, συμμόρφωση με πρότυπα κώδικα, ανίχνευση hallucination, συνέπεια brand voice. Κάθε ένα από αυτά είναι ένα plugin με μία μέθοδο. Αν έχεις έναν τομέα, μπορείς να γράψεις ένα grader. Δες τον integration guide για το πώς.
  • Κοινόχρηστα eval datasets. Ένα καλό dataset με 20–50 ερωτήσεις για Drupal site-building Q&A, ή e-commerce recommendations, ή δρομολόγηση support tickets, ωφελεί κάθε ομάδα που φτιάχνει agents σε αυτόν τον τομέα.
  • Περισσότερα ντετερμινιστικά graders. Τα LLM judges κοστίζουν χρήμα και προσθέτουν latency. Όπου μπορείς να ελέγξεις μια συγκεκριμένη ιδιότητα (έγκυρο JSON, σωστό route, αναμενόμενες τιμές πεδίων) ένα ντετερμινιστικό grader είναι γρηγορότερο, φθηνότερο και πιο αξιόπιστο.

Δοκίμασέ το

composer require drupal/ai_eval
drush en ai_eval

Το module απαιτεί Drupal 11.2+, PHP 8.3 και το AI module. Η λειτουργία agent απαιτεί AI Agents. Το admin UI βρίσκεται στο /admin/config/ai/ai-eval.

Το API θα αλλάξει. Υπάρχουν ατέλειες. Αλλά το πρόβλημα είναι πραγματικό και προτιμούμε να το δουλέψουμε με άλλους παρά μόνοι μας. Ας ενώσουμε δυνάμεις:

— George Kastanis (zorz), Point Blank