AI を使った自作言語リファレンス生成の実験記録

Page content

最近、 自作プログラム言語のリファレンス を AI(LLM) を使って整備する検証を進めている。 入力には自作した既存の org 形式のリファレンスをそのまま流し込み、 出力は人手で監修しつつ段階的に磨く。 結論から言うと、 監修前提なら十分実用になる ところまで仕上がってきた。

作成したリファレンスは以下。

<https://ifritjp.github.io/ai_agent_Lune/artifacts/index.html>

背景と狙い

  • 目的: 言語仕様の抜け漏れを減らし、 参照性の高いリファレンス を短時間で更新する。
  • アプローチ: 既存 org の章立てを棄てて新しく再構成し、分かり易さ重視で LLM に拡張生成させる。
  • 成果物: org のまま出力し、静的サイトに流す。

検証フロー: コンパイラでサンプルを確認

生成されたリファレンスに載せるサンプルは、 必ずコンパイラでビルド・実行 して検証するように AI に指示した。

LLM の理解度チェック: 簡易パーサーを作らせる

LLM 自体がどの程度文法を理解できているかを確認するため、 1K Line 程度で作成可能なプログラムを開発させることにした。

テーマを考えるのも面倒なので、適当なテーマを LLM に複数考えさせて、 その中から 簡易的なパーサー を選択し、実際に生成させた。

結果は 「普通に作成できた」 。 トークナイズ→再帰下降の最小構成で、式/文/関数定義/評価の 骨格 は問題なく組めている。

実行環境を与えた場合の学習効果

LLM が未知の言語のリファレンスを投入し、 実行環境(コンパイラ/VM) を与えると、 まともに動くプログラムを 漸進的に作成 できるようになった。 これは正直関心した。

まぁ、自作言語のシンタックスが今風の王道言語をかなり参考にして作成してあるから、 学習し易いというのはあるだろう。 とはいえ、あっと言う間に使いこなせるのは凄い。

まとめ

LLM を使ってリファレンスを作る試みは、 監修と検証を前提 にすれば十分使える。 特に、サンプルの コンパイル・実行 を処理に組み込むと、品質が一段上がる。

なお、「言語仕様の抜け漏れを減らし、 参照性の高いリファレンス を短時間で更新する」という 目的は、今回は達成できなかった。 特に最初に作成されたリファレンスは使いモノにならないレベルの内容で、 少しずつプロンプトで補足していったが、 結局は元々のリファレンスの一部を抜粋する形で諦めた。 ここは、現状の LLM の限界なのかもしれない。

今後、 LLM でプログラミングすることが当たり前になった場合、 LLM で処理可能な言語しか使われなくなるだろう。 その場合、メジャーな LLM で学習されないマイナーな自作言語なんてものは新しく出てこないだろう、 と思っていたが、リファレンスと実行環境さえ LLM に食わせてやれば、 勝手に学習してくれることを考えると、まだまだ自作言語も捨てたものじゃないのかもしれない。

ただしこの場合、無駄に LLM のトークンを消費することになるので、 自作言語の意義が薄れていくことになるのは間違いないだろう。