kaeken(嘉永島健司)のTech探究ブログ

主に情報科学/情報技術全般に関する知見をポストします。(最近は、特にData Science、機械学習、深層学習、統計学、Python、数学、ビッグデータ)

4-5章:Generative AI for Beginners講座( by Microsoft)まとめ

概要

  • 生成 AI アプリケーションの開発を始めるために必要な全知識を学べる 12 講座
  • マイクロソフトクラウド・アドボケイトが提供
  • 生成 AI アプリケーション構築の基礎知識を習得

URL

Generative AI for Beginners
https://microsoft.github.io/generative-ai-for-beginners/#/translations/ja-jp/

GitHub

microsoft/generative-ai-for-beginners: 12 Lessons, Get Started Building with Generative AI 🔗 https://microsoft.github.io/generative-ai-for-beginners/

目次

No. レッスンへのリンク 学ぶ内容の概念 学習目標
0 このコースを始めるための準備 テクノロジーのセットアップとコースの枠組み レッスンが成功したと分かるゴール設定
1 生成 AI と大規模言語モデルの紹介 概念: 生成 AI と現在のテクノロジー環境 生成 AI とは何か、そして大規模言語モデル(LLM)がどのように動くかを理解する。
2 様々なLLMの調査と比較 概念: さまざまな大規模言語モデルのテスト、反復、および比較 ユースケースに適した AI モデルを選択
3 責任ある生成 AI の利用 概念: ファウンデーションモデルの限界と AI に伴うリスクを理解する 責任ある生成 AI アプリケーションの開発方法を学ぶ
4 プロンプト・エンジニアリングの基礎 Code/概念: ハンズオン形式でプロンプト・エンジニアリングのベストプラクティスを学ぶ 出力結果を改善するため、プロンプト・エンジニアリングのテクニックを取り入れる
5 DALL-E のユースケースと応用 Code/概念: DALL-E のモデル構造と活用方法 DALL-E を用いたアプリケーションの開発スキルを習得し、その応用例を探る
6 テキスト生成アプリケーションの構築 Code: コード:Azure OpenAI を使用してテキスト生成アプリを構築する トークンと温度を効率的に使用しモデルの出力を変化させる方法を理解する
7 チャットアプリケーションの構築 Code: チャット アプリケーションを効率的に構築および統合するための手法。 AI を利用したチャット・アプリケーションの品質を効果的に監視し維持するための重要なキーメトリクスと注意点を把握する
8 Vector Databases を利用した検索アプリケーションの構築 Code: セマンティック検索とキーワード検索の違いについて学ぶ。テキストの埋め込みについて学び、検索への適用方法を理解する 埋め込み技術を利用したデータ検索アプリケーションを構築する
9 画像生成アプリケーションの構築 Code: アプリケーション開発で画像生成が役立つ理由 画像を生成するアプリケーションを構築する
10 ローコード AI アプリケーションの構築 Low Code: Power Platform における生成 AI の概要 教育系スタートアップ企業がローコードで学生の課題追跡アプリを構築する
11 Function Calling との統合 Code: Function Calling とアプリケーションにおける用途 外部 API からデータを取得するため Function Calling を設定する
12 AI アプリケーション用の UX デザイン 概念: 透明性と信頼性を備えたAIアプリケーションの設計 生成 AI アプリケーションの開発時に UX デザインの原則を適用する
xx 学習の継続 各授業の内容をさらに進めるための参考リンク! 生成 AI の技術をマスターするために

4.プロンプト・エンジニアリングの基礎

www.youtube.com

https://microsoft.github.io/generative-ai-for-beginners/#/04-prompt-engineering-fundamentals/translations/ja-jp/README?wt.mc_id=academic-105485-yoterada

  • 学ぶ内容の概念: Code/概念: ハンズオン形式でプロンプト・エンジニアリングのベストプラクティスを学ぶ
  • 学習目標: プロンプトの構造と使用法の理解

ビデオの要約 by YouTube Summary with ChatGPT & Claude

タイトル: 「プロンプトエンジニアリング基礎の理解」

要約: マイクロソフトのAIアドボカシーチームのナン・ナランが、初心者向けのジェネラティブAIカリキュラムの一環としてプロンプトエンジニアリングに関するレッスンを提供します。このレッスンの目的は、反復的な設計と検証によって効果的なプロンプトの作成スキルを向上させることであり、プロンプトエンジニアリングは練習を要する芸術形態として強調されています。

