Scripting AI - registro fuorviante ...Ho appena analizzato un codice creato da un'IA meno amata:
dt = Open("$SAMPLE_DATA/Big Class.jmp");
kd = dt << KDTable("hello");
result = kd << K Nearest Rows(1, 3);<BR />print("finished");
Il registro diceva:
Object 'Data Table' does not recognize the message 'K Nearest Rows'; perhaps you mean one of these: <
<<<<<<<<
finished
Sure: if a scriptable object doesn't understand a message, it shows such a warning message in the log.
And a Data Table doesn't understand the the message K nearest Rows().
But wait, why is kd a data table?!
This is easy to answer: In the previous line of code, the data table doesn't understand the command << KDTable("hello");
And therefore, instead of returning a KD table, it returns a reference to itself.
Unfortunately, here is NO warning message:
Object 'Data Table' does not recognize the message 'KD Table("hello")'
A JSL scripter will spot the error within seconds : KD Table("hello") , tztztz!
But you’d probably agree—it’s hard to find the error from the information JMP provides!
How to escape this issue? Is there a general rule or trick?
Can JMP / the JSL interpreter be improved to help AI and the users understand the errors?
Users with paranoia could add If (type(name Expr(returned object) == ...) after every message sent to a scriptable object. Hm ...
Automazione e scriptingRe: Programmazione AI - registro fuorviante ...JMP è progettato in questo modo. Vorrei anche che fosse diverso. Le parti del design che rendono possibile questo sono (1) gli oggetti ignorano i messaggi che non capiscono e (2) i messaggi possono essere concatenati. Molte versioni fa, JMP ha aggiunto una preferenza per far sì che alcuni oggetti segnalino messaggi non riconosciuti. Il funzionamento dipende dall'oggetto; credo che tutte le caselle di visualizzazione abbiano un codice comune per gestirlo.
Concatenamento di messaggi, come tb<
Secondo queste regole, la riga 2 del tuo esempio fa ciò che dovrebbe fare.
Penso che la funzione " Ignora silenziosamente i messaggi non riconosciuti" abbia probabilmente avuto origine dallo studio della gestione dei messaggi di MS-Windows (secolo precedente); esiste un numero incredibile di messaggi che vengono ignorati silenziosamente (come se il mouse si muovesse su di te , ma tu non avessi intenzione di rispondere al mouse). In JMP potrebbe essere utilizzato in questo modo: { textBox, outlineBox } << setcolor("red") << close(1); dove qualsiasi casella nell'elenco che comprende < <<>
La differenza tra i due messaggi che i tuoi esempi inviano alla tabella dati è che kdtable() è una funzione globale simile a una piattaforma mentre < < m> è un messaggio noto solo a un oggetto kdtable. La tabella dati stessa preferisce visualizzare messaggi che assomiglino ad avvii di piattaforme, dt< Per esempio. C'è un bug qui. Sospetto che kdtable sia in errore per non aver segnalato un problema con l'argomento "hello", e la tabella dati potrebbe pensare che sia stata avviata una piattaforma. Forse la piattaforma vuota (mi dispiace, non esiste).
kdtable("hello")
/*:
Empty()
Re: Programmazione AI - registro fuorviante ...Ciao
@Craige_Hales , grazie mille per il contesto dettagliato. Certo, capisco
perché JSL è stato progettato in questo modo all'epoca (ignoranza silenziosa dei messaggi sconosciuti + concatenamento che restituisce l'oggetto di sinistra).
Tuttavia, spero anche che gli sviluppatori JSL si rendano conto che questo schema è diventato in qualche modo "incompatibile" con l'attuale codifica delle vibrazioni assistita dall'intelligenza artificiale:
Gli LLM inventano messaggi, chiamate di piattaforma e argomenti con disinvoltura , ma con il comportamento attuale spesso vengono ignorati silenziosamente. Questo non solo crea confusione, ma può anche trasformare il debug in un vero e proprio inferno: si finisce per dare la caccia al sintomo invece che alla causa principale.
Forse gli sviluppatori potrebbero fornire un interruttore a livello JSL per la "modalità debug/chat dell'IA" :
per attivare deliberatamente delle diagnosi rumorose, ma incredibilmente utili, per classi di oggetti selezionate (ad esempio oggetti di visualizzazione, piattaforme, oggetti generici programmabili).
L'idea è che quando il risultato finale sembra strano, si attiva questa modalità e JMP inizia a lamentarsi esattamente dove le cose vanno fuori controllo, invece di fallire silenziosamente e solo gridare molto più tardi. Ho inserito questo elemento nella lista dei desideri qui per la votazione:
chatty mode() per il debug dell'IA.
Grazie ancora per le intuizioni e per aver confermato che questo è un ambito in cui il comportamento potrebbe essere migliorato.