👏

LLMはなぜ『あなたは〇〇の専門家です』で振る舞いを変えられるのか

に公開

この記事の見どころ

「あなたは〇〇の専門家です」と入れるだけでなぜそれらしい挙動をするようになるんだろう?
この疑問が本記事を書き始めたきっかけです。

プロンプトエンジニアリングの原理を理解することで、AIに“人格”を与えられる理由が見えてきます。

「あなたは〇〇の専門家です」と伝えるだけで、AIが専門家らしい語り口や知識を引き出せるのはなぜなのか?
これは呪文ではなく、LLM(大規模言語モデル)の学習構造と注意機構(Self-Attention)の仕組みに基づいた自然な現象です。

この原理を理解しておくと、単なる「便利な使い方」を超えて、根拠を持ってLLMの出力精度を上げられます。

参考論文

本記事は
Prompt Engineering for Conversational AI Systems: A Systematic
Review of Techniques and Applications

会話型AIシステムにおけるプロンプトエンジニアリング:技術と応用の体系的レビューという論文をもとに作成しています。

https://www.researchgate.net/publication/388202091_Prompt_Engineering_for_Conversational_AI_Systems_A_Systematic_Review_of_Techniques_and_Applications/fulltext/678f482295e02f182ea83753/Prompt-Engineering-for-Conversational-AI-Systems-A-Systematic-Review-of-Techniques-and-Applications.pdf?origin=publication_detail&_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6InB1YmxpY2F0aW9uRG93bmxvYWQiLCJwcmV2aW91c1BhZ2UiOiJwdWJsaWNhdGlvbiJ9fQ

論文の内容

この論文では既存のプロンプトエンジニアリング手法性能向上が見込まれる新規手法を提案しています。

それらの手法を整理しつつ、プロンプトエンジニアリングの原理を紐解くことで理解を深めていきます。

具体的な実装例も載せているので参考にしてみて下さい。

既存プロンプトエンジニアリング手法

論文内で紹介されている既存手法は主に4つです。
実運用では状況に合わせてこれらの手法を掛け合わせて使用します。

役割ベースプロンプト

本題にもなっている「あなたは教育者/金融アナリスト/投資の専門家です」と指示する手法です。
AIとのやり取りを定義されたペルソナや行動枠組みを通じて構築するアプローチとなっています。

指導役・講師役といった専門性がはっきりしている教育コンテキストなどで特に効果を発揮し、明確な役割を与えることで一貫性のある文脈に即した回答が得られるようになります。

■教育コンテキストにおける例
あなたは大学の数学教授です。  
新入社員に行列の基礎を教える役割を担っています。  
専門用語は噛み砕いて説明し、例題を使って分かりやすく説明してください。 

文脈的フレーミング

文脈的フレーミングとはプロンプトに関連する背景情報や条件を組み込み、AIの応答を適切に誘導する手法です。
AIが「この状況では何を前提にこたえるべきか」を理解しやすく、出力の精度や関連性を高めることができます。

■文脈的フレーミングなし
Pythonでコードを書いて

■文脈的フレーミングあり
あなたはソフトウェアエンジニアです。
新入社員に説明するつもりで、Pythonでリスト内の偶数を抽出するコードを書いてください。
コメントを入れて、分かりやすくしてください。

パラメータ最適化

上記の手法はプロンプトの中身を工夫していたのに対して、本手法はモデルの出力特性を調整する手法となっています。

パラメータ最適化とは、LLM出力の「温度・多様性・安定性」を調整する技術です。
変数となるのは主に2つで、temperatureとtop-pというものです。

temperatureとは温度という意味で、LLMにおいては出力の確率分布そのものを滑らかにするパラメータです。
対してtop-pは確率分布の上位から「累積確率がpを超えるまでの単語集合」だけを候補に残し、その中からランダムに選ぶパラメータです。

創造性が欲しいときには高温度/高top-pに、一貫性が欲しいときには低温度/低top-pに設定します。
APIクライアントを作成する際に設定可能です。

# パラメータ設定例
resp = client.chat.completions.create(
    model="gpt-4o-mini",            # 任意のモデル
    messages=[
        {"role": "system", "content": "あなたは親切なエンジニア講師です。"},
        {"role": "user", "content": "ECRとECSの違いを初心者向けに説明して"}
    ],
    temperature=0.4,                # ← 決定性(低いほど固い)
    top_p=0.8,                      # ← 候補の広さ(高いほど多様)
)