主な内容は以下の通りです:

  1. プロンプトエンジニアリングの定義と重要性: 簡単な内容から複雑な指示までのプロンプトの構築方法を探求し、大規模言語モデル(LLM)からの質の高い反応を得るためのプロンプトエンジニアリングの重要性を強調します。

  2. ジェネラティブAIとLLM: 新しいコンテンツを生成するジェネラティブAIと、自然言語タスク用に大規模なデータセットで訓練されたLLMについての概要。プロンプトはLLMに対するテキスト入力であり、それによって反応が影響されます。

  3. 実用的応用: 教育スタートアップに関連した例を挙げ、異なるユーザー(管理者、教育者、学生)がAIをカリキュラム分析、授業計画、問題解決支援などにどのように利用するかを説明します。

  4. プロンプトの仕組み: プロンプトはLLMにとってトークンの連続であり、事前訓練されたデータに基づいて反応を予測します。トークン制限を効果的に活用し、質の高い反応を得るためには、プロンプトの設計が重要です。微妙なプロンプトの変更がAIの反応に大きな違いをもたらすことを示す例が提示されています。

  5. プロンプトエンジニアリングの課題: 同じプロンプトに対してLLMが異なる反応を示す可能性があるため、慎重なプロンプト設計の重要性が強調されます。モデルが「幻覚」を見せることもあり、予測不可能な出力を生成することもあります。

  6. 実世界での応用例: GitHub Co-Pilotは、GitHubとOpenAIによって開発されたプロンプトエンジニアリングの実践例として紹介されています。ユーザーのプロンプトに対して解釈し、応答する成功は、効果的なプロンプトエンジニアリングの実用的な影響を示しています。

  7. プロンプトエンジニアリング技術: 文脈を設定し、明瞭かつ簡潔な言語を使用し、ユーザーの意図を考慮するなどのベストプラクティスを含む。指示ベースまたはコンテンツベースの異なるタイプのプロンプトと、それらを効果的に組み合わせる方法も探ります。

  8. 反復学習とテンプレート: 反復学習の重要性、一貫性とスケーラビリティのためのテンプレートの利用、特定のドメインやユーザーのニーズに合わせたプロンプトの適応を強調します。

  9. プロンプトエンジニアリングのマインドセットの採用: 試行錯誤、モデルの限界の理解、プロンプトの正確性、コスト、複雑さの間のバランスを見つけることを奨励します。効果的なプライマリコンテンツの使用、プロンプトの反復実験、キーとなる指示や文脈の重点化などの常識的な実践が強調されています。

  10. 実践的応用と実験: プロンプトエンジニアリングのマインドセットを採用し、さまざまな技術を実践ツール(例えば、セットアップされたJupyterノートブック)を使用して実験するよう呼びかけています。

この包括的なレッスンは、ジェネラティブAIの文脈でのプロンプトエンジニアリングの応用可能性、課題、およびベストプラクティスを強調しながら、初心者に基本スキルと理解を提供することを目指しています。

コンテンツの要約 by ChatGPT

プロンプト・エンジニアリングの概要

  1. プロンプトエンジニアリングの定義

    • 特定のアプリケーションとモデル用に、質の高い回答を得るためのテキスト入力(プロンプト)の設計と最適化。
  2. プロンプトエンジニアリングのプロセス

    • 初期プロンプトの「設計」
    • 回答品質を向上させるためのプロンプトの「改善」
  3. プロンプトエンジニアリングの重要性

    • 試行錯誤の過程が必要
    • トークン化、ベースLLM、指示チューニングLLMの理解が重要
  4. トークン化(Tokenization)

    • LLMがプロンプトをトークンの連続として解釈する方法
    • トークン化の違いが回答品質に影響
  5. ベースLLM(Base LLM)

    • トークン化されたプロンプトの統計的な関連性を予測
    • 意味を理解するのではなく、確率的な予測に基づく
  6. インストラクションチューニングされたLLM(Instruction-Tuned LLM)

    • 明確な指示と例で微調整
    • 利用者の目的に合った回答を生成
  7. 実践的な応用

    • 特定の指示に従った結果を得るための実験
    • 教員などが実用的な応用を行う可能性

