chatGPTで機能分解木を作る。v1
機能分解木とは
機能分解木は親目的ー子方式ー子目的ー孫方式ー孫目的ー・・・と目的を機能を対象として顕在化しながら記述する手法である。目的を達成する手法を書いていく。ある子方式の下階層に複数の小目的を時系列に配置する。方式は基本的には独立である。手法は単語で書き。目的は文章で書く。主語は自明な場合は省略する。
行為に対しては行為分解木と呼ぶが両者をあわせてここでは機能分解木と呼ぶことにする。
目的
LLMは過程をよく知っているのでLLMを使って機能分解木を書きたい。しかし,chatGPTは過程+特徴というまとめ方をするため,過程と特徴が混乱するという問題がある。マインドマップならはこれでOKだが,機能分解木としてはNGである。
chatGPT v4o, v4で図を書けというとDalleを用いてしまう。そのために可視化にはPlatUMLのmindmapフォーマットを出力してもらう。親が一つの場合これでdiagramの記述ができる。
プロンプト
プロンプトをこちらに置く。
https://github.com/nim-hrkn/LLM_FDN
正しくpushできているかわからないが現在はtag: v1である。
prompt/prompt.txtにある。
生成過程
phase1 からphase3に分けてある。
- phase1は第一段階生成
- phase2でconsistency チェック
- phase3でplantUMLによる変換を行う
としている。試行錯誤でLLMの誤りからチェックをして欲しい事項を書いたのだが,phase2はうまく動作していない。few shot learnerとしてphase2の替わりに例を幾つか置いたおかげで動作しているように見える。プロンプトの例もLLMでの試行錯誤中にできた成果を使っている。
plantUMLのマインドマップは(https://www.plantuml.com/)で変換できる。plantUMLのマインドマップでは目的と方式の図形を分けることができないので,「目的:文章。」「方式:単語」と表示させている。
この時点での結果を書いておく。
結果:明かり
まず,
明かりについて説明してください。どのような明かりがありますか。
その原理を説明してください。
としてLLMに話してもらう。その知識で十分であれば,
「目的:室内を明るくする。'の機能分解木を書いてください。
とする。しかし,方式が単語で無いので修正してもらう。
方式は単語で書いてください。
目的ー方式ー目的ー方式と書くことはできたが,時系列を方式で書いてしまうという問題がある。
結果:エアコン
エアコンの原理を説明してください。
で良さそうな回答が得られることを確認してから
「目的:エアコンで室内の気温を下げる。」を機能分解木で書いてください。
で機能分解木を書かせる。「目的:エアコンで室内の気温を下げる。」の直下の階層の方式で過程を書いてしまう。
"""
** 方式:設定調整
** 方式:運転開始
** 方式:冷却
** 方式:空気循環
** 方式:温度維持
"""
を目的で書いてください。
とする。
結果:冷媒を循環させて冷却する
「目的:冷媒を循環させて冷却する。」を機能分解木で書いてください。
再び方式で目的を書いているので修正させる。
** 方式:圧縮
** 方式:凝縮
** 方式:膨張
** 方式:蒸発
"""
を目的としてください。
ではそれぞれに目的を作成してしまう。
"""
* 目的:冷媒を循環させて冷却する。
** 方式:冷媒循環方式
"""
として書き直してください。
とすると正しく書き直せる。
まとめ
- 多くの場合に目的を文章,方式を単語で書けるようになった。(最初はできなかった。)
- 過程を方式で書いてしまうことが現状の欠点である。目的と方式を理解させられるわけでは無い。
- まだ作成できる階層が浅い。