Software Engineer のための Prompt 活用 | Developer eXperience Day 2024レポート
日本マイクロソフト株式会社のシニアクラウドソリューションアーキテクト、畠山大有氏による「Software Engineer のための Prompt 活用」と題された講演が行われた。
本講演は主にソフトウェア開発者向けに、プロンプトによるLLM(大規模言語モデル)活用の重要性と、ソフトウェア開発プロセス全体におけるLLMの活用方法に焦点を当てたものである。
畠山氏の講演資料はSpeakerDeckにて公開されている。
https://speakerdeck.com/dahatake
また、本公演で行われたデモにて使用されたPromptはGitHubにて公開されている。
プロトタイプ開発:
ChatGPT-Prompt-Sample-Japanese/Software Enginner/Webアプリのプロトタイプ開発
単体テスト:
ChatGPT-Prompt-Sample-Japanese/Software Enginner/単体テスト
登壇者
日本マイクロソフト株式会社
シニア クラウド ソリューション アーキテクト
畠山 大有氏
「Promptすること」の大切さ
講演の冒頭で畠山氏は、自身の役割がフィールドエンジニアリングであり、システム開発の技術支援やサンプルコード作成、最近では特にプロンプト作成に多くの時間を割いていると説明した。
畠山氏は会場に「毎日Promptしていますか?」と問いかけることから始め、プロンプトを書き続けることの重要性を強調しながら講演を進めた。
エージェントや様々なツールが登場する中でも、結局はプロンプトが基盤となることを説明し、プロンプトの理解が不可欠であると述べた。また、RAGを使用するとしてもデバッグの際にはプロンプトが重要であり、プロンプトの中身を理解することが、エンジニアとしての基盤を強化することにつながるとも述べた。
また、LLMが生成するアウトプットは全て「ドラフト」であり、完成品にはならないことを強調した。
「プロンプトの精度を上げて完成品を作ろうとはしないほうが良い」とし、タスクと作業のボリュームを見て、適切なタイミングで切り上げる判断が必要であると述べた。
また、APIのように1回のコールで全てを済ませようとするのではなく、複数のターンでプロンプトを進めていくことが重要だという。LLMを活用したアプリケーション開発においても、これはユーザー体験に反映するべきだとした。
参照データとそれを活用した抽出、変換
畠山氏は、仕事でLLMを使用する際の3つのポイントを紹介した。
- 参照データの活用:可能な限り参照データを入れることで、間違いやハルシネーションを防ぎ、より精度の高い結果が得られる。この参照データを活用して、変換と抽出を行っていく。
- 抽出:特定の類型の情報をピックアップする機能を活用することである。
- 変換:コメントからプログラムコードを生成したり、日本語を英語に翻訳したりする機能を活用することである。
この中でも特に抽出を活用する例として、畠山氏は自身のメールでの活用方法を解説した。
LLMの「構造化されたデータの抽出が得意である」という特性を活かし、お客様より送信されてくるメールから、指定した項目を抽出、分類するというものだ。
これによって、お客様の要望を素早く解釈することができるという。
こういった活用を通じて、人間が行うと時間のかかる作業を効率的に処理できることを説明した。
さらに、デジタルデータの重要性が強調された。現在のモデルには制限があるものの、将来的にはより大量のデータを扱えるようになるため、将来的な活用を見越して今のうちにデジタルデータを安全に保管しておくことが重要であるとした。
デモンストレーション「Promptだけでどこまで出来るのか?」
講演の後半部分では実際のデモを交えながら、要件定義から実装、テストまでの一連の開発プロセスにおけるプロンプトとLLMの活用方法が紹介された。畠山氏は「観光者アプリ」を例として、約15分という短時間で以下のステップを実演した。
- 要件定義とユースケースの作成
- 機能要件と非機能要件の設定
- アプリケーションアーキテクチャの設計
- データモデルの作成
- サンプルデータの生成
- データベーススキーマの作成
- 画面の作成
- フロントエンド(Vue.js)とバックエンド(Azure Functions)のコード生成
畠山氏は、この手法を使用することで、顧客との会話中にリアルタイムでプロトタイプを作成し、迅速なフィードバックを得ることができると説明した。また、この方法はドキュメント作成や設計図の作成、動作する雛形の作成まで網羅できることが示された。
単体テストに挑む
講演では単体テストの重要性が強調され、それもまたLLMによって効率的に行うことができるとした。
GitHub Copilotなどのツールが単体テストを自動生成する機能を提供しているが、業務要件との整合性を確保するには不十分であるとの指摘があった。それをカバーするために「詳細な単体テストの仕様書を作成してください」という指示によって、LLMがテスト仕様書を作成するデモが実施された。このデモを通じて、LLMを使用して業務要件から単体テストの雛形を作成し、ビジネスと実装の整合性を取ることの重要性とその方法が説明された。
また、テストケースの細分化やテストデータの作成など、通常は手間のかかる作業もLLMを活用することで効率化できることが示された。
バージョン指定の重要性
ここまでの説明の中で、畠山氏はいくつかの実践的なアドバイスを提供した。
その中の一つに「エラーの多くが環境の問題である」というものがあった。畠山氏の経験によると、LLMが生成したコードのエラーの多くは環境の問題であり、具体的には、バージョンの違い、パッケージが古い、必要なパッケージがインストールされていないことなどが主な原因であるという。
例えば、npmコマンドを実行すると最新バージョンのパッケージがインストールされるが、LLMが生成したコードはそれより古いバージョンを想定している可能性がある。こういった問題を解消するために、プロンプトでバージョンを明示的に指定することで、エラーを減らし、生成されたコードがそのまま動作する可能性が高まると説明した。
音声入力とLLMの組み合わせ
デモの最後で畠山氏は、音声入力とLLMを組み合わせたアプローチを紹介した。Windows の音声認識機能を使用し、畠山氏が音声でWebページの仕様を説明する。それをLLMが解釈して即座にコードを生成するというものだ。
畠山氏が実現したい機能や、画面に表示されるべきものをマイクに向かって話していくと、それが文字起こしされていく。それをLLMが解釈して即座にコードが生成されていった。
実際に生成されたコードを実行してみると、時間に応じた挨拶文の生成や入力チェックなどが行われ、詳細な要件も音声指示だけで実装できることが示された。
最後に
畠山氏は、現在のLLMにおける音声認識の精度はまだ高くないとしながらも、我々の意図を汲んで動くものを作ってくれるということは知っておくべきだとした。
技術の進展について「現在我々が使用している技術はまだ道半ばであり、これからさらに優れたものが次々と登場する」と述べ、LLMの未来への期待感を示した。畠山氏は講演の最後を「もっとプロンプトを活用して、より楽しい日々にしていただきたい」という呼びかけで締め括った。
考察
「プロンプトの完成度を高めて、完成品を作ろうとしている人が多いが、LLMが作ってくれるアウトプットはあくまでもドラフトである。永遠に完成品にはならない。」
畠山氏が述べられたこの言葉が、非常に印象に残るセッションだった。
また、複数のターンを繰り返しながら精度を高めていくことも、意識していないと実践できない場合があるので気をつけたい。
私にも、プロンプトを長文にして、1つのプロンプトだけで、できる限り良い結果が返却されるように細かくチューニングを繰り返した経験が何度もある。
今回のセッションは、そうした今までのやり方を省みるとても良い機会となった。
セッション内での「観光者アプリを作る」デモも、非常に実践的でわかりやすい内容だった。私もエンジニアとして要件定義をしたり、事業サイドと打ち合わせをすることがあるが、プロンプトをしっかりと活用して、LLMで設計や実装をここまで短時間に実施できるのであれば、認識のずれをかなり削減できると感じた。
全体を通じて、冒頭の畠山氏による「毎日Promptしていますか?」という問いかけの意味と、そうすることがどれほど重要かよく分かる内容だった。ぜひ実践していきたい。