プロンプト・エンジニアリングの必要性

  1. プロンプトエンジニアリングの必要性

    • LLMの確率的な性質により同一プロンプトでも異なる回答が生じる
    • 信頼性のある一貫した回答を得るためにプロンプトの最適化が重要
  2. モデルの回答に関する課題

    • 確率的な回答: 同じモデルでも異なる時期に異なる結果を生じる可能性
    • 回答の捏造: 有限のデータセットでの事前トレーニングにより不正確な回答をする場合がある
    • モデルの能力の差異: 新しいモデルは高度な機能を持つが、独自の特性やコストとのトレードオフが存在
  3. プロンプトエンジニアリングの方法

    • より適切なガイドラインを提供し、回答のばらつきを減らす
    • AIに出典や論理的根拠の説明を求めて捏造を軽減
    • モデル固有の要件に適するベストプラクティスとワークフローの開発
  4. 実際の試行例

    • 異なるLLM環境で同じプロンプトを試行
    • 同じLLMで同じプロンプトを繰り返し実行して変化を観察
  5. 捏造の問題

    • LLMが事実に反する情報を回答することを「捏造」と定義
    • 架空のトピックに関するコンテンツ作成をプロンプトで指示して捏造を観察
  6. 異なるモデルの回答の比較

    • 同じ質問でもモデルごとに異なる回答結果が得られる
    • どのモデルも実際には存在しない事象についての回答を生成
  7. プロンプトエンジニアリングの進化

    • 「メタプロンプティング」や「温度調整」などの手法で捏造を抑制
    • 新しいアーキテクチャが影響を緩和または削減するためのツールや手法を導入

プロンプトの組み立て

  1. プロンプトの基本

    • モデルに送信する単純なテキスト入力
    • 例: OpenAIのCompletion APIアメリカ国歌の最初の数語を送ると、次の数行を完成させる
  2. 複雑なプロンプト

    • 基本的なプロンプトにコンテキストと指示を加える
    • 例: Chat Completion APIを使って、利用者の質問とアシスタントからの回答例を含む入出力ペアを作成
  3. プロンプトの応用例

    • システムメッセージを含むプロンプトでアシスタントの行動や人格のコンテキストを設定
    • トークン化によりシステム・コンテキストと会話履歴から関連情報を効果的に捉える
  4. 指示を含むプロンプト

    • テキストを通じて具体的なタスクを指定
    • 例: 南北戦争についての簡単な説明から、特定のフォーマットや詳細な情報を要求する複雑な指示まで
  5. 指示の応用

    • AIに対する具体的な指示を通じて、より詳細な回答や特定のフォーマットでの回答を求める
    • 例: 南北戦争についての説明、重要な日付とイベント、歴史上の人物とその貢献を要求するプロンプト

プロンプトの主要コンテンツ

  1. 主要コンテンツのデザイン・パターン

    • 入力テキストを「指示(行動)」と「関連する内容(行動に影響を及ぼす)」の2部に分割
    • 例: 「これを2つの短い文にまとめてください」という指示に基づく要約
  2. 主要コンテンツの活用方法

    • 実例: モデルに実行すべき実例を与えてパターンを推測させる
    • キュー: 完了を促す手がかりを提供してモデルを誘導
    • テンプレート: 特定の用途に合わせてカスタマイズ可能なプロンプトのレシピ
  3. 使用例とその応用

    • ゼロショット、ワンショット、フューショット・プロンプティング:タスク説明、期待する出力の例、新しい問い合わせの開始部分を含む
    • 例: 「太陽は輝いている」をスペイン語に翻訳
  4. プロンプト・キュー

    • 利用者がキューを提供してモデルを誘導
    • 例: 木星に関する要約でキューの数による回答の違い
  5. プロンプト・テンプレート

    • 事前に定義されたプロンプトのレシピを保存し再利用
    • 特定業界用アプリケーションのプロンプト・ライブラリ作成
    • 例: Prompts For Eduは教育分野に特化したプロンプト・ライブラリを提供

プロンプトのサポートコンテンツ

  1. セカンダリ・コンテンツの役割

    • プロンプトの作成において、出力に影響を与える追加情報
    • モデルに対するチューニング・パラメータ、フォーマット指示、トピック分類などを含む
    • 利用者の目的や期待に合わせて回答を調整するために使用
  2. セカンダリ・コンテンツの具体例

    • コースカタログのような広範なメタデータ(名前、説明、レベル、メタデータタグ、講師など)を含むケース
    • 指示として「2023年秋のコースカタログを要約してください」を与える
    • 主要コンテンツとして、要約したいコースカタログの内容を提供
    • セカンダリ・コンテンツとして、興味のあるトップ5の「タグ」を指定
  3. セカンダリ・コンテンツの応用

    • モデルは指定されたフォーマットで要約を提供
    • 指定したセカンダリ・コンテンツ(例えばトップ5のタグ)を出力結果に含めることが可能
    • セカンダリ・コンテンツによってよりカスタマイズされた回答が得られる

