はじめに
ChatGPTやCopilotを使っていると、
あなたは優秀なエンジニアです。
あなたはベテランコンサルタントです。
のようなプロンプトを見かけることがあります。
生成AI関連の記事では
Role Promptを付けると回答品質が向上する
という説明をよく目にしますが、実際本当に向上しているのでしょうか?
そこで今回は、ローカルLLMであるOllamaを使って、
あなたはベテランエンジニアです。
という一文を付けるだけで回答品質がどれほど変わるのかを検証してみました。
Role Promptとは
今回検証するのは Role Prompt(ロールプロンプト) と呼ばれる手法です。
例えば
REST APIについて説明してください。
という質問に対して、
あなたはベテランエンジニアです。
REST APIについて説明してください。
と、LLMに事前に役割を与えます。
そうすると、その役割に沿った回答が生成されるため、回答の専門性が上がったり、説明の構造や観点が変化すると言われています。
ただ、本当に回答品質が向上するのかについては意外と比較検証された記事が少ないように感じたので、自分で検証してみようと思います。
検証内容
VSCodeにて以下の流れで検証します。
①同じ質問を用意する
②通常プロンプトで回答を生成
③Role Prompt付きで回答を生成
④生成結果を評価する
⑤スコアを集計・比較する
イメージ
今回は、
Role Promptは本当に効果があるのか?
だけを確認したいため、Role Prompt以外の条件はすべて同じにしています。
事前準備
本記事では、あらかじめ以下が利用可能な状態を前提としています。
- Ollama
- Python
- VSCode
インストール方法については公式サイトを参照してください。
Ollama
https://ollama.com/
Python
https://www.python.org/
また、今回はPython から Ollama を呼び出しますので、以下のインストールも必要になります。
pip install ollama
検証手順
- 質問の準備
ここでは初心者エンジニアが業務で遭遇しそうな質問を作成しました。
"REST APIとは何ですか?"
"Dockerとは何ですか?"
"GitとGitHubの違いを説明してください"
"NullPointerExceptionの原因を教えてください"
"HTTP 500エラーとは何ですか?"
- 比較用コードを作成
コードや実行用のファイルは以下で公開しています。
- 実行
python role_test.py
- 評価
今回は以下の観点で評価します。
| 評価項目 | 5点 | 3点 | 1点 |
|---|---|---|---|
| 正確性 | 質問に対して正確に回答している | 一部不足はあるが概ね正しい | 誤りが含まれる |
| 構造化 | 見出しや箇条書きで整理されている | ある程度整理されている | 長文のみで読みにくい |
| 具体性 | 具体例や利用シーンが含まれる | 簡単な具体例のみ | 抽象的な説明のみ |
| 実務性 | 業務での利用イメージまで説明されている | 実務への言及が少しある | 用語説明のみ |
各項目を5点満点で採点し、
総合点 = 正確性 + 構造化 + 具体性 + 実務性
で比較します。
例としてここでは REST APIとは何ですか? という質問に対する
- 通常プロンプト
- Role Prompt付き
の回答を見てみましょう。
通常プロンプト
REST APIは、"Representational State Transfer Application Programming Interface"の略称で、ウェブサービスを提供するためのアーキテクチャ的なスタイルと一連の規約を指します。
REST APIは、Webから情報を取得・更新・削除するための標準的なメソッド(GET, POST, PUT, DELETEなど)を使用することで、サーバーとクライアント間でのデータ交換を行うことができます。
以下にREST APIが持つ特徴をいくつか挙げます:
1. Stateless (無ステート):各リクエストは自身で独立しており、前回の通信情報は次の通信では再利用されません。
2. Cacheable(キャッシュ対応):HTTPメソッドを使用することで、サーバーから取得したデータが再使用可能であることを確認できます。
3. Layered System:リクエストの送受信を途中でブロックすることが可能な中間層があることが前提です。これによりトラフィックは効率的に制御され、データは最適化された方法で送られます。
このスタイルと規約が組み合わさることで、REST APIはプログラマにとって使いやすく、データのやり取りが容易になることができます。また、一般的にインターネット上で使用されているため、多くのプログラム言語やフレームワークでサポートされています。
Role Prompt
REST API(Representational State Transfer Application Programming Interface)は、サーバーとクライアントの間で情報をやり取りするための規約を定義したプログラミングインターフェースです。
「REST」の名前は以下の3つの特性から来ています:
1. **Representational State Transfer(表現的状態転送)**: リソースがデータとその状態を表現します。異なるリソースには異なるメソッド(HTTPメソッド)でアクセスします。
2. **Client-Server Architecture(クライアントサーバー型の体系)**: REST APIはサーバーから情報を提供するだけの単一の役割を持つクライアントと、リクエストを処理して返答するサーバーで機能します。
3. **Cacheability(キャッシュ可用性)**: サーバ側がリクエスト結果をキャッシュし、それが有効である間は必要なリクエストを軽減します。
REST APIの基本的な特性としては以下のものが挙げられます:
1. ** Stateless(無状態)**: 一度の通信が完了すると、サーバーとクライアントともにその前後のステータスを記録しない。次のリクエストには再生成されたトークンが必要となる。
2. **Client-Server Separation(クライアント・サーバー分離)**: ユーザのインターフェイス、アプリケーションの論理的な制御とデータ管理は物理的に分離されている。
3. **Uniform Interface(統一したインターフェース)**: 全てのリソースに対して同じAPIが適用される。
REST APIはインターネット上で最もよく見かけるAPIの一つで、Webサービスやアプリケーション間のコミュニケーションに利用されます。
- 比較
比較結果
| 項目 | 通常 | Role Prompt | 評価理由 |
|---|---|---|---|
| 正確性 | 3 | 4 | 両方とも一部不正確な説明あり |
| 構造化 | 3 | 5 | Role Promptは項目されていて整理されている |
| 具体性 | 2 | 3 | Role Promptのほうが具体的な説明あり |
| 実務性 | 2 | 3 | Role Promptは利用シーンを述べている |
| 合計 | 10 | 15 |
まとめ
今回は、Ollamaを利用して、Role Promptは本当に効果があるのかを見てみました。
検証の結果、Role Promptを付与することで回答が構造化され、説明内容が具体的になる傾向が見られました。
一方で、必ずしも回答内容の正確性が向上するわけではなく、不正確な説明が含まれるケースも確認できました。
そのため、
Role Promptを付けると回答品質が向上する
というよりは、
Role Promptを付けることで、AIの回答の構造や説明粒度を調整できる
と捉えるほうが実態に近いと感じます。
今後は、
- ベテランエンジニア
- ITコンサルタント
- プロジェクトマネージャー
など、複数のロールを比較し、回答にどのような違いが生まれるのかも見てみたいと思います。