Claudeの長文のコンテキストウィンドウのためのプロンプトTips
https://scrapbox.io/files/65ab7c66b94b560024ac7e13.png
Prompt engineering for Claude's long context window
この公式ドキュメントのポイント
Claudeが、長い政府文書から会議のメモについて、その質問に答える能力を見たもの https://scrapbox.io/files/65ab86fcc8a75e00245afef9.png
政府文書は多くの小さなサブセクションに分かれる
各質問は、それらのセクションの1つに含まれる情報に関するもの
2024年現在使えるClaude2.0ではなく、あえてClaude Instant 1.2 を使って実験していて、シビアな実験結果を出そうとしている
スクラッチパッドを使うと良い
スクラッチパッドは人間で言えばメモ書きのような使い方で、LLMが読んだテキストを忘れないように一度 <scratchpad> </scratchpad> 領域に記録を残しておくように指示を出す。
code:md
プロンプト例:
最初に<scratchpad>に修正候補になりそうな箇所を全て書き出して、その後に重要な修正点を5つ報告して下さい。
回答例:
Assistant:
<scratchpad>
・「AIシステムの高度な能力は、悪意を持つ個人や組織による誤用の懸念を引き起こしているます」→「懸念を引き起こしております」など、一貫した文体にする
・「不正な行為を罰するべきです」→「不正な行為を罰すべきである」など、です・ます調に統一
・「AIを使って作られた偽の情報が社会を混乱させる可能性があります」→「AIを使って作られた偽の情報により社会が混乱する可能性があります」など、主語と動詞の一致を確認
・「政府、研究機関の協力」→「政府や研究機関の協力」など、助詞「や」を使用して整理
</scratchpad>
・・・
プロンプトと関連する情報の距離は近いほうがいいとのこと
https://scrapbox.io/files/65ab96fd76d212002364cc11.png
https://scrapbox.io/files/65ab969b55885100236e280b.png
関連文書と指示の距離を近くし、できる限りプロンプトの最後に両者を置くことが重要となってくる。(中間に関連文書を置かないことが大事)
以下の新たな記事では、
クロードの応答の最初に「文脈の中で最も関連性の高い文は次のとおりです」という文を追加することで、大幅に良い結果を得た。これにより、クロード2.1のスコアは元の評価で27%から98%に上昇した。
https://scrapbox.io/files/65d14281c695380025e06a77.png
関連
本文
Claudeの100,000トークンの長いコンテキストウィンドウにより、数百ページにわたる技術文書や、1冊の本全体を操作することが可能になります。クロードAPIのスケールアップを進める中で、クロードの可能性を最大限に引き出すためのプロンプトガイダンスに対する需要が高まっています。今日は、長いコンテキストにおけるクロードの想起を向上させる2つのテクニックに関する定量的なケーススタディを共有します。 1. 質問に関連する参照引用を抽出してから回答する
2. 文書の他のセクションに関する正確に回答された質問の例をプロンプトに追加する
それでは、詳細に入りましょう。
長い文脈のリコールをテストする:多肢選択型Q&A
この実験の目的は、長い文書から特定の情報を正確に思い出すためのテクニックを評価することです。
テストのための基本データソースとして、我々は日刊で公開されている政府文書を使用しました。これには、多くの異なる部門の会議記録と活動が含まれています。クロードのトレーニングデータのカットオフ後の7月13日の文書を選びました。これにより、クロードが文書の情報をすでに知っている可能性が最小限に抑えられます。
質問と回答(Q&A)のペアのデータセットを生成するために、私たちは「ランダム化コラージュ」と呼ばれるアプローチを使用しました。文書をセクションに分割し、クロードに各セクションに対して5つの多肢選択型の質問を生成させ、そのうち3つを間違った答え、1つを正しい答えとしました。その後、これらのセクションをランダムに再編成し、長い文書としてクロードに渡し、その内容を思い出す能力をテストしました。
クロードに多肢選択型の質問を生成させる
クロードにあなたの評価(evals)を書かせることは、強力なツールであり、私たちプロンプトエンジニアリングチームも頻繁に使用しています。しかし、クロードに適切な難易度の質問を書かせるためには慎重なプロンプトが必要です。有効なテストスイートを設計する途中で私たちが取り組んだいくつかの課題は以下の通りです:
クロードは、文書を参照せずに頭で答えられる質問を提案するかもしれません。
例えば、「交通省は何をするのか?」など。
クロードは、短いコンテキストの状況でも正しく答えるのに苦労する質問を含めることがあります。
例えば、クロードはトークンで世界を見ているため、「この節には何語があるか?」のような質問はクロードにとって難しいものです。
クロードは、誤って正しい答えを推測しやすくする手がかりを答えに残すことがあります。特に、間違った答えと比較して正しい答えを非常に詳細にする傾向があります。
クロードは「この文書」や「この節」といった曖昧な表現を使うことがあります。これは問題です。なぜなら、我々が複数の文書を縫い合わせて長いコンテキストを形成する際、クロードはその質問がどの文書について言及しているのかを知る方法がありません。
質問をあまりにも明確にしすぎるリスクもあります。例えば、「内務省の2023年7月2日の漁業に関する漁期の追加措置に関する通知の発行日は何日か?」は効果的でない質問です。
これらの落とし穴を回避するために、私たちは2つのサンプルミーティングチャンクと、Few-Shotの質問ライティング例としての手書きの質問、およびクロードに節についての詳細を指定するように促すライティングガイドラインを含むプロンプトテンプレートを使用しました。この実験で使用されたテンプレートとその他のプロンプトは、ここで利用可能です。 https://scrapbox.io/files/65ab8a9403ebcc0025524235.png
prompt template
https://scrapbox.io/files/65ab8ab40a567500245c113c.png
評価
この評価では、主に私たちのより小さいクロードインスタントモデル(バージョン1.2)に焦点を当てました。これはいくつかの理由からです。まず、クロード2は、非常に長い文書を読んだ後の情報を思い出すことにすでに非常に優れています。クロードインスタントはより多くの助けが必要であり、プロンプトへの変更がパフォーマンスを向上させる場合にそれがわかりやすいです。さらに、クロードインスタントは非常に速いため、私たちが共有するノートブックでこれらの評価を自分で再現することができます。
クロードが質問を書くために使用した正確な節のみを与えられた場合、クロードインスタントは自分で生成した質問に約90%の確率で答えることができました。短いコンテキストの状況でもクロードが間違えている10%の質問は破棄されました。なぜなら、これらの質問は長いコンテキストをテストするためには難しすぎるからです。
また、質問の出典となる節を含まないランダムなセクションを与えられた場合のクロードのリコールもテストしました。理論的には、3つの間違った答えがあるので、クロードは正しい答えを25%の確率で推測することができるはずです。実際には、34%の確率で正しい答えを推測しました。これは偶然よりは上ですが、それほどではありません。クロードは、一般的な知識や答えの微妙な手がかりに基づいて、時に正しい答えを直感的に推測することがあります。
より短いチャンクから長い文書を構築するために、我々は各質問に対してランダムな節を縫い合わせて新しい長いコンテキストを人工的に生成しました。これにより、目的のトークン数に達しました。クロードは、約75,000トークンおよび90,000トークンを含む縫い合わせられた文書でテストされました。
https://scrapbox.io/files/65ab8b6d0295430025743300.png
このパッチワークコンテキストの形成が、クロードが質問で「この文書」や「この節」といった曖昧なフレーズを参照することが問題を引き起こしていました。「この通知の発行日はいつですか?」という質問は、コンテキストに「この通知」が指す可能性のある十数の異なる通知があるとき、回答が不可能になります。これが、私たちの質問生成プロンプトが、質問が参照する節について明確にする言葉を含む理由です。例えば、「漁業の追加の季節中措置に関する通知の発行日はいつですか?」などです。
長い文書(コラージュ)を生成した後、私たちは4つの異なるプロンプト戦略を使用してクロードの想起をテストしました:
ベース – クロードに答えるように尋ねる
非政府の例 – クロードに、政府文書とは関係のない一般知識の多肢選択問題の正解例を2つ与える
2つの例 – クロードに、コンテキスト内の他のチャンクに関するクロード生成の質問からランダムに選ばれた正解例を2つ与える
5つの例 – 同じ戦略であるが、例を5つ与える
上記の4つの戦略のそれぞれについて、関連する引用を引き出すようにクロードに指示する<スクラッチパッド>の使用の有無もテストしました。さらに、これらの戦略を、回答が含まれる節が入力の始まり、終わり、または中間に位置する場合についてもテストしました。最後に、コンテキストの長さが結果に与える影響を把握するため、70Kトークンと95Kトークンの文書でテストしました。
上記のテストにはクロードインスタント1.2を使用しました。また、クロード2についても、ベースライン戦略とクロードインスタント1.2で最も良いパフォーマンスを示した戦略の結果を示します。
結果
実験に関するいくつかの注記:
スクラッチパッドと例の使用により、文書の始めと中間のパフォーマンスが大幅に向上しますが、文書の終わりではパフォーマンスが低下することがあります。これは、プロンプトで例を追加することにより、関連情報が含まれる文書の非常に終わりの部分と、クロードがそれに答える必要があるときの間の距離が増加するためかもしれません。これは、ソースドキュメントのデータのほんの一部が非常に終わりにあるため、わずかな懸念事項に過ぎない可能性があります。しかし、これは、プロンプトの最後に指示を置くことの重要性を強調しています。なぜなら、クロードがそれらをできるだけ正確に思い出すことが望ましいからです。
https://scrapbox.io/files/65ab969b55885100236e280b.png
https://scrapbox.io/files/65ab96fd76d212002364cc11.png
プロンプトによるクロード2の改善は、0.939から0.961への小さな絶対的な改善のように思えるかもしれませんが、これはエラーの36%の削減を反映しています。
長いコンテキストのQ&Aプロンプトを書くために使用できるいくつかのポイント:
1. 両方のコンテキストの長さで最高のパフォーマンスを得るために、多くの例とスクラッチパッドを使用します。
2. 関連する引用をスクラッチパッドに引き出すことは、すべての比較で有用です。これにはレイテンシーのわずかなコストがかかりますが、精度が向上します。クロードインスタントの場合、レイテンシーはすでに非常に低いため、これは懸念事項になるべきではありません。
3. 70Kと95Kの両方で、コンテキストの例が役立ち、例が多いほど良いです。
4. 一般的な/外部の知識に関する一般的な例はパフォーマンスに役立つようには見えません。
5. クロードインスタントの場合、関連する節と質問およびプロンプトの終わりまでの距離との間には、パフォーマンスとの単調な逆関係があるようですが、95Kでのクロード2のパフォーマンスは中間でわずかに下がります。