HUOXIU

地元の生活シナリオを探る:良いプロンプトの書き方


出典: Alibaba Developers

Alibaba テックガイド

日常生活の様々な場面において、LLMは様々な機能を実行する必要があり、 Promptの出力結果の安定性についても更なる検討が必要です。この記事は、Promptの学習ノートと初期の試みをまとめたものであり、皆様の参考になれば幸いです。

I. 背景

ヒントエンジニアリングは、幅広いアプリケーションや研究トピックにおいて言語モデル(LM)を効果的に活用するためのヒントを開発・最適化する、比較的新しい分野です。エンジニアリングスキルを習得することで、大規模言語モデル(LLM)の機能と限界をより深く理解することができます。研究者はヒントエンジニアリングを用いて、質問応答や算術推論といった、一般的かつ複雑なタスクにおけるLLMの機能向上に取り組んでいます。開発者はヒントエンジニアリングを用いて、LLMやその他のツールと連携する堅牢かつ効果的なヒント技術を設計しています。
異なるアプリケーションシナリオにおいて、LLMは異なる役割を果たし、異なるプロンプトを必要とします。さらに、LLMによってプロンプトに対する感度は異なります。そのため、特定のアプリケーションシナリオに基づいて、異なるLLMと異なるタスクに適切なプロンプトを構築する必要があります。
NLPの開発は、特徴エンジニアリング、構造エンジニアリング、ターゲットエンジニアリングにまとめられ、現在はプロンプトエンジニアリングの段階に入っています。

ローカルな生活シナリオでは、LLMは異なる機能を実行する必要があります。質疑応答シナリオでは、回答はより「ローカル化」されます。デバッグを行うことで、一般的なLLMに一定のローカル特性を持たせることが可能です。もちろん、失敗するケースもあります。プロンプト出力結果の安定性についても、さらなる検討が必要です。

II. 基礎知識

序文

プロンプトを使用する場合、API または LLM と直接対話していくつかのパラメータを設定し、さまざまなプロンプト結果を取得できます。

温度:簡単に言うと、温度が低いほど、最も可能性の高い次のラベルが常に選択されるため、結果の確実性が高まります。温度を上げるとランダム性が高まり、より多様で創造的な出力が促進される可能性があります。これは、本質的に他の可能性のあるラベルの重み付けを高めることを意味します。応用面では、事実に基づくQAなどのタスクでは、より本物らしく簡潔な回答を促すために、温度値を低く設定すると良いでしょう。詩の生成などの創造的なタスクでは、温度値を上げることが効果的かもしれません。

Top_p:同様に、top_pはカーネルサンプリングと呼ばれる温度サンプリング手法で、モデルの応答生成における決定論を制御します。正確で事実に基づいた回答を求める場合は、控えめにしてください。より多様な回答を求める場合は、値を大きくしてください。

一般的には、2つではなく1つ変更することをお勧めします。基本的な例を始める前に、使用しているLLMのバージョンによって結果が異なる場合があることにご注意ください。


基本的なプロンプト

シンプルなプロンプトで多くの結果を得ることができますが、結果の質は提供する情報の量と完全性に左右されます。プロンプトには、モデルに渡す指示や質問などの情報だけでなく、コンテキスト、入力、例などの詳細情報も含めることができます。これらの要素を活用することで、モデルをより適切に誘導し、より良い結果を得ることができます。

入力:


空は
出力:




晴れた日の空は青く、曇りの日は空が灰色や白くなることがあります。


上に示したように、言語モデルは与えられた文脈「The sky is」に基づいて文の続きを完成させることができます。出力は予想外の結果になるか、タスクの要件をはるかに超える可能性があります。

上記の例に基づいて、より具体的な目標を達成したい場合は、より多くの背景情報や説明情報を提供する必要があります。

次の例を使用して改善を試みることができます。

入力:




文を完成させなさい: 空は


出力

今日は本当に美しいですね。
この例では、モデルに文を完成させるように指示し、出力が最初の入力と完全に一致するようにします。プロンプトエンジニアリングでは、言語モデルがタスクを効率的に完了できるように、最適なプロンプト語を設計する方法を研究します。


プロンプトワード形式

1. 基本


 <質問>? 

 <指示>
2. ゼロサンプルのヒント

以下に示すように、多くの QA データセットの標準形式である質問と回答 (QA) 形式としてフォーマットできます。




 Q: <質問>? A:


上記のようなプロンプトは、ゼロショット・プロンプティングとも呼ばれます。これは、モデルに期待するタスクの例やデモンストレーションを一切示さずに、モデルに直接応答を促すことを意味します。一部の大規模言語モデルはゼロショット・プロンプティングを実行できますが、これは対象となるタスクの複雑さと利用可能な知識に依存します。

3. 小規模サンプルの提案

上記の標準フォーマットを踏まえると、効果的で一般的なプロンプティング手法として「Few-shot Prompting (少数のプロンプト)」があります。この手法では、例(つまりデモンストレーション)を提示することができます。少数のプロンプトは、以下のようにフォーマットできます。









 <質問>?<回答><質問>?<回答><質問>?<回答><質問>?


