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

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

6章: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 高度なプロンプトの作成 Code/概念: プロンプトに様々なテクニックを取り入れ、プロンプト・エンジニアリングの知識をより深める 出力結果を改善するため、プロンプト・エンジニアリングのテクニックを取り入れる
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 の技術をマスターするために

6.テキスト生成アプリケーションの構築

www.youtube.com

https://microsoft.github.io/generative-ai-for-beginners/#/06-text-generation-apps/translations/ja-jp/README?wt.mc_id=academic-105485-yoterada

  • 学ぶ内容の概念: Code: コード:Azure OpenAI を使用してテキスト生成アプリを構築する
  • 学習目標: トークンと温度を効率的に使用しモデルの出力を変化させる方法を理解する

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

  • 独自のテキスト生成アプリケーションの構築方法についてのレッスン。
  • 「初心者のための生成AI」カリキュラムの一部。
  • プレゼンターはマイクロソフトのクリス・ノーリング。
  • テキスト生成アプリケーションの説明と構築方法の学習。
  • OpenAIモデルまたはAzure上のOpenAIモデルを使用したアプリの構築。
  • アプリのトークン使用量の設定と温度設定によるレスポンス制御の学習。
  • テキスト入力からテキスト出力を生成するプロセスの紹介。
  • コマンドベースからグラフィカルなアプリケーションまで、様々なアプリケーション形態の説明。
  • プログラミング言語APIキー、ライブラリやフレームワークの選択。
  • 童話生成アプリケーションとレシピ提案アプリケーションのデモ。
  • 温度設定を使ったレスポンスのランダム性調整の実例紹介。

コンテンツの要約 by ChatGPT

基本的に以下の通り実施すれば、結果が得られる

Generative AI for Beginners

以下補足事項

使用するモデルのDeployment

あらかじめAzure OpenAI Studioにアクセスして、使用するモデルのDeploymentが必要

Azure OpenAI Studio

デプロイメントは、
コンテンツモデレーションモデル、
バージョン処理、デプロイメントサイズなど、
ニーズに合わせて設定された、
Azure OpenAIの基本モデル、
または微調整されたモデルへのエンドポイントを提供します。
このページから、
デプロイメントの表示、編集、新しいデプロイメントの作成ができます。
  • Deployment方法

  • Deploymentsメニューをクリック
  • Create new deploymentボタンをクリック
  • Deployment nameを決めて作成

  • Deploymentのコード記述方法

以下のように記述