プロンプト作成のベストプラクティス

  1. プロンプト作成のベストプラクティスの概要

    • 「適切な考え方」と「適切な技術の適用」の2つの側面に分けて検討
    • プロンプト・エンジニアリングは試行錯誤を伴うプロセス
  2. ドメインの理解の重要性

  3. モデル理解の重要性

    • モデルは確率的な性質を持ち、トレーニング・データや機能によって異なる
    • モデルの長所と制限の理解を基に、タスクの優先順位付けやカスタマイズしたテンプレートの作成
  4. 反復と検証の重要性

    • モデルとプロンプト・エンジニアリングの手法は急速に進化
    • プロンプトを試し、結果を検証し、知見を記録
    • ナレッジベースやプロンプトライブラリの作成で他者が反復しやすくする
  5. プロンプト作成の総合的なアプローチ

    • ドメインとモデルの理解を活用し、効果的なプロンプトを設計
    • 結果の検証と改善のために反復と検証のプロセスを繰り返す
    • 共有可能なナレッジベースやプロンプトライブラリを構築

ベストプラクティス事例

  1. 最新モデルの評価

    • 新世代のモデルの機能や品質向上の可能性を評価する
    • コストが高くなる可能性も考慮して移行の可否を検討
  2. 指示とコンテキストの分離

    • 「区切り文字」を定義し、指示やプライマリ・セカンダリコンテンツを明確に区別
    • モデルがトークンに対して重みを正確に割り当てることができる
  3. 具体的かつ明確

    • 目的のコンテキスト、結果、長さ、フォーマット、スタイルを詳細に記述
    • 回答の品質と一貫性の向上に寄与する再利用可能なテンプレートの使用
  4. 詳細に説明し、実例を示す

    • 「示しながら教える」アプローチに基づくモデルの回答
    • ゼロショット、フューショットのアプローチで期待する出力例を提供し改善
  5. キュー(手がかり)を用いて出力を促進

    • 回答の起点となる単語やフレーズを与え期待する結果を得る
  6. ダブル・ダウン

    • モデルに対して自身で反復させる必要がある場合、指示やキューを使い反復して検証
  7. 順序の重要性

    • 情報提示の順番が出力に影響を及ぼす可能性あり
    • 最後の情報が特に影響する可能性(認知バイアス)を考慮
  8. モデルに「代替案」を用意する

    • タスクが完了できない場合の「代替案」を用意し、誤ったり捏造した回答の生成を低減
  9. ケース・バイ・ケースで効果は異なる

    • モデルの種類、タスクの内容、専門分野によって結果が変わることを認識
    • 新しいモデルやツールが登場するたびにプロセスのスケーラビリティと回答の品質に注目し、手法を再評価

5.高度なプロンプトの作成

www.youtube.com

https://microsoft.github.io/generative-ai-for-beginners/#/05-advanced-prompts/translations/ja-jp/README?wt.mc_id=academic-105485-yoterada

  • 学ぶ内容の概念: Code/概念: プロンプトに様々なテクニックを取り入れ、プロンプト・エンジニアリングの知識をより深める
  • 学習目標: 出力結果を改善するため、プロンプト・エンジニアリングのテクニックを取り入れる

ビデオの要約 by YouTube Summary with ChatGPT & Claude

