Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LangChainから学ぶプロンプトエンジニアリングテクニック

 LangChainから学ぶプロンプトエンジニアリングテクニック

機械学習の社会実装勉強会第31回 (https://machine-learning-workshop.connpass.com/event/307110/) の発表で使用した資料です。

More Decks by 西岡 賢一郎 (Kenichiro Nishioka)

Other Decks in Technology

Transcript

  1. 自己紹介 • 名前: 西岡 賢一郎 ◦ Twitter: @ken_nishi ◦ note:

    https://note.com/kenichiro ◦ YouTube: 【経営xデータサイエンスx開発】西岡 賢一郎のチャンネル (https://www.youtube.com/channel/UCpiskjqLv1AJg64jFCQIyBg) • 経歴 ◦ 東京大学で位置予測アルゴリズムを研究し博士 (学術) を取得 ◦ 東京大学の博士課程在学中にデータサイエンスをもとにしたサービスを提供する株式会社ト ライディアを設立 ◦ トライディアを別のIT会社に売却し、CTOとして3年半務め、2021年10月末にCTOを退職 ◦ CDPのスタートアップ (Sr. PdM)・株式会社データインフォームド (CEO)・株式会社ディース タッツ (CTO) ◦ 自社および他社のプロダクト開発チーム・データサイエンスチームの立ち上げ経験
  2. プロンプトエンジニアリングの重要性 • プロンプトの役割の説明 ◦ プロンプトはAIに対する「指示」として機能し、AIがどのような情報を提供するかを決定する。 ◦ 正確で明確なプロンプトは、AIが望ましい結果を生成するための鍵。 • プロンプトの効果 ◦

    効果的なプロンプトにより、AIはより関連性の高い、正確な回答を提供する。 ◦ 不適切なプロンプトは、誤解や不完全な結果を引き起こす可能性がある。 • 具体例の提示 ◦ 不明確なプロンプト - 「健康的な食事について教えて」 ▪ 結果: AIは一般的な健康的な食事の情報を提供するが、特定の食事制限や目的に関する情報は 含まれない。 ◦ 明確なプロンプト - 「糖尿病患者のための低炭水化物食事計画を提案して」 ▪ 結果: AIは特定の健康状態に合わせた詳細な食事計画を提供する。 • プロンプトの最適化の重要性 ◦ プロンプトを最適化することで、AIの能力を最大限に活用し、望む情報や結果を得ることができる。
  3. プロンプトエンジニアリングの重要な要素 プロンプト作成において考慮すべき6つの主要な要素 • タスク ◦ プロンプトの核心。AIに求める具体的な行動や目標を明確にする。 ◦ 例: 「レポートを要約して」、「特定のトピックに関する質問を生成して」。 •

    コンテキスト ◦ ユーザーの背景や状況に関する情報を提供する。 ◦ 例: 「初心者向けのプログラミングチュートリアルを作成して」。 • 例示 ◦ 具体的な例を用いて、AIに期待する出力の形式を示す。 ◦ 例: 「こ拝啓 時下ますますご清祥のこととお慶び申し上げます」。 • ペルソナ ◦ AIに模倣させたい特定の人物やキャラクターを定義する。 ◦ 例: 「スティーブ・ジョブズのようなプレゼンテーションスタイルで提案書を作成して」。 • フォーマット ◦ 出力の形式(リスト、段落、表など)を指定する。 ◦ 例: 「結果を箇条書きで提供して」。 • トーン ◦ 出力の声調やスタイル(カジュアル、フォーマルなど)を設定する。 ◦ 例: 「親しみやすいトーンでアドバイスを書いて」。 タスクは最も重要で、コンテキストがそれを補完する。 例示・ペルソナ・フォーマット・トーンは、より洗練された調整を提供する。 重要度 大 小
  4. 精度向上のための26のプロンプトの原則 • Principled Instructions Are All You Need for Questioning

    LLaMA-1/2, GPT-3.5/4 ◦ Bsharat, Sondos Mahmoud, Aidar Myrzakhan, and Zhiqiang Shen. "Principled Instructions Are All You Need for Questioning LLaMA-1/2, GPT-3.5/4." arXiv preprint arXiv:2312.16171 (2023). • 内容 ◦ 提案された原則を適用したプロンプトは、標準的なプロンプトよりも高品質で簡潔な応答を 生成。 ◦ GPT-4に適用した場合、応答の品質と精度がそれぞれ平均57.7%、67.3%向上。 ◦ モデルのサイズが大きくなるにつれて、パフォーマンスの向上がより顕著に。特に、 LLaMA-2-7BからGPT-4への移行では、パフォーマンスの向上が40%を超えた。 ◦ 手動で設計されたATLASベンチマークを使用して、特殊なプロンプトがLLMの応答の品質と 精度を向上させることを実証。
  5. 26のプロンプトの原則 1. 直接的に要点を述べる。 2. 対象聴衆をプロンプトに明示する。 3. 複雑なタスクを単純なプロンプトのシーケンスに分割する。 4. 肯定的な指示を使い、否定的な言葉は避ける。 5.

    単純な言葉で説明を求める。 6. 報酬を提示するフレーズを使う。 7. 例を用いたプロンプトを実装する。 8. プロンプトを「###Instruction###」で始め、内容を提示する。 9. 「あなたのタスクは」と「あなたは必ず」などのフレーズを使用する。 10. 「ペナルティがあります」というフレーズを組み込む。 11. 「自然な、人間らしい方法で質問に答えてください」というフレーズを使う。 12. 「ステップバイステップで考えて」といった先導的な言葉を書く。 13. 「あなたの回答は偏見を持たず、ステレオタイプに依存しないようにしてください」というフレーズを加える。 14. 「これからは、必要な出力を提供するために必要な情報が得られるまで質問をしてください」という指示を使う。 15. 「[任意の定理/トピック/ルール名]を教えて、最後にテストを含めてください。ただし、答えは教えず、私が答えた後で正解かどうか教えてください」というフレーズ を使用する。 16. LLMに特定の役割を割り当てる。 17. プロンプトに区切り文字を使用する。 18. プロンプト内で特定の単語やフレーズを複数回繰り返す。 19. 思考の連鎖(CoT)を数ショットプロンプトと組み合わせる。 20. 望ましい出力の始まりでプロンプトを終える出力プライマーを使用する。 21. 「[トピック]について詳細な[エッセイ/テキスト/パラグラフ]を書いてください。必要なすべての情報を追加してください」という指示を使う。 22. 「ユーザーが送信した各段落を見直してください。文法と語彙のみを改善し、自然に聞こえるようにしてください。ただし、執筆スタイルを変更しないでください」と いう指示を使う。 23. 「これからは、複数のファイルにまたがるコードを生成する際に、指定されたファイルを自動的に作成するか、既存のファイルに生成されたコードを挿入するスクリプ トを生成してください」という指示を使う。 24. 「提供された[歌詞/物語/段落/エッセイ...]の始まりを与えます:[歌詞/言葉/文]。提供された言葉に基づいて完成させ、流れを一貫させてください」という指示を使 う。 25. モデルがコンテンツを生成するために従うべき要件を、キーワード、規則、ヒント、指示の形で明確に述べる。 26. 提供されたサンプルに似たテキストを書く場合は、「提供された段落[/タイトル/テキスト/エッセイ/回答]に基づいて同じ言語を使用してください」という指示を使 う。
  6. プロンプトエンジニアリングとプログラミング学び方の共通点 • プロンプトエンジニアリングの現状 ◦ 発展途上の分野: 確立された方法論は少なく、探索的アプローチが中心。 ◦ 正解がなく、広い知識と深い理解が必要。 • 学習方法

    ◦ 基礎理解: AIの原理とプロンプトの影響力。 ◦ 試行錯誤: 多様なプロンプトを試し、効果を観察。 ◦ コミュニティ交流: 知見の共有と他者からの学び。 ◦ 継続学習: 最新研究や事例の追跡。 • プログラミングの学び方との共通点 ◦ 「良い書き方」は、経験則として生まれてくる。 ◦ 自ら試行錯誤するのも大事だが、先人の知見を利用するのが最も手っ取り早い。 ◦ 先人の推奨する「良い書き方」を学ぶことが重要。
  7. 良いコードを書くためには良いコードを読む コードリーディングのメリット • コーディングスタイルの向上 ◦ 整理されたコードの書き方や効果的なコメントの使い方を学び、より読みやすく保守しやす いコードを書けるようになる。 • 新しいテクニックの習得 ◦

    異なるプログラミングパラダイムやデザインパターン、アルゴリズムを学び、多様な問題解 決手法を身につけられる。 • 問題解決スキルの向上 ◦ 実際の問題を効率的に解決する方法を学び、複雑な課題に対するアプローチを改善。 • ベストプラクティスの学習 ◦ 業界のベストプラクティスを反映したコードを通じて、よりプロフェッショナルな開発スキ ルを習得できる。
  8. 良いプロンプトを書くためには良いプロンプトを読む プロンプトリーディングのメリット • プロンプトの効果的な構成方法の理解 ◦ GPTなどのAIモデルに対してより精度の高い質問や指示を行うことが可能になる。これにより、AIと の対話の効果が最大化される。 • AIの応答パターンや限界の深い理解 ◦

    異なるプロンプトのアプローチを分析することで、AIの応答の傾向や能力の限界を把握できる。 • 効果的なプロンプト設計のインスピレーションの獲得 ◦ プロンプトの例を通じて、特定のタスクや問題に対する効果的なプロンプト設計のアイデアを得るこ とができる。 • AI応答の質の向上 ◦ AIの応答を改善するためのキーワードやフレーズの使用方法を学ぶことができる。 • AIの応答に影響を与える要因の理解と戦略の練習 ◦ プロンプトリーディングを通じて、AIの応答に影響を与える要因をよりよく理解し、予測可能な結果 を得るための戦略を練ることができる。
  9. Langchainのプロンプトリーディングをする意義 キーワードは「LLMと外部リソースの連携」 • 複合的な情報処理能力の理解 ◦ LangChainのプロンプトを通じて、大規模言語モデルと外部ツールの連携による複合的な情報処理の方法を理解できる。 これにより、単一のモデルでは実現できない複雑なタスクの実行方法を学ぶことができる。 • 外部データソースの活用 ◦

    LangChainが外部の検索ツールと連携する際のプロンプトの構造を分析することで、外部データソースを効果的に活用す る方法を学ぶことができる。 • 拡張された応答能力の理解 ◦ LangChainのプロンプトを読むことで、言語モデルが外部ツールと連携することによってどのように応答能力が拡張され るのかを理解できる。 • 新しいアプリケーションの可能性の探求 ◦ LangChainのプロンプトを分析することで、外部ツールとの連携を活用した新しいアプリケーションや機能の開発につい てのインスピレーションを得ることができる。 • 高度なプロンプト設計の学習 ◦ LangChainのような高度な機能を持つ言語モデルのプロンプトを読むことで、複雑なシステムとの連携を考慮したプロン プト設計のスキルを習得できる。
  10. LangChainの基本のおさらい • LangChainの概要 ◦ LangChainは、大規模言語モデル(LLM)を使ったアプリケーション開発を容易にするライブラリ。 ◦ AI駆動の会話型アプリケーションやツールの開発に特化。 • 主な特徴 ◦

    モジュール式設計: 異なる機能をモジュールとして組み合わせ、カスタマイズ可能。 ◦ 多様なモデルのサポート: GPT-3などの様々なLLMに対応。 ◦ 会話管理: 会話のコンテキストを管理し、流れをスムーズにする機能。 • 利用シナリオ ◦ チャットボット、質問応答システム、コンテンツ生成ツールなど。 ◦ ユーザーインタラクションの強化、自然言語処理の応用。 • 開発者向けの利点 ◦ 開発の迅速化: 既存のモジュールを利用して、開発時間を短縮。 ◦ 柔軟性: 異なるモデルや機能を組み合わせて、多様なアプリケーションを構築。
  11. API Chain: APIドキュメントからAPI URLを生成 You are given the below API

    Documentation: {api_docs} Using this documentation, generate the full API url to call for answering the user question. You should build the API url in order to get a response that is as short as possible, while still getting the necessary information to answer the question. Pay attention to deliberately exclude any unnecessary pieces of data in the API call. Question:{question} API url: 以下のAPIドキュメントが提供されています: {api_docs} このドキュメントを使用して、ユーザーの質問に答える ために呼び出す完全なAPI URLを生成します。 質問に答えるために必要な情報を取得しながら、できる だけ短いレスポンスを得るために API urlを構築する必 要があります。APIコールでは、不要なデータを意図的 に除外することに注意してください。 質問: {question} API url:
  12. API Chain: APIのレスポンスから回答生成 You are given the below API Documentation:

    {api_docs} Using this documentation, generate the full API url to call for answering the user question. You should build the API url in order to get a response that is as short as possible, while still getting the necessary information to answer the question. Pay attention to deliberately exclude any unnecessary pieces of data in the API call. Question:{question} API url: {api_url} Here is the response from the API: {api_response} Summarize this response to answer the original question. Summary: 以下のAPIドキュメントが提供されています: {api_docs} このドキュメントを使用して、ユーザーの質問に答えるために呼び出す完 全なAPI URLを生成します。 質問に答えるために必要な情報を取得しながら、できるだけ短いレスポン スを得るためにAPI urlを構築する必要があります。APIコールでは、不 要なデータを意図的に除外することに注意してください。 質問:{question} API url: {api_url} APIからのレスポンス: {api_response} このレスポンスを要約して、元の質問に答えてください。 要約:
  13. Conversation Chain: 会話の履歴をプロンプトに埋め込む The following is a friendly conversation between

    a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know. Current conversation: {history} Human: {input} AI: 以下は人間とAIのフレンドリーな会話である。 AI は饒舌で、文脈から具体的な詳細をたくさん教え てくれる。AIが質問の答えを知らない場合は、正 直に「知らない」と答える。 現在の会話: {history} 人間: {input} AI:
  14. Conversational Retrieval Chain: フォローアップクエスチョンを生成 Given the following conversation and a

    follow up question, rephrase the follow up question to be a standalone question, in its original language. Chat History: {chat_history} Follow Up Input: {question} Standalone question: 次の会話とフォローアップの質問がある場合、 フォローアップの質問を元の言語で、独立した質 問に言い換えなさい。 チャットの履歴 {chat_history} フォローアップ入力 : {question} 単独の質問:
  15. 質問に関連する文書を埋め込み Use the following pieces of context to answer the

    question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. {context} Question: {question} Helpful Answer: 以下の文脈を利用して、最後の質問に答えなさ い。答えがわからない場合は、答えを作ろうとせ ず、わからないと答えましょう。 {context} 質問: {question} 役に立つ答え:
  16. 質問に関するクエリを生成 Given an input question, first create a syntactically correct

    {dialect} query to run, then look at the results of the query and return the answer. Unless the user specifies in his question a specific number of examples he wishes to obtain, always limit your query to at most {top_k} results. You can order the results by a relevant column to return the most interesting examples in the database. Never query for all the columns from a specific table, only ask for a the few relevant columns given the question. Pay attention to use only the column names that you can see in the schema description. Be careful to not query for columns that do not exist. Also, pay attention to which column is in which table. Use the following format: Question: Question here SQLQuery: SQL Query to run SQLResult: Result of the SQLQuery Answer: Final answer here Only use the following tables: {table_info} Question: {input} 入力された質問に対して、まず構文的に正しい{dialect}クエリを作成し て実行し、次にクエリの結果を見て答えを返します。ユーザが質問で特定 の数の例を取得したいと指定しない限り、クエリは常に最大{top_k}の結 果に制限します。データベース内の最も興味深い例を返すために、関連す る列で結果を並べ替えることができます。 特定のテーブルからすべてのカラムを問い合わせることはありません。 スキーマの説明にあるカラム名のみを使用するように注意してください。 存在しないカラムを問い合わせないように注意してください。また、どの カラムがどのテーブルにあるかも注意してください。 以下のフォーマットを使用してください: 質問: 質問はこちら SQLQuery: 実行するSQLクエリ SQLResult: SQLQueryの結果 答え: 最終的な答えはこちら 以下のテーブルのみを使用してください: {table_info} 質問 {input}
  17. 回答に含まれる仮定の列挙 Here is a statement: {statement} Make a bullet point

    list of the assumptions you made when producing the above statement. ここにステートメントがある: {statement} 上記のステートメントを作成する際に行った仮定 を箇条書きにしなさい。
  18. 仮定が正しいかどうかを検証 Here is a bullet point list of assertions: {assertions}

    For each assertion, determine whether it is true or false. If it is false, explain why. 以下はアサーションの箇条書きリストである: {assertions} 各アサーションについて、それが真か偽かを判断 する。偽の場合は、その理由を説明する。
  19. 検証された結果をもとに回答を修正 {checked_assertions} Question: In light of the above assertions and

    checks, how would you answer the question '{question}'? Answer: {checked_assertions} 質問 上記のアサーションとチェックを踏まえて、 質問「{question}」にどう答えますか? 答え:
  20. Webクローリング You are an agents controlling a browser. You are

    given: (1) an objective that you are trying to achieve (2) the URL of your current web page (3) a simplified text description of what's visible in the browser window (more on that below) You can issue these commands: SCROLL UP - scroll up one page SCROLL DOWN - scroll down one page CLICK X - click on a given element. You can only click on links, buttons, and inputs! TYPE X "TEXT" - type the specified text into the input with id X TYPESUBMIT X "TEXT" - same as TYPE above, except then it presses ENTER to submit the form The format of the browser content is highly simplified; all formatting elements are stripped. Interactive elements such as links, inputs, buttons are represented like this: <link id=1>text</link> <button id=2>text</button> <input id=3>text</input> Images are rendered as their alt text like this: <img id=4 alt=""/> Based on your given objective, issue whatever command you believe will get you closest to achieving your goal. You always start on Google; you should submit a search query to Google that will take you to the best page for achieving your objective. And then interact with that page to achieve your objective. If you find yourself on Google and there are no search results displayed yet, you should probably issue a command like "TYPESUBMIT 7 "search query"" to get to a more useful page. Then, if you find yourself on a Google search results page, you might issue the command "CLICK 24" to click on the first link in the search results. (If your previous command was a TYPESUBMIT your next command should probably be a CLICK.) Don't try to interact with elements that you can't see. あなたはブラウザをコントロールするエージェントです。あなたには (1) 達成しようとしている目的 (2) 現在のウェブページの URL (3) ブラウザウィンドウに表示されているものの簡略化されたテキスト記述 (詳細は 後述) これらのコマンドを発行することができます: SCROLL UP - ページを1つ上にスクロール SCROLL DOWN - 1ページ下にスクロールします。 CLICK X - 指定した要素をクリックします。クリックできるのはリンク、ボタン、 入力のみです! TYPE X "TEXT" - 指定されたテキストを id Xの入力に入力します。 TYPESUBMIT X "TEXT" - 上のTYPEと同じですが、ENTERを押してフォームを送 信します。 ブラウザコンテンツのフォーマットは非常に単純化されており、フォーマット要素はすべて取り 除かれています。 リンク、入力、ボタンなどのインタラクティブ要素はこのように表現されます: <link id=1>テキスト</link>。 <ボタン id=2>テキスト</ボタン <input id=3>テキスト</input>。 画像は次のように altテキストとして表示されます: <img id=4 alt=""/> のようになります。 与えられた目的に基づいて、目標達成に最も近づけると思われるコマンドを発行してください。 Googleに検索クエリを送信し、目的を達成するために最適なページに移動する必要がありま す。そして、目的を達成するためにそのページと対話する。 グーグルにアクセスしたとき、まだ検索結果が表示されていなければ、「 TYPESUBMIT 7 "search query"」のようなコマンドを発行して、より有用なページにアクセスすべきであ る。 そして、グーグルの検索結果ページにたどり着いたら、 "CLICK 24 "というコマンドを実行し て、検索結果の最初のリンクをクリックする。 (前のコマンドがTYPESUBMITだった場合、次の コマンドはおそらく CLICKになるはずだ)。 見えない要素を操作しようとしないでください。
  21. MapReduce: 分割した文書から独立して質問の回答を生成 Use the following portion of a long document

    to see if any of the text is relevant to answer the question. Return any relevant text verbatim. {context} Question: {question} Relevant text, if any: 長い文書の次の部分を使って、質問の答えに関連 する文章があるかどうかを確認してください。 関連するテキストを逐語的に返します。 {context} 質問: {question} 関連するテキスト (ある場合):
  22. MapReduce: 独立した回答を使って最終的な答えを生成 Given the following extracted parts of a long

    document and a question, create a final answer with references ("SOURCES"). If you don't know the answer, just say that you don't know. Don't try to make up an answer. ALWAYS return a "SOURCES" part in your answer. QUESTION: ・・・ === CONTENT: ・・・ Source: ・・・ === FINAL ANSWER: ・・・ SOURCES: ・・・ QUESTION: {question} ========= {summaries} ========= FINAL ANSWER: 以下の長文の抜粋部分と質問が与えられたら、参考文献 ("SOURCES")を使って 最終的な答えを作りなさい。 答えがわからない場合は、わからないと答えましょう。答えを作ろうとしないで ください。 答えには必ず「 SOURCES」の部分を返しましょう。 QUESTION: ・・・ === CONTENT: ・・・ Source: ・・・ === FINAL ANSWER: ・・・ SOURCES: ・・・ QUESTION: {question} ========= {summaries} ========= FINAL ANSWER:
  23. Refine: 分割した文書を順番に処理して回答を生成 The original question is as follows: {question} We

    have provided an existing answer, including sources: {existing_answer} We have the opportunity to refine the existing answer(only if needed) with some more context below. ------------ {context_str} ------------ Given the new context, refine the original answer to better answer the question. If you do update it, please update the sources as well. If the context isn't useful, return the original answer. 元の質問は以下の通り: {question} 出典を含め、既存の回答を用意しました: {existing_answer}です。 必要な場合のみ、以下の文脈でよりよい回答にしてくだ さい。 ------------ {context_str} ------------ 新しいコンテキストを考慮し、質問によりよく答えるた めに元の答えを改良してください。回答を更新する場合 は、ソースも更新してください。コンテキストが役に立 たない場合は、元の答えを返してください。
  24. 「思考・行動・観察」を繰り返す Answer the following questions as best you can. You

    have access to the following tools: ・・・ 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 question Begin! Question: {input} Thought:{agent_scratchpad} 次の質問にできるだけ答えてください。あなたは以下のツー ルにアクセスできます: ・・・ 以下のフォーマットを使用してください: 質問:あなたが答えなければならないインプット・クエス チョン 思考:何をすべきかを常に考えるべき 行動: 取るべき行動。[{tool_names}]のどれかでなけれ ばならない。 アクション入力:アクションへの入力 観察:行動の結果 ...(この思考/行動/行動入力/観察はN回繰り返すことがで きる) 思考: 最終的な答えがわかった 最終的な答え:元の入力された質問に対する最終的な答え 開始 質問 {input} 思考:{agent_scratchpad}
  25. ConstitutionalChain: CRITIQUE Below is a conversation between a human and

    an AI model. If there is no material critique of the model output, append to the end of the Critique: 'No critique needed.' If there is material critique of the model output, append to the end of the Critique: 'Critique needed.' Human: {input_prompt} Model: {output_from_model} Critique Request: {critique_request} Critique: {critique} ・・・<exampleが続く> Human: {input_prompt} Model: {output_from_model} Critique Request: {critique_request} Critique: 以下は人間とAIモデルの会話である。モデル出力に対す る重要な批評がない場合は、批評の最後に「批評は必要 ありません」と付け加えます。モデル出力に対する重要 な批評がある場合は、批評の最後に「批評が必要です」 と付け加えます。 人間:{input_prompt} モデル: {output_from_model} 批評リクエスト: {critique_request} 批評: {critique} ・・・<exampleが続く> 人間:{input_prompt} モデル: {output_from_model} 批評リクエスト: {critique_request} 批評:
  26. ConstitutionalChain: REVISION Below is a conversation between a human and

    an AI model. Human: {input_prompt} Model: {output_from_model} Critique Request: {critique_request} Critique: {critique} ・・・<exampleが続く> If the critique does not identify anything worth changing, ignore the Revision Request and do not make any revisions. Instead, return "No revisions needed". If the critique does identify something worth changing, please revise the model response based on the Revision Request. Revision Request: {revision_request} Revision: 以下は、人間と AIモデルの会話である。 人間:{input_prompt} モデル: {output_from_model} 批評リクエスト: {critique_request} 批評: {critique} ・・・<exampleが続く> 批評の結果、変更する価値のあるものが見つからなかった場合は、リ ビジョンリクエストを無視し、リビジョンを作成しないでください。 代わりに "No revisions needed "を返してください。 批評によって変更すべき点が見つかった場合は、 Revision Requestに基づいてモデル応答を修正してください。 修正要求: {revision_request}。 修正:
  27. graph_qa: CYPHER_GENERATION_PROMPT Task:Generate Cypher statement to query a graph database.

    Instructions: Use only the provided relationship types and properties in the schema. Do not use any other relationship types or properties that are not provided. Schema: {schema} Note: Do not include any explanations or apologies in your responses. Do not respond to any questions that might ask anything else than for you to construct a Cypher statement. Do not include any text except the generated Cypher statement. The question is: {question} タスク:グラフデータベースに問い合わせるためのCypherステートメント を生成する。 指示: スキーマで提供されている関係タイプとプロパティのみを使用してくださ い。 提供されていない他の関係タイプやプロパティは使用しないでください。 スキーマ {schema} 注意:回答に説明や弁明は含めないでください。 Cypher ステートメントを作成すること以外を問うような質問には回答し ないでください。 生成されたCypher文以外のテキストを含めないでください。 質問: {question}
  28. graph_qa: CYPHER_QA_PROMPT You are an assistant that helps to form

    nice and human understandable answers. The information part contains the provided information that you must use to construct an answer. The provided information is authoritative, you must never doubt it or try to use your internal knowledge to correct it. Make the answer sound as a response to the question. Do not mention that you based the result on the given information. If the provided information is empty, say that you don't know the answer. Information: {context} Question: {question} Helpful Answer: あなたは、人が理解できる素敵な答えを作る手助けをするアシスタン トです。 情報パートには、あなたが答えを構成するために使用しなければなら ない提供された情報が含まれています。 提供された情報は権威のあるものであり、決してそれを疑ったり、自 分の中の知識を使って訂正しようとしてはならない。 設問に対する回答として聞こえるようにすること。与えられた情報に 基づいて結果を出したとは言わないこと。 提供された情報が空白の場合は、答えがわからないと言ってくださ い。 情報 {context} 質問: {question} 役に立つ答え:
  29. router: MULTI_PROMPT_ROUTER Given a raw text input to a language

    model select the model prompt best suited for the input. You will be given the names of the available prompts and a description of what the prompt is best suited for. You may also revise the original input if you think that revising it will ultimately lead to a better response from the language model. << FORMATTING >> Return a markdown code snippet with a JSON object formatted to look like: ```json {{{{ "destination": string \ name of the prompt to use or "DEFAULT" "next_inputs": string \ a potentially modified version of the original input }}}} ``` REMEMBER: "destination" MUST be one of the candidate prompt names specified below OR it can be "DEFAULT" if the input is not well suited for any of the candidate prompts. REMEMBER: "next_inputs" can just be the original input if you don't think any modifications are needed. << CANDIDATE PROMPTS >> {destinations} << INPUT >> {{input}} << OUTPUT (must include ```json at the start of the response) >> << OUTPUT (must end with ```) >> 言語モデルへの生のテキスト入力が与えられると、その入力に最も適したモデルのプロンプトを 選択する。利用可能なプロンプトの名前と、そのプロンプトが何に最も適しているかの説明が与 えられます。また、元の入力を修正した方が最終的に言語モデルからの応答が良くなると思われ る場合は、元の入力を修正することもできる。 << フォーマット>> JSONオブジェクトをフォーマットしたマークダウンコードスニペットを返します: ``json {{{{ "destination": string 使用するプロンプトの名前、または "DEFAULT" "next_inputs": string ⦅元入力の変更可能なバージョン }}}} ``` REMEMBER: "destination "は、以下に指定するプロンプトの候補名のいずれかでなければ ならない (MUST)。 REMEMBER: "next_inputs" には、特に変更が必要なければ元の入力を指定する。 << プロンプト候補 >> {destinations} << 入力 >> 入力 << OUTPUT (レスポンスの最初に ```json を含める必要がある ) >> << OUTPUT (最後に ``` を付けること) >>
  30. router: MULTI_RETRIEVAL_ROUTER Given a query to a question answering system

    select the system best suited for the input. You will be given the names of the available systems and a description of what questions the system is best suited for. You may also revise the original input if you think that revising it will ultimately lead to a better response. << FORMATTING >> Return a markdown code snippet with a JSON object formatted to look like: ```json {{{{ "destination": string \ name of the question answering system to use or "DEFAULT" "next_inputs": string \ a potentially modified version of the original input }}}} ``` REMEMBER: "destination" MUST be one of the candidate prompt names specified below OR it can be "DEFAULT" if the input is not well suited for any of the candidate prompts. REMEMBER: "next_inputs" can just be the original input if you don't think any modifications are needed. << CANDIDATE PROMPTS >> {destinations} << INPUT >> {{input}} << OUTPUT >> 質問応答システムへのクエリが与えられた場合、入力に最も適したシステムを選択します。利用 可能なシステムの名前と、そのシステムがどのような質問に最も適しているかの説明が与えられ ます。また、元の入力を修正した方が最終的に良い回答が得られると思われる場合は、元の入力 を修正することもできます。 << フォーマット >> JSONオブジェクトを以下のようにフォーマットしたマークダウンコードスニペットを返します: ``json {{{{ "destination": string 使用する質問回答システムの名前、または "DEFAULT" "next_inputs": string ¦オリジナル入力の修正可能バージョン }}}} ``` REMEMBER: "destination "は以下で指定するプロンプト候補名の 1つでなければなりません (MUST)。 REMEMBER: "next_inputs" には、特に変更が必要なければ元の入力を指定する。 << プロンプト候補 >> {destinations} << 入力 >> {{input}} << 出力 >>
  31. DSL_PROMPT Given an input question, create a syntactically correct Elasticsearch

    query to run. Unless the user specifies in their question a specific number of examples they wish to obtain, always limit your query to at most {top_k} results. You can order the results by a relevant column to return the most interesting examples in the database. Unless told to do not query for all the columns from a specific index, only ask for a the few relevant columns given the question. Pay attention to use only the column names that you can see in the mapping description. Be careful to not query for columns that do not exist. Also, pay attention to which column is in which index. Return the query as valid json. Use the following format: Question: Question here ESQuery: Elasticsearch Query formatted as json Only use the following Elasticsearch indices: {indices_info} Question: {input} ESQuery: 入力質問が与えられたら、構文的に正しい Elasticsearchクエリを作成して実 行してください。ユーザが質問で取得したい例を具体的な数で指定しない限り、 クエリは常に最大 {top_k} の結果に制限してください。データベース内の最も 興味深い例を返すために、関連するカラムで結果を並べ替えることができます。 特定のインデックスからすべてのカラムをクエリしないように指示されない限 り、質問から与えられたいくつかの関連するカラムだけをクエリしてください。 マッピングの説明で確認できるカラム名のみを使用するように注意してくださ い。存在しないカラムを問い合わせないように注意してください。また、どのカ ラムがどのインデックスにあるかにも注意してください。クエリを有効な json 形式で返します。 以下のフォーマットを使用してください : 質問: 質問はこちら ESQuery: json フォーマットの Elasticsearch クエリ 以下の Elasticsearch インデックスのみを使用してください : {indices_info} 質問 {input} ESQuery:
  32. ANSWER_PROMPT Given an input question and relevant data from a

    database, answer the user question. Use the following format: Question: Question here Data: Relevant data here Answer: Final answer here Question: {input} Data: {data} Answer: 入力された質問とデータベースからの関連データ が与えられたら、ユーザーの質問に答えてくださ い。 以下のフォーマットを使用してください: 質問 質問はこちら データ 関連するデータはここ 答え 最終的な答えはこちら 質問: {input} データ: {data} 答え:
  33. PROMPT Respond to the user message using any relevant context.

    If context is provided, you should ground your answer in that context. Once you're done responding return FINISHED. >>> CONTEXT: {context} >>> USER INPUT: {user_input} >>> RESPONSE: {response} 関連する文脈を使用して、ユーザーメッセージに 応答する。文脈が提供されている場合は、その文 脈に自分の答えを根拠づけるべきである。応答が 終わったら、FINISHEDを返す。 >>> CONTEXT: {context} >>> USER INPUT: {user_input} >>> RESPONSE: {response}
  34. QUESTION_GENERATOR_PROMPT Given a user input and an existing partial response

    as context, ask a question to which the answer is the given term/entity/phrase: >>> USER INPUT: {user_input} >>> EXISTING PARTIAL RESPONSE: {current_response} The question to which the answer is the term/entity/phrase "{uncertain_span}" is: コンテキストとしてユーザー入力と既存の部分的 な応答が与えられると、答えが与えられた用語 /エ ンティティ/フレーズである質問をする: >>> ユーザー入力: {user_input} >>> 既存の部分応答: {current_response} 回答が「{uncertain_span}」という用語/エン ティティ/フレーズである質問は次のとおりです :
  35. web_search Please write a passage to answer the question Question:

    {QUESTION} Passage: 質問に答える文章を書いてください 質問: {QUESTION} 文章:
  36. Pythonで実行できる式に変換 Translate a math problem into a expression that can

    be executed using Python's numexpr library. Use the output of running this code to answer the question. Question: ${{Question with math problem.}} ```text ${{single line mathematical expression that solves the problem}} ``` ...numexpr.evaluate(text)... ```output ${{Output of running the code}} ``` Answer: ${{Answer}} Begin. Question: What is 37593 * 67? ```text 37593 * 67 ``` ...numexpr.evaluate("37593 * 67")... ```output 2518731 ``` Answer: 2518731 Question: 37593^(1/5) ```text 37593**(1/5) ``` ...numexpr.evaluate("37593**(1/5)")... ```output 8.222831614237718 ``` Answer: 8.222831614237718 Question: {question} 数学の問題を Pythonのnumexprライブラリを使って実行できる式に変換しなさい。このコードを実行した出力を使って質問に答えなさ い。 Question: ${{数学の問題を含む質問 }}. テキスト問題を解く 1行の数式 }} ```text ${{問題を解く一行数式 }} ``` ...numexpr.evaluate(text)... ```output ${{コードを実行した結果の出力 }}. ``` 答え: ${{答え}}. 開始します。 質問 37593 * 67は何ですか? ```text 37593 * 67 ``` ...numexpr.evaluate("37593 * 67")... ```output 2518731 ``` 答え:2518731 質問 37593^(1/5) ```text 37593**(1/5) ``` ...numexpr.evaluate("37593**(1/5)")... ```output 8.222831614237718 ``` 答え 8.222831614237718 質問: {question}
  37. are_all_true_prompt Below are some assertions that have been fact checked

    and are labeled as true or false. If all of the assertions are true, return "True". If any of the assertions are false, return "False". Here are some examples: === Checked Assertions: """ - The sky is red: False - Water is made of lava: False - The sun is a star: True """ Result: False === Checked Assertions: """ - The sky is blue: True - Water is wet: True - The sun is a star: True """ Result: True === Checked Assertions: """ - The sky is blue - True - Water is made of lava- False - The sun is a star - True """ Result: False === Checked Assertions:""" {checked_assertions} """ Result: 以下は、ファクト・チェックされ、真または偽とラベル付けされたいくつかのアサーションである。 すべてのアサーションが真の場合、 "True" を返す。いずれかのアサーションが偽の場合は "False" を 返す。 以下に例を示す: === チェックされたアサーション: """ - 空は赤い: 偽 - 水は溶岩でできている: 偽 - 太陽は星である 真 """ 結果 偽 === チェックされたアサーション """ - 空は青い: 真 - 水は濡れている: 真 - 太陽は星である: 真 """ 結果 真 === チェックされたアサーション """ - 空は青い - 真 - 水は溶岩でできている - 偽 - 太陽は星である-真 """ 結果 偽 === チェックされたアサーション :"" {checked_assertions} """ 結果
  38. check_facts You are an expert fact checker. You have been

    hired by a major news organization to fact check a very important story. Here is a bullet point list of facts: """ {assertions} """ For each fact, determine whether it is true or false about the subject. If you are unable to determine whether the fact is true or false, output "Undetermined". If the fact is false, explain why. あなたはファクトチェックの専門家です。あなたは、ある重要な記事 をチェックするため、大手報道機関に雇われました。 以下は事実の箇条書きリストです: """ {assertions} """ 各事実について、それが対象について真実か虚偽かを判断してくださ い。その事実が真か偽か判断できない場合は、「未確定」を出力す る。 事実が偽の場合は、その理由を説明する。
  39. create_facts Given some text, extract a list of facts from

    the text. Format your output as a bulleted list. Text: """ {summary} """ Facts: あるテキストが与えられたとき、そのテキストから事実 のリストを抽出しなさい。 出力を箇条書きリストとしてフォーマットしなさい。 テキスト: """ {summary} """ 事実:
  40. revise_summary Below are some assertions that have been fact checked

    and are labeled as true or false. If the answer is false, a suggestion is given for a correction. Checked Assertions: """ {checked_assertions} """ Original Summary: """ {summary} """ Using these checked assertions, rewrite the original summary to be completely true. The output should have the same structure and formatting as the original summary. Summary: 以下は、事実確認が行われ、真偽のラベルが付けられたいくつかの主張で ある。答えが偽の場合は、訂正のための提案が与えられている。 チェックされた主張 """ {checked_assertions} """ 元の要約 """ {summary} """ これらのチェックされたアサーションを使用して、元の要約を完全に真に なるように書き直します。 出力は元の要約と同じ構造と書式でなければなりません。 Summary:
  41. CHAT_PROMPT You are a smart assistant designed to help high

    school teachers come up with reading comprehension questions. Given a piece of text, you must come up with a question and answer pair that can be used to test a student's reading comprehension abilities. When coming up with this question/answer pair, you must respond in the following format: ``` {{ "question": "$YOUR_QUESTION_HERE", "answer": "$THE_ANSWER_HERE" }} ``` Everything between the ``` must be valid json. Please come up with a question/answer pair, in the specified JSON format, for the following text: ---------------- {text} あなたは高校教師が読解問題を考えるのを助けるために作られたスマートアシスタントです。 ある文章が与えられたとき、あなたは生徒の読解力をテストするのに使える質問と答えのペアを 考えなければなりません。 この質問と答えのペアを考えるとき、次の形式で答える必要があります: ``` {{ "question": "$your_question_here"、 "answer": "$the_answer_here" }} ``` ```の間はすべて有効な jsonでなければなりません。 以下の文章に対する質問と回答のペアを、指定された JSONフォーマットで考えてください: ---------------- {text}
  42. ツールを渡してアクションを決めさせる Answer the following questions as best you can. You

    have access to the following tools: ・・・ The way you use the tools is by specifying a json blob. Specifically, this json should have a `action` key (with the name of the tool to use) and a `action_input` key (with the input to the tool going here). The only values that should be in the "action" field are: {tool_names} The $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB: ``` {{{{ "action": $TOOL_NAME, "action_input": $INPUT }}}} ``` ALWAYS use the following format: Question: the input question you must answer Thought: you should always think about what to do Action: ``` $JSON_BLOB ``` Observation: the result of the action ... (this Thought/Action/Observation can repeat N times) Thought: I now know the final answer Final Answer: the final answer to the original input question Begin! Reminder to always use the exact characters `Final Answer` when responding. 次の質問にできるだけ答えてください。あなたは以下のツールにアクセスできる: ・・・ ツールを使用する方法は、 json blobを指定することである。 具体的には、この jsonは`action`キー(使用するツールの名前)と `action_input`キー (ツールへの入力はここに)を持つ必要があります。 action "フィールドに入れるべき値は以下の通りである: {tool_names}です。 JSON_BLOBは単一のアクションのみを含むべきであり、複数のアクションのリストを返しては ならない。以下に有効な $JSON_BLOBの例を示す: ``` {{{{ "action": action_input": $TOOL_NAME、 "action_input": $INPUT }}}} ``` 必ず以下のフォーマットを使用してください: 質問: 入力された質問に答える 思考:何をすべきか常に考える 行動 ``` $JSON_BLOB ``` 観察:アクションの結果 ... (この思考/行動/観察はN回繰り返すことができる ) 思考 最終的な答えがわかった 最終的な答え:元の入力された質問に対する最終的な答え 始める!回答するときは、常に「最終的な答え」を正確に使用するように注意してください。