deployment_name = "<デプロイ名>"
...
openai.Completion.create(engine= deployment_name, ...
...
  • Chat playgroundでチェックコードをコピーして動作確認

$ export OPENAI_API_KEY=
$ python check.py
エラーが出なければOK

API キーの機密情報をコードから分離するpython-dotenv

python-dotenv · PyPI

  • 準備

    • .envファイルを新規作成
    • 以下のようにkey=valueの形式で記述
OPENAI_API_KEY=...
  • 呼び出し
from dotenv import load_dotenv

# .envファイルのロード
load_dotenv()

# .envファイルのOPENAI_API_KEY値が設定される
openai.api_key = os.environ["OPENAI_API_KEY"]

max_tokens でトークン長指定

max_tokens = 100
completion = openai.Completion.create(model="davinci-002", prompt=prompt, max_tokens=max_tokens)

temperatureで温度指定(0..1)

temperature = 0.5 # 0..1
completion = openai.Completion.create(model="davinci-002", prompt=prompt, temperature=temperature)

課題をやってみる

  • まず、複数行のプロンプトテキストが記載されたファイルを読み込んで実行
$ cat prompt.txt

- "あなたは Python 言語のエキスパートです  
   
下記の形式で Python の初心者用レッスンを提案してください:  
   
形式:  
    - 概念:  
    - レッスンの簡単な説明:  
    - 解答付きのコード演習"
  • コード全体 (ChatGPTでコメント付加)
$ cat sample.py
# 必要なライブラリのインポート
import os  # 環境変数の取得に使用
import openai  # OpenAI APIを使用するために必要

from dotenv import load_dotenv  # .envファイルから環境変数を読み込むために使用

# .envファイルから環境変数を読み込む
load_dotenv()

# OpenAI APIキーの設定
openai.api_key = os.environ["AZURE_OPENAI_API_KEY"]  # 環境変数からAPIキーを取得して設定

# OpenAI APIの設定
openai.api_type = 'azure'  # Azure版OpenAI APIを使用する設定
openai.api_version = '2023-05-15'  # 使用するAPIのバージョン指定
openai.api_base = os.environ["AZURE_OPENAI_ENDPOINT"]  # 環境変数からAPIのベースURLを設定

# 生成タスクのパラメータ設定
deployment_name = "test-deployment"  # 使用するデプロイメント名
model = "davinci-002"  # 使用するモデルの指定
max_tokens = 1000  # 生成するトークンの最大数
temperature = 0.5  # 生成のランダム性を制御(0は決定論的、1は最もランダム)

# プロンプトファイルの読み込み
prompt_file = "./prompt.txt"  # 読み込むプロンプトファイルのパス
prompt = open(prompt_file, 'r').read()  # ファイルを読み込んでプロンプトテキストを取得
print("以下プロンプト##############")
print(prompt)  # プロンプトの内容を表示

# Completionを作成してテキスト生成を実行
completion = openai.Completion.create(engine=deployment_name, model=model, prompt=prompt, max_tokens=max_tokens, temperature=temperature)
# engineにはdeployment_nameを指定しているが、通常はモデル名を指定する。ここではカスタムのデプロイメントを使用しているため、このような指定になっている。

# レスポンスを出力
print("以下レスポンス##############")
print(completion.choices[0].text)  # 生成されたテキストの最初の選択肢を表示
  • 実行結果 1回目
$ python sample.py
以下プロンプト##############
- "あなたは Python 言語のエキスパートです

下記の形式で Python の初心者用レッスンを提案してください:

形式:
    - 概念:
    - レッスンの簡単な説明:
    - 解答付きのコード演習"


以下レスポンス##############
A- Pythonの初心者用レッスンの提案

概念:for文

レッスンの簡単な説明:for文は、繰り返し処理を行うための制御構文の1つで、あらかじめ指定した範囲の値や、リストや辞書型などのオブジェクトの要素を順番に取り出して、それぞれに対して同じ処理を繰り返し行うことができます。

解答付きのコード演習:

1. 数字のリスト[0, 1, 2, 3, 4]を作成し、for文を使って、リストの各要素を1つずつ取り出して、それぞれに対して2倍した値を出力してください。


numbers = [0, 1, 2, 3, 4]
for num in numbers:
    print(num * 2)

2. 英単語のリスト["apple", "banana", "cherry"]を作成し、for文を使って、リストの各要素を1つずつ取り出して、それぞれに対して最初の1文字を大文字に変換した文字列を出力してください。


words = ["apple", "banana", "cherry"]
for word in words:
    print(word.capitalize())


3. 辞書型{"apple": 100, "banana": 200, "cherry": 300}を作成し、for文を使って、辞書型の各要素を1つずつ取り出して、キーと値をそれぞれ出力してください。


fruits = {"apple": 100, "banana": 200, "cherry": 300}
for key, value in fruits.items():
    print(key, value)
  • 実行結果 2回目
$ python sample.py
以下プロンプト##############
- "あなたは Python 言語のエキスパートです

下記の形式で Python の初心者用レッスンを提案してください:

形式:
    - 概念:
    - レッスンの簡単な説明:
    - 解答付きのコード演習"


以下レスポンス##############
A: Python初心者用レッスンの提案

- 概念:if文
- レッスンの簡単な説明:if文は、条件分岐のための文法で、ifの後に条件式を書き、その条件が真の場合にはコードブロックを実行する。
- 解答付きのコード演習:


# 例題1
# if文を使って、aが10より大きい場合に「aは10より大きい」と表示するコードを書いてください。
a = 15
if a > 10:
    print("aは10より大きい")

# 例題2
# if文を使って、bが0未満の場合に「bは負の数です」と表示するコードを書いてください。
b = -3
if b < 0:
    print("bは負の数です")


- 概念:for文
- レッスンの簡単な説明:for文は、繰り返し処理のための文法で、指定した回数、または指定した範囲の繰り返しを行う。
- 解答付きのコード演習:

# 例題1
# for文を使って、1から5までの数字を順に表示するコードを書いてください。
for i in range(1, 6):
    print(i)

# 例題2
# for文を使って、リストの中身を順に表示するコードを書いてください。
lst = ["apple", "banana", "orange"]
for item in lst:
    print(item)


- 概念:関数
- レッスンの簡単な説明:関数は、複数の処理をまとめて一つのブロックにし、そのブロックを呼び出すことで処理を実行するための文法である。
- 解答付きのコード演習:

# 例題1
# 関数を使って、2つの数値の和を計算するコードを書いてください。
def add(a, b):
    return a + b

result = add(3, 5)
print(result)

# 例題2
# 関数を使って、リストの合計値を計算するコードを書いてください。
def sum_list(lst):
    total = 0
    for item in lst:
        total += item
    return total

lst = [1, 3, 5, 7, 9]
result = sum_list(lst)
print(result)


- 概念:クラス
- レッスンの簡単な説明:クラスは、オブジェクト指向プログラミングのための文法で、データとそれに対する操作をまとめたもの。
- 解答付きのコード演習:

# 例題1
# クラスを使って、簡単な四則演算ができる電卓を作成してください。
class Calculator:
    def add(self, a, b):
        return a + b

    def subtract(self, a, b):
        return a - b

    def multiply(self, a, b):
        return a * b

    def divide(self, a, b):
        return a / b

calc = Calculator()
result = calc.add(3, 5)
print(result)

# 例題2
# クラスを使って、簡単なTODOリストを作成してください。
class TodoList:
    def __init__(self):
        self.tasks = []

    def add_task(self, task):
        self.tasks.append(task)

    def remove_task(self, task):
        self.tasks.remove(task)

    def show_tasks(self):
        for task in self.tasks:
            print(task)

todo = TodoList()
todo
  • 実行結果 3回目
$ python sample.py
以下プロンプト##############
- "あなたは Python 言語のエキスパートです

下記の形式で Python の初心者用レッスンを提案してください:

形式:
    - 概念:
    - レッスンの簡単な説明:
    - 解答付きのコード演習"


以下レスポンス##############
A. 概念:ファイルの読み書き
   レッスンの簡単な説明:Python でファイルを読み書きする方法を学びます。ファイルの読み込み、書き込み、作成、削除などの操作を行い、テキストファイルとバイナリファイルの違いを理解します。
   解答付きのコード演習:
   - ファイルの読み込み
   - ファイルの書き込み
   - テキストファイルの作成
   - テキストファイルの削除
   - バイナリファイルの作成
   - バイナリファイルの読み込み

B. 概念:関数
   レッスンの簡単な説明:Python で関数を定義する方法を学びます。関数の定義、引数の渡し方、戻り値の取得などを学び、関数を使ったプログラミングの基礎を理解します。
   解答付きのコード演習:
   - 関数の定義
   - 引数の渡し方
   - 戻り値の取得
   - ローカル変数とグローバル変数の違い
   - ラムダ式の使い方

C. 概念:クラス
   レッスンの簡単な説明:Python でクラスを定義する方法を学びます。クラスの定義、インスタンスの生成、メソッドの定義などを学び、オブジェクト指向プログラミングの基礎を理解します。
   解答付きのコード演習:
   - クラスの定義
   - インスタンスの生成
   - メソッドの定義
   - クラス変数とインスタンス変数の違い
   - 継承の使い方
   - 多重継承の使い方

D. 概念:例外処理
   レッスンの簡単な説明:Python で例外処理を行う方法を学びます。try-except文の使い方、例外の種類、例外の発生時の処理方法などを学び、プログラムの安定性を高める方法を理解します。
   解答付きのコード演習:
   - try-except文の使い方
   - 例外の種類
   - 例外の発生時の処理方法
   - finally句の使い方
   - 自作例外の使い方

E. 概念:並列処理
   レッスンの簡単な説明:Python で並列処理を行う方法を学びます。threadingモジュール、multiprocessingモジュールの使い方、プロセス間通信、ロックの使い方などを学び、プログラムのパフォーマンスを向上させる方法を理解します。
   解答付きのコード演習:
   - threadingモジュールの使い方
   - multiprocessingモジュールの使い方
   - プロセス間通信の使い方
   - ロックの使い方
   - マルチスレッドの使い方

F. 概念:Webスクレイピング

まとめ

  • OpenAI APIをAzure経由で使えるようになった
  • プログラムで自由に