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

ChatGPT Prompt Engineering for Developers 受講体験記

Avatar for nikkie nikkie
May 15, 2023

ChatGPT Prompt Engineering for Developers 受講体験記

Avatar for nikkie

nikkie

May 15, 2023
Tweet

More Decks by nikkie

Other Decks in Technology

Transcript

  1. 今回のモチベーション • DeepLearning.AIの短期コース「ChatGPT Prompt Engineering for Developers」、非常に勉強になったのでご紹介 ◦ developer向け=どうアプリケーションにするか( researcher向けではない)

    • 受講者の体験ベースで共有 • 勉強会(30分枠)の後半はハンズオンタイム(各自興味あるとこ触ってみる)にした く、文字が多いページは一部に絞ると思います
  2. ChatGPT Prompt Engineering for Developers メタデータ • Beginner to Advanced

    • 英語動画(英語書き起こしあり)+ サンプルコード • 1時間半 • Free for a limited time(期間限定無料) • 講師:Andrew Ng先生、OpenAIのIsa Fulfordさん • 5/2時点で20万人受講登録したらしい(Ng先生ツイート)
  3. どんな講座なの? • Learn prompt engineering best practices for application development

    ◦ 「アプリケーション開発のためのプロンプトエンジニアリングのベストプラクティスを学べる 」 • Gain hands-on practice writing and iterating on prompts yourself using the OpenAI API ◦ 環境構築や前準備不要 でプロンプトエンジニアリングを試せる ◦ 受講者にはAPIキーすらいらないところが、まさに In partnership with OpenAI!!
  4. 受講者の声(N=1) • DeepLearning.AIの「ChatGPT Prompt Engineering for Developers」を視聴し終 えました。LLM時代の見取り図 得たり!勝ったなガハハ! -

    nikkie-ftnextの日記 • 見取り図 ◦ プロンプトエンジニアリングのベストプラクティス ▪ 入力の構造化の仕方 ▪ 出力も構造化して機械可読できるようにする! ◦ 1つのモデルで解けるタスクの全体感 ▪ これはたしかに”自然言語処理の終わり ”だ ▪ しかもインターフェースが自然言語=誰でも使える
  5. 講座の内容 (1時間半) • Introduction (6:28) • Guidelines for Prompting (17:35)

    • Iterative Prompt Development (13:19) • Summarizing (7:33) • Inferring (12:01) • Transforming (12:42) • Expanding (6:49) • Building a Chatbot (12:25) • Conclusion (2:28)
  6. Introduction • https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/1/introduction • この講座はInstruction Tuned LLMのベストプラクティスにフォーカス ◦ 開発者向けInstruction Tuned

    LLMの使い方 • 2種類のLLM (Large Language Model) ◦ Base LLM: 次の語を予測 ▪ What is the capital of France? -> 同様の質問文を生成 ◦ Instruction Tuned LLM: Base LLM + RLHF ▪ What is the capital of France? -> フランスの首都を返せる
  7. Guidelines for Prompting • https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/2/guidelines • 2つの原則 (principle) 1. Write

    clear and specific instructions ▪ 「明確で具体的な指示」、 clearはshortではない(むしろ長くなる) 2. Give the model time to "think" ▪ 「モデルに"考える"時間を与える」 • いくつかの戦術 (tactic) ◦ (次スライドに抜粋)
  8. Guidelines for Prompting(承前)全容はAppendixへ 1. Write clear and specific instructions:4つの戦術を紹介 2.

    Give the model time to "think”:2つの戦術を紹介 • いくつかの戦術 (tactic) (hallucination対策の追加戦術) ◦ 雑にまとめると、入力も出力も構造化する ◦ 入力の構造化 ▪ 処理対象のテキストを delimiterで区切る(1-1。兼プロンプトインジェクション対策) ▪ タスクを解くのに必要な手順を明確にする( 2-1。例:まず要約して、次に翻訳して) ◦ 出力の構造化 ▪ JSONで返すようお願い(1-2。Pythonのjson.loadsできる) ▪ 出力フォーマットを指定( 2-1。出力に表記ゆれがなくなる ->後続処理で扱いやすい) ▪ タスクに必要な仮定をチェックさせてから解かせる( 1-3。早期リターンのイメージ)
  9. Iterative Prompt Development • https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/3/iterative • プロンプトを反復的に(Iterative)カイゼンしていくアプローチ ◦ タスクを解いてもらうプロンプトには一発では至れない ◦

    IMO:これもまたフィードバックループだ! • 商品の説明を生成するタスクで、反復的にプロンプトをカイゼンする例 ◦ 生成された説明が長すぎる -> 語数の上限指定 ◦ 誤った詳細にフォーカス -> フォーカスする箇所を指定 • プロンプトを決めるまではtemperatureは0 ◦ ヘルパー関数の実装でしれっと指定されている ◦ たしかに仮説検証しやすそう(「いまのプロンプトのこの部分がいけないんじゃないか」) ◦ temperatureについてはExpandingが分かりやすい
  10. LLMで解けるタスクの一覧(講座の内容スライドを編集) • Introduction • Guidelines for Prompting • Iterative Prompt

    Development • Summarizing • Inferring • Transforming • Expanding • Building a Chatbot • Conclusion
  11. Summarizing • https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/4/summarizing • 商品レビューを要約する例(パンダのおもちゃ) • 目的を伝えた上で要約をお願い ◦ 送料についてフィードバックを得たい ◦

    値段についてフィードバックを得たい ◦ IMO:LLMとペアになって、動的に要約を得るアプリケーションの可能性あるのでは? • summarizeの代わりにextract
  12. Inferring • https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/5/inferring • 分類や抽出など推論できる! ◦ 感情分析(ポジ/ネガ) ◦ 名前の抽出 •

    興味深かったテクニック ◦ 感情分析「positiveかnegativeの1語で回答してください」 -> 表記ゆれしない ◦ 感情/トピックを最大 5つ抽出(カンマ区切りで返して) ◦ 候補トピックのリストを渡し、それぞれ 0/1で返させる(zero-shotでマルチラベル分類!) ◦ 複数タスクを1プロンプトにまとめて お願いできる(JSONで構造化して返してもらう)
  13. Transforming • https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/6/transforming • テキストの変換 • 言語間の変換 ◦ 翻訳 ◦

    (言語も検出できる) • 言語内の変換 ◦ トーン(フォーマル・インフォーマル) ◦ 文法誤り訂正、スペル訂正 ◦ JSONやHTMLなどの相互変換
  14. Building a Chatbot • https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/8/chatbot • ここまでのプロンプトに対してチャット形式 ◦ ここまでは1 mesageだった(role=userのプロンプトのみ)

    ◦ 複数のmessageによるcontextをOpenAI APIに送ってチャット • 脱線:プロンプトエンジニアリング手法にはrole=systemを使うものもある ◦ 参考例:TypeScriptではじめるChatGPT API:入門から一歩進んだテクニックまで - Uzabase for Engineers ◦ この講座としてはrole=userの1 messageっぽい ▪ delimiterを使うことでプロンプトインジェクション対策できているということかも! ◦ 現状(2023/05)はいくつかの流派あり(うまくいくなら何でも正義のように感じる)
  15. 受講体験記まとめ(ただしN=1) • ChatGPT Prompt Engineering for Developersはいいぞ(無料のうちにぜひ) • プロンプトエンジニアリングの原則や戦術を学べた •

    LLMで解けるタスクの全体感を掴めた • 開発者向けというのはそのとおりで、LLMの出力を構造化し、後続のプログラムで 扱いやすくする! ◦ IMO:アプリケーション開発でちょっと賢い機能が Web APIを使って簡単に追加できる時代になって しまった • 広く開発者におすすめ
  16. Guidelines for Promptingで紹介された戦術(tactics)一覧 1. Write clear and specific instructions a.

    Use delimiters to clearly indicate distinct parts of the input(区切り文字) b. Ask for a structured output(出力形式指定) c. Ask the model to check whether conditions are satisfied(手順を含んでいたら形式変換。いな かったら「手順の提供なし」と出力) d. "Few-shot" prompting(正解を数例与える。例:子供とおじいさんの対話例を 1例与えて、例と一貫 したスタイルでLLMに回答をお願いする) 2. Give the model time to "think” a. Specify the steps required to complete a task(手順明示) b. Instruct the model to work out its own solution before rushing to a conclusion(生徒の回答を採 点するようなタスクのような場合も、採点前に一度 LLMに解いてもらう) • hallucination対策の追加戦術 ◦ First find relevant information, then answer the question based on the relevant information(関 連する情報を見つけ、それをもとに回答してもらう)
  17. Appendix: 同種の共有 • はてなブックマークで見かけたもの • ChatGPT Prompt Engineering for Developersまとめ|mah_lab

    / 西見 公宏 • 開発者のためのチャットGPTプロンプトエンジニアリング講座が公開されていたの で眺めてみた - Qiita • Andrew Ng先生+ChatGPT本家のプロンプト開発講座が無料で公開されていま す! - Qiita
OSZAR »