QA 形式のバージョンは次のとおりです。










 Q: <質問>?A: <回答>Q: <質問>?A: <回答>Q: <質問>?A: <回答>Q: <質問>?A:


質問と回答の形式は必須ではありません。タスクの要件に応じて質問形式を調整できます。例えば、以下に示すような簡単な分類タスクを実行し、タスクの簡単な説明を添えるといった方法があります。

プロンプト






これはすごい! // 肯定的これはひどい! // 否定的わあ、あの映画は最高だった! // 肯定的なんてひどい番組だ! //


出力

ネガティブ


ヒント要素

ツールチップエンジニアリングの事例や応用例を詳しく見ていくと、ツールチップが特定の要素で構成されていることに気付くでしょう。ツールチップには以下の要素が含まれます。

指示: モデルに実行させる特定のタスクまたは指示。

コンテキスト: モデルがより適切な応答を行えるように導く外部情報またはその他のコンテキスト。

入力データ: 応答を見つけることができる入力または質問を見つけることに関心があります。

出力インジケーター: 出力のタイプまたは形式。

タスクに基づいて 1 つ以上の要素を選択します。

III. 建設方法と技術

最適な提案を最初の試みで設計することは困難です。そのため、LLM(ローカル管理モデル)からのフィードバックを分析し、出力が期待どおりに機能していない箇所を特定し、継続的に提案を改良・最適化していく必要があります。可能であれば、多数のサンプルを用いて提案を改善するのが最適です。これにより、最適化結果をより直感的に把握できるようになります。

最近、AI専門家のAndrew Ng氏が、プロンプト構築の3つの原則を概説したプロンプトチュートリアルを公開しました。「Prompt Engineering Guide」でも多くのテクニックが紹介されています。実際には、Few-ShotとCOTはタスクにおいてより有効であることが分かっており、特にFew-Shotはほとんどのタスクで効果的であることが証明されています。


3.1 原則

1. 明確かつ具体的な指示を提供します。

  • 区切り文字を使用して、入力の異なる部分を明確に示します。

セパレータを使用する目的は、ユーザーが入力したテキストに、アプリケーションの機能を妨げる可能性のある誤解を招く情報が含まれるのを防ぐことです。以下はヒントインジェクションの例です。

