LLMのプロンプト技術まとめ

現在，34個掲載(一部執筆途中)

Xのアカウント[@fuyu_quant](https://x.com/fuyu_quant)でも技術系の投稿をしているのでよかったらフォローしてください！

# はじめに
今回はすぐに使えそうなプロンプトの工夫やフレームワークについて有名なものをまとめました．LMの出力の精度向上に役立てられればと思います．

- 論文があるものについてはarXivに最初に投稿された順番で掲載しています．
- 論文で精度向上が確認されているのは英語での検証がほとんどであるため，日本語で改善されるかは分かりません．
- 全てのLLM(GPT-4,Llama2,...)で精度が改善するとは限りません．

※記事に誤り等ありましたらご指摘いただけますと幸いです．


以下の記事では敵対的プロンプト技術をまとめています！

https://qiita.com/fuyu_quant/items/d9a44dfe3a7315f255ee


# 目次
- [Zero-shot prompting](#zero-shot-prompting)
- [Few-shot prompting](#few-shot-prompting)
2021年〜
- [Generated Knowledge Prompting](#generated-knowledge-prompting)
2022年〜
- [Chain of Thoughts(CoT)](#chain-of-thoughtscot)
- [Few-shot Chain of Thoughts](#few-shot-chain-of-thoughts)
- [Self-Consistency](#self-consistency)
- [Least-to-Most](#least-to-most)
- [Zero-shot Chain of Thoughts (step by step)](#zero-shot-chain-of-thoughts-step-by-step)
- [ReAct Prompting(Reason + Action)](#react-prompting(reason-+-action))
- [Auto-CoT](#auto-cot)
- [Automatic Prompt Engineer](#automatic-prompt-engineer)
- [Program of Thoughts](#program-of-thoughts)
2023年〜
- [Faithful Chain of Thoughts](#faithful-chain-of-thoughts)
- [Self-Refine](#self-refine)
- [Progressive-Hint Prompting](#progressive-hint-prompting)
- [Plan-and-Solve](#plan-and-solve)
- [Tree of Thoughts(ToT)](#tree-of-thoughtstot)
- [Graph of Thoughts(GoT)](#graph-of-thoughtsgot)
- [EmotionPrompt](#emotionprompt)
- [Self-translate](#self-translate)
- [Metacognitive Prompting(MP)](#metacognitive-promptingmp)
- [Role-Play Prompting](#role-play-prompting)
- [Algorithm of Thoughts(AoT)](#algorithm-of-thoughtsaot)
- [Take a Deep Breath](#take-a-deep-breath)
- [Chain of density(CoD)](#chain-of-densitycod)
- [Re-reading](#re-reading)
- [EchoPrompt](#echoprompt)
- [Chain of Verification(CoVe)](#chain-of-verificationcove)
- [Logical Chain-of-Thoughts](#logical-chain-of-thoughts)
- [Take a Step Back](#take-a-step-back)
- [Inferential Exclusion Prompting(IEP)](#inferential-exclusion-promptingiep)
- [Meta-CoT](#meta-cot)
- [Rephrase and Respond(RaR)](#rephrase-and-respondrar)
- [Contrastive Chain of Thought](#contrastive-chain-of-thought)
- [その他](#その他)
- [おわりに](#おわりに)

# 全体像
プロンプトエンジニアリングの全体像です。「A Survey of Prompt Engineering Methods in Large Language Models for Different NLP Tasks」より。
(※本記事ではこれら全ては紹介できていません)
![スクリーンショット 2024-08-17 19.24.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529366/770ece17-8cd1-b178-4f9c-d28c100a1aeb.png)

- サーベイ論文
    - [A Systematic Survey of Prompt Engineering in Large Language Models: Techniques and Applications](https://arxiv.org/abs/2402.07927)
    - [A Survey of Prompt Engineering Methods in Large Language Models for Different NLP Tasks](https://arxiv.org/abs/2407.12994)


# Zero-shot prompting
大量の学習データを使ったLLMは例などを示さずにある程度の質問には回答することができます．Zero shot promptingは手法というよりかはLLMに対してただ聞くだけのプロンプトで，他の手法と比較する際のベースとして使うことが多いです．

- 具体例
    ```python
    prompt = """
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか？
    A:
    """
    ```


# Few-shot prompting
In-context learningを可能にするプロンプティング手法．いくつかの例を示すことで類似の質問に対する回答の精度を向上させる。特に例が一つのものをOne-shot promptingという。

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/few_shot_prompting"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # 以下はOne shot prompting
    prompt = """
    Q：ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか？
    A: 11個
    Q: 食堂には23個のリンゴがあった。昼食に20個使い、さらに6個買ったとすると、りんごは
    何個あるか。
    A:
    """
    ```

- 参考文献
    - [https://www.promptingguide.ai/techniques/fewshot](https://www.promptingguide.ai/techniques/fewshot)


# Generated Knowledge Prompting
論文:[Generated Knowledge Prompting for Commonsense Reasoning](https://arxiv.org/abs/2110.08387)
投稿日:2021/10/15
LLMに関連知識を生成させプロンプトに追加することで，いくつかのデータセットでSOTAを達成した手法です．

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/generated_knowledge_prompting"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    prompt1 = """
    さまざまなものに関する数値的な事実を生成してください．例:
    
    入力：グーグルマップをはじめとする高速道路や道路のGPSサービスが、何に取って代わったのか？
    知識：電子地図は紙の地図帳の現代版だ。
    入力：キツネは都市から森へ歩いて行ったが、何を探していたのでしょうか？
    知識：自然の生息地は通常、都市から離れている。
    入力：もし、誰かとファイルを共有できるのであれば、それは何ですか？
    知識：ファイルはインターネット上で共有できる。
    入力：あまりにも多くの人々がエキゾチックなヘビを欲しがっています。需要が何を動かしてそれらを運ぶのでしょうか？
    知識：ペットとしてヘビを飼う人もいる。
    入力：{答えたい問題}
    知識：
    """

    # 出力
    knowledge(「答えたい問題」に関する知識)

    # 生成した知識をプロンプトに追加する
    prompt2 = """
    {答えたい問題}
    {knowledge}
    """
    ```

- 参考文献
    - https://techblog.cccmk.co.jp/entry/2023/04/04/102443




# Chain of Thoughts(CoT)
投稿日:2022/1/28
論文:[Chain-of-Thought Prompting Elicits Reasoning in Large Language Models](https://arxiv.org/abs/2201.11903)
思考の過程をプロンプトに入力することでLLMに複雑な推論を可能にするプロンプト手法．

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/chain_of_thoughts"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    以下はFew-shot promptingとChain of Thoughtsのプロンプトの比較になります．
    ```python
    # Few shot prompting
    prompt = """
    Q：ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか？
    A: 11個
    Q: 食堂には23個のリンゴがあった。昼食に20個使い、さらに6個買ったとすると、りんごは
    何個あるか。
    A:
    """

    # Chain of Thoughts
    prompt = """
    Q：ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか？
    A: ロジャーは5個のテニスボールをはじめに持っていました。テニスボール3個入りの缶を
    2つ買うと、テニスボール6個になります。5 + 6 = 11. 答えは11です。
    Q: 食堂には23個のリンゴがあった。昼食に20個使い、さらに6個買ったとすると、りんごは
    何個あるか。
    A:
    """
    ```
    
- 精度向上
    - ステップ数の多い問題の回答例を入力すると精度が向上する．
        - [Complexity-Based Prompting for Multi-Step Reasoning](https://arxiv.org/abs/2210.00720)

- 参考記事
    - [https://qiita.com/shiro-manju/items/470132e29b1ab984a4d1](https://qiita.com/shiro-manju/items/470132e29b1ab984a4d1)


# Few-shot Chain of Thoughts
Chain of Thoughtsでプロンプトに与える思考の過程を複数用意する手法

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/few_shot_chain_of_thoughts"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

# Self-Consistency
投稿日:2022/03/21
論文:[Self-Consistency Improves Chain of Thought Reasoning in Language Models](https://arxiv.org/abs/2203.11171)
Few-shot CoTの出力結果の多数決を行い最終的な出力結果にする

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/self_consistency"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # Few-shot examplerを使う(よりタスクに合わせた他のものでも良い)
    prompt = """
    Q：駐車場に車が3台あり、さらに2台の車が到着した場合、駐車場には何台の車がありますか？
    A：駐車場には既に3台の車があります。2台の車が到着しました。これで、車が3+2 = 5台あります。
    回答は5です。

    Q：リアは32個のチョコレートを持っており、彼女の姉妹は42個のチョコレートを持っています。
    彼らが35個食べた場合、彼らが残したピースの数は何ですか？
    A：リアは32個のチョコレートを持っており、リアの姉妹は42個のチョコレートを持っていたことを意味します。
    つまり、もともとは32 + 42 = 74個のチョコレートがありました。35個食べられました。したがって、
    合計で残るのは74-35 = 39個のチョコレートです。回答は39です。

    Q：ショーンは5つのおもちゃを持っています。クリスマスに、彼は両親からそれぞれ2つのおもちゃをもらいました。
    今、彼は何個のおもちゃを持っていますか？
    A：彼は5つのおもちゃを持っています。彼は母親から2つのおもちゃをもらいました。したがって、
    5 + 2 = 7個のおもちゃがあります。
    その後、父親から2つのおもちゃが追加されたので、合計で7 + 2 = 9個のおもちゃがあります。
    回答は9です。

    Q：マイケルは58個のゴルフボールを持っています。火曜日に、彼は23個のゴルフボールを
    失いました。水曜日に、さらに2個を失いました。水曜日の終わりには、彼は何個のゴルフボール
    を持っていましたか？
    A：マイケルは最初に58個のボールを持っていました。火曜日に23個を失いましたので、
    その後35個のボールが残りました。水曜日に2個を失ったので、現在33個のボールがあります。
    回答は33です。

    Q：オリビアは23ドル持っています。彼女は1つあたり3ドルのベーグルを5つ買いました。
    彼女が残したお金はいくらですか？
    A：彼女は1つあたり3ドルのベーグルを5つ購入しました。彼女は１５ドルを使った。
    残したお金は８ドルです。

    Q：私が6歳のとき、妹は私の半分の年齢でした。今、私は70歳です。私の妹は何歳ですか？
    A：

    """

    # 出力1
    私が6歳のとき、私の妹は私の半分の年齢であったため、彼女は3歳でした。今、私が70歳で
    あるため、彼女は70-3 = 67歳です。回答は67です。

    # 出力2
    語り手が6歳のとき、彼の妹は彼の半分の年齢である3歳でした。語り手が70歳である今、
    彼の妹は70-3 = 67歳になるでしょう。回答は67です。

    # 出力3
    私が6歳のとき、私の妹は私の半分の年齢だったので、彼女は3歳でした。今、私は70歳なので、
    彼女は70/2=35歳です。答えは35です。

    上記の出力で多数派のものを最終的な出力結果とする。
    ```

- 参考文献
    - https://www.promptingguide.ai/jp/techniques/consistency
    - https://techblog.cccmk.co.jp/entry/2023/04/04/102443



# Least-to-Most
投稿日:2022/5/21
論文:[Least-to-Most Prompting Enables Complex Reasoning in Large Language Models](https://arxiv.org/abs/2205.10625)
全体の問題を簡単な部分問題に分けて回答を得ることで精度を高める手法．

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/least_to_most"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # 通常のプロンプト
    prompt = """
    エイミーは滑り台の一番上まで登るのに4分かかる。滑り降りるのに1分かかる。ウォータースライダーは15分で閉まる。閉園までに彼女は何回滑れるか？
    """


    # Least-to-Most
    prompt1 = """
    エイミーは滑り台の一番上まで登るのに4分かかる。滑り降りるのに1分かかる。ウォータースライダーは15分で閉まる。閉園までに彼女は何回滑れるか？
    ------
    上記の問題を解くためには何を計算すればいいですか?
    """

    # 出力
    この問題を解くためには、エイミーが滑り台を滑るのにかかる時間が分かれば解ける．

    prompt2 = """
    エイミーが滑り台の一番上まで登るのに4分かかり、滑り降りるのに1分かかる。滑り台は15分で閉まる。
    Q:エイミーが滑り台を滑るのにかかる時間？
    A:
    """

    # 出力
    エイミーが滑り台を滑るのにかかる時間は、登るのに4分かかり、滑り降りるのに1分かかるので、
    合計で5分かかります。

    prompt3 = """
    エイミーが滑り台の一番上まで登るのに4分かかり、滑り降りるのに1分かかる。滑り台は15分で閉まる。
    Q:エイミーが滑り台を滑るのにかかる時間？
    A:エイミーが滑り台を滑るのにかかる時間は、登るのに4分かかり、滑り降りるのに1分かかるので、合計で5分かかります。
    Q:閉園までに彼女は何回滑れるか？
    A:
    """

    ```
- 参考文献
    - https://learnprompting.org/docs/intermediate/least_to_most

# Zero-shot Chain of Thoughts (step by step)
投稿日:2022/5/24
論文:[Large Language Models are Zero-Shot Reasoners](https://arxiv.org/abs/2205.11916)
プロンプトに「Let’s think step by step」を追加するだけでZero shot promptingを大きく改善することができる手法．

- 実行
    <a href="https://www.data-science-wiki.net/article?path=/nlp/llm_prompt_engineering/zero_shot_chain_of_thoughts%20.html"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # Zero-shot Chain of Thoughts
    prompt1 = """
    Q: 食堂には23個のリンゴがあった。昼食に20個使い、さらに6個買ったとすると、りんごは何個あるか。
    A:段階的に考えて下さい．
    """

    prompt2 = """
    Q: 食堂には23個のリンゴがあった。昼食に20個使い、さらに6個買ったとすると、りんごは何個あるか。
    A:段階的に考えて下さい．{prompt1の出力結果}最終的な答えは
    """

    ```

    その他の論文で検証されたstep by step関連のプロンプトのまとめは以下になります．

![スクリーンショット 2023-10-25 16.59.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529366/a5f34811-f844-c61c-6a9f-cca01703bb1f.png)


- 参考記事
    - https://blog.shikoan.com/zero-shot-cot/



# ReAct Prompting(Reason + Action)
投稿日:2022/10/6
論文:[ReAct: Synergizing Reasoning and Acting in Language Models](https://arxiv.org/abs/2210.03629)

- 具体例
- 参考文献



# Auto-CoT
投稿日:2022/10/7
論文:[Automatic Chain of Thought Prompting in Large Language Models](https://arxiv.org/abs/2210.03493)

- 具体例
- 参考文献
    - https://github.com/amazon-science/auto-cot




# Automatic Prompt Engineer
投稿日:2022/11/3
論文:[Large Language Models Are Human-Level Prompt Engineers](https://arxiv.org/abs/2211.01910)
入力と出力のペアをいくつか与えると，その入力から出力を得るための精度のよいプロンプトを自動的に見つけてくれます．さまざまな応用ができそうです．

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_framework/automatic_prompt_engineer"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

使い方については以下にまとめています．

https://qiita.com/fuyu_quant/items/d90c7d69b143d59a7b84



# Program of Thoughts
投稿日:2022/11/22
論文:[Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks](https://arxiv.org/abs/2211.12588)
Chain of Thoughtsでは試行過程と答えを出力させるが、その代わりにPythonのコードを生成し、それを実行することで答えを得る。

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/program_of_thoughts"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    prompt = """
    Q: ジャネットの飼っているアヒルは1日に16個の卵を産む。彼女は毎朝3個を朝食に食べ、
    4個で毎日友人にマフィンを焼いている。残りは毎日ファーマーズマーケットでアヒルの
    新鮮な卵1個につき2ドルで売っている。彼女は毎日ファーマーズ・マーケットでいくら稼ぐか？
    ------------
    上記を計算するPythonのコードを出力してください。 
    """

    # 出力
    total_eggs = 16
    eaten_eggs = 3
    baked_eggs = 4
    sold_eggs = total_eggs - eaten_eggs - baked_eggs
    dollars_per_egg = 2
    ans = sold_eggs * dollars_per_egg
    ```
    上記のコードを実行することで答えを得る。
- 参考文献



# Faithful Chain of Thoughts
投稿日:2023/1/31
論文:[Faithful Chain-of-Thought Reasoning](https://arxiv.org/abs/2301.13379)

- 具体例
- 参考文献
    - https://speakerdeck.com/1never/ibis2023tiyutoriaru-da-gui-mo-yan-yu-moderuhuo-yong-ji-shu-nozui-qian-xian?slide=35


# Self-Refine
投稿日:2023/03/30
論文:[Self-Refine: Iterative Refinement with Self-Feedback](https://arxiv.org/abs/2303.17651)
LLMを使って初期出力を生成し、その出力に対するフィードバックを出力し，それを使って繰り返し自分自身を改良する手法．

- 実行
   <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/self_refine"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # Self-Refineの例
    prompt1 = """
    Q:1からNまでの合計を計算するPythonの関数を出力して下さい．
    A:
    """

    # 出力
    def sum_numbers(N):
        return sum(range(1, N+1))

    prompt2 = """
    Q:1からNまでの合計を計算するPythonの関数を出力して下さい．
    A:def sum_numbers(N):
        return sum(range(1, N+1))
    上記のQに対するAのフィードバックをして下さい．
    """

    # 出力
    Qの関数は正しく1からNまでの合計を計算していますが、Nに1未満の数を渡した場合にも対応できるようなエラーチェックがされていないようです。Nが1以上の整数であることを前提としているので、関数を使う前にNの値が条件を満たしているかどうかを確認する必要があります。関数内でエラーチェックを行うか、関数を使う前にNの値を確認するコードを追加することをお勧めします。

    prompt3 = """
    Q:1からNまでの合計を計算するPythonの関数を出力して下さい．
    A:def sum_numbers(N):
        return sum(range(1, N+1))
    フィードバック:Qの関数は正しく1からNまでの合計を計算していますが、Nに1未満の数を渡した場合にも対応できるようなエラーチェックがされていないようです。Nが1以上の整数であることを前提としているので、関数を使う前にNの値が条件を満たしているかどうかを確認する必要があります。関数内でエラーチェックを行うか、関数を使う前にNの値を確認するコードを追加することをお勧めします。
    フィードバックを考慮して回答を修正して下さい．
    """

    # 出力
    def sum_numbers(N):
        if N < 1:
            raise ValueError("N must be a positive integer")
        return sum(range(1, N+1))
    ```
- 参考文献


# Progressive-Hint Prompting(PHP)
投稿日:2023/04/19
論文:[Progressive-Hint Prompting Improves Reasoning in Large Language Models](https://arxiv.org/abs/2304.09797)
出力された内容をヒントとしてもう一度同じプロンプトに追記して出力を得ることで精度を上げる手法．
- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/progressive_hint_prompting"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # 通常のプロンプト
    prompt = """
    スモール・ツリー・スクールの4年生は96人。そのうち43人が女子である。金曜日、4年生の女子5名と4年生の男子4名が欠席しました。金曜日にスモールツリー校にいた4年生の男子は何人ですか？
    """

    # Progressive-Hint Prompting
    prompt1 = """
    スモール・ツリー・スクールの4年生は96人。そのうち43人が女子である。金曜日、4年生の女子5名と4年生の男子4名が欠席しました。金曜日にスモールツリー校にいた4年生の男子は何人ですか？
    """

    # 出力
    金曜日にスモールツリー校にいた4年生の人数は、全体の96人から欠席した女子5人と欠席した男子4人を引いた数です。
    欠席した女子の数は43人 - 5人 = 38人
    全体の96人 - 38人 = 58人
    したがって、金曜日にスモールツリー校にいた4年生の男子は58人 - 4人 = 54人です。

    prompt2 = """
    スモール・ツリー・スクールの4年生は96人。そのうち43人が女子である。金曜日、4年生の女子5名と4年生の男子4名が欠席しました。金曜日にスモールツリー校にいた4年生の男子は何人ですか？
    (ヒント:これの答えは54に近いです)
    """

    # 出力
    金曜日には、4年生の全体の数から欠席した女子と男子の数を引きます。
    欠席した女子の数は5人、欠席した男子の数は4人です。
    4年生の女子の数は43人です。
    したがって、金曜日にスモールツリー校にいた4年生の男子の数は、
    全体の数から欠席した女子と欠席した男子の数を引いたものに等しいです。
    96 - 43 (女子) - 4 (男子) = 49
    したがって、金曜日にスモールツリー校にいた4年生の男子は49人です。

    prompt3 = """
    スモール・ツリー・スクールの4年生は96人。そのうち43人が女子である。金曜日、4年生の女子5名と4年生の男子4名が欠席しました。金曜日にスモールツリー校にいた4年生の男子は何人ですか？
    (ヒント:これの答えは54や49に近いです)
    """

    # 連続して同じ答えが出てきたら終了にする
    ```
- 参考文献


# Plan-and-Solve
投稿日:2023/05/6
論文:[Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models
](https://arxiv.org/abs/2305.04091)

- 具体例
- 参考文献
    - https://note.com/mahlab/n/nfd8adbbf2793



# Tree of Thoughts(ToT)
投稿日:2023/5/17
論文:[Tree of Thoughts: Deliberate Problem Solving with Large Language Models](https://arxiv.org/abs/2305.10601)
Chain of Thoughtsとツリー探索を組み合わせたような手法．

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_framework/tree_of_thoughts"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

使い方は以下にまとまっています．
(※以下のOSSでは特定の問題を解くためのものしか公開されていません)

https://qiita.com/fuyu_quant/items/c329d3fa80bda5efd32a



# Graph of Thoughts(GoT)
投稿日:2023/5/26
論文:[Beyond Chain-of-Thought, Effective Graph-of-Thought Reasoning in Large Language Models](https://arxiv.org/abs/2305.16582)

- 実行
    (※以下のOSSでは特定の問題を解くためのものしか公開されていません)
    <a href="https://www.data-science-wiki.net/article/nlp/llm_framework/graph_of_thoughts"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

# EmotionPrompt
投稿日:2023/7/14
論文:[Large Language Models Understand and Can be Enhanced by Emotional Stimuli](https://arxiv.org/abs/2307.11760)
「自分を信じ限界を超えてください」や「成長の機会だと捉えて挑戦してください」など感情を込めたプロンプトを追加することで精度をあげる手法

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/emotionprompt"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # 通常のプロンプト
    prompt = """
    ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか？
    """
    
    # EmotionPrompt
    prompt = """
    ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか？
    成長の機会だと捉えて挑戦してください．
    """
    ```
- 参考文献
    - https://x.com/ai_database/status/1720257299212873914?s=46&t=fQJfLXzPDkDCbKLZ_TpyTQ



# Self-translate
投稿日:2023/8/2
論文:[Do Multilingual Language Models Think Better in English?](https://arxiv.org/abs/2308.01223)
英語以外の言語のプロンプトでは言語モデルはその能力をフルに活用できていない，という研究に関する論文．self-translateは入力を一度英語に翻訳して出力を得てから元の言語に戻す手法．

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/self_translate"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    以下では日本語の入力に対してOne shotで英語に翻訳し，それをOne shot promptingで回答している．

    ```python
    # 従来のプロンプト
    prompt = """
    アンディはゼラニウムを90本植え、ペチュニアをゼラニウムより40本少なく植える。
    全部で何本の花を植えたでしょう？
    """

    # Self-translate
    prompt1 = """
    Japanese:メアリは緑の魔女を叩かなかった．
    English:Mary did not slap the green witch.

    Japanese:アンディはゼラニウムを90本植え、ペチュニアをゼラニウムより40本少なく植える。
    全部で何本の花を植えたでしょう？
    English:
    """

    # prompt1の出力
    Andy plants 90 geraniums and 40 less petunias than geraniums. How many flowers does he plant in total?

    prompt2 = """
    Question: John had 12 apples and ate a quarter of them. 
    How many apples does he have now?
    Stepwise solution: John ate 12÷4=3 apples. Therefore, he 
    has 12–3=9 apples now. The answer is 9.

    Question: Andy plants 90 geraniums and 40 less petunias than 
    geraniums. How many flowers does he plant in total?
    Stepwise solution:
    """

    # prompt2の出力
    Andy plants 90 geraniums and 90-40=50 petunias. Therefore, 
    he plants 90+50=140 flowers. The answer is 140.
    ```

- 参考文献
    - [https://github.com/juletx/self-translate/](https://github.com/juletx/self-translate/)


# Metacognitive Prompting(MP)
投稿日:2023/08/10
論文:[Metacognitive Prompting Improves Understanding in Large Language Models](https://arxiv.org/abs/2308.05342)
LLMに人間の認知プロセスを模倣させることで精度を改善した手法．

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/metacognitive_prompting"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    以下のMetacognitive Promptingは論文を参考に日本語で書いたものです．
    ```python
    # 通常のプロンプト
    prompt = """
    質問1: 「世界で最も美しいビーチは何ですか？」と質問2:「最も美しいビーチは何ですか？」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    """


    # Metacognitive Prompting
    prompt1 = """
    質問1: 「世界で最も美しいビーチは何ですか？」と質問2:「最も美しいビーチは何ですか？」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:
    """

    prompt2 = """
    質問1: 「世界で最も美しいビーチは何ですか？」と質問2:「最も美しいビーチは何ですか？」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:{output1_}
    Q:主題、文脈、意味内容に基づく類似性の予備的識別を行う。
    A:
    """

    prompt3 = """
    質問1: 「世界で最も美しいビーチは何ですか？」と質問2:「最も美しいビーチは何ですか？」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:{output1_}
    Q:主題、文脈、意味内容に基づく類似性の予備的識別を行う。
    A:{output2_}
    Q:予備的な分析を批判的に評価する。質問がパラフレーズであるという最初の評価に確信が持てない場合は、再評価を試みる。
    A:
    """

    prompt4 = """
    質問1: 「世界で最も美しいビーチは何ですか？」と質問2:「最も美しいビーチは何ですか？」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:{output1_}
    Q:主題、文脈、意味内容に基づく類似性の予備的識別を行う。
    A:{output2_}
    Q:予備的な分析を批判的に評価する。質問がパラフレーズであるという最初の評価に確信が持てない場合は、再評価を試みる。
    A:{output3_}
    Q:質問がパラフレーズであるかどうかの最終的な判断を確認し、判断の根拠を示します。
    A:
    """

    prompt5 = """
    質問1: 「世界で最も美しいビーチは何ですか？」と質問2:「最も美しいビーチは何ですか？」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:{output1_}
    Q:主題、文脈、意味内容に基づく類似性の予備的識別を行う。
    A:{output2_}
    Q:予備的な分析を批判的に評価する。質問がパラフレーズであるという最初の評価に確信が持てない場合は、再評価を試みる。
    A:{output3_}
    Q:質問がパラフレーズであるかどうかの最終的な判断を確認し、判断の根拠を示します。
    A:{output4_}
    """


    prompt6 = """
    質問1: 「世界で最も美しいビーチは何ですか？」と質問2:「最も美しいビーチは何ですか？」、
    これら2つの質問がお互いの言い換えであるかどうかを判断してください。
    Q:両方の質問に対するあなたの理解を明確にしてください。
    A:{output1_}
    Q:主題、文脈、意味内容に基づく類似性の予備的識別を行う。
    A:{output2_}
    Q:予備的な分析を批判的に評価する。質問がパラフレーズであるという最初の評価に確信が持てない場合は、再評価を試みる。
    A:{output3_}
    Q:質問がパラフレーズであるかどうかの最終的な判断を確認し、判断の根拠を示します。
    A:{output4_}
    Q:自分の分析に対する確信度（0～100％）を評価し、その確信度の説明をする。
    A:
    """
    ```

- 参考文献
    - https://github.com/EternityYW/Metacognitive-Prompting/blob/main/prompts/five_shot_exemplars.pdf



# Role-Play Prompting
投稿日:2023/8/15
論文:[Better Zero-Shot Reasoning with Role-Play Prompting](https://arxiv.org/abs/2308.07702)
LLMに役割を与えることで役割に応じたタスクの精度が向上する手法。この論文ではじめて取り組まれたことではないが、定量的に評価してるいるので掲載。

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/role_play_prompting"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # 通常のプロンプト
    prompt = """
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか？
    """
    
    # Role-Play Prompting
    prompt = """
    Role:あなたは非常に計算能力に秀でている人です．
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。
    それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか？
    A:
    """
    ```
- 参考文献



# Algorithm of Thoughts(AoT)
投稿日:2023/8/20
論文:[Algorithm of Thoughts: Enhancing Exploration of Ideas in Large Language Models](https://arxiv.org/abs/2308.10379)

- 実行
    (※以下のOSSでは特定の問題を解くためのものしか公開されていません)
    <a href="https://www.data-science-wiki.net/article/nlp/llm_framework/algorithm_of_thoughts"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>






# Take a Deep Breath
投稿日:2023/9/7
論文:[Large Language Models as Optimizers](https://arxiv.org/abs/2309.03409)
「Take a deep breath」とプロンプトに加えることで精度が改善する手法．

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/take_a_deep_breath"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    英語
    prompt = """
    Take a deep breath and
    質問
    """

    # 日本語
    prompt = """
    深呼吸をしてから答えてください
    質問
    """
    ```

# Chain of Density(CoD)
投稿日:2023/9/8
論文:[From Sparse to Dense: GPT-4 Summarization with Chain of Density Prompting](https://arxiv.org/abs/2309.04269)
テキストを要約する精度を高めるためのプロンプトです。

- 実行
日本語ver
    <a href="https://www.data-science-wiki.net/article/nlp/summary(japanese)/chain_of_density"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>英語ver
    <a href="https://www.data-science-wiki.net/article/nlp/summary(english)/chain_of_density"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # 日本語
    prompt = """
    記事：{要約したい文章}

    あなたは私に記事を依頼する。そして、その記事の簡潔で実体の濃い要約をどんどん作成する。

    以下の2つのステップを5回繰り返す。

    ステップ1. 先に生成された要約に欠けている、記事中の1～3個の有益なエンティティ（"; "区切り）を特定する。
    ステップ2. 同じ長さで、前の要約のすべてのエンティティと詳細をカバーし、さらに欠落しているエンティティを加えた、より密度の高い新しい要約を書く。

    欠けているエンティティとは
    - メインストーリーに関連している、
    - 具体的でありながら簡潔であること（5語以下）、
    - 新規性（前回の要約にはない）、
    - 忠実（記事中に存在する）、
    - どこにでもある（記事のどこにでもある）。

    ガイドライン

    - 最初の要約は長く（4～5文、～80語）、しかし非常に非特異的で、欠落しているとマークされたエンティティ以上の情報をほとんど含まないこと。80ワードに達するには、過度に冗長な表現とフィラー（例：「この記事は論じている」）を使用する。
    - 一語一語を大切にする：フローを改善し、エンティティを追加するスペースを作るために、前回の要約を書き直す。
    - 融合、圧縮、「この記事は論じている」のような情報量の少ないフレーズの削除でスペースを作る。
    - 要約は、高密度で簡潔でありながら自己完結的、つまり、記事なしでも容易に理解できるものにする。
    - 欠落しているエンティティは新しい要約のどこに出現してもよい。
    - 前の要約から実体を削除してはならない。スペースが確保できない場合は、新しいエンティティを少なくする。

    各要約に全く同じ語数を使用することを忘れないこと。
    JSONで答えなさい。JSONは、"Missing_Entities "と "Denser_Summary "をキーとする辞書のリスト（長さ5）でなければならない。
    """

    
    # 英語
    prompt = """
    Article:{要約したい文章}

    You will ask me for an article. Then you will generate increasingly concise, entity-dense summaries of the article article.

    Repeat the following 2 steps 5 times.

    Step 1. Identify 1-3 informative entities (";" delimited) from the article which are missing from the previously generated summary.
    Step 2. Write a new, denser summary of identical length which covers every entity and detail from the previous summary plus the missing entities.

    A missing entity is:
    - relevant to the main story,
    - specific yet concise (5 words or fewer),
    - novel (not in the previous summary),
    - faithful (present in the article),
    - anywhere (can be located anywhere in the article).

    Guidelines:

    - The first summary should be long (4-5 sentences, ~80 words) yet highly non-specific, containing little information beyond the entities marked as missing. Use overly verbose language and fillers (e.g., "this article discusses") to reach ~80 words.
    - Make every word count: rewrite the previous summary to improve flow and make space for additional entities.
    - Make space with fusion, compression, and removal of uninformative phrases like "the article discusses".
    - The summaries should become highly dense and concise yet self-contained, i.e., easily understood without the article.
    - Missing entities can appear anywhere in the new summary.
    - Never drop entities from the previous summary. If space cannot be made, add fewer new entities.

    Remember, use the exact same number of words for each summary.
    Answer in JSON. The JSON should be a list (length 5) of dictionaries whose keys are "Missing_Entities" and "Denser_Summary".
    """

    ```

- 参考文献
    - https://note.com/hima2b4/n/n8642c4649f32




# Re-Reading
投稿日:2023/09/12
論文:[Re-Reading Improves Reasoning in Language Models](https://arxiv.org/abs/2309.06275)
入力したプロンプトを再読させることで精度を向上させる手法．step by stepなどと併用できることも示されている．

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/re_reading"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # 通常のプロンプト
    prompt = """
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか？
    A:
    """

    # Re-Reading
    prompt = """
    Q:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか？
    質問をもう一度読む:ロジャーはテニスボールを5個持っている。彼はさらに2つのテニスボール缶を買った。それぞれの缶には3個のテニスボールが入っている。彼は今何個のテニスボールを持っていますか？
    A:
    """
    ```




# EchoPrompt
投稿日:2023/9/16
論文:[EchoPrompt: Instructing the Model to Rephrase Queries for Improved In-context Learning](https://arxiv.org/abs/2309.10687)
質問に答える前にその質問を言い換えるように指示をすることでいくつもの指標で精度が改善した手法．また，step by stepなどと組み合わせることもできる．

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/echoprompt"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例

    ```python
    # 英語
    prompt = """
    Q:{答えたい問題}
    A:Let's repeat the question.
    """

    # 日本語
    prompt = """
    Q:{答えたい問題}
    A:質問を繰り返そう。
    """
    ```

- 参考文献
    - https://www.jbcc.co.jp/blog/column/innobase_202310_02.html







# Chain of Verification(CoVe)
投稿日:2023/9/20
論文:[Chain-of-Verification Reduces Hallucination in Large Language Models](https://arxiv.org/abs/2309.11495)
LLMの出力からハルシネーション(事実と異なる間違い)を減らすための手法です．
以下のようなステップで検証を行います．

1. ある入力に対するLLMから回答を得る(検証したい文章)
2. 検証するための質問文をいくつか生成する
3. それぞれの質問に対して独立して回答する
4. 最終的な検証済みの回答を生成

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/chain_of_verification"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例

    ```python
    # 1のプロンプト(※Few-shot　promptingを使っている)
    prompt1 = """
    Q: 質問1
    A: 1の答え
    Q: 質問2
    A: 2の答え
    Q: 質問3
    A:
    """
    # 出力
    3の答え

    # 2のプロンプト(※Few-shot promptingを使っている)
    prompt2 = """
    Context: Q:質問1
    A:1の答え
    Response:
    1の答えに含まれている事実，それを検証するための質問
    1の答えに含まれている事実，それを検証するための質問

    Context: Q:質問2
    A:2の答え
    Response:
    2の答えに含まれている事実，それを検証するための質問
    2の答えに含まれている事実，それを検証するための質問

    Context: Q:質問3
    A:3の答え
    Response:
    """
    # 出力
    質問3の答えに含まれている事実とそれを検証するための質問がいくつか出力される

    # 3のプロンプト，検証する質問ごとに答えを生成する(※Few-shot promptingを使っている)
    prompt3 = """
    Q:検証するための質問
    A:答え

    Q:検証するための質問
    A:答え

    Q:先ほど生成した質問
    A:
    """

    # 検証用の質問に対する答え

    # 4のプロンプト(※Few-shot promptingを使っている)
    prompt4 = """
    Context:修正前の文章
    別のソースからの情報
    検証ステップの実行結果:Q + A
    検証ステップの実行結果:Q + A
    Response:修正された一貫性のある文章

    Context:修正前の文章
    別のソースからの情報
    検証ステップの実行結果:Q + A
    検証ステップの実行結果:Q + A
    Response:修正された一貫性のある文章

    Context:prompt1の答え
    別のソースからの情報
    検証ステップの実行結果:Q(prompt2の質問) + A(prompt3の答え)
    検証ステップの実行結果:Q(prompt2の質問) + A(prompt3の答え)
    Response:
    """
    ```

- 参考文献
    - [https://aiboom.net/archives/55711](https://aiboom.net/archives/55711)




# Logical Chain-of-Thought
論文:[Enhancing Zero-Shot Chain-of-Thought Reasoning in Large Language Models through Logic](https://arxiv.org/abs/2309.13339)
投稿日:2023/9/23

- 具体例
- 参考文献




# Take a Step Back
投稿日:2023/10/9
論文:[Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models](https://arxiv.org/abs/2310.06117)
LLMに推論するための概念や原理を与えることで正しく推論するための精度を向上させる手法．

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/take_a_step_back"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # 通常のプロンプト
    prompt = """
    温度が2倍、体積が8倍になると、理想気体の圧力Pはどうなりますか？
    """

    # Take a Step Back
    prompt1 = """
    「温度が2倍、体積が8倍になると、理想気体の圧力Pはどうなりますか？」
    --------
    上記の質問の背景にある物理学の原理は何ですか？
    """
    ## prompt1の出力
    理想気体の法則： ここで、Pは圧力、Vは体積、nはモル数、Rは気体定数、Tは温度である。

    prompt2 = """
    温度が2倍、体積が8倍になると、理想気体の圧力Pはどうなりますか？

    理想気体の法則： ここで、Pは圧力、Vは体積、nはモル数、Rは気体定数、Tは温度である。
    """

    # prompt2の出力
    理想気体の法則を適用して圧力を求める。温度が2倍になれば、Tは2Tになる。体積が8倍になれば、Vは8Vになる。これらの値を理想気体の法則に代入すると、こうなる： P(8V) = nR(2T) 両辺を8Vで割ると、こうなる： P = nR(2T) / 8V 圧力が4分の1になったことがわかる。
    ```

- 参考文献
    - https://aiboom.net/archives/56671
    - https://cobusgreyling.medium.com/a-new-prompt-engineering-technique-has-been-introduced-called-step-back-prompting-b00e8954cacb




# Inferential Exclusion Prompting (IEP)
投稿日:2023/10/18
論文:[Eliminating Reasoning via Inferring with Planning: A New Framework to Guide LLMs’ Non-linear Thinking](https://arxiv.org/abs/2310.12342)
LLMに非線形な思考をさせることで精度を改善するアプローチ．

1. 複数の選択肢を回答するように質問
2. 選択肢が正しい場合の前提を質問(2.からは選択肢ごとに実行する)
3. 選択肢は前提と矛盾しないか質問する．矛盾する場合は他の選択肢を試す．
4. 矛盾しない答えが出てきたら終了

- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/inferential_exclusion_prompting"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    以下は論文をもとに解釈して作成したプロンプトです．論文で検証されているものと一部異なる箇所があるかもしれません．
    ```python
    prompt1 = """
    Q: 質問
    上記の質問に対する回答として考えられるものを出力してください．
    """

    # 出力
    いくつかの回答が出力

    # 以下は各回答ごとに実行
    prompt2 = """
    Q: {質問}
    A: {回答}
    上記の回答が正しい前提はなんですか?
    """

    # 出力
    前提が出力

    prompt3 = """
    Q: {質問}
    A: {回答}
    前提:{前提}
    上記の回答を仮説として考えると，前提に合致していますか?
    """

    # 出力
    「正しい」か「正しくない」か

    ```
- 参考文献
    - https://aiboom.net/archives/57628


# Meta-CoT
投稿日:2023/10/18
論文:[Meta-CoT: Generalizable Chain-of-Thought Prompting in Mixed-task Scenarios with Large Language Models](https://arxiv.org/abs/2310.06692)

- 具体例
- 参考文献



# Rephrase and Respond(RaR)
投稿日:2023/11/7
論文:[Rephrase and Respond: Let Large Language Models Ask Better Questions for Themselves](https://arxiv.org/abs/2311.04205)
与えられた質問を言い換えることで回答の精度を上げる手法．1stepで答える手法と2stepで答える手法の二つが提案されている．
- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/rephrase_and_respond"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # RaR(日本語)
    prompt = """
    Q:{question}
    質問を言い換えて、拡張し、そして答えてください。
    """
    
    # RaR(英語)
    prompt = """
    Q:{question}
    Rephrase and expand the question, and respond.
    """


    # Two-step RaR(日本語)
    prompt1 = """
    Q:{question}
    上記の質問に対して、より良い解答ができるように、質問を言い換え、発展させましょう。
    元の質問のすべての情報を維持すること。
    """

    prompt2 = """
    (original) {question}
    (rephrased) {prompt1の出力}
    言い換えた質問に対する答えを使って、元の質問に答えてください。
    """

    # Two-step RaR(英語)
    prompt1 = """
    Q:{question}
    Given the above question, rephrase and expand it to help you do 
    better answering. Maintain all information in the original question.
    """


    prompt2 = """
    (original) {question}
    (rephrased) {prompt1の出力}
    Use your answer for the rephrased question to answer the original question. 
    """
    ```
- 参考文献
    - https://github.com/uclaml/Rephrase-and-Respond



# Contrastive Chain of Thought
投稿日:2023/11/15
論文:[Contrastive Chain of Thought Prompting](https://arxiv.org/abs/2311.09277)
Contrastive Chain of Thoughts(CCoT)は対照的な例を追加することでChain of Thoughtsを改善する手法．有効な推論と無効な推論の両方をfew-shotで示すことで、LLMの推論の精度を向上させることを示しています．
- 実行
    <a href="https://www.data-science-wiki.net/article/nlp/llm_prompt_engineering/contrastive_chain_of_thoughts"><img src="https://raw.githubusercontent.com/fuyu-quant/data-science-wiki/main/images/logo2.png" alt="Data Science Wiki" width="200"/>
</a>

- 具体例
    ```python
    # 通常のプロンプト
    prompt = """
    Question:ジェームスの歯は30本ある。歯科医はそのうちの4本を削り、削った歯より7本多い歯をかぶせます。歯科医はジェームスの歯の何パーセントを治しますか？
    Answer:
    """

    # Contrastive Chain of Thoughts
    prompt = """
    Question:ジェームズは週に2回、3ページの手紙を2人の友人に書いている。ジェームズは1年間に何枚の手紙を書きますか。
    Explanation:彼は1週間に3*2=6ページの手紙を書く。だから彼は毎週6*2=12ページ書く。つまり、彼は1年に12*52=624ページ書くことになる。
    Wrong Explanation:彼は各友人に1週間に12*52=624ページ書く。だから彼は毎週3*2=6ページ書く。つまり、彼は1年に6*2=12ページ書くことになる。
    Question:ジェームスの歯は30本ある。歯科医はそのうちの4本を削り、削った歯より7本多い歯をかぶせます。歯科医はジェームスの歯の何パーセントを治しますか？
    """

    # 出力
    Explanation: ジェームスの歯のうち、4本が削られるため、残りの歯の数は30-4=26本となります。また、かぶせる歯の数は削った歯より7本多いため、かぶせる歯の数は4+7=11本となります。歯科医は26本の歯のうち、11本を治療するため、歯科医はジェームズの歯の26/30=0.8667、つまり86.67%を治療します。
    ```

- 参考文献
    - https://arxiv.org/abs/2311.09277




# その他
論文などとは紐づかない(？)Prompt Engineeringに関する資料を以下にまとめています．

- [ChatGPT-Azure OpenAI 大全](https://speakerdeck.com/hirosatogamo/chatgpt-azure-openai-da-quan?slide=64)

![スクリーンショット 2023-10-25 17.00.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529366/5d49e62a-5a3b-f987-2337-ec77b297c920.png)



# おわりに
今回はLLMへ入力するプロンプトに関する技術や研究の紹介でした．
今後も新しいPromptに関する技術が発表された際に追加していく予定です!

以下の記事もPrompt Engineeringについて非常にわかりやすくまとまっていたのでぜひ見てみてください!

https://qiita.com/YutaroOgawa2/items/aca32f8fd7d551596cf8

最後までお読みいただきありがとうございます．記事に誤り等ありましたらご指摘いただけますと幸いです。


# 参考文献
- [大規模言語モデル活用技術の最前線](https://speakerdeck.com/1never/ibis2023tiyutoriaru-da-gui-mo-yan-yu-moderuhuo-yong-ji-shu-nozui-qian-xian)