PyCon JP 2024

Pythonを活用したLLMによる構造的データ生成の手法と実践
2024-09-28 , 4F Track3

大規模言語モデル(LLM)の進化は目覚ましく、その応用範囲は広がっています。しかし、LLMの出力を利用したアプリケーションの構築において、その出力のデータ内容やスキーマの制御が求められます。本セッションでは、Pythonを中間コードとして用いて、構造的データを効率的に生成する手法を紹介します。この手法は直接出力よりも反復的なデータや計算を含むデータ等により効力を発揮します。また、生成過程における、Pythonコードの安全な実行環境としてWebAssemblyを利用した方法も提案します。最後に、これらによって構築されたLLMアプリケーションのアーキテクチャと、実践的デモを実演します。


近年、ChatGPTに代表される大規模言語モデル(LLM)の発展は目覚ましく、様々なタスクへの応用が期待されています。しかし、LLMのアプリケーションを開発する際、LLMが出力するデータの構造や型について制御する場面が多々あり、それについて悩んでいる開発者も多いと思います。

本セッションでは、これらの課題に対する解決策として、Pythonを中間コードとして用いる手法を紹介します。具体的には、LLMにPythonコードを生成させ、これを実行することによって、より正確なデータを生成する方法について説明します。

このアプローチにより、例えば以下の効能が得られます。
- 反復的なデータを直接列挙するよりも、出力トークンの効率が向上し、レスポンス時間短縮が可能、
- 数値や計算について、より厳密な結果が期待できる。
- 時間や日付の計算が正確に行える。
- データの変換処理(文字列置換など)をプログラムの処理として定義できる。

特に、ターゲット言語をPythonにすることで、Pythonのエコシステムを活用できる利点もあります。具体的には以下のような利点があります。

  • リストやネスト構造を含む複雑なデータ構造をdataclassとして表現可能。
  • f-stringによるコンパクトで柔軟な文字列フォーマット。
  • calendarパッケージ等、便利な標準ライブラリとの連携。
  • Pydanticなどを用いた結果のバリデーションの自動化、シリアライゼーション/デシリアライゼーションの自前実装が不要。

しかし、LLMが生成したコードの実行は危険なコードが出力されうるというセキュリティリスクが伴います。そこで、本セッションでは加えて、WebAssemblyによるサンドボックス化を用いた安全なコード実行環境も紹介します。WebAssemblyを用いることで、実行時間、メモリ、I/Oを制限し、安全性を確保しつつ、低レイテンシを実現します。また、dataclassのシリアライズ/デシリアライズによって、アプリケーションとサンドボックス間のデータ連携もシームレスに行うことができます。

本セッションでは、実用的なマーケティングアプリケーションの設定ルール生成を題材としたデモを行います。これは実際に自社のクラウドアプリケーションを例に取り、具体的なアーキテクチャを示します。 さらに、JSONの直接出力や他のプログラミング言語との比較実験を通じて、本手法の精度、レイテンシ、出力トークン量を評価し、その有効性を検証します。

このセッションを通して、参加者はPythonを活用したLLMによる構造的データ生成の手法とその実践的な構築方法について深く理解することができるでしょう。


Why did you choose this topic?:

自社でLLMアプリケーションを開発するにあたり、データ出力を精度良く効率的にする方法はないかと考えていました。試行錯誤の結果、Pythonコードを生成してそれを実行するとより良い結果がでることがわかりました。また、Pythonをターゲット言語にすることでそのエコシステムの恩恵を最大限に受けられると認識することができました。この知見を多くの開発者と共有し、LLMアプリケーション開発の進化に貢献したいと考え、PyConでの発表を決めました。
また、セキュアな実行環境としてのWebAssemblyとの組み合わせもサブトピックとして面白いと思い、今回それについても共有できればと思いました。

Knowledges and know-how the audience can get from your talk:

・LLMの効率的な構造データ出力の方法とその構成方法
・不確実なPythonコードのWebAssemblyを用いた安全な実行方法
・この手法を用いたLLMアプリケーションの新たなアイデアの種

Prior knowledges speakers assume the audience to have:

・Pythonのプログラミング言語の知識
・基本的なLLMの概要
・メタプログラミングの知識があると尚可

Audience experiment:

Advanced

Language of presentation:

日本語

Language of presentation material:

日本語

See also: Pythonを活用したLLMによる構造的データ生成の手法と実践

大学院でプログラミング言語システムについて研究した後、データ活用企業であるブレインパッドに新卒入社。マーケティングツールである Rtoaster を中心に設計や開発を行う。最近はプロダクトにLLMを導入するための企画・開発を行っている。

PyCon2021において「Pythonのバリデーション定義からフロントエンドTypeScriptのコード生成」で登壇。