「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
PE(Prompt Engineering)
- プロンプトとは利用者によるLLMへの入力の事。
- PEは、LLM出力を最適化するよう入力(プロンプト)を最適化するプロセス
基礎 †
- LLMは論理的に思考しているのではなく、次単語を確率的に予測し文書構築をしているに過ぎない。
- プロンプトとはコマンド(命令)を意味するが、実際は次単語予測のコンテキスト(文脈)を与えているに過ぎない。
- LLMが適切な回答が出来るのは「事実」や「論理的な思考の過程や産物」を、適切なコーパスによって学習しているに過ぎない。
振り返り †
ICL (In-context Learning) †
文脈内学習ともよばれる。
- 重み(パラメタ)更新を伴わない学習
- 与えられたプロンプト(≒ コンテキスト)から学習する。
- 処理的に言うと、コンテキストとして与えたプロンプトのAttentionによって、
恰も、学習の結果、重み(パラメタ)更新された様に後のベクトル処理が変化する。
- 追加学習やファインチューニングと対比され、関連用語も対比して用いられる。
- Few-shot Learning → Few-shot prompting
- Zero-shot Learning → Zero-shot Prompting
CoT (Chain-of-Thought Prompting) †
- LLMに問題に回答する際の「思考過程」をICLさせた。
- プロンプトに思考過程を含めることで結果、品質が向上する。
- 特に「数学の文章問題を解く」ようなタスクの際に品質が向上した。
- 規模言語モデル(パラメタが60Bくらい)でないと、CoTの効果は実感できない。
- (CoTに対応できるLLMは、コーパスから思考過程も学習済み)
Prompt Engineering †
Zero-shot Prompting †
- Zero-shot Learning → Zero-shot Prompting
- 1つも事例を足さない(≠CoT)。
Few-shot prompting †
- Few-shot Learning → Few-shot prompting
- 少しの事例を足す(= CoT)
Zero-shot CoT †
一文を付け足し、段階的に推論を進めるよう指示する。
- 「ステップに分けて考えてください」
- 「ステップバイステップで考えてみましょう」
Self-Consistency †
- プロンプトエンジニアリング部分は「複数の推論パスを生成する」部分と言える。
- Few-Shot CoTを大量に与えて、多様な推論パスを形成させるプロンプティング技術。
- 複数の推論パス生成
- LLMに対して同じ質問を複数回行い、異なる推論パスを生成。
- これにより、モデルが異なる視点や方法で問題を解決する様子を観察できる。
- 推論パスの評価
- 生成された各推論パスを評価し、一貫性や信頼性を確認。
- 評価基準には、論理的整合性や結果の正確性が含まれる。
- 最も一貫性のある結果の選択
- 評価結果に基づき、最も一貫性のある推論パスを選択。
- これにより、最も信頼性の高い解答が得られる。
- 結果の統合
- 選択された推論パスの結果を統合し、最終的な解答を生成する。
- 必要に応じて、追加の情報やコンテキストを加えて結果を補完。
- フィードバックと改善
- 得られた結果に対してフィードバックを行い、性能を継続的に改善。
- フィードバックループを通じて、精度と一貫性を向上させる。
GKP (Generated Knowledge Prompting) †
- LLMに事前知識を生成させ、その知識をプロンプトに追加する。
- これが何故、効果的なのか?
コレは、生成過程の文字が入力プロンプトに含まれる文字と比べて生成結果に与える影響が小さいため。
- 生成過程で生成された文字は、モデルの内部コンテキストとして機能するが、入力プロンプトほど強い影響を与えない(パラメタ的、Attention的でないため)。
- 入力プロンプトに与えた文字は、モデルの生成プロセス・生成結果に直接的かつ強力な影響を与える(パラメタ的、Attention的であるため)。
ToT (Tree of Thoughts) †
AoT (Algorithm of Thoughts) †
ReAct? †
- 思考
- 入力を解析し、問題の本質を理解する。
- 問題解決のためのステップを計画する。
- 行動
- 計画されたステップに従ってタスクを実行する。
- 必要な情報を内部知識ベースや外部データベースから収集する。
- 観察
- 生成された結果を評価し、必要に応じて修正や改善を行う。
外部知識の活用と情報検索を組み合わせることで、LLMの性能を向上させる手法で、
プロンプトを用いてVDB内を検索して得たチャンクを事前知識としてプロンプトに追加し、LLMの性能を向上させるもの。
- GKPの事前知識をLLMから取り出すのではなく外部のVDBから取り出す方式のもの。
- ReActの行動部分が「事前知識をVDBを使用したチャンク検索で与える」方式のもの。
様々なPrompting †
Meta Prompting †
- Meta Promptingとはプロンプト生成のためのプロンプティング
- GKP、ToT、AoTなどは、プロンプト生成のためのプロンプティングをしている。
Dynamic Prompting †
- テキスト生成や画像生成のプロンプトに変数や条件を組み込み、複数の異なる出力を得るための手法。
- 特定のキーワードやフレーズを動的に変更することで、多様な出力を生成することを目的とする。
敵対的Prompting †
Prompt-Injection †
AIの応答をゆがめ、不正な情報の拡散などのリスクを発生させる。
- Injection方法は具体的ではない。
- 出力はチェックで悪用防止可能。
Prompt-Leaking †
Prompt-Injectionの亜種で、公開予定がない機密情報を含むプロンプトを漏洩させる
- Injection方法は具体的ではない。
- 入力プロンプトを出力させるような命令を付加
- 出力はチェックで漏洩防止可能。
Jailbreak †
Prompt-Injectionの亜種で、LLMのセーフティガードレールを迂回し、非倫理的な内容を回答させる
- Injection方法は具体的ではない。
- セーフティガードレールを迂回させるような命令を付加。
- 出力はチェックで漏洩防止可能。
詳細 †
参考 †
Qiita †