Techouse Developers Blog

テックハウス開発者ブログ|マルチプロダクト型スタートアップ|エンジニアによる技術情報を発信|SaaS、求人プラットフォーム、DX推進

RubyKaigi 2024 - Let's use LLMs from Ruby 〜 Refine RBS types using LLM 〜 (Day1)

ogp

Let's use LLMs from Ruby 〜 Refine RBS types using LLM 〜

こんにちは、クラウドハウス労務でバックエンドエンジニアをしているtitti-008です。

本記事では、1日目の@kokuyouwindさんによるセッション、Let's use LLMs from Ruby 〜 Refine RBS types using LLM 〜について紹介させていただきます。

セッション概要

@kokuyouwindさんは、LLM(大規模言語モデル)を使ってRBS(型構造)を推測するRBS Gooseというプロジェクトを作成しました。まだ実用段階には至っていないとのことですが、そのアイディアと実験結果について紹介されました。
それでは、セッションの内容を見ていきましょう。

LLMとはなにか

LLMとは、Large Language Modelsの略称で、2023年頃から世間を騒がせているAI(大規模な言語モデル)を指します。OpenAI Chat-GPT4や、Google Geminiなどがその代表例です。(※ この記事では読者の皆さんがLLMについて一定の知識を持っていることを前提に話を進めます。)

RBSとはなにか

RBSとは、Ruby3.0から導入された、Rubyの型構造を定義するための構造であり、ライブラリです。Rubyは動的型付け言語であるため、型推論が難しいとされていますが、RBSで型を注入でき、実行前に不正なメソッドの呼び出しを検出できるなどの恩恵があります。

以下の例では、Helloクラスのhelloメソッドに対するRBSの定義をしています。

# lib/example1.rb
class Hello
  def hello
    "Hello, world!"
  end
end

# sig/example1.rbs
class Hello
  def hello: () -> String
end

RBS Goose

RBSの型推測は、RubyコードからRBSを生成する手法がいくつかありますが、完璧なRBS生成は難しいとされています。そのため、LLMを使ってRBSの型定義を推測できないかと考え、RBS Gooseを作成したとのことです。

RBS Gooseのアーキテクチャ

RBS Gooseのアーキテクチャは以下のようになっています。

  1. まずは既存のRBS生成手法を用いて、RBSを生成する。
    ※ 今回取り上げられた既存のRBS生成手法: 静的構文解析、静的ロード、型レベル実行(typeprof)
  2. 元となるRubyファイルと、1で生成したRBSファイル、そして事前に用意したお手本の学習データ(examples)をPromptを作成
  3. Langchainを通して、PromptをLLMに入力し、修正されたRBSファイルを得る

(セッションスライドのこちらの概要図が参考になります)

Langchain.rb

ここで登場するLangchainとは、色々なLLMのWeb APIを共通インターフェイスで利用できるようする便利なGemです。このGemを使うことで、簡単に様々なLLMを入れ替えて性能試験できたそうです。

性能評価1: メタプログラミングを含む短いコードでの推論

1つ目の実験では、以下のようなメタプログラミングを含む、合計30行弱のコードを用いて、RBSの型を推論しました。

altテキスト 引用元スライド

こちらが公開されているセッションのスライドの性能検証の結果です。
altテキスト

OpenAI GPT-4系のLLMにおいて、良好な結果を得られたことがわかります。特に、最近リリースされたばかりのGPT-4omniが優れているようです。
OpenAI公式以外でのデータを使った定量的な性能検証結果は、日常的にLLMを利用しているユーザーにとっては、大変貴重かつ有意義なデータなのではないでしょうか。

性能評価2: 複数ファイルでの推論

2つ目の実験では、複数ファイルをまたぐRBSGooseのRubyコード全体からRBSを推測しました。

こちらが公開されているセッションのスライドの性能検証の結果です。
altテキスト

やはりOpenAI GPT-4系(GPT-4omni)で良好な結果を得られたことがわかります。少なくとも型推論においては、OpenAIは他のLLMと比べて、一歩リードしているようです。一方で、まだ完璧なできとは言えず、Syntax Errorが発生するなど課題も多く残っているとのことでした。

気になること(RBS::Inline と GitHub Copilotによる型推論)

今後、RBS::Inlineの登場すると、Rubyファイル内にRBSを定義できるようになるため、GitHub Copilotと組み合わせて、簡単に型推論できる可能性があるとのことです。
「RBS Gooseが不要になるのでは...」という懸念がありつつも、「自分で成功の機会を捨てる(Cook my own goose)前にもう少し続けてみたい」と前向きな姿勢を示されていました。

感想

まだ実用段階には至っていないとのことですが、LLMと型推論を組み合わせるアイディアがとても面白いと思いました。また、LLMの活用についてまだまだ未開拓な分野が多いため、同様の推論用途での活用の道を示す良い実験結果だと感じました。GPT-4omniが世に出たばかりということもあり、OpenAI公式のデータ以外に定量的なデータはあまり見かけない中、このセッションで得られた検証結果はとても価値のあるものだと思いました。
RBS Gooseの今後の発展を楽しみにしています。


Techouseでは、社会課題の解決に一緒に取り組むエンジニアを募集しております。 ご応募お待ちしております。 jp.techouse.com