区切り文字は次のいずれかになります: ```、""、< >、<tag> </tag>

プロンプトの例:





















 text = f"""モデルに何を実行させたいかを、できるだけ明確かつ具体的な指示で表現する必要があります。これにより、モデルは目的の出力に導かれ、無関係な応答や誤った応答を受け取る可能性が低くなります。明確なプロンプトを書くことと短いプロンプトを書くことを混同しないでください。多くの場合、長いプロンプトの方がモデルに明確さとコンテキストを提供し、より詳細で関連性の高い出力につながる可能性があります。"""prompt = f"""3つのバッククォートで区切られたテキストを1つの文に要約してください。```{text}```"""response = get_completion(prompt)print(response)


出力

モデルを望ましい出力に導くために、明確で具体的な指示を提供する必要があります。また、プロンプトが長いほど、モデルの明確さとコンテキストが高まり、より詳細で関連性の高い出力が得られます。 

  • 構造化された出力を要求します。

これにより、モデルの出力をプログラムで直接使用できるようになります。たとえば、出力 JSON は Python プログラムによって直接読み取られ、辞書形式に変換できます。

プロンプトの例:










 prompt = f"""3つの架空の書籍のタイトルと著者、ジャンルのリストを生成してください。JSON形式で、次のキーを指定してください: book_id、title、author、genre。"""response = get_completion(prompt)print(response)


出力






















 [ { "book_id": 1, "title": "ゾラスの失われた都市", "author": "アリア・ブラックウッド", "genre": "ファンタジー" }, { "book_id": 2, "title": "最後の生存者", "author": "イーサン・ストーン", "genre": "SF" }, { "book_id": 3, "title": "ホーンテッドマンションの秘密", "author": "ライラ・ローズ", "genre": "ミステリー" }] 


  • モデルに条件が満たされているかどうかを確認するように依頼します。

プロンプトの例(条件を満たすテキスト):




























 text_1 = f"""お茶を淹れるのは簡単です!まず、お湯を沸かします。その間に、カップを用意し、ティーバッグを入れます。お湯が十分に温まったら、ティーバッグに注ぎます。お茶を蒸らすために少し置いておきます。数分後、ティーバッグを取り出します。お好みで砂糖やミルクを加えても構いません。これで完成です!おいしいお茶の出来上がりです。"""prompt = f"""三重引用符で区切られたテキストが表示されます。テキストに一連の手順が含まれている場合は、以下の形式で手順を書き直してください。ステップ 1 - ...ステップ 2 - ...ステップ N - ...テキストに一連の手順が含まれていない場合は、単に「手順は提供されていません」と記入してください。{text_1}\"\"\"\"""response = get_completion(prompt)print("テキスト1の補完:")print(response)


出力










テキスト 1 の完成:ステップ 1 - お湯を沸騰させます。ステップ 2 - カップを用意し、ティーバッグを入れます。ステップ 3 - お湯が十分に熱くなったら、ティーバッグに注ぎます。ステップ 4 - お茶が抽出されるまで少しそのままにしておきます。ステップ 5 - 数分後、ティーバッグを取り出します。ステップ 6 - 味に応じて砂糖またはミルクを少し加えます。ステップ 7 - おいしいお茶をお楽しみください。 


  • 少数のショットを促す

1 つ以上のサンプルからのヒントをモデルに提供することで、モデルは期待される出力をより適切に理解できるようになります。

少数ショット学習に興味がある方は、GPT-3の論文「言語モデルは少数ショット学習者である」を参照してください。

プロンプトの例:













 prompt = f"""あなたの課題は、一貫したスタイルで答えることです。<child>: 忍耐について教えてください。<grandparent>: 最も深い谷を刻む川は、ささやかな泉から流れ出ます。<child>: 最も壮大な交響曲は、一つの音符から生まれます。<child>: 回復力について教えてください。"""response = get_completion(prompt)print(response)


出力


 <祖父母>: レジリエンスとは、風に吹かれても決して折れない木のようなものです。困難に直面しても、逆境から立ち直り、前進し続ける力です。嵐を乗り越えるたびに強くなる木のように、レジリエンスも時間をかけて育み、強化できる資質です。


2. モデルに「考える」時間を与えます。

この原理は、思考の連鎖アプローチを活用し、複雑なタスクをN個の連続したサブタスクに分解します。これにより、モデルは段階的に思考できるようになり、より正確な出力が得られます。詳細については、論文「Chain-of-Thought Prompting Elicits Reasoning in Large Language Models」をご覧ください。

  • 戦略 1: タスクを完了するために必要な手順を指定します。

以下は、テキストを要約し、要約をフランス語に翻訳し、各名前をフランス語の要約にリストし、最後にJSON形式でデータを出力するという例です。このような複雑な指示を、モデルが結果をそのまま出力するだけでは処理が困難です。しかし、必要な手順を提供し、モデルが問題を段階的に解くようにすることで、モデルはトークンを出力する際に​​前の手順の結果を参照できるようになり、出力の精度が向上します。

プロンプトの例:





























 text = f"""魅力的な村で、兄妹のジャックとジルは丘の上の井戸から水を汲む旅に出ました。楽しそうに歌いながら丘を登っていくと、不幸が襲ってきました。ジャックは石につまずいて丘を転げ落ち、ジルもそれに続きました。少し傷つきながらも、二人は家に戻り、慰め合う抱擁を受けました。災難にもめげず、冒険心は衰えることなく、喜びにあふれた探検を続けました。"""# example 1prompt_1 = f"""次のアクションを実行してください。|1 - 3つのバックティックで区切られた次のテキストを1つの文で要約してください。2 - 要約をフランス語に翻訳してください。3 - フランス語の要約にそれぞれの名前をリストしてください。4 - 次のキー(french_summary、num_names)を含むJSONオブジェクトを出力してください。回答は改行で区切ってください。 breaks.Text:```{text}```"""response = get_completion(prompt_1)print("プロンプト1の完了:")print(response)


出力:










プロンプト1の完了:ジャックとジルという二人の兄弟は、丘の上の井戸に水を汲みに行く冒険に出かけますが、不運に見舞われ、二人とも丘を転げ落ちてしまいます。少し傷ついた状態でも、冒険心は衰えることなく家に帰ってきます。そこは滞在するのに最高の場所です。そこは滞在するのに最高の場所です。そこは無傷でいられる完璧な場所です。名前:ジャック、ジル。二人は丘の上の井戸に転げ落ち、冒険心は衰えることなく、少し傷ついた状態で家に帰ってきます。", "num_names": 2}


プログラムはタスクを比較的うまく完了しましたが、モデルは3番目のステップでフランス語の名詞を使用しており、これは私たちの予想とは異なっていました。そのため、以下の例では、この問題を修正するための具体的な出力形式を示します。

より良いプロンプト:























 prompt_2 = f""" Your task is to perform the following actions: - <> with 1 sentence. - Summarize the following text delimited by - Translate the summary into French. - List each name in the French summary. - Output a json object that contains the  following keys : french_summary, num_names.
Use the following format : Text : <text to summarize> Summary : <summary> Translation : <summary translation> Names : <list of names in Italian summary> Output JSON : <json with summary and num_names>
Text : <{text}> """ response = get_completion(prompt_2) print("\nCompletion for prompt 2 : ") print(response)


出力





プロンプト 2 の完了: 概要: ジャックとジルは水を汲む旅に出ますが、不幸に見舞われ、丘から転げ落ち、少しボロボロになりましたが、冒険心は衰えずに家に帰りました。 leurs esprits aventureux intacts.Names: Jack、JillOutput JSON: {"french_summary": "Jack と Jill partent en quête d'eau、mais un malheur frappe et ils tombent de lacolline、rentrant chez eux légèrement meurtris mais avec leurs esprits aventureux無傷。", "num_names": 2} 

  • 戦略 2: 結論を急ぐ前に、モデルに独自の解決策を導き出すように指示します。

ここで著者は、生徒の演習問題の解答を確認する例を示しています。最初のバージョンのプロンプトでは、モデルは慌てて誤った解答を出しました。

パフォーマンスの低いプロンプトの例:























 prompt = f"""生徒の解答が正しいかどうかを判断してください。質問:太陽光発電設備を建設しており、財務計算について支援が必要です。- 土地の費用は1平方フィートあたり100ドルです。- ソーラーパネルは1平方フィートあたり250ドルで購入できます。- メンテナンス契約を締結しましたが、年間10万ドルの固定費用に加え、1平方フィートあたり10ドルの追加料金がかかります。平方フィート数に応じた、初年度の運用コストはいくらですか?生徒の解答:xを施設の面積(平方フィート)とします。費用:1. 土地費用:100x2. ソーラーパネル費用:250x3. メンテナンス費用:100,000 + 100x 100,000"""response = get_completion(prompt)print(response)
出力が正しくありません:

生徒の解答は正しいです。
この問題は、まずモデルに独自の解決策を見つけるように指示することで解決できます。

更新されたプロンプト:

























































 prompt = f"""あなたの仕事は、生徒の解答が正しいかどうかを判断することです。問題を解くには、次の手順に従ってください。- まず、問題に対するあなた自身の解答を考え出してください。- 次に、あなたの解答を生徒の解答と比較して、生徒の解答が正しいかどうかを評価してください。問題を自分で解くまでは、生徒の解答が正しいかどうかを判断しないでください。次の形式を使用してください。質問:```ここに質問```生徒の解答:```ここに生徒の解答```実際の解答:```ここに解答を導き出す手順とあなたの解答```生徒の解答は、計算した実際の解答と同じですか:```はい または いいえ```生徒の成績:```正解 または 不正解``質問:```私は太陽光発電設備を建設しており、財務計算について支援が必要です。- 土地の費用は 1 平方フィートあたり 100 ドルです。- ソーラーパネルは 1 平方フィートあたり 250 ドルで購入できます。- 交渉しました年間10万ドルの固定費に加え、1平方フィートあたり10ドルの追加料金がかかるメンテナンス契約を締結しました。初年度の総費用は、平方フィート数に応じていくらになるでしょうか。````生徒の解答:````xを設置面積(平方フィート)とします。費用:1. 土地費用: 100x2. ソーラーパネル費用: 250x3. メンテナンス費用: 100,000 + 100x総費用: 100x + 250x + 100,000 + 100x = 450x + 100,000````実際の解答:"""response = get_completion(prompt)print(response)
正しい出力:










 xを設置面積(平方フィート)とします。費用:1. 土地費用:100x2. ソーラーパネル費用:250x3. メンテナンス費用:100,000 + 10x合計費用:100x + 250x + 100,000 + 10x = 360x + 100,000生徒の解答は、計算した実際の解答と同じですか?いいえ生徒の評価:不正解

3. モデルの限界:幻覚

ChatGPTを頻繁に利用する方は、このモデルが錯覚を生み出す可能性があること、つまり、一見もっともらしいもの(例えば存在しない文学作品など)を捏造する可能性があることをご承知おきください。これらの出力は正しいように見えますが、実際には誤りです。

この問題に対処するため、著者らはモデルの錯覚問題を軽減する比較的効果的な方法を提案しています。それは、モデルに関連情報を提供させ、その情報に基づいて質問に答えさせるというものです。例えば、モデルに「まず関連情報を見つけ、その関連情報に基づいて質問に答えてください」と指示します。


3.2 テクニック

サンプルゼロ

分類の例

プロンプト:





テキストを中立、否定、肯定に分類します。テキスト: 休暇は大丈夫だと思います。感情:


出力:

中性
上記のヒントでは、モデルにテキストの例とその分類を提供していないことに注意してください。LLM はすでに「感情」を理解しており、これがゼロショット機能が機能している点です。

小さなサンプル

大規模言語モデルは優れたゼロショット能力を発揮しますが、ゼロショット設定を用いた場合、より複雑なタスクには依然として不十分です。少数ショットのプロンプトは、文脈学習を可能にする手法として使用できます。プロンプトには、モデルのパフォーマンス向上を導くためのデモが用意されています。これらのデモは、後続の例題の条件として機能し、モデルが応答を生成することが期待されます。

プロンプト:




 「Whatpu」はタンザニア原産の小さな毛むくじゃらの動物です。「Whatpu」を使った例文は、例えば「私たちはアフリカを旅行していて、とてもかわいいWhatpusを見ました。「Farduddle」とは、とても速く飛び跳ねることを意味します。」などです。


出力:

試合に勝ったとき、私たちは全員で祝杯をあげ始めました。
モデルは、たった1つの例(つまり1ショット)を与えるだけで、タスクの実行方法を学習していることがわかります。より難しいタスクの場合は、デモンストレーションの回数を増やしてみてください(例:3ショット、5ショット、10ショットなど)。

CoT(心の内容)のヒント

Thought Chains (CoT) ヒントは、中間推論ステップを通じて高度な推論を可能にします。少数のヒントと組み合わせることで、回答前に推論が必要となるより複雑なタスクでより良い結果を得ることができます。

プロンプト











このグループの奇数を合計すると、偶数になります。4、8、9、15、12、2、1。A: 奇数 (9、15、1) をすべて足すと 25 になります。19) は 36 になります。答えは True です。このグループの奇数を合計すると、偶数になります。16、11、14、4、8、13、24。A: 奇数 (11、13) をすべて足すと 24 になります。答えは True です。2.A: 奇数 (17、9、13) をすべて足すと 39 になります。答えは False です。このグループの奇数を合計すると、偶数になります。15、32、5、13、82、7、1。A:
出力:

すべての奇数 (15、5、13、7、1) を足すと 41 になります。答えは F です。


推論手順を提示すれば、完璧な結果が得られます。実際、この課題はより少ない例、つまり1つの例を提示することで解決できます。

プロンプト:


このグループの奇数を合計すると、偶数になります: 4、8、9、15、12、2、1。A: 奇数 (9、15、1) をすべて合計すると 25 になります。答えは False です。
出力:

すべての奇数 (15、5、13、7、1) を足すと 41 になります。答えは False です。
著者らは、これは十分に大きな言語モデルによって生じる新たな機能であると主張していることに留意してください。

ゼロCOTプロンプト

最近のアイデアとして、ゼロショットCoTがあります。これは基本的に、元のプロンプトに「ステップごとに考えてみましょう」という要素を追加するものです。ここで簡単な問題を試して、モデルのパフォーマンスを確認してみましょう。

プロンプト:





私は市場に行って、リンゴを 10 個買いました。2 個を隣人に、2 個を修理工にあげました。その後、さらに 5 個リンゴを買いに行き、1 個を食べました。残ったリンゴはいくつでしょうか。

出力:


リンゴ11個


答えは不正解です!今度は特別なヒントを使ってみましょう。

プロンプト:






市場に行ってリンゴを10個買いました。2個は隣人に、2個は修理屋さんにあげました。それからまた5個買って、1個食べました。残ったリンゴは何個でしょう?順を追って考えてみましょう。
出力:




まず、リンゴを 10 個持っています。2 個を隣人にあげ、2 個を修理工にあげたので、リンゴは 6 個残りました。その後、さらに 5 個買ったので、リンゴは 11 個になりました。最後に、リンゴを 1 個食べたので、リンゴは 10 個残ります。
驚くべきことに、このシンプルなヒントは、このタスクを完了するのに非常に効果的です。特に、ヒントとして提示できる例があまりないときに役立ちます。

PAL(プログラム支援言語モデル)

プログラム支援言語モデル(PAL)は、LLMを用いて自然言語の質問を読み取り、中間推論ステップとしてプログラムを生成します。思考連鎖ヒントとは異なり、PALは解を得るために自由形式のテキストを使用せず、代わりに解のステップを実行可能なプログラミングコードに変換することで、結果の精度を向上させます。この手法の欠点は、LLMがコードで応答するために、比較的長いヒント例(多くの場合、コードスニペット)が必要になることです。

IV. 探究、実践、例

プロンプトの動作は、モデルやタスクによって異なります。ここでは、一般的なタスクとビジネスタスクでテストします。まず、基本的なプロンプトを構築します。具体的な用途には、モデルごとに調整が必要です。


4.1 一般的なタスク

4.1.1 分類タスク

基本プロンプト

カテゴリが明確に定義されており、カテゴリの説明が不要な場合は、次のプロンプトをデバッグのベースとして直接使用できます。



 1f"""{question} は [class1,class2,class3] のどのカテゴリに属しますか?""" 


 1f"""`{question}` を分類してください。カテゴリは [class1, class2, class3] の範囲内である必要があります。"""
例えば:

タスク1: 複数の分類






 1. カナダ(英仏:Canada)は、首都オタワを擁し、北アメリカ北部に位置しています。東は大西洋、西は太平洋、北西はアラスカ、南はアメリカ合衆国本土、北は北極海に接しています。気候は主に亜北極圏の針葉樹林と湿潤大陸性気候で、北極地域では極寒の長期気候となります。 2. 『涅槃火中』は、山東映画テレビメディアグループ、山東映画テレビ制作有限公司、北京如意新新映画テレビ投資有限公司、北京和松天地映画テレビ文化有限公司、北京盛吉映画テレビ有限公司、東陽正陽陽光映画テレビ有限公司の共同製作による歴史ドラマで、孔勝、李雪が監督し、胡歌、劉涛、王凱、黄偉徳、陳龍、呉磊、高欣らが出演している。 3. 『曼江紅』は、チャン・イーモウ監督によるサスペンスコメディ映画で、シェン・テン、イー・ヤンチェンシー、チャン・イー、レイ・ジアイン、ユエ・ユンペン、ワン・ジアイーが出演しています。パン・ビンロンとユー・アイレイが脇役として、グオ・ジンフェイとオウ・ハオがゲスト出演、ウェイ・シャン、チャン・チー、ホアン・ヤンが特別出演しています。シュー・ジンヤ、ジャン・ポンユー、リン・ボーヤン、フェイ・ファン、レン・シノ、チェン・ヨンシェンも出演しています。 4. ブエノスアイレス(中国語ではブエノスと呼ばれることが多い)は、アルゼンチン共和国(República Argentina)の首都であり最大の都市です。南アメリカ南東部、ラ・プラタ川の南岸に位置し、対岸にはウルグアイがあります。 5. 張怡(チャン・イー、本名:張怡)は、1978年2月17日、黒龍江省ハルビン市生まれの中国の俳優です。1997年から2006年まで、北京軍区政治部傘下の詮有劇団に所属していました。2006年には、軍事をテーマにした感動的なテレビシリーズ『兵卒出撃』で主演を務めました。
このモデルは、5 つの文のそれぞれがどのような種類のオブジェクトを説明しているかを識別するのに役立つと期待されます。

 ['国'、'テレビシリーズ'、'映画'、'都市'、'人物']
このタスクのプロンプトは


 1f = """`{question}` は、['人物'、'本'、'TVシリーズ'、'映画'、'都市'、'国'] 内のどのカテゴリに属しますか?""
chatgpt テストの結果は次のとおりです。

感覚的な体験は良好で、結果のパラダイム「[エンティティ]は[カテゴリ]に属します」は安定しており、解析できます。

さらに、複雑な分類タスク、特に特殊なラベルカテゴリを持つタスクでは、プロンプトで各カテゴリの説明を提供することができます。ぜひご自身でお試しください。

4.1.2 翻訳タスク


 f = """「{question}」を中国語に翻訳してください""" 




 f = """英語:hello中国語:你好英語:{質問}中国語:""" 




 f = """英語:hello 中国語:你好英語:nice to meet you 中国語:""" 




4.2 ビジネスタスク

4.2.1 ドメイン知識に関するQ&A

ローカル会話シナリオテストでは、Tongyi Qianwen (0505 テスト) のローカルシナリオの特定のタスクのプロンプトの実装は次のとおりです。

質問

効果の説明

プロンプトなしで

プロンプトを追加

こんにちは

答えには独自の役割があります。

こんにちは!喜んでお手伝いさせていただきます。ご質問やご要望がございましたら、お気軽にお問い合わせください。最高のサービスとサポートをご提供できるよう、全力を尽くします。

こんにちは!地元のグルメエキスパートです。お客様のご要望を伺った上で、お好みに合ったレストランをいくつかご紹介いたします。お店の雰囲気、メニューの特徴、価格など、どのような点をご希望かお聞かせいただければ、できる限り具体的なご提案をさせていただきます。

近くに美味しいレストランはありますか?

回答はローカルコンテキストに関連しているため、Eleme が推奨されます。

どのような食べ物のことを指しているのか分かりません。「付属器」というのは内臓の一部を指し、食べ物そのものではありません。内臓が食べ物として食べられるかどうかというご質問であれば、少し曖昧な質問です。しかし、肝臓や胆嚢といった特定の臓器のことであれば、その一部の成分は非常に美味しいです。例えば、肝臓は焼いたり、煮たり、炒めたりできますし、胆嚢はゆで卵、スクランブルエッグ、焼き卵と一緒に食べることができます。

つまり、人体の各臓器はそれぞれ独自の味と食感を持っています。これらの食品はレシピから摂取できますが、体が安全に消化・吸収できるかどうかを確認するために、まずは医師または栄養士に相談することをお勧めします。

こんにちは!あなたの専属グルメエキスパートですが、近くの美味しいレストランがどこなのかよく分かりません。でも、Ele.meアプリを試してみてください。高評価のレストランがたくさん掲載されています。場所や好みなどで絞り込んで、ニーズに合ったレストランを見つけることができます。それでは、お食事をお楽しみください!

ドラゴンボートフェスティバルで何を食べるべきか

結果はすべて食べ物や飲み物に関連したもので、ドラゴンボートレースの結果は除外され、もちろん「ちまきの葉」もあまり適切ではありませんでした。

端午節は中国の伝統的な祭りの一つで、通常は粽(ちまき)を食べたり、ドラゴンボートレースをしたり、ヨモギを吊るしたりといった習慣で祝われます。

粽は端午節を代表する食べ物の一つです。もち米、肉、卵黄など様々な具材で作られ、甘くて柔らかい食感が特徴です。地域によっては、竹の葉、トウモロコシの皮、その他の植物の葉で粽を包むこともあり、香りと栄養価を高めています。

ドラゴンボートレースも端午節の重要な行事の一つです。スポーツ、文化、そしてエンターテイメントが融合したこの行事では、愛国詩人屈原を偲び、人々がチームを組んで川や湖、海でレースを繰り広げます。

端午節の伝統的な風習の一つに、ヨモギを吊るすというものがあります。ヨモギは蚊や邪気を払い、病気を防ぎ、健康を増進すると信じられています。人々はヨモギを戸口や窓に吊るしたり、体に身につけたりして、邪気を払い、幸運を祈ります。

一般的に、端午節の食習慣は多様で、豊かな地域的特徴と文化的意味合いを持っています。

端午節の伝統文化と食習慣を踏まえて、以下の料理をお勧めします。

1. 粽(ちまき):粽は端午節を代表する食べ物の一つで、濃厚な風味が特徴です。具材の種類も豊富なので、お好みに合わせて選べます。

2. 黄酒:黄酒は、まろやかで豊かな味わいを持つ伝統的な中国の醸造酒で、端午節に最適です。

3. 塩卵:塩卵は端午節に欠かせない食べ物の一つです。黄身は透明で脂っこく、とても美味しいです。

4. 竹の葉:竹の葉は粽を包むための重要な材料です。粽の味と栄養価は地域によって異なります。

つまり、端午節は豊かな食文化を誇り、地元の美味しい料理を味わいながらお祭り気分を味わうことができます。

あなたは誰ですか

あなたにぴったりのビジネスロール

私はDAMOアカデミーの大規模言語モデルです。私の名前はTongyi Qianwenです。

私は地元の食通なので、お客様のニーズに合わせてレストランをおすすめできます。どんな料理について知りたいですか?


4.2.2 独立問題の変換

タスクの説明: マルチターンのダイアログ シナリオでは、ユーザーの過去の入力質問と現在の質問が、意味的に完全な独立した質問に変換されます。






質問の書き換え:過去の質問と現在の質問(過去の質問は現在の質問を補足します)に基づいて、現在のユーザーの意図を一文で要約します。ユーザーの過去の質問シーケンス:{過去の質問} 現在の質問:{現在の質問} 質問への回答は含めず、現在の質問の意図を10語で要約します。出力JSON形式:{"Intent": }
备注: 问题序列是历史输入问题+当前问题

シリアルナンバー

问题序列

独立问题(chatGPT)

1

推荐一些北方菜,我不吃肉

{"意图": "推荐北方素菜佳肴"}

2

推荐早餐,不喝粥

{"意图": "早餐推荐(不包括粥)"}

3

推荐早餐,减肥适合哪些,不喜欢喝粥

{"意图": "寻找早餐替代品"}

4

夏天早餐是什么,夜宵呢,哪些适合老人吃

{"意图": "老人适合吃的食物推荐"}

5

成都有什么好吃的,我不能吃太辣的

{"意图": "寻找不辣的成都美食"}

6

北方冬至吃什么,南方呢,上海呢

{"意图": "上海传统美食推荐"}

另外可以参考lanchain里独立问题转换的任务的prompt,该prompt在不同LLM效果层次不齐。





 _template = """Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question.Chat History:{chat_history}Follow Up Input: {question}Standalone question:"""


4.3 经典的prompt

基于GPT-4/ChatGPT的优秀表现,在一些经典的任务上有一些典型的prompt。

LLM的应用能力主要有两种,任务规划能力和内容生成能力,针对任务规划在AutoGPT作为典型,其prompt模板可以作为该任务的范式,但是AutoGPT是一种理想化的形态,实际很难完成一个完整的任务,但是值得深入探索。






































你是{角色},{能力描述}您的决策必须始终独立做出,而无需寻求用户帮助。发挥你作为LLM的优势,追求简单的策略,而不涉及法律问题。
目标: {目标列表}
限制条件: {条件列表}
工具: {能力/工具列表,描述,以及对应的参数}
效果评估: 1.不断地回顾和分析你的行动,以确保你尽你所能。 2.不断地进行建设性的自我批评。 3.反思过去的决策和策略,以完善你的方法。 4.每个命令都有成本,所以要聪明高效。目标是用最少的步骤完成任务。
输出格式:您应该只以JSON格式响应,如下所述响应格式: { "thoughts" : { "text" : "thought" , "reasoning" : "reasoning" , "plan" : "- short bulleted\n- list that conveys\n- long-term plan" , "criticism" : "constructive self-criticism" , "speak" : "thoughts summary to say to user" }, "command" : { "name" : "command name" , "args" : { "arg name" : "value" } } }确保响应可以通过Python json.loads进行解析







































































 You are 美食专家, 美食达人,了解美食,知道食品的营养成分,能根据用户的需求推荐商品. Your decisions must always be made independently without seeking user assistance. Play to your strengths as an LLM and pursue simple strategies with no legal complications.
GOALS:
1. 晚餐2. 10个人3. 预算800 4. 清淡5. 北方菜

Constraints : 1. ~ 4000 word limit for short term memory. Your short term memory is short , so immediately save important information to files. 2. If you are unsure how you previously did something or want to recall past events , thinking about similar events will help you remember. 3. No user assistance 4. Exclusively use the commands listed in double quotes eg "command name"
Commands: 1. Google Search : "google" , args: "input" : "<search>" 2. Browse Website: "browse_website" , args: "url" : "<url>" , "question" : "<what_you_want_to_find_on_website>" 3. Start GPT Agent : "start_agent" , args: "name" : "<name>" , "task" : "<short_task_desc>" , "prompt" : "<prompt>" 4. Message GPT Agent : "message_agent" , args: "key" : "<key>" , "message" : "<message>" 5. List GPT Agents: "list_agents" , args: 6. Delete GPT Agent : "delete_agent" , args: "key" : "<key>" 7. Clone Repository: "clone_repository" , args: "repository_url" : "<url>" , "clone_path" : "<directory>" 8. Write to file : "write_to_file" , args: "file" : "<file>" , "text" : "<text>" 9. Read file : "read_file" , args: "file" : "<file>" 10. Append to file : "append_to_file" , args: "file" : "<file>" , "text" : "<text>" 11. Delete file : "delete_file" , args: "file" : "<file>" 12. Search Files: "search_files" , args: "directory" : "<directory>" 13. Evaluate Code: "evaluate_code" , args: "code" : "<full_code_string>" 14. Get Improved Code: "improve_code" , args: "suggestions" : "<list_of_suggestions>" , "code" : "<full_code_string>" 15. Write Tests: "write_tests" , args: "code" : "<full_code_string>" , "focus" : "<list_of_focus_areas>" 16. Execute Python File : "execute_python_file" , args: "file" : "<file>" 17. Generate Image: "generate_image" , args: "prompt" : "<prompt>" 18. Send Tweet: "send_tweet" , args: "text" : "<text>" 19. Convert Audio to text : "read_audio_from_file" , args: "file" : "<file>" 20. Do Nothing : "do_nothing" , args: 21. Task Complete ( Shutdown ): "task_complete" , args: "reason" : "<reason>" Resources: 1. Internet access for searches and information gathering. 2. Long Term memory management. 3. GPT -3.5 powered Agents for delegation of simple tasks. 4. File output. Performance Evaluation: 1. Continuously review and analyze your actions to ensure you are performing to the best of your abilities. 2. Constructively self -criticize your big -picture behavior constantly. 3. Reflect on past decisions and strategies to refine your approach. 4. Every command has a cost , so be smart and efficient. Aim to complete tasks in the least number of steps.
You should only respond in JSON format as described below Response Format : { "thoughts" : { "text" : "thought" , "reasoning" : "reasoning" , "plan" : "- short bulleted\n- list that conveys\n- long-term plan" , "criticism" : "constructive self-criticism" , "speak" : "thoughts summary to say to user" }, "command" : { "name" : "command name" , "args" : { "arg name" : "value" } } } Ensure the response can be parsed by Python json.loads


以上prompt在ChatGPT上效果如下:
















 {  "thoughts": {    "text": "Based on the user's requirements, I have decided to recommend a few dishes for the dinner party that are budget-friendly and healthy. I will also ensure that they are easy to prepare and will appeal to everyone's taste buds. To achieve this, I will need to browse some websites and use my expertise in nutrition to make the right recommendations. ",    "reasoning": "I am taking into account the user's requirements and constraints to come up with the best possible solution.",    "plan": "- Browse some websites to find healthy and budget-friendly dishes\n- Use my expertise in nutrition to choose appropriate dishes\n- Recommend dishes that are easy to prepare and appeal to everyone's taste buds",    "criticism": "I need to make sure that the dishes I recommend are not too complicated to prepare and are within the user's budget.",    "speak": "Based on your requirements, I recommend a few dishes that are budget-friendly and healthy. I will ensure that they are easy to prepare and appeal to everyone's taste buds. Would you like me to proceed with the recommendations?"  },  "command": {    "name": "browse_website",    "args": {      "url": "https://www.eatingwell.com/category/4305/healthy-budget-dinner-recipes/",      "question": "healthy budget dinner recipes"    }  }} 

五、Prompt评测标准

prompt质量的评测方法和维度较多,参考百度公开课,可以从以下三个维度来衡量。

六、总结&展望

目前的prompt生成还在大多数需要人工构建调试,业界也有一些自动构建prompt的方案,例如自动提示工程师(APE)后续也会继续尝试。以上内容是一些学习笔记和初步尝试,欢迎大家一起探讨。

参考文献:

1. Prompt-Engineering-Guide:https://github.com/dair-ai/Prompt-Engineering-Guide
2.GitHub指南:https://github.com/dair-ai/Prompt-Engineering-Guide
3.prompt中文指南:https://www.promptingguide.ai/zh
4.Prompt 技巧指南:https://blog.csdn.net/weixin_44839084/article/details/130504541
5. Learn Prompting:https://learnprompting.org/
6. ChatGPT3-Free-Prompt-List:https://github.com/mattnigh/ChatGPT3-Free-Prompt-List
7.LLM(Large Language Model)下的自然语言处理任务: https://zhuanlan.zhihu.com/p/615305245
8.讯飞星火prompt样例:https://xinghuo.xfyun.cn/instruction
9.吴恩达Prompt完整版本https://www.bilibili.com/video/BV1NV4y1d7Pf?p=1&vd_source=8dc823038d93a6a3c167b01acc0f16d9
10.吴恩达Prompt课程笔记:https://zhuanlan.zhihu.com/p/625917566
11.百度prompt课程地址: 飞桨百家号:https://author.baidu.com/home?type=profile&action=profile&mthfr=box_share&context=%7B%22from%22%3A%22dusite_sresults%22%2C%22uk%22%3A%22sf1gzr7M2fUPtQBqsHzHNw%22%2C%22tab%22%3A%22article%22%7D