Few-shot学習

名前の通り、できるだけ少ない例で新しいタスクに適応させる手法です。
入力と出力の例をプロンプト内に与え、そのパターンをモデルに学習させます。

文脈的フレーミングに近いですが、あちらは背景や状況を説明することで、こちらは具体例を与えて解釈の方向性を決めているという違いがあります。

選んだ例の質、例の複雑さとタスク要件の一致度、タスクの難易度に応じた例の適切な数、多様性とエッジケースのカバーが本手法のドライバーです。

LLMは直前の情報を重視する傾向(Recency効果)があるため、基本→応用という順番で、本番に近い例を後半に載せると精度が安定しそうです。

■メール分類における典型例とエッジケースの例
入力: "Congratulations! You have won a $1000 gift card. Click here to claim your prize."
出力: スパム
- 上記はスパムです。典型的な賞金、クリック誘導系です。

入力: "Hi, just checking in about our meeting tomorrow at 10am."
出力: 通常
- 上記は通常です。一般的な業務連絡メールです。

入力: "Reminder: Your account security may be compromised. Please verify your identity immediately."
出力: スパム
- 上記はスパムです。セキュリティ通知に見えますがフィッシングです。

新規プロンプトエンジニアリング手法

先ほど紹介したプロンプトは性能向上が見込めますが完ぺきな回答を得られるわけではありません。
また、プロンプトを生成する手間もあり、複雑なプロンプトでは保守も難しいです。

それらの課題を解決するために現在研究が進められている手法として代表的なものが下記の3つになります。

マルチモーダルプロンプト学習

テキストに加え、画像・音声・動画など複数のモダリティを組み合わせたプロンプト設計です。
異なるモダリティ間のアライメント(整合性)を最適化し、より豊かな入力と出力を可能にします。

プログラミングをしているときにエラー画面全体のスクリーンショットをChatGPTに投入して「どこが問題だと思う?」と聞いたこと、一度はあるのではないでしょうか?
あのやり方をより精度が出るように研究しているそうです。

より専門的な運用例としては、医療現場などがあげられるのではないでしょうか。

入力: 患者の胸部X線画像 + 「この患者は咳と発熱の症状があります。診断の可能性を説明してください」

出力: 「画像では肺に影があり、文脈的に肺炎が疑われます。追加検査として血液検査を推奨します。」

自動プロンプト生成

人間が毎回工夫してプロンプトを書くのではなく、AI自身がタスクに最適なプロンプトを生成・改良する仕組みです。
エージェントや最適化アルゴリズムと組み合わせることで、人間の介入を減らしつつ高精度を実現します。

以前読んだ、AIエージェントがAIエージェントを生成する仕組みがありましたが、そちらで応用されているのがこちらの技術でした。

タスクに対して必要な知識は何かを分解し、その知識を持つエージェントがいないと判断したら新しい専門家を生み出すためのプロンプトを生成、追加するというものです。
詳しくはこちら。
https://zenn.dev/zenn_mita/articles/9904a83d265e66

教育的インプリケーション

プロンプト設計を体系的に教育し、スキルとして定着させる仕組みのことです。
専門知識がないユーザーでも、標準的なフレームワークを通じて適切なプロンプトが扱えるようにするために、「プロンプトエンジニアリング」についてちゃんと学ぼうというすすめです。

従来のプロンプトエンジニアリングはまだ新しい技術領域ということもあり個人の裁量にゆだねられている部分が多い印象でした。
正しい知識を正しく共有することで、誰でも高水準のプロンプトエンジニアリングができるようになることが期待されます。

本記事も教育的インプリケーションの一環にあたっていたらうれしく思います。

プロンプトエンジニアリングの原理

本記事の題への回答がこの章です。
上記のプロンプトエンジニアリングで回答精度を高められる理由はLLMの性質そのものにありそうです。

原理1:Instruction Tuningの効果

Instruction Tuningとは、モデルがユーザーの回答や指示に従うようにするための追加学習のことを指します。
ChatGPTなどのLLMはInstruction Tuningという指示チューニングを受けているので、私たちの指示であるプロンプトエンジニアリングに素直に従うようになっているのです。

