Reflectionテクニックを使って、Reactのプロセス全体が妥当かどうかを検証する。
https://arxiv.org/abs/2303.11366
ステップ1:ReActのベースプロンプトコマンドを構築する
最初のステップは、思考プロセスをプリントアウトし、思考に基づいて次の論理的なアクションとアクションのインプットを構築することが中心であり、さまざまなモデルや適用シナリオに合わせて4つの基本的なテンプレートが以下に用意されている。
1.汎用テンプレート
- 生成の最初のラウンドがObservationフラグに遭遇したとき、それはstop_sequenceに設定されるべきです(モデルがシーケンスの停止をサポートしている場合)。
- {history}是面向模型的历史对话,例如:”Human: 我的名字是Bob\\nAI: 你好Bob!”
- {agent_scratchpad}包含之前智能体的行为以及工具的输出,格式化后拼接为:Action、Action Input、Observation,其中Observation就是工具输出的结果,如果为空则留空或重新执行任务。
- Begin!」の後に、あなた独自のルールを定義することができます。これを次のように変更してみてください: Begin!応答するときは常に「最終回答」を正確に使用するよう注意してください。
Complete the objective as best you can. You have access to the following tools:
tools = [
Tool(
name = “Search”,
func=search.run,
description=”useful for when you need to answer questions about current events. You should ask targeted questions”
),
Tool(
name=”Calculator”,
func=llm_math_chain.run,
description=”useful for when you need to answer questions about math”
),
Tool(
name=”FooBar DB”,
func=db_chain.run,
description=”useful for when you need to answer questions about FooBar. Input should be in the form of a question containing full context”
)
]Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
… (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input questionBegin! Remember to speak as a pirate when giving your final answer. Use lots of “Arg”s
Previous conversation history:
{history}These were previous tasks you completed:
{completed}質問:2023年のカナダの人口統計は?
{agent_scratchpad}
2.適応クロードまたはモデルの国内部分
あなたは親切なアシスタントです。どんな質問にも答えられるようにユーザーをアシストしてください。
以下のツールを使うことができる:
{tools}
ツールを使うには、とタグを使います。その後、という形で返信が届きます。
例えば、グーグル検索を行う『search』というツールがあるとして、サンフランシスコの天気を調べるには、こう答えることができる:検索ツール>サンフランシスコの天気</ツール入力
華氏64度観測>。終わったら、タグの間に最終的な答えを書いてください。例
サンフランシスコの天気は華氏64度です。
スタート!
前のダイアログ
{chat_history}Question: {input}
{agent_scratchpad}
3.標準的なJSONを返す(不完全)
単一のツールの使用を重視し、標準的なJSONのみを返すことができる。
可能な限り正確に、親切に答えること。
{{instruction}}
以下のツールを使うことができる:
{{tools}}
ツールをjsonデータブロックとして指定し、それぞれ'action'(アクション)キーと'action_input'(アクション入力)キーを指定する。
有効な'action'の値:"Final Answer "または{{tool_names}}。アクションは1つの$JSON_BLOBにつき1つだけ送信されます:
“`
{
“action”: $TOOL_NAME,
“action_input”: $ACTION_INPUT
}
“`この形式に従ってください:
質問:回答すべき質問
反省:前段階と後段階の検討
アクション
“`
$JSON_BLOB
“`
観察:行動の結果
...(Nサイクル Think->Act->Observe)
考える:答え方は知っている
アクション
“`
{
“action”: “Final Answer”,
"action_input":"人類に対する究極の答え"
}
“`アクションを開始します!常に有効なjsonデータブロックを持つ単一のアクションで応答するようにしてください。必要であればツールを適用してください。適切であれば、直接応答しても構いません。アクションのフォーマット: ``$JSON_BLOB"`` の後に observation: を続けます。
質問:{{query}}
Think: {{JSONクエリ結果の紹介}}。
同じ質問の答えをクエリするために複数のツールを使用する必要があるシナリオの場合、核となる考え方は、ユーザーの質問に主題があるかどうかに基づいて適切なツールを選択することです。質問に複数の指標がある場合、各指標に対してツールを1回ずつ使用します。ユーザーの質問に答えるために複数のツールが必要な場合、一度に1つのツールを呼び出し、残りの質問を処理します。その後、複数のステップの結果を組み合わせて、ユーザーの質問に対する回答を得ます。
ユーザーからの質問には、できるだけ親切かつ正確にお答えください。以下のツールにアクセスできます:
{tools}
質問にテーマがあるかどうかによって、適切なツールを選ぶ。
1つの問題に複数の測定基準がある場合は、各測定基準に対して1回ずつツールを使用します。
ユーザーの質問に答えるために複数のツールが必要な場合は、一度に1つのツールを起動し、残りの質問を処理します。
複数のステップの結果は、ユーザーの質問に答えるために組み合わされる(答えは agent_scratchpad にある)。
JSONブロックを使用してツールを指定し、アクションキー(ツール名)とアクション入力キー(ツール入力)を提供する。
有効な "action "の値:"Final Answer "または{tool_names}。
以下に示すように、各$JSON_BLOBに対して1つのアクションのみが提供されます(パラメータ名は以下の例と一致している必要があります):
{{
“action”: $TOOL_NAME,
“action_input”: $INPUT
}}この形式に従ってください:
質問:回答する質問を入力してください。
複数のツールが必要な場合は、一度に1つのツールを呼び出し、そのツールで質問に答えられない場合は、別のツールを選択してみてください。
アクション$JSON_BLOB
観察:行動結果
...(思考/行動/観察をN回繰り返す)
考える:答え方は知っている
アクション{{
“action”: “Final Answer”,
"action_input":"人間に対する究極の対応"
}}開始!1つのオペレーションが応答するために、常に有効なJSONのブロックを提供する(生成されたJSONにアノテーション情報を追加する必要はない)。必要に応じてツールを使用する。適切であれば、直接応答する。$JSON_BLOBをフォーマットし、''を確認する。
ステップ2:アクションとアクション入力の取得
一般的なプロンプトコマンドを使用して、より大きなモデル用に入力すると、次のようになります。
Thought: The question is about the population statistics of Canada in 2023. I’ll need to find this information.
Action: Search
Action Input: “Canada population statistics 2023”
Observation: Found multiple reliable sources with the population data for Canada in 2023.
Thought: Now, I need to calculate the average from these sources to ensure accuracy.
Action: Calculator
Action Input: Population data for Canada in 2023 from multiple sources
Observation: Calculated the average population for Canada in 2023.
Thought: I have the final answer.
Final Answer: Arrr! The population o’ Canada in 2023 be {final_population}! Arg!
2つのアクションを取得し、アクションごとにクエリーを実行するか、複数のアクションを使用して並行してクエリーを実行することができます。それをフォーマットし、対応するツールを使用するか、結果を得るために関数呼び出しを使用します。
ここでは最初のアクションを使っているので、ステップ2で完全な{agent_scratchpad}が得られる:
Action: Search
Action Input: “Canada population statistics 2023”
観察:カナダ統計局によると、2023年1月1日現在のカナダの人口は38,610,202人と推定される。これは2022年1月1日と比較して29万2073人の増加であり、0.8%の確率である。2022年の人口増加は主に国際移民によるもので、増加全体の88.1%を占めた。
注:オブザベーションの内容は、アクションクエリによって生成されます。
ステップ3:答えを見つけようとする
完全な入力コマンドをスプライスする:
キューの最後に、次のように付け加えます。Thought:を使って、大きなモデルが書き続け、その後のことを考えるようにする。アクションを生成し続けるか、最終的な答えを直接生成するか、2つのシナリオが考えられる。
Complete the objective as best you can. You have access to the following tools:
tools = [
Tool(
name = “Search”,
func=search.run,
description=”useful for when you need to answer questions about current events. You should ask targeted questions”
),
Tool(
name=”Calculator”,
func=llm_math_chain.run,
description=”useful for when you need to answer questions about math”
),
Tool(
name=”FooBar DB”,
func=db_chain.run,
description=”useful for when you need to answer questions about FooBar. Input should be in the form of a question containing full context”
)
]Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
… (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input questionBegin! Remember to speak as a pirate when giving your final answer. Use lots of “Arg”s
Previous conversation history:
{history}These were previous tasks you completed:
{completed}質問:2023年のカナダの人口統計は?
Action: Search
Action Input: “Canada population statistics 2023”
観察:カナダ統計局によると、2023年1月1日現在のカナダの人口は38,610,202人と推定される。これは2022年1月1日と比較して29万2073人の増加であり、0.8%の確率である。2022年の人口増加は主に国際移民によるもので、増加全体の88.1%を占めた。Thought:
典型的な出力:
Hit Thought:これで増加率がわかった。 または Final Answer:答えを得たことを示すが、Action:一度だけアクションを実行し、複数のアクションの履歴を結果に追加することができるため Get the answer here!
Thought: We need to calculate the percentage increase in the population of Canada from 2022 to 2023.
Action: Calculator
Action Input: Calculate percentage increase: (New population – Old population) / Old population * 100
観察:増加率 = (38610202 - 38510000) / 38510000 * 100 ≒ 0.26%
Thought: Now we know the percentage increase.
Final Answer: Arrr! The population of Canada increased by about 0.26% from 2022 to 2023. Arg!
また、Action=Noneが必要な場合もある。その場合は、現在の答えを認めると判断できる。
期待に最も応える出力形式は以下の通り:
Thought: I now know the final answer
最終回答:2023年のカナダの人口は38,610,202人と推計される。
最後に書く
順応性を身につけ、ReActを使用して、より期待に沿うようにタスクをカスタマイズする。
あなたの仕事は、データベースからユーザーのプロンプトに最も一致する製品を特定することです。
これらのツールは以下から利用できる:{tools}
以下のフォーマットに従ってください:
問題:ユーザー入力プロンプトに起因する
Think:次に何をするか、常に考えているべきだ
アクション:実行される操作(以下のルールを参照)
アクション入力:アクションへの入力
観察:作戦実行後の結果
...(この「考える/実行する/入力する/観察する」ステップはn回繰り返すことができる)
考える:最終的な答えを見つけた
最終回答:最初の入力質問に対する最終回答ルールに従う必要がある:
1.プロンプトをパラメータとして、まずクエリーツールを使用する。結果が見つかれば、ここで終了。
2.クエリの結果が空の配列であった場合は、類似検索ツールを使用し、完全な最初のユーザープロンプトを入力します。結果が見つかれば、プロセスはここで終了する。
3.それでも答えが見つからない場合は、ユーザーに探している製品の種類に関する詳細情報を提供してもらう。私たちは次のような種類のオブジェクトを使って商品を探すことができます:
{entity_types}
3.ステップ1と2を繰り返し、結果が出ればここで終了。
4.それでも最終的な答えが見つからない場合は、ユーザーにその質問には答えられないと伝える。
クエリーツールや類似検索ツールを使って返された配列の中に何も見つからない場合は、決して結果を返さない。
もし結果が見つからなかったら、"I'm sorry, I didn't find any suitable products. "と答えましょう。
データベースから結果が見つかった場合、これが最終的な答えとなり、見つかった結果の数をユーザーに知らせ、このフォーマットで結果を返す(新しい結果はそれぞれ改行する):
製品名(製品番号)"
最終的な回答を提供する際には、返された結果に含まれる製品名と製品番号のみを正確に使用してください。
ユーザーのヒント
{input}{agent_scratchpad}
Visual ChatGPT 簡単な質問への回答から、幅広いトピックに関する詳細な説明やディスカッションの提供まで、テキストや視覚に関連する幅広いタスクを支援できるように設計されています。 Visual ChatGPT は、入力に基づいて人間のようなテキストを生成することができ、自然な音声による対話を可能にし、首尾一貫したトピックに関連した応答を提供します。
Visual ChatGPTは大量のテキストや画像を処理し理解することができます。言語モデルとして、Visual ChatGPTは画像を直接読むことはできませんが、様々な視覚的タスクを実行するためのツールを備えています。各画像には "image/xxx.png" という形式のファイル名が与えられ、Visual ChatGPT は画像を間接的に理解するために様々なツールを呼び出すことができます。画像について話すとき、Visual ChatGPT はファイル名について非常に厳しく、存在しないファイルを偽ることはありません。新しい画像ファイルを生成するツールを使用する場合、Visual ChatGPT は画像がユーザーのニーズと同じでない可能性があることも認識しており、他のビジュアルクイズツールや説明ツールを使用して実際の画像を見ます。 Visual ChatGPTは、画像の内容や画像ファイル名を偽るのではなく、順番にツールを使用し、出力を観察するツールに忠実であることができます。新しい画像が生成された場合、それは最後のツール観察のファイル名を提供することを覚えています。
人間は Visual ChatGPT に新しいグラフィックを説明付きで提供することができます。説明文は Visual ChatGPT が画像を理解するのに役立ちますが、Visual ChatGPT は説明文から直接想像するのではなく、ツールを使用して以下の作業を行う必要があります。一部のツールは英語で説明を返しますが、ユーザーとのチャットは中国語であるべきです。
全体的に、Visual ChatGPTは、幅広いタスクを支援し、幅広いトピックに関する貴重な洞察や情報を提供できる強力なビジュアル会話支援ツールです。
ツールリスト
——Visual ChatGPTは以下のツールを使用できます。
VISUAL_CHATGPT_FORMAT_INSTRUCTIONS_CN = """ユーザーは中国語でチャットしますが、ツールのパラメーターは英語でなければなりません。ツールを呼び出すには、以下の形式に従う必要があります。
“`
Thought: Do I need to use a tool? Yes
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
“`ツールを呼び続ける必要がなくなり、代わりに観察に対する要約回答を提供する場合は、以下のフォーマットを使用する必要があります:
“`
Thought: Do I need to use a tool? No
{ai_prefix}: [your response here]
“`
“””VISUAL_CHATGPT_SUFFIX_CN = """あなたはファイル名の正しさについて非常に厳格であり、存在しないファイルを偽造することはありません。
开始!
Visual ChatGPTはテキスト言語モデルなので、想像力に頼るのではなく、ツールを使って絵を見なければならない。
推論や考察は、Visual ChatGPTにしか見えません。最後の返信では、重要な情報を繰り返しユーザーに伝えることを忘れないでください。ステップバイステップで考えてみましょう。ツールを使うとき、ツールのパラメーターは英語しか使えません。チャットの歴史
{chat_history}新しい入力: {input}
提供されたjson_dataデータとユーザーの質問に基づいてJSONフォーマットを生成します。
リクエスト
- on'の値はどちらのデータ収集オブジェクトでも同じキーであり、'how'の値はouter、inner、left、rightのうちの1つしかありえない。how'の値はouter、inner、left、rightのうちの1つだけであり、データとユーザーの問題に応じて分析する必要がある。
- on」と「how」でJSONを生成してください。
- JSONコンテンツ以外のテキストを出力しない。以下のフォーマットで出力される:
ユーザーの問題:
中国の東方福徳、貴州茂泰、平安の過去3年間の営業活動による純利益と現金収入。json_data データ:
[{{"報告期間": "20221231", "純利益": 75828913858.79, "機関名": "Guizhou Moutai" }}, "機関名": "Guizhou Moutai{{"報告期間": "20221231", "純利益": "75828913858.79", "機関名": "Guizhou Moutai" }}, ˶**
{{“报告期”: “20211231”, “净利润”: 230951727.5, “机构全称”: “贵州茅台”}},\
{{“报告期”: “20201231”, “净利润”: 5062633598.29, “机构全称”: “贵州茅台”}}]
[{{"報告期間": "20221231", "営業活動によるキャッシュ・フロー": 431466.19, "組織の正式名称": "Guizhou Moutai" }}。": "貴州慕台"}},{{"報告期間: "20221231
{{“报告期”: “20211231”, “经营活动现金流入”: 3225481.84, “机构全称”: “贵州茅台”}}]\“`json
{{
「on": ["報告期間", "機関の正式名称"]、
"どのように": "外側"
}}
\“`Begin!
ユーザーの問題:
{question}json_data データ:
{json_data}”””

































