「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>テキスト生成系(Transformer系)#j2f01d54]] > [[テキスト生成系(Transformer系)#j2f01d54]]
-[[戻る>テキスト生成系(Transformer系)#j2f01d54]] > [[チューニング、拡張系>テキスト生成系(Transformer系)#j2f01d54]]
--LLMのPE
--[[LLMのRAG]]
--[[LLMのFT]]
--[[LLMエージェント]]

*目次 [#w30d8ddc]
#contents

*概要 [#s2791f97]
PE(Prompt Engineering)

-プロンプトとは利用者によるLLMへの入力の事。
-PEは、LLM出力を最適化するよう入力(プロンプト)を最適化するプロセス

**基礎 [#xa7e9b34]
-LLMは論理的に思考しているのではなく、次単語を確率的に予測し文書構築をしているに過ぎない。
-プロンプトとはコマンド(命令)を意味するが、実際は次単語予測のコンテキスト(文脈)を与えているに過ぎない。
-LLMが適切な回答が出来るのは「事実」や「論理的な思考の過程や産物」を、適切なコーパスによって学習しているに過ぎない。

**振り返り [#l42b7e9b]

***ICL (In-context Learning) [#mc305b82]
文脈内学習ともよばれる。

-重み(パラメタ)更新を伴わない学習
-与えられたプロンプト(≒ コンテキスト)から学習する。

-処理的に言うと、コンテキストとして与えたプロンプトのAttentionによって、~
恰も、学習の結果、重み(パラメタ)更新された様に後のベクトル処理が変化する。

-追加学習やファインチューニングと対比され、関連用語も対比して用いられる。
--Few-shot Learning → Few-shot prompting
--One-shot Learning → One-shot Prompting
--Zero-shot Learning → Zero-shot Prompting

***CoT (Chain-of-Thought Prompting) [#mc4f37b5]
LLMに問題に回答する際の「思考過程」を[[ICL>#mc305b82]]させるもの。
-プロンプトに思考過程を含めることで結果、品質が向上する。
-特に「数学の文章問題を解く」ようなタスクの際に品質が向上した。
-規模言語モデル(パラメタが60Bくらい)でないと、CoTの効果は実感できない。~
(CoTに対応できるLLMは、コーパスから思考過程も学習済み)
-CoT対応のLLMは、多くの思考過程を学習しているが、未学習の思考過程も多数ある。~
これをICLで与えると、学習済みの思考過程と、与えた思考過程を活用して、精度の高い応答を生成する。

**超訳 [#j6c59982]
-プロンプトエンジニアリング(PE)とは-プロンプト(利用者によるLLMへの入力)にコンテキスト(文脈)を追加していくタスクと言える。
-何故なら、確率的オウムである生成AIのLLMはコンテキストを与えることで適切に機能するためである([[ICL (In-context Learning)>#mc305b82]])。

***文脈の分類 [#l6dcfa07]
-このプロンプト中のコンテキストは
--「指示」であったり
--「思考の過程」であったり
--「追加の知識」であったりする。

-なお、コレ等のコンテキストを誰が与えるか?の観点で分類すると、以下のモノがある。
--ユーザが与えるもの
--LLM自身が与えるもの
--その他、外部から与えられるもの

***分類の具体例 [#s9f95627]

-コンテキストの内容で分類したもの。~
※ よくよく考えると「思考の過程」も「追加の知識」ではあるが…。

--「思考の過程」:~
・[[CoT (Chain-of-Thought Prompting) >#mc4f37b5]]が有名だが~
・[[Self-Consistency(多数のCoT)、Self-Ask(サブ質問)>#ffa8b1bb]]

--「追加の知識」:~
・外部の知識:[[RAG (Retrieval Augmented Generation) >#wf077141]]が有名~
・LLMの知識:[[ToT(解決のアイデア)、AoT(解決のステップ)>#ffa8b1bb]]

-コンテキストを誰が与えるか?の観点で分類したもの。

--ユーザが与えるもの:
---代表的なものにChatシステムがある。
---Chatシステムでは会話履歴をプロンプトとして再利用している。
 
--LLM自身が与えるもの:

---同様に、Chatシステムがあり、会話履歴には、LLM側の知識が含まれる。

---Chatシステム以外では~
・[[GKP>#yb6a1605]]はLLM自身が知識を補う。~
・[[Self-Consistency>#pa112913]]、[[Self-Ask>#r6c11487]]、[[ToT>#mc0ae581]]、[[AoT>#s456c49e]]は解決手順を提案する。

---ユーザが介さないため、システムによる自動化されたPEが可能。
 
--その他、外部から与えられるもの:
---外部リソースからプロンプトに対応した情報を抽出してプロンプトに加える。
---具体的には、[[RAG (Retrieval Augmented Generation) >#wf077141]]が該当する。
---ユーザが介さないため、システムによる自動化されたPEが可能。

***自動化 [#ob4a3378]
コンテキストを誰が与えるか?の観点で分類で、ユーザが与えるものを除くと、ユーザが介さないため、システムによる自動化されたPEが可能。

-プロンプトフロー

--ユーザが与える場合は、人手によるPEが必要になるが、~
そうでなければ、システムでによる自動的なPEが可能で、~
このような自動化されたPEをプロンプトフローと呼んだりする。

--プロンプトフローを構築するフレームワーク、ローコード、SaaS等が開発されている。

-[[RAG (Retrieval Augmented Generation) >#wf077141]]~
外部リソースからプロンプトに対応した情報を抽出(Retrieval)してプロンプトに加えるプロンプトフロー。

-エージェント・システム~
[[ReAct (REasoning and ACTing)>#pc31e54c]]的PEを用い、更に、プロンプトフローをファジー化した、エージェント・システムが注目されている。

*詳細 [#c67458c5]

**Prompt Engineering [#ffa8b1bb]

***Zero-shot Prompting [#tfc26ac0]
-Zero-shot Learning → Zero-shot Prompting
-1つも事例を足さない

***One-shot Prompting [#r6ce71b3]
-One-shot Learning → One-shot Prompting
-1つの事例を足す

***Few-shot prompting [#r3140a7c]
-Few-shot Learning → Few-shot prompting
-少しの事例を足す

***Zero-shot CoT [#sbf3c66b]
-Zero-shot Prompting → Zero-shot COT
-以下の一文を付け足し、段階的に推論を進めるよう指示する。
--「ステップに分けて考えてください」
--「ステップバイステップで考えてみましょう」

***One-shot CoT [#fe6a6ca5]
-One-shot Prompting → One-shot COT
-1つの思考過程を足す

***Few-shot CoT [#l7a5748c]
-Few-shot Prompting → Few-shot COT
-複数の思考過程を足す

***Self-Consistency [#pa112913]
-「Self-Consistency」は 

--「CoT系」でもあり「プロセス系」でもあり、
--複数の思考過程(≒ [[Few-Shot CoT>#sbf3c66b]])を大量に与えて、多様な思考過程に対応する思考結果を形成する部分 
--形成した思考過程に対応する思考結果を評価する部分 

>から構成されるプロンプティング技術。

-複数の思考過程生成
--LLMに対して同じ質問を複数回行い、異なる思考過程を生成。
--これにより、モデルが異なる視点や方法で問題を解決する様子を観察できる。

-思考過程の評価
--生成された各思考過程を評価し、一貫性や信頼性を確認。
--評価基準には、論理的整合性や結果の正確性が含まれる。

-最も一貫性のある結果の選択
--評価結果に基づき、最も一貫性のある思考過程を選択。
--これにより、最も信頼性の高い解答が得られる。

-結果の統合
--選択された思考過程の結果を統合し、最終的な解答を生成する。
--必要に応じて、追加の情報やコンテキストを加えて結果を補完。

-フィードバックと改善
--得られた結果に対してフィードバックを行い、性能を継続的に改善。
--フィードバックループを通じて、精度と一貫性を向上させる。

-例

--2次関数の解法を幾つか提案して下さい。
---1. 因数分解
---2. 解の公式
---3. 平方完成
---4. グラフを使った解法

--x^2+4x+4=0 を解いてください。

---1. 因数分解
 x^2+4x+4=0 を因数分解を用いて回答せよ
 例えば、x^2−5x+6=0 の場合、(x−2)(x−3)=0 となり、解は x=2 と x=3 です。

---2. 解の公式
 x^2+4x+4=0 を公式を用いて回答せよ
 公式は、ax^2+bx+c=0の場合、x = (−b±√(b^2−4ac​)) / 2a です。
 例えば、2x^2−4x-6=0 の場合、x = (4±√(4^2+4*2*6​)) / 4 = (4±8)/4 となり、解は x=3 と x=-1です。

---3. 平方完成
 x^2+4x+4=0 を平方完成を用いて回答せよ
 例えば、x^2+6x+5=0 の場合、x^2+6x+9=4 → (x+3)^2=4 → x+3=±2 となり、解は x=3 と x=-1 です。

---4. グラフを使った解法
 x^2+4x+4=0 をグラフを用いて回答せよ
 例えば、y=x^2-4x+3 の場合、y=0との交点から、解は x=1 と x=3 です。

***GKP (Generated Knowledge Prompting) [#yb6a1605]
-[[Self-Consistency>#pa112913]]に似た技術で、思考過程ではなく事前知識を生成。
-LLMに事前知識を生成させ、その知識をプロンプトに追加する。
-事前学習した知識をプロンプトに含めることで、回答の一貫性と正確性が向上するため。
--コンテキストの強化
--推論能力の強化(ICL的な意味で)
--学習済情報の再利用によるモデルの精度向上(LLMの一般的な特性)

***Self-Ask [#r6c11487]
-フォローアップの質問を繰り返し促して、思考プロセスを反復的に構築する方法
-フォローアップの質問には、検索エンジンの結果を使用できる。

-「エリザベス女王の在位期間は?」

--想定:
---メイン質問: エリザベス女王の在位期間は?
---サブ質問1: エリザベス女王が即位した年は?
---サブ質問1の回答: 1952年
---サブ質問2: エリザベス女王が退位した年は?
---サブ質問2の回答: 2022年
---メイン質問にサブ質問1とサブ質問2の回答を用いて答えて下さい。
---メイン質問の回答:2022年 - 1952年 = 70年

--実際:
---「エリザベス女王の在位期間は?」幾つかのサブ質問を使用し、Self-Askによって回答して下さい。
---エリザベス2世女王の在位期間について調べるために、いくつかのサブ質問を考えてみましょう。
---エリザベス2世女王はいつ即位しましたか?:エリザベス2世女王は1952年2月6日に即位しました。
---エリザベス2世女王はいつ亡くなりましたか?:エリザベス2世女王は2022年9月8日に亡くなりました。
---エリザベス2世女王の在位期間は何年ですか?:エリザベス2世女王の在位期間は70年と214日でした。

***ToT (Tree of Thoughts) [#mc0ae581]
-アイデアをブレークダウンして、それを評価して全体を要約するようなプロセス。
--[[GKP (Generated Knowledge Prompting) >#yb6a1605]]の延長上の技術。
--一つのLLMをアイデア生成用、もう一つを評価用として使用。
--木構造のように、アイデア出し、深堀りを行っていく。
--このような探索ステップでLLM自身による思考の評価を挟み無理筋を打ち切る。
--この手法は、複数の解決策が存在する可能性が高い問題に特に有用。

-例:「気候変動の影響について教えてください。」
--枝1:気候変動の科学的根拠
--枝2:気候変動の経済的影響
--枝3:気候変動の社会的影響
--評価:各枝の情報を評価し、最も包括的な回答を提供

***AoT (Algorithm of Thoughts) [#s456c49e]
-無作為にブレークダウンして行くのではなく、はじめに考えた論理的なステップに従った結果を要約するようなプロセス
--[[ToT (Tree of Thoughts)>#mc0ae581]]延長上で、比較すると、論理的に思考を進める。
--論理的なステップを踏んで結論に至る(CoT的)ため、評価以前に無理筋を打ち切ることができる。

-例:「再生可能エネルギーの利点について教えてください。」
--ステップ1:再生可能エネルギーの定義
--ステップ2:再生可能エネルギーの種類
--ステップ3:各種類の利点と欠点
--ステップ4:再生可能エネルギーの総合的な利点

***ChatアプリのPE [#qa1c46fe]

-基礎
--システムプロンプト
--履歴の管理

-高度
--Retrieval
--プロンプト・フロー

***[[RAG (Retrieval Augmented Generation)>LLMのRAG]] [#wf077141]
外部知識の活用と情報検索を組み合わせることで、LLMの性能を向上させる手法で、~
プロンプトを用いてVDB内を検索して得たチャンクを事前知識としてプロンプトに追加し、LLMの性能を向上させるもの。

-[[GKP>#yb6a1605]]の事前知識をLLMから取り出すのではなく外部のVDBから取り出す方式のもの。
-[[ReAct>#pc31e54c]]の行動部分が「事前知識をVDBを使用したチャンク検索で与える」方式のもの。

***ReAct (REasoning and ACTing) [#pc31e54c]
基本的には、以下(エの部分)をAgentシステムが自動的に行う。

-人:必要に応じて、事前にツールを渡しておく。
--必要なツールは、メタデータ付きのPython関数として作成される。
--例えば、以下のようなカスタム・ツールを準備しておく。
---「RAG」のRetrieval部を行うプロンプト・フロー・ツール
---「計算」などを行う機能的なツール(関数)

-人:プロンプトを入力する。

-エ:思考
--入力を解析し、問題の本質を理解する。
--問題解決のためのステップを計画する。
--コレは、事前に渡されているツールに「説明」があるためできる。

-エ:行動
--計画されたステップに従ってタスクを実行する。
--Function calling機能(動的言語のスクリプティングのような技術)でツールが呼び出される。
--例えば、Retrievalで、必要な知識情報を内部DBや外部DBから収集する。

-エ:観察
--生成された結果を評価し、必要に応じてステップの修正や改善を行う。
--生成された結果が最終回答として評価された場合、結果を出力する。

-人:結果出力を確認する。

**様々なPrompting [#f926acbb]

***Meta Prompting [#t030bb64]
-Meta Promptingとはプロンプト生成のためのプロンプティング
-[[GKP>#yb6a1605]]、[[ToT>#mc0ae581]]、[[AoT>#s456c49e]]などは、プロンプト生成のためのプロンプティングをしている。

***Dynamic Prompting [#reb787bd]
-テキスト生成や画像生成のプロンプトに変数や条件を組み込み、複数の異なる出力を得るための手法。
-特定のキーワードやフレーズを動的に変更することで、多様な出力を生成することを目的とする。

**敵対的Prompting [#l319392c]

***Prompt-Injection [#tedb97cd]
AIの応答をゆがめ、不正な情報の拡散などのリスクを発生させる。
-Injection方法は具体的ではない。
-出力はチェックで悪用防止可能。

***Prompt-Leaking [#ud3192ba]
[[Prompt-Injection>#tedb97cd]]の亜種で、公開予定がない機密情報を含むプロンプトを漏洩させる
-Injection方法は具体的ではない。
-入力プロンプトを出力させるような命令を付加
-出力はチェックで漏洩防止可能。

***Jailbreak [#taea9062]
[[Prompt-Injection>#tedb97cd]]の亜種で、LLMのセーフティガードレールを迂回し、非倫理的な内容を回答させる
-Injection方法は具体的ではない。
-セーフティガードレールを迂回させるような命令を付加。
-出力はチェックで漏洩防止可能。

*参考 [#h67058d9]
-深層学習についてのレポート(LLM編)~
https://www.osscons.jp/joho108j0-537/#_537

-プロンプトエンジニアリングとは?ChatGPTで代表的な12個のプロンプトを実演!~
https://aismiley.co.jp/ai_news/what-is-prompt-engineering/

-LLM のための Prompt Engineering – C. Cui のブログ~
https://cuicaihao.com/2024/02/04/prompt-engineering-for-llm/

**Qiita [#qb150d28]
-LLMのプロンプト技術まとめ #ChatGPT~
https://qiita.com/fuyu_quant/items/157086987bd1b4e52e80

-LLMをより賢く使うための論文8選[2023年9月最新版] #生成AI~
https://qiita.com/sergicalsix/items/344bd8d5c34df1a731b3

-ChatGPTの進化を辿る: 最新研究論文12選 #機械学習~
https://qiita.com/sergicalsix/items/f28064ce8894f114017f

-各種Prompt Engineeringの日本語実例集(Zero-CoT、mock、ReAct、ToT、Metacog、Step Back、IEPなど) #Python~
https://qiita.com/YutaroOgawa2/items/aca32f8fd7d551596cf8

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS