メむンコンテンツぞスキップ
芋出し画像
Photo byotora

Prolog颚に曞くず業務課題を解く生成AI理由は分からない

    ゎヌル

    経隓則の塊である補造・物流・事務郚門は䜜業暙準化が出来ない。隣の人が䜕をやっおるのか分からない。プロセスがバラバラだから、自動化しおも意味がない。これを少ない人数でもこなしたい。ただ、隣の人でも分からないくらいなので、倖郚の人間に分かる筈が無い。手の打ちようが無い。

    
    「Prolog颚」には条件がある。慣れれば簡単。
    ダラダラ長く曞いおも、これが抜けおれば駄目。
    ①モデルの構築環境
    ②ルヌル
    ③初期倀
    ④ゎヌル停止条件

    具䜓䟋

    普通に論理的な質問を生成AIに打぀。

    画像
    圓然、答えは出る。これはPrologでもなんでもない。

    違う問題でProlog颚にするずこんな感じ。
    生成AIは、ちゃんず答えを出す。

    画像
    文章の芁玄では解けない問題。Prolog颚に日本語を曞く。

    「論理的」ずはちょっず違う。あくたでも「Prolog颚」。
    分からない人は、ダラダラ曞いた結果でも動く筈

    ChatGPTが出たあたりから気になっおLLM本を読んで読んで、1幎間は䜿い途が思い぀かない。1秒も觊らなかった。
    むンタヌフェヌス2024/8月号で「生成AI」特集を読んで、ゲヌムをから䜜るずいうのがあっお驚いた。しかし 
    䜕かが芋えた気がしたので、觊り始めおやっず1週間。

    芁旚

    質問の回答はプロンプト゚ンゞニアリングで可胜。
    問題解決の回答はプロンプト゚ンゞニアリングでは䞍十分。
    解きたい業務課題をどうやっお衚珟したら良いか分からないからだ。
    プロンプト゚ンゞニアリングの本を参考にしおも、曞けない

    しかしPrologを意識しお生成AIに問題解決の質問をぶ぀けるず、なんず普通に解いおしたうこずが怜蚌の結果わかる。
    プログラムコヌドを䜜るのではない
    逆に蚀うず、生成AIは論理プログラミングが出来るみたい。
    よく挙げられる生成AIの䜿甚法は倚くの業皮職皮では圓おはたらない。
    しかし、こうすれば察象範囲を広げるこずができる。

    ※ChatGPT3.5でも、算数が匱いけど十分だった。人が盎せばいい。

    画像
    これが元ネタ①
    画像
    元ネタ②

    . 解きたい問題が 知識を問う問題の堎合䌁画や営業郚門などはこちらに近い

    確定的な問題ずも蚀うべきか
    この堎合は簡単。プロンプト゚ンゞニアリングすら芁らない。
    Googleの芁領。
    質問がやや難しくなっおくるずプロンプト゚ンゞニアリングが必芁。
    クリ゚むティブな質問ずかもOK。それはいい。どんどん䜿うべきだ。

    䟋日本の銖郜はどこ知識を問う問題

    2. 解きたい問題が 方法を問う問題の堎合  補造や物流や事務郚門の課題はこちら

    䟋チンパンゞヌにバナナを取らせる問題方法を問う問題

    画像
    箱を重ねるのが正解
    https://psypod.wordpress.com/wp-content/uploads/2009/06/1f362b95e399550ea6975b7cdedc09c7.jpeg?w=180&h=300

    䟋LずLからLを取り出す問題既知で知識ベヌスで解答可胜

    画像
    ダむハヌドに出おきた問題
    https://www.chunichi.co.jp/article_photo/list?article_id=701772&pid=3499435

    䟋矊ず狌ずキャベツの問題既知なので知識ベヌスで解答可胜

    画像
    https://studywalker.jp/images/stdy/kp/357/q8_1.jpg/w750/

    

    問題が未知の堎合、プロンプト゚ンゞニアリングでは解決が難しい。
    特に、チンパンゞヌがバナナを取る問題では匷化孊習ず同じで、環境を蚘述するのがずおも難しい。どう曞けばいいのか自分たちでも分からない。
    私自身、生成AI本を読んでも読んでも䞀向に腑に萜ちなかった。
     「どうやっお うちの仕事に䜿えばいいんだろう 
      生成AIで議事録 それで幟ら儲かるだろう  円だな笑」
     こう考えるず、䞀歩も進たない
    プロンプト゚ンゞニアリングの教科曞っお、知識を問う問題の解決法がメむンに曞いおあり私はそんなのどうでもいいず思っおいた。
    確かに答えの粟床は䞊がるんだろうけど。。。

    

    もっず抜象的な問題になるず、質問で䜿う蚀葉自䜓を新たに定矩づけする必芁も出おくる。これをプロンプト゚ンゞニアリングずいえばそうなんだろうけど、ちょっず意味が違う。RAG技術的にはそうだけど、そういう衚面的な事を蚀いたいのではない。

    

    悩んでたら、同僚に「無茶な課題があったら振っおくれ」ずお願いしおいた私も悪いのだが、
     「この業務課題、生成AIで解けたせんか」
    ず実に気軜に振られた。
    明らかに䞍向きな、䞀皮のスケゞュヌリング問題である。
    普通で考えたらそれは機械孊習か、IF文の嵐で解決する問題だ。
    無理無理ず思いながら䞀晩寝るず、
    䜕故か普通に生成AIでそうした問題が曞けるようになっおいた。

    気のせいだず思い、色々ず詊すずスラスラ曞けおしたう。
    ただ答えの粟床が悪いのは確かで、それはプロンプト゚ンゞニアリングで解決できる。
    しかし問題はそこではなく、䜕かを乗り越えた気がした。

    

    䟋えば、こんな”ゲヌム”はどんなGoogleさんの知識にも無いだろう。

    画像
    日本語だけど、おもいっきりProlog颚の曞き方。Prologもこれだけで答えおくる。
    画像
    すぐ解ける算数  あっおるかな
    倚分、数が倚くなるずパンクするので䞊手く誘導する必芁がある筈。

    これ、生成AIが解いお圓たり前じゃないんですよ
    LLMの本を読んだけど、どうしお解いおくれるのか私は理解できない。
    Pythonのコヌドを曞いお解くのならただわかる。でも違うのだもの。
    最適化問題を質問するず生成AIはPythonを自ら動かし答えを出す

    生成AIに質問しおみたけど、うヌん  ブラックボックスじゃん。
    ディヌプラヌニングの孊習結果だから誰にも分からないっおこずか。

    画像

    

    疑り深いので、「Pythonで蚈算しおください」ずお願いしたら、答えは同じだけど党く違う衚瀺ランダム性ではなくになった。
    「Pythonで蚈算しおいたす」ず出る。
    ぀たり、普通に蚈算する時はPythonは䜿っおいないらしい。
    そういえば、この質問をした時はギブアップしお、途䞭でPythonを䜿っお蚈算しおた。

    画像
    回䜍チャレンゞしお「Pythonを䜿いたす」ず宣蚀しお県の前でむンタヌプリタヌしおた

    

    これは単なる組み合わせ問題に近いが、もっず耇雑な業務問題も詊しおみたがChatGPT4.0はかなり良い粟床で答えおきた。
    そのうちの䞀぀は、ExcelマクロずPythonで詊行錯誀しながら1ヶ月かけおようやくテスト版を䜜った問題だった。あっさりず解いおきたので、怅子から仰け反った。繰り返すが、プログラムのコヌドを曞いおくれたのではなく、問題を盎接に解いおきた。

    

    仮に、単なる組み合わせ問題で総おの組み合わせを詊したんでも別にいい。
    答えをよく芋るず。これ最適倀じゃない。別に良いのだ。
    業務の䞖界では時間を掛けお最適倀を出すよりは、今、たぁたぁの答えが欲しい。Excelの゜ルバヌずかで組むず奎は延々ず総おの組み合わせを探しお最も良い答えを探しおくれちゃうので、それをいい加枛に枈たせるのが逆に難しい。こういう、ヒュヌリスティック的な解はむしろありがたい。

    組み合わせ爆発を起こすのなら、その時はPythonのコヌドを曞いおもらっお枝刈りする。業務を倧きく捉えるず倧倉になるけど、意倖ず各個の抱える問題は小さく郚品分けするずそんなに倧きな問題で無いこずが倚い。

    これは組み合わせ最適化問題ずいうゞャンルで、それはPrologではない別の䞖界がある。これはむしろ私の本来の埗意分野なので、別の曞き方で生成AIに解いおもらう。これは未怜蚌だしたた埌日。そうか、そうするずこれからはPythonコヌドも曞いおないような論文も、ガンガン読むべきなのか  ハヌドル䞊がったな

    〈ただ党然わからないんだけど〉

    おそらく、私は35幎前に習ったPrologの文法を䜿っお制玄論理で生成AIに解いお欲しい問題を曞いおいた気がする。するず、確かにスラスラず曞けおしたう。
    実際にはPrologで曞いおる蚳じゃなくお、頭の䞭でPrologで曞いお、それを日本語にしお生成AIに曞いおいるのだ。
    Prologのコヌドを曞くのはかなりぶっ飛んだ発想が必芁で、デバッグも䞀筋瞄ではいかない。だから私はPrologをわざわざ䜿う気は無いけれど、この方法に埓えば目の前の課題をスラスラず生成AIで蚘述できおしたうのも確かだった。今日はずっずそれをやっおた
    最適化問題でなくお良くお、私はおっずり早く答えが欲しいのだ。
    過去の孊習が必芁なものは機械孊習にやらせればいい。でもそれだず誰でもは出来ない。

    今日、実際にProlog颚でない堎合ダラダラ曞いた長文でも動くだろうず思っお詊しおみたら、䜕ずかなりたすね。実際には「ダラダラ👉芁玄👉勝手にProlog颚になる」ずいう過皋を螏みたしたが。

    

    論理プログラミングが曞ける人は、生成AIに普通にどんな問題でも曞けるんではないかなぁ。

    たた、色々ず怜蚌しおいきたい。今日色々ず詊したが
    ・論理プログラミングが可胜。    LP
    ・制玄論理プログラミングすらも可胜。CLP

    制玄論理プログラミングは、最適化蚈算に比べるず単なる数匏では扱いにくい問題も可胜な点が異なる。それは圓たり前でPrologは呜題論理だけではなく、述語論理も扱えおしたうのだ。
    ※生成AIにPrologのコヌドを曞かせお実行するのではなく、
     生成AIにProlog颚に曞けば問題を解いおしたうのだ。。。
     Transformerっおそんな機胜、無い筈なんだけどなぁ。。。

    

    特に、制玄論理プログラミングやMathematicaの蚘号蚈算の様に、数倀が未確定なたたで倉数を扱っおいるのを芋぀けお驚愕した。算数は匱いくせに、こんなこずが出来るずは。

    画像
    意図的に もやっず出題。
    画像
    Cが確定しおいない状態。これは凄い事で、未確定なのにCを䜿っお挔算をする事ができる。

    なぜこれを思い぀いたかず蚀うず

    ここ䞀幎で考えたわけじゃない。䜕十幎の詊行錯誀 
    だからこそ、次の人居るのかには苊劎しお欲しくない。

    頭が良い人たちにお願い

    プロンプト゚ンゞニアリングではなく、それの論理プログラミング版みたいな抂念があるはず。そしお、珟状䞖界を箱庭ずしお芋るモデリングのテクニック。それを分かりやすく本にしおくれたら、買っお読むぞ。䞇円でも。
    この方法でも、珟実䞖界の問題をProlog颚に蚘述するずいうのは、ただただ敷居が高い。そこを厩す方法モデリングをどうすればいいか。
    私は18歳䜍からPrologを觊っおきお、Prologをデバッグした時にその動きに感動しお以来 思考方法をProlog颚にしおきおいるのでProlog颚に考えない方法が分からないのだ。
    
    Prologで珟実䞖界の問題を蚘述するこずをモデリングず蚀うので、本来はこの工皋を自動化したいのだ。

    おたけ

    この話をしおみたら
     補造系の人うヌん、ず顔をしかめる。
     技術系の人「面癜い」ず蚀う。
           こんな汎甚的な無料ツヌルは無いのを知っおる
     営業系の人え、そんなの圓たり前じゃんず明るく答える。
           👉そヌなんだよ、圓たり前なんだよ

    

    詊しに、この問題を生成AIにPrologで曞かせおみよう。

    あなたは䜜業管理者です。
    仕事は時間かかり、AさんずBさんずCさんができたす。
    仕事は時間かかり、BさんずCさんができたす。
    仕事は時間かかり、AさんずCさんができたす。
    Aさん、Bさん、Cさんの䞊限を時間ずしたす。
    仕事ず仕事ず仕事を終える事が条件です。
    どのように䜜業を振り分ければ、Aさん、Bさん、Cさんのうち人でこなせたすか

    いや、ここたできちんずは自力では日でも曞けないな笑
    でも、䞊の日本語ずほが察でコヌドが察応しおいる事が分かる。
    ルヌルだけ曞けば、これで動いちゃうのがPrologの䞍思議。

    % 䜜業時間の定矩
    job(job1, 9, [a, b, c]).
    job(job2, 3, [b, c]).
    job(job3, 4, [a, c]).
    
    % 䜜業者の䞊限時間
    limit(a, 9).
    limit(b, 9).
    limit(c, 9).
    
    % 䜜業の割り振りを確認
    can_complete_jobs([W1, W2]) :-
        % 各䜜業者の初期時間
        limit(W1, Limit1), Limit1 >= 0,
        limit(W2, Limit2), Limit2 >= 0,
        W1 \= W2,
        job(Job1, Time1, Workers1), member(W1, Workers1), NewLimit1 is Limit1 - Time1, NewLimit1 >= 0,
        job(Job2, Time2, Workers2), member(W2, Workers2), NewLimit2 is Limit2 - Time2, NewLimit2 >= 0,
        job(Job3, Time3, Workers3), (member(W1, Workers3), NewLimit3 is NewLimit1 - Time3, NewLimit3 >= 0; member(W2, Workers3), NewLimit4 is NewLimit2 - Time3, NewLimit4 >= 0).
    
    % 䜜業者の組み合わせを生成
    worker_combination(W1, W2) :- 
        limit(W1, _),
        limit(W2, _),
        W1 \= W2.
    
    % すべおの䜜業者の組み合わせに぀いお確認
    find_solution :-
        worker_combination(W1, W2),
        can_complete_jobs([W1, W2]),
        format('Jobs can be completed by workers: ~w and ~w~n', [W1, W2]),
        fail.
    
    % プログラムの開始
    :- find_solution.

    さらにおたけ 盎接解けなくおも良い

    匷化孊習、もう1幎以䞊勉匷しおいるけど。䞎えられた問題に察しおどうやっお曞き始めればいいのか党然わからないので攟眮読むこずは出来る

    䟋えば、䞀般的な倉庫の運甚問題。こんなの、䜜業者にヒアリングしなくおも想像で誰でも曞ける。実際はもっず難しい。
    もう、流石にProlog颚は無理なので、普通に曞いおみた。

    画像
    ゲヌムの「倉庫番」ですよ。単に。

    生成AIに自分が知らないPythonの匷化孊習でサンプルコヌドを曞いおもらう。これは普通の発想で、よく垂販本に曞いおある方法。

    画像
    これがあれば、私でも盎せるわ

    

    参ったなぁ、今たではPythonコヌドが茉っおないからず読たなかった技術曞も党郚読んでいかないずならないのか  うヌん

    画像
    なんかね、「犬」で孊習したらその方法を䜿えば
    「鳥」の孊習が速くなるんだっお。うヌん 

    

    チンパンゞヌずバナナの問題を詊しに曞いおもらった。
    ここたで抜象的な問題をPrologに萜ずすのは盞圓に難しい 
    ひょっずするず、モデリングも既にできるのか 
    凄いな  人間が油断するず銬鹿になるな。
    そうか、こういう颚に組むのか。
    こういう問題はPythonでも曞けるんだろうけど、面癜くない。
    これこそ、Prologの匷みだ。
    Prologは探玢方法は蚘述しない。深さ優先探玢だから効率は悪いけど。


    あなたPrologが埗意な論理孊者です。
    以䞋の環境をPrologで曞き、解いおください。
    
    環境
    チンパンゞヌがいたす。
    チンパンゞヌはバナナが奜物です。
    倩井からバナナがぶら䞋がっおいたす。
    チンパンゞヌは届きたせん。
    チンパンゞヌの呚りには、箱が幟぀かありたす。
    どうやら、箱を積み重ねお、その䞊に乗ればバナナに届きそうです。

    👉䞋蚘はChatGPTの蚀葉そのたた
    以䞋は、Prologを䜿っおチンパンゞヌがバナナに届くためのシナリオを衚珟し、解決するコヌドです。
    たず、環境を定矩したす。

    % チンパンゞヌずバナナの状態を定矩
    :- dynamic(at/2).
    
    % 初期状態
    initial_state :- 
        assert(at(chimpanzee, ground)),
        assert(at(banana, ceiling)),
        assert(at(box, ground)).
    
    % 状態の倉曎
    move(chimpanzee, ground, box) :-
        retract(at(chimpanzee, ground)),
        assert(at(chimpanzee, box)).
    
    stack(box) :-
        retract(at(box, ground)),
        assert(at(box, stack)).
    
    % チンパンゞヌがバナナに届くかどうかを確認するルヌル
    can_reach_banana :-
        at(chimpanzee, stack),
        at(banana, ceiling).
    
    % 行動シヌケンスを定矩
    plan :-
        initial_state,
        move(chimpanzee, ground, box),
        stack(box),
        move(chimpanzee, box, stack),
        (can_reach_banana -> write('チンパンゞヌはバナナに届きたした'); write('チンパンゞヌはバナナに届きたせん')).
    

    このPrologプログラムは以䞋の手順で動䜜したす。

    1. 初期状態を定矩したす。

    2. チンパンゞヌが地面から箱に移動したす。

    3. 箱を積み重ねたす。

    4. チンパンゞヌが箱の䞊に移動したす。

    5. チンパンゞヌがバナナに届くかどうかを確認したす。

    以䞋のようにプログラムを実行するこずで、結果を確認できたす。

    ?- plan.

    このプログラムを実行するず、チンパンゞヌがバナナに届くかどうかが衚瀺されたす。

     
     
    18歳からProlog䜿い。自分の備忘録。 蚀語孊、数孊、量子論 Uボヌト、゚ニグマ、ロゞスティクス 賀民 東欧、䞭欧 ナダダ史 サむレントヒル、SIREN