我剛剛分析了一段由不太受歡迎的人工智慧產生的程式碼:
dt = Open("$SAMPLE_DATA/Big Class.jmp");
kd = dt << KDTable("hello");
result = kd << K Nearest Rows(1, 3);<BR />print("finished");
日誌顯示:
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 ...
JMP 就是這樣設計的。我也希望它能有所不同。造成這種情況的設計原理是:(1) 物件會忽略它們無法辨識的訊息;(2) 訊息可以鍊式傳遞。早在許多版本之前,JMP 就增加了一個選項,讓某些物件可以報告無法辨識的訊息。這個選項是否有效取決於物件本身;我認為所有顯示框都有一些通用的程式碼來處理這種情況。
鍊式訊息,例如 tb<
依照這些規則,你範例中的第 2 行程式碼實作了它應該實現的功能。
我認為默默忽略未識別訊息的做法可能源於對微軟 Windows 訊息處理(上個世紀)的研究;有大量訊息會被默默忽略(例如滑鼠在你上方移動,但你根本不打算回應滑鼠)。在 JMP 中,可以這樣使用:{ textBox, outlineBox } << setcolor("red") << close(1); 其中清單中任何能夠辨識 < 的框<<>
你的範例傳送給資料表的兩個訊息之間的差異在於: kdtable()是一個全域的、類似平台的函數,而< < m>這是只有 kdtable 物件才能辨識的訊息。資料表本身喜歡接收類似平台啟動的訊息, dt< 例如,這裡存在一個錯誤。我懷疑是 kdtable 沒有報告“hello”參數的問題,導致數據表誤以為啟動了一個平台。也許是空平台(抱歉,實際上並不存在空平台)。
kdtable("hello")
/*:
Empty()
嗨
@Craige_Hales ,非常感謝您提供的詳細背景資訊——當然,我能理解
為什麼JSL 當時是這樣設計的(靜默忽略未知訊息 + 鍊式呼叫返回左側物件)。
然而,我也希望 JSL 的開發者們能夠意識到,這種模式與當今人工智慧輔助的氛圍編碼方式已經變得有些「不相容」:
LLM(層級管理)會隨意創造訊息、平台呼叫和參數,但目前的行為卻常常讓它們被默默忽略。這不僅會造成混亂,還會讓調試變成一場噩夢——最終你只能找到症狀,而無法找到根本原因。
或許,開發者可以提供一個 JSL 等級的開關,用於「AI 偵錯/聊天模式」 :
故意為選取的物件類別(例如顯示物件、平台、一般可腳本化物件)啟用吵雜但極為有用的診斷資訊。
其理念是,當最終結果出現異常時,啟用此模式,JMP 會在問題最初出現偏差的地方立即發出警告,而不是悄無聲息地失敗,直到很久之後才發出警報。我已經將此功能添加到願望清單中,供大家投票:
用於 AI 調試的“聊天模式()”。
再次感謝您提供的見解,並確認這方面確實有需要改進的地方。