原理2:出力確率分布の誘導

LLMは膨大なコーパスから「次に来る単語の確率分布」を学習しています。
プロンプトはその「条件式」として働き、特定の方向に確率をシフトさせているのです。

例えば「Pyhtonでコードを書いて」といわれるとprintdefといった単語が、「C言語でコードを書いて」と言われるとprintfint func(void){...}といった単語の出現確率が上がる、ということです。

原理3:コンテキスト参照方法の利用

LLMは「直近のコンテキスト(プロンプト+会話履歴)」を参照しています。
Few-Shotや文脈的フレーミングは、このウィンドウの仕組みを利用して「事前知識を模倣」させているのです。

これから説明する原理4と合わせて、システムプロンプトとして最初にプロンプトを打ち込むことが多いため指示された内容が保持されやすくなっていることも影響がありそうです。

原理4:Self-Attentionのバイアス

既存LLMの基盤となっているTransformerは自己注意機構で「どのトークンを強調するか」を学習します。
その際に、学習データの中で「最初と最後に重要な情報があることが多い」というバイアスを学習していることから、一般的に「冒頭と末尾が強調されやすい(primacy / recency bias)」傾向が生まれています。

PREP法に代表されるようなビジネスフレームワークや普段自分が書いている文章を見ていても、結論が最初と最後にある文章が多い気がするので納得ですね。

以上がプロンプトエンジニアリングが効果を発揮し、こちらが指示した専門家の動きをする理由でした。


これらを見ると、モデルを根本から作り変えているからではないようです。
プロンプトエンジニアリングが効く理由は、学習の過程で自然に生じた“クセ”や“偏り”を理解し、それを上手に利用しているに過ぎないということがわかります。

プロンプトエンジニアリングを実行する際は下記に注意する必要がありそうです。

  • 再現性の欠如
    • 少し表現を変えるだけで出力がブレる
    • 長文プロンプトや複雑な指示は「忘れる」ことがある
  • 限界突破できない
    • そもそも学習していない知識や能力は呼び出せない
    • 「プロンプトを工夫すれば何でもできる」と思うと無駄な工数を割いてしまう
  • 過剰依存のリスク
    • プロンプトだけで安定した品質を出そうとすると、毎回調整が必要になりコスト増
    • 根本的に必要な改善を怠る(例:データ拡充、モデル選定、評価体制)

プロンプトエンジニアリングの限界を理解しつつ、最小工数で最大成果を上げる手段として利用することが求められます。

論文の内容がどのような価値を生み出すか

本論文は既存プロンプトエンジニアリングの技術的説明と、新規手法の紹介を通してプロンプトエンジニアリングの重要性を理解することができる内容でした。

プロンプトエンジニアリングを通じて、この技術が世の中に与えるインパクトを短期的と長期的に分けて考えてみます。

まず短期的には、「プロンプトエンジニアリングに精通している」ことそのものが価値を持つと思います。
...というよりすでに価値を持っていると思います。

エンジニアの求人としてプロンプトエンジニアを募集するものも多く、年収も450万~600万程度と高額です。

プロンプトエンジニアリングは技術の1つとして認知されているため、原理を理解し応用できることそのものが武器になると考えています。

だからと言ってプロンプトエンジニアリングを極めようと考えるのは危ういです。
長期的に見たときには、プロンプトエンジニアリングそのものは価値を失うと考えています。

今プロンプトエンジニアリングスキルが価値を持っている理由はスキルの希少性が高く、需要と供給において需要が高い状態にあることが大きな要因と考えます。

プロンプトエンジニアリングは本記事の通り習熟難易度が簡単であり、やり方を覚えてしまえば筋のいいプロンプトをすぐかけるようになります。

なので今後の流れとしてはパワポ作成やエクセルスキルのように、持っていたら役に立つけどやろうと思えばどんなバックグラウンドの人でも習熟できる、あったらうれしいスキルに変化していくと予想しています。

LLMを日々触れるエンジニアにとってはできて当たり前のことに昇華されていくので、日々意識して使いながら体にしみこませる必要があると考えています。

感想

Attentionという技術の概要は知っているものの、それが発表された有名な論文を読んだことがないことに気づきました。

次はLLM大躍進の立役者となったAttentionの原理について詳しく調べていこうと思います。

Discussion