このレッスン「05 - Creating Advanced Prompts」は、「Generative AI for Beginners」カリキュラムの一部で、クリス・ノーリングによって提供されています。レッスンの主な内容としては、以下のポイントが挙げられます。

  1. 目的と焦点: 生成型AIモデルのための高度なプロンプト技術に焦点を当て、特定のプロンプトがなぜうまく機能するのか、そしてその改善方法を説明する。

  2. 学習目標: プロンプトエンジニアリング技術を適用し、プロンプトの成果を高めること。また、レスポンスのランダム性をコントロールする方法を学ぶ。

  3. プロンプトエンジニアリング: AIモデルをより関連性の高いレスポンスに導くために、詳細な指示とコンテキストを提供するプロセス。

  4. 主要技術:

    • Few-shot Prompting(数ショットプロンプティング)
    • Chain of Thought(思考の連鎖)
    • Generated Knowledge(生成された知識)
    • Least to Most(最小から最大へ)
    • Self-Refine(自己改善)
    • Myotic Prompting(ミオティックプロンプティング)
  5. 例と応用: 数ショットプロンプティングや思考の連鎖の例を通じて、コンテキストの重要性と問題の分解がレスポンスの正確性にどのように影響するかを示す。

  6. 詳細情報への案内: レッスンのテキストバージョンがGitHubで利用可能であり、これらの原則についての詳細情報が得られる。

このレッスンは、生成型AIモデルでのプロンプティング技能を向上させることを目的としています。

コンテンツの要約 by ChatGPT

以下は「プロンプト・エンジニアリング」に関する記事の要約です:

  1. プロンプト・エンジニアリングの定義: 期待する結果を生み出すプロンプトを作成するプロセス。単なるテキスト作成ではなく、一連のテクニックを適用します。

  2. プロンプトの例:

    • コンテキストの指定: 「地理」に関する質問を指定。
    • 出力の制限: 作成される質問の数を10個以下に限定。
  3. 単純なプロンプトの限界: 広範なテーマやフォーマットの要求がある場合、期待する結果が得られないことがある。

  4. プロンプト・テクニック:

    • Few shot prompting: 基本的な形式で、質問と回答の例を含む。
    • Chain-of-thought: 問題を段階に分解し、LLMに指示を与える。
    • Generated knowledge: 事実や知識を追加してプロンプトの応答を改善。
    • Least to most: 問題を一連のステップに分解し、順番に実行するよう指示。
    • Self-refine: LLMからの出力結果を再評価し、改善を求める。
    • Maieutic prompting: LLMの回答が正しいか確認するため、回答の各部分を詳しく説明させる。
  5. プロンプトの応用例:

    • プロンプト: 企業データを追加して、保険提案を作成。
    • Chain-of-thought: 数学問題の解決方法を提示して、正しい計算を導く。
    • Self-refine: Pythonコードの改善点を提示して、コードを改善する。
  6. プロンプトの重要性と効果: 適切なプロンプト技術の使用により、より正確な回答や解決策が得られる。しかし、LLMの出力は常に検証が必要であり、自己改善や批評が役立つ。

出力のバリエーション

  1. LLMの非確実性: 同じプロンプトを実行しても、結果は毎回異なる。

  2. プロンプト例:

    • "Python Web API のコードを生成してください"というプロンプトを実行すると、出力は異なるコードサンプルになる。
  3. 出力バリエーションの例:

    • Flaskアプリの作成、APIのルート作成、データ処理関数などを含むコード。
    • 別の実行では、本のリストを作成し、APIエンドポイントを提供する異なるコード。
  4. 出力のバリエーションの問題性: 特定の確実な回答を求める場合は問題になるが、柔軟な出力が許容される場合は問題なし。

  5. 出力を制限する方法: 温度(Temperature)パラメータの調整により、出力の予測可能性や多様性を制御。

  6. 温度パラメータの影響:

    • 低い温度設定(0.1)では、ほぼ同じ結果が得られる。
    • 高い温度設定(0.9)では、より多様な結果が得られる。
  7. その他のパラメータ:

    • Top-k, top-p, repetition penalty, length penalty, diversity penaltyなどのパラメータも存在するが、このレッスンでは取り扱わない。

この記事は、LLMの出力におけるバリエーションを理解し、必要に応じて調整する方法について説明しています。

LLMを最適に活用するための具体的な方法やテクニック

  1. コンテキストの明確化: プロンプトでドメインやトピックを具体的に指定することが重要。

  2. 出力の制限: 特定の項目数や特定の長さを必要とする場合は、それを明示的に指定する。

  3. 「何を」、「どうするか」の明確化: 例えば、「PythonのWeb APIを作成し、商品と顧客を設定し、それを3つのファイルに分けてください」のように具体的な指示を出す。

  4. テンプレートの活用: 自社データをプロンプトに反映させる際には、テンプレートを活用し、実際のデータに置き換えられる変数を設定する。

  5. 正確な記述: スペルミスがあってもLLMは正しい回答を提供する可能性があるが、スペルが正確であれば、より良い回答が得られる。