AI 스크립팅 - 오해의 소지가 있는 로그...저는 그다지 호평받지 못하는 AI가 만든 코드를 분석해 봤습니다.
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 ...
자동화 및 스크립팅제목: AI 프로그래밍 관련 - 오해의 소지가 있는 로그...JMP는 이런 식으로 설계되었습니다. 저도 다른 방식이었으면 좋겠습니다. 이러한 설계상의 문제점은 (1) 객체가 이해하지 못하는 메시지를 무시하고 (2) 메시지를 연결할 수 있다는 점입니다. 몇 릴리스 전에 JMP는 일부 객체가 인식하지 못하는 메시지를 보고하도록 하는 환경설정을 추가했습니다. 이 기능이 제대로 작동하는지는 객체에 따라 다르지만, 표시 상자들이 이를 처리하기 위한 공통 코드를 가지고 있는 것으로 알고 있습니다.
tb<와 같은 메시지 연결
이러한 규칙에 따르면, 예시의 2번째 줄은 의도한 대로 작동합니다.
인식되지 않는 메시지를 조용히 무시하는 기능은 아마도 지난 세기의 MS 윈도우 메시지 처리 방식을 연구하면서 생겨난 것 같습니다. 마우스 커서가 위로 움직이는 것처럼 무시되는 메시지가 엄청나게 많지만, 마우스에 반응할 의도는 전혀 없습니다. JMP에서는 다음과 같이 사용할 수 있습니다. `{ textBox, outlineBox } << setcolor("red") << close(1);` 여기서 `<`를 이해하는 목록의 모든 상자는 해당 `<`를 인식합니다. <<>
두 예시에서 데이터 테이블로 보내는 메시지의 차이점은 kdtable() 은 전역 플랫폼 함수와 유사한 반면 < < m> 이 메시지는 kdtable 객체만 알 수 있습니다. 데이터 테이블 자체는 플랫폼 시작과 유사한 메시지를 선호합니다 . 예를 들어, 여기에 버그가 있습니다. kdtable이 "hello" 인수에 대한 문제를 보고하지 않아서 플랫폼이 실행되었다고 잘못 판단했을 가능성이 있습니다. 아마도 빈 플랫폼(죄송하지만 그런 것은 없습니다)을 실행한 것으로 착각했을 수도 있습니다.
kdtable("hello")
/*:
Empty()
제목: AI 프로그래밍 관련 - 오해의 소지가 있는 로그...안녕하세요
@Craige_Hales 님 , 자세한 배경 설명 감사합니다. 네, JSL이 당시 그런 방식으로 설계된
이유 (알 수 없는 메시지를 조용히 무시하고 체이닝을 통해 왼쪽 객체를 반환하는 방식)를 이해할 수 있습니다.
하지만 저는 JSL 개발자들이 이러한 패턴이 오늘날의 AI 기반 코딩 환경 과 다소 "호환되지 않는다"는 점을 인식해 주기를 바랍니다.
LLM은 메시지, 플랫폼 호출 및 인수를 마음대로 생성하는데 , 현재 동작 방식으로는 이러한 것들이 종종 조용히 무시됩니다. 이는 혼란을 야기할 뿐만 아니라 디버깅을 극도로 어렵게 만들어 근본 원인이 아닌 증상만 찾게 만듭니다.
개발자들이 JSL 수준에서 "AI 디버그 모드/수다 모드"를 전환하는 스위치를 제공할 수도 있을 것 같습니다.
선택된 객체 클래스(예: 디스플레이 객체, 플랫폼, 일반 스크립트 가능 객체)에 대해 시끄럽지만 매우 유용한 진단 기능을 의도적으로 활성화합니다.
이 아이디어는 최종 결과가 이상해 보일 때 이 모드를 활성화하면 JMP가 조용히 실패하고 한참 후에야 문제를 알리는 대신, 문제가 처음 발생한 지점을 정확히 알려주는 것입니다. 이 기능을
AI 디버깅을 위한 채팅 모드(chatty mode())라는 이름으로 위시리스트에 추가하고 투표를 받고 있습니다.
다시 한번 귀중한 의견과 행동 개선의 여지가 있는 부분임을 확인해주셔서 감사합니다.