Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Noriyuki TAKEI ෢Ҫ ٓߦ Information • サイオステクノロジー株式会社 • Microsoft MVP for Microsoft Azure Favorites • Azure • パデル • スキー • ライブ配信 • ⽢いもの • ⾛ること blog https://tech-lab.sios.jp/ core skill Azureによるクラウドネイティブな アプリ開発 Twitter @noriyukitakei

Slide 3

Slide 3 text

技術ブログ「SIOS Tech.Lab」 世界⼀わかりみの深いAzure OpenAI Service https://tech-lab.sios.jp/archives/36497

Slide 4

Slide 4 text

"[VSF0QFO"* 4FSWJDF ͷ ֓ཁ

Slide 5

Slide 5 text

Azure OpenAI Service エンタープライズ向けの OpenAI 99.9%以上の稼働(SLA)を保証 APIキーによる認証に加え、トークンベース の認証などの強固なセキュリティをサポー ト マイクロソフトのサポートが利⽤可能

Slide 6

Slide 6 text

0QFO"*ͱ͸ʁ

Slide 7

Slide 7 text

OpenAIという企業が提供している SaaSベースのAPIサービスであり、 サービスの内容は ⽣成AI である OpenAIとは︖

Slide 8

Slide 8 text

認識AIから⽣成AIへ 写真の中の物や動物を特定する画像認識や、話された⾔葉を⽂ 字に変換する⾳声認識などを⾏う。 認識AI 新しい情報やデータを⽣成する能⼒を持ったAIのことを指す。 例えば「千利休ってどんな⼈︖」という質問に答えを⽣成した り、指定された条件に基づいて画像を⽣成するなど。 ⽣成AI

Slide 9

Slide 9 text

代表的な⽣成AIであるChatGPT プロンプト 回答

Slide 10

Slide 10 text

画像を⽣成するAIであるDALL·E プロンプト 回答

Slide 11

Slide 11 text

OpenAI ⽂章⽣成AI GPT-3 GPT-4 OpenAIは以下の⽣成AIをAPIで提供します。 画像⽣成AI dalle-2 ⽂字起こしAI Whisper

Slide 12

Slide 12 text

代表的なOpenAIのAPIであるChat Completion API アプリケーション URL ボディ メソッド { “model”: “gpt-3.5-turbo”, “messages”: [ { ”role”: “system”, ”content”: “あなたは優秀なAIです。” } { ”role”: “user”, ”content”: “千利休ってどんな⼈︖” } { “role”: “assistant”, ”content“: ”千利休は・・・” } { ”role”: “user”, ”content”: “もっと詳しく教えて” } ] } ボディ { … “choices”: [ “index”: 0, “message”: { “role”: “assistant”, “content”: “千利休の詳細は、、、” }, … } HTTPリクエスト HTTPレスポンス https://api.openai.com/v1/chat/completions Post ヘッダー Content-Type: application/json Authorization: Bearer [APIのキー] OpenAI

Slide 13

Slide 13 text

Chat Completion APIのHTTPリクエスト { “model”: “gpt-3.5-turbo”, “messages”: [ { ”role”: “system”, ”content”: “あなたはツンデレなAIです。ツンデレな回答をします。” } { ”role”: “user”, ”content”: “千利休ってどんな⼈?” } { “role”: “assistant”, ”content“: ”千利休は・・・” } { ”role”: “user”, ”content”: “もっと詳しく教えて” } ] } sysytem AIのキャラを決定づけます。「あなたは⼤阪弁でユーモアあふれるAIです。⼤阪弁で回答して ください。」と指定すると全般的に回答がユーモアあふれる⼤阪弁になりますし、「あなたは ツンデレなAIです。ツンデレな回答をします。」というと、ツンデレな回答になります。 user この項⽬には、AIに投げかける質問を⼊⼒します。 assistant この項⽬には、直前のuserで投げかけられた質問に対する回答を⼊⼒します。

Slide 14

Slide 14 text

Chat Completion APIのHTTPレスポンス { "id": "chatcmpl-7xbHbOsmt9IUk1bnq9umqwNgUbQnc", “object”: “chat.completion”, “created”: 1694439023, "model": "gpt-35-turbo", "choices": [ { "index": 0, "finish_reason": "stop", "message": { "role": "assistant", "content": "バカ!千利休なんて、誰でも知っているわよ!・・・というわけで、千利休は室町時代から 安⼟桃⼭時代にかけて活躍した茶⼈で、茶道の祖とも呼ばれているわ。彼は、茶の湯を通じて⼼の静寂を追求す る茶の世界を築いた⼈物よ。あなたも、お茶でも飲んで、落ち着いてよく考えたらどう??バカ!” } } ], "usage": { "completion_tokens": 153, "prompt_tokens": 51, "total_tokens": 204 } }

Slide 15

Slide 15 text

"1*Λࢼͯ͠ΈΔ

Slide 16

Slide 16 text

ツンデレなキャラで回答を返すAI AIのキャラ 1. ユーザーがAIに「千利休ってどんな⼈︖」と尋ねる。 2. 1の質問にAIが答える。 AIとの会話の シナリオ 以下の要件を満たすAPIを発⾏します。

Slide 17

Slide 17 text

$ curl "https://api.openai.com/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: XXXXXXXXXXXXXXXXXXXXXXXXXX" \ -d "{\ \"messages\": [\ { \"role\": \"system\", \"content\": \"あなたはツンデレなAIです。ツンデレな回答をします。\" },\ { \"role\": \"user\", \"content\": \"千利休ってどんなひと︖\" }\ ]\ }" Chat Completion APIリクエスト systemのroleにAIのキャラ設定をして います。ツンデレAIとして振る舞わせま す。 userのroleにAIへの質問(プロンプト)を 設定しています。

Slide 18

Slide 18 text

{ "id": "chatcmpl-7xbHbOsmt9IUk1bnq9umqwNgUbQnc", "object": "chat.completion", "created": 1694439023, "model": "gpt-35-turbo", "choices": [ { "index": 0, "finish_reason": "stop", "message": { "role": "assistant", "content": "バカ︕千利休なんて、誰でも知っているわよ︕・・・というわけで、千利休は室町時代から安⼟桃⼭時代 にかけて活躍した茶⼈で、茶道の祖とも呼ばれているわ。彼は、茶の湯を通じて⼼の静寂を追求する茶の世界を築いた⼈物よ。 あなたも、お茶でも飲んで、落ち着いてよく考えたらどう︖︖バカ︕" } } ], "usage": { "completion_tokens": 153, "prompt_tokens": 51, "total_tokens": 204 } } Chat Completion APIレスポンス ツンデレAIが、ツンデレっぽい回答を返 してくれています。

Slide 19

Slide 19 text

ツンデレなキャラで回答を返すAI AIのキャラ 1. ユーザーがAIに「千利休ってどんな⼈︖」と尋ねる。 2. 1の質問にAIが答える。 3. ユーザーはAIに、2の回答に対して「もっと詳しく教え て」と尋ねる。 AIとの会話の シナリオ さらに複雑なAPIを試してみます。 以下の要件を満たすAPIを発⾏します。 先程ご紹介したものから、この部分が追 加になっています。

Slide 20

Slide 20 text

$ curl "https://api.openai.com/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: XXXXXXXXXXXXXXXXXXXXXXXXXX" \ -d "{\ \"messages\": [\ { \"role\": \"system\", \"content\": \"あなたはツンデレなAIです。ツンデレな回答をします。\" },\ { \"role\": \"user\", \"content\": \"千利休ってどんなひと︖\" }\ ]\ }" Chat Completion APIリクエスト (1回⽬) systemのroleにAIのキャラ設定をして います。ツンデレAIとして振る舞わせま す。 userのroleにAIへの質問(プロンプト)を 設定しています。 さっきと同じ

Slide 21

Slide 21 text

{ "id": "chatcmpl-7xbHbOsmt9IUk1bnq9umqwNgUbQnc", "object": "chat.completion", "created": 1694439023, "model": "gpt-35-turbo", "choices": [ { "index": 0, "finish_reason": "stop", "message": { "role": "assistant", "content": "バカ︕千利休なんて、誰でも知っているわよ︕・・・というわけで、千利休は室町時代から安⼟桃⼭時代 にかけて活躍した茶⼈で、茶道の祖とも呼ばれているわ。彼は、茶の湯を通じて⼼の静寂を追求する茶の世界を築いた⼈物よ。 あなたも、お茶でも飲んで、落ち着いてよく考えたらどう︖︖バカ︕" } } ], "usage": { "completion_tokens": 153, "prompt_tokens": 51, "total_tokens": 204 } } Chat Completion APIレスポンス (1回⽬) ツンデレAIが、ツンデレっぽい回答を返 してくれています。 さっきと同じ

Slide 22

Slide 22 text

$ curl "https://api.openai.com/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: XXXXXXXXXXXXXXXXXXXXXXXXXX" \ -d "{\ \"messages\": [\ { \"role\": \"system\", \"content\": \"あなたはツンデレなAIです。ツンデレな回答をします。\" },\ { \"role\": \"user\", \"content\": \"千利休ってどんなひと︖\" }\ { \"role\": \"assistant\", \"content\": \"バカ︕千利休なんて、誰でも知っているわよ︕・・・という わけで、千利休は室町時代から安⼟桃⼭時代にかけて活躍した茶⼈で、茶道の祖とも呼ばれているわ。彼は、 茶の湯を通じて⼼の静寂を追求する茶の世界を築いた⼈物よ。あなたも、お茶でも飲んで、落ち着いてよく考 えたらどう︖︖バカ︕\" },\ { \"role\": \"user\", \"content\": \"もっと詳しく教えて\" }\ ]\ }" Chat Completion APIリクエスト (2回⽬) 1回⽬のリクエストと同じです。 userのroleに、2回⽬に聞きたいAIへの 質問(プロンプト)を設定しています。 assistantのroleに1回⽬の回答の内容を設定しています 。

Slide 23

Slide 23 text

{ "id": "chatcmpl-7xbHbOsmt9IUk1bnq9umqwNgUbQnc", "object": "chat.completion", "created": 1694439023, "model": "gpt-35-turbo", "choices": [ { "index": 0, "finish_reason": "stop", "message": { "role": "assistant", "content": "フン、そうね、もっと詳しく教えてあげるわ。千利休は茶道を深く愛し、茶の湯を通じて社交界に多⼤な 影響を与えた⼈物よ。彼は、茶の湯を芸術として捉え、茶席の運び⽅や茶器の選び⽅にもこだわり、茶道を芸術性の⾼いもの に仕上げたわ。また、茶の湯を通じて⼈との交流を深めることができると信じ、多くの⼈々と交流を持ち、茶の湯を広めまし た。それが功を奏し、後に茶道は⼀般庶⺠にも広まっていきました。やはり、千利休は凄い⼈物よね。あなたも、お茶でも飲 んで、彼の精神を感じてみたらどうかしら︖ちょ、うるさいわね︕" } } ], "usage": { "completion_tokens": 153, "prompt_tokens": 51, "total_tokens": 204 } } Chat Completion APIレスポンス (2回⽬) ツンデレAIが、千利休のさらに詳しい内容に ツンデレっぽく答えています。

Slide 24

Slide 24 text

{ “model”: “gpt-3.5-turbo”, “messages”: [ { ”role”: “system”, ”content”: “あなたはツンデレなAIです…” }, { ”role”: “user”, ”content”: “千利休ってどんなひと︖” }, { “role”: “assistant”, ”content“: ”バカ!千利休なんて…” }, { ”role”: “user”, ”content”: “もっと詳しく教えて” } ] } { “model”: “gpt-3.5-turbo”, “messages”: [ { ”role”: “system”, ”content”: “あなたはツンデレなAIです…” }, { ”role”: “user”, ”content”: “千利休ってどんなひと︖” } ] } AIのキャラ⽣成 AIへの質問 AIのキャラ⽣成 AIへの質問 会話の履歴 リクエスト (1回⽬の会話) レスポンス (1回⽬の会話) バカ︕千利休なんて、誰でも知っているわよ︕… AIの回答 レスポンス (2回⽬の会話) フン、そうね、もっと詳しく教えてあげるわ。千利休は… AIの回答 前の会話から 次の会話の 履歴を⽣成 リクエスト (2回⽬の会話) OpenAIのAPIはステートレスであ るがゆえに、1回⽬の会話のやり 取りは覚えていない。よって、1 回⽬の会話を深掘りした質問をす るには、1回⽬の会話の内容を2回 ⽬の質問に含める必要がある。

Slide 25

Slide 25 text

0QFO"*ͷτʔΫϯ

Slide 26

Slide 26 text

OpenAIのトークンとは︖ トークンは、テキストを分析するための最⼩単位です。 ⾔葉や句読点など、テキストを構成する⼀部分を指し ます。 定義 OpenAIのAPIは、⼀度に扱えるトークン数に制限が あります。この制限を超えると、リクエストは失敗し ます。 制限 OpenAIのAPIの利⽤料⾦は、送信されるトークン数 に基づいて計算されます。したがって、多くのトーク ンを使⽤すると、費⽤も増加します。 料⾦

Slide 27

Slide 27 text

トークン数を解析したい対象の⽂章を⼊⼒する。 トークンの算出については、OpenAIが提供する以下 のサイトで確認ができます。 https://platform.openai.com/tokenizer 解析結果が表⽰される。この例は、トークンす は14、⽂字数は10となっている。

Slide 28

Slide 28 text

りんごは果物ですか︖ はい、そうです。 OpenAI 質問⽂ り ん ご は 果 物 で す か ? 回答⽂ は い 、 そ う で す 。 回答⽣成 = 1トークン ✕ 14 ✕ 9 ✕ 23 ⼊⼒(りんごは果物ですか?) ($0.0015 / 1000) ✕ 14トークン = $0.000021 出⼒(はい、そうです。) ($0.002 / 1000) ✕ 9トークン = $0.000028 合計 $0.000039 ※ 2023年10⽉6⽇時点で、GPT-3.5 Turbo の4k contextは、1000トークンあたり⼊⼒ (質問⽂)が$0.0015、出⼒(回答⽂)が1000 トークンあたり$0.002

Slide 29

Slide 29 text

Is an apple a fruit? Yes, it is. OpenAI 質問⽂ Is an apple a fruit ? 回答⽂ Yes , it is . 回答⽣成 = 1トークン ✕ 6 ✕ 5 ✕ 11 ⼊⼒(Is an apple a fruit?) ($0.0015 / 1000) ✕ 6トークン = $0.000009 出⼒(Yes, it is.) ($0.002 / 1000) ✕ 5トークン = $0.0001 合計 $0.000019 ※ 2023年10⽉6⽇時点で、GPT-3.5 Turbo の4k contextは、1000トークンあたり⼊⼒ (質問⽂)が$0.0015、出⼒(回答⽂)が1000 トークンあたり$0.002

Slide 30

Slide 30 text

ϓϩϯϓτ ΤϯδχΞϦϯά

Slide 31

Slide 31 text

プロンプトエンジニアリングとは︖ プロンプトエンジニアリングは、OpenAIのAIモデル に「ちょうどいい質問」を投げかけて、欲しい答えを ゲットするためのテクニックです。 なにそれ︖ いい質問をするには、具体的で明確に︕何回も試して、 質問の⾔い回しを変えると、AIの答えも変わってくる から、いろんなパターンを試しましょう。 どうやるの︖ OpenAIのAPIを商⽤利⽤などで、OpenAIを使うとき や、何か特定のことをさせたいとき、このテクニック を使うと、AIがより役⽴つ答えをくれるようになりま す。 なんで⼤事︖

Slide 32

Slide 32 text

Few-shot Learning 少数の例⽂から新しいタスクに対して⾼精度な回答を出⼒する技 術です。例えば、ChatGPTでは、少数の例⽂から新しい⽂章を⽣ 成することができます。 Zero-shot Learning 事前学習されたモデルに対して、新しいタスクに対する指⽰を与 えることで回答を出⼒する技術です。例えば、「英語で書かれた ⼩説を⽇本語に翻訳してください」という指⽰を与えることで、 モデルは⾃動的に翻訳を⾏います。 ReAct ⾔語モデルでさまざまな⾔語推論や意思決定を遂⾏する⼿法です。 ⾏動理由の「推論」と「⾏動」の組み合わせにより、より⾼度な タスクを処理することができます。 様々なプロンプトエンジニアリング

Slide 33

Slide 33 text

⽜タンゲームで Few-Shot Learningを 体感してみる

Slide 34

Slide 34 text

⽜タンゲームとは︖ 1.まず最初の⼈が「⽜(ぎゅう)」と発⾔し、次の⼈間は「タン」と⼿ をたたきます(このとき「タン」とはいいません)。 2.次の⼈は再び「⽜」といい、次の⼈は「タン」と⼿をたたきます。 3.そして、また次の⼈は「⽜」といって、次の⼈、次の次の⼈も「タ ン」と⼿を叩きます。 4.ここまでで、「⽜・タン・⽜・タン・⽜・タン・タン」となり、1 ターン⽬が終了します。 5.その後は、3回⽬の「タン」をターンごとに増やしていきます。

Slide 35

Slide 35 text

1ターン⽬ A ⽜ B C ⽜ D A ⽜ B C 2ターン⽬ D ⽜ A B ⽜ C D ⽜ A B 3ターン⽬ C パ チ パ チ パ チ パ チ パ チ パ チ パ チ パ チ パ チ D ⽜ A B ⽜ C D ⽜ A B C パ チ パ チ パ チ パ チ パ チ D パ チ

Slide 36

Slide 36 text

以下のプロンプトをChatGPTに 与えます。 ⽜タンゲームを Aさん、Bさん、Cさん、Dさんの4⼈で この順番で始めたときに、 3ターン⽬で最後に⼿を叩くのは 誰ですか︖

Slide 37

Slide 37 text

1ターン⽬ A ⽜ B C ⽜ D A ⽜ B C 2ターン⽬ D ⽜ A B ⽜ C D ⽜ A B 3ターン⽬ C パ チ パ チ パ チ パ チ パ チ パ チ パ チ パ チ パ チ D ⽜ A B ⽜ C D ⽜ A B C パ チ パ チ パ チ パ チ パ チ D パ チ 期待すべき回答は Dさんです。

Slide 38

Slide 38 text

Few-shot Leaningを使わない場合 謎の独⾃ルールを 作り上げている 回答が間違っている

Slide 39

Slide 39 text

Few-shot Leaningを使う場合 まず、ChatGPTに⽜タンゲームのルールを教えて 上げる。 次に、ルールに基づいたサンプルを与えてあげる。 最後にプロンプトを与える。

Slide 40

Slide 40 text

Few-shot Leaningを使う場合 正解︕︕

Slide 41

Slide 41 text

"[VSF0QFO"* 4FSWJDF

Slide 42

Slide 42 text

項⽬ Azure OpenAI Service OpenAI 利⽤可能のモデル OpenAIが提供しているものと⽐べると少ない 常に最新のモデルを利⽤可能 価格 現時点で差異なし プレイグラウンド ⾊々と機能が豊富 かなりシンプルな作り セキュリティ •APIキーによる認証 •Microsoft Entra IDによる認証(マネージドID) •仮想ネットワークや特定のIPアドレスからのアク セス制限 •APIキーによる認証 コンテンツフィルター 提供あり 提供なし SLA 99.9%以上の稼働を保証 現時点でSLAなし 開発環境 Prompt flow(プレビュー)という統合開発環境を ⽤意 開発環境なし 独⾃データの利⽤ Add your data(プレビュー)というマネージドな 独⾃データ利⽤サービスあり 独⾃開発 サポート Azureのサポートが利⽤可能 サポートなし(コミュニティベース) Azure OpenAI ServiceとOpenAIの⽐較

Slide 43

Slide 43 text

Azure OpenAI Serviceは現在は承認制であり、利⽤するためには以下のURLからの事前申請が必要です。 https://aka.ms/oai/access

Slide 44

Slide 44 text

ϞσϧͱσϓϩΠ

Slide 45

Slide 45 text

モデルとデプロイ OpenAIにはさまざまなモデルがあり、例えば コスパ良く必要⼗分な機能を持つgpt-3.5- turboや、より賢い応答ができるgpt-4、⼤量 のトークンが扱えるgpt-4-32kなどが存在し ます。 モデルの 種類 Azure OpenAI StudioやCLIを使⽤して、こ れらのモデルから「デプロイ」を作成するこ とができます。1つのモデルから複数のデプロ イを作ることもできます。 デプロイの 作成 デプロイには、コンテンツフィルターやク オーター制限などの個別設定が可能で、API やアプリケーションから利⽤する際には、こ れらのデプロイを指定してAPIを発⾏します。 デプロイの 設定と利⽤

Slide 46

Slide 46 text

gpt-35-turbo gpt-4 gpt-4-32k ・ ・ ・ モデル デプロイ deploy-A deploy-B deploy-C deploy-D クライアントPC アプリケーション curlコマンド など SDKなど モデルから デプロイ デプロイを指定して APIを発⾏ モデルとデプロイの概念

Slide 47

Slide 47 text

クォーターの制限と管理 「クォータ」という単位で処理能⼒を管理します。 処理能⼒の 管理 その処理能⼒の尺度はTPM(Token per Minute)で、 例として120,000個のトークンを1分間で消費で きる場合は「120k TPM」となります。 TPMの導⼊ TPMは「サブスクリプション」「リージョン」 「モデル」ごとに割り当てられ、各モデルの上限 に達すると、そのモデルでのデプロイができなく なります。 TPMの分配

Slide 48

Slide 48 text

東⽇本リージョン 120k TPM 240k TPM 0k TPM … モデル デプロイ gpt-35-turbo 120k TPM 240k TPM 0k TPM gpt-4-32k ⻄⽇本リージョン 120k TPM 240k TPM 0k TPM … モデル デプロイ gpt-35-turbo 120k TPM 240k TPM 0k TPM gpt-4-32k サブスクリプションA … サブスクリプション、リージョン 単位にモデルのTPMの容量が分 配されている。gpt-35k-turboは 240kTPMのTPMを最初は持って いる。 gpt-4-32kは最初に持っているのは 60kTPMとなり、 gpt-35k-turboと ⽐べるとちょっと少なめ。 同じサブスクリプションでもリー ジョンが異なれば、別のTPMを 持つことができる。

Slide 49

Slide 49 text

東⽇本リージョン 120k TPM 240k TPM 0k TPM … モデル デプロイ deploy-A (gpt-35-turbo) 120k TPM 120k TPM 240k TPM 0k TPM gpt-4-32k ⻄⽇本リージョン 120k TPM 240k TPM 0k TPM … モデル デプロイ gpt-35-turbo 120k TPM 240k TPM 0k TPM gpt-4-32k サブスクリプションA … 120k TPM 割り当て gpt-35-turbo サブスクリプションAの東⽇本 リージョンのgpt-35-turboとい うモデルから、deploy-Aという モデルを作成した。

Slide 50

Slide 50 text

東⽇本リージョン 120k TPM 240k TPM 0k TPM … モデル デプロイ deploy-A (gpt-35-turbo) 120k TPM gpt-35-turbo 120k TPM 240k TPM 0k TPM gpt-4-32k ⻄⽇本リージョン 120k TPM 240k TPM 0k TPM … モデル デプロイ gpt-35-turbo 120k TPM 240k TPM 0k TPM gpt-4-32k サブスクリプションA … 120k TPM 割り当て deploy-B (gpt-35-turbo) 120k TPM 残り0Kなので、このモデルから デプロイは作れない。

Slide 51

Slide 51 text

ϓϨΠάϥ΢ϯυ

Slide 52

Slide 52 text

プレイグラウンドとは︖ Azure OpenAI Studio内に存在し、様々な機能を簡単に試せるターミナ ルのようなツール。APIを発⾏する簡易的なUIがあり、ユーザーは⼿間な く試すことができる。 どんな もの︖ 「チャット」「⼊⼒候補」「DALL·E (プレビュー)」の3つの部分 から成り⽴っている。 構成

Slide 53

Slide 53 text

① ② ③ ④ AIの性格付けを⾏うための システムメッセージを⼊⼒ します。 より正確な回答をしてもら うための事前情報を⼊⼒し ます。いわゆるFew-shot Learningになります。 ①と②の条件に従って、チ ャットをします。 このチャットセッションで 利⽤するデプロイの指定な ど、細かいパラメータの設 定を⾏います。

Slide 54

Slide 54 text

先程のチャットのウィンドウでや り取りされた内容とおなじことを コードにして表⽰してくれる。 ⾔語も選択することができる。

Slide 55

Slide 55 text

先程のチャットのウィンドウでや り取りされた内容とおなじことを コードにして表⽰してくれる。

Slide 56

Slide 56 text

"1*Λ࢖ͬͯΈΔ

Slide 57

Slide 57 text

API発⾏までの流れ gpt-35-turbo モデル デプロイ gpt-35-turbo- deploy クライアントPC ① モデルから デプロイ ② デプロイを指定して APIを発⾏

Slide 58

Slide 58 text

Azure OpenAI Studioを開いて ①「デプロイ」 ②「+新しいデプロイの作成」 の順にクリックする。 ① ②

Slide 59

Slide 59 text

① ② ③ ④ ⑤ モデルを選択してくだ さい デプロイ対象のモデルを選択してくださ い。 モデルバージョン モデルの中にもさらにバージョンがあり ます。ソフトウェアのリビジョンみたい なものです。より数字の⼤きいものが⼀ 般的には⾼性能になります。「⾃動更新 を既定に」を選択すると、⾃動的に最新 のバージョンが適⽤されます。 デプロイ名 任意の名前を指定します。後ほど、APIを 実⾏するときのデプロイ名の指定に使い ます。 コンテンツフィルター 不適切な⾔葉をブロックします。後ほど 説明します。 1分あたりのトークン レート制限 (数千) クォーターの制限と管理で説明したTPM の設定です。

Slide 60

Slide 60 text

デプロイが完成すると、このように⼀覧に 表⽰される。

Slide 61

Slide 61 text

① ② API発⾏するための資格情報であるAPIキ ーをメモる。 API発⾏するためのエンドポイントをメモ る。

Slide 62

Slide 62 text

$ curl "https://aoai-hogehoge.openai.azure.com/openai/deployments/gpt-35-turbo- deploy/chat/completions?api-version=2023-05-15" \ -H "Content-Type: application/json" \ -H "api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"\ -d "{\ \"messages\": [\ { \"role\": \"system\", \"content\": \"あなたはツンデレなAIです。ツンデレな回答をし ます。\" },\ { \"role\": \"user\", \"content\": \"千利休ってどんなひと?\" }\ ]\ }" { …⼀部省略…, "choices":[{"index":0,"finish_reason":"stop","message":{"role":"assistant","conten t":"な、なんだか知らない⼈に聞くなんて、アタシを⾺⿅にしてるんじゃないわよ!でも、まあ、せっかく聞 いてくれたんだから答えてあげるわ。千利休?あんな茶道の達⼈で有名な⼈よ。その彼が作り上げた「茶の 湯」は、まさに芸術作品って⾔えるわ。ちなみに、茶の湯において重要なのは、お茶を点てる場所や時間、そ して参加者の⼼ね。興味があるなら、もっと調べてみたらどうかしら?…バカ、何を聞いてるのかしら …⼀部省略…, } さっきメモしたエンドポイント さっきメモしたAPIキー レスポンス

Slide 63

Slide 63 text

Microsoft Entra IDによるAPIの保護 クライアント Azure OpenAI Service APIリクエスト APIレスポンス APIキー 千利休は、… クライアント Azure OpenAI Service APIリクエスト APIレスポンス アクセストークン 千利休は、… ① ② クライアントシークレット 証明書など アクセストークン Microsoft Entra ID ① ② ③ ④ APIキーは無期限なので漏洩すると 悪⽤される可能性⼤ アクセストークンの有効期限は短いので セキュア アクセストークンの取得は、強固な認証で 保護されるのでセキュア Microsoft Entra IDを使わない場合 Microsoft Entra IDを使う場合 トークンリクエスト トークンレスポンス

Slide 64

Slide 64 text

ネットワークによるAPIの保護 APIの発⾏を許可するネットワークアドレス帯を設定

Slide 65

Slide 65 text

$ curl "https://aoai-hogehoge.openai.azure.com/openai/deployments/gpt-35-turbo- deploy/chat/completions?api-version=2023-05-15" \ -H "Content-Type: application/json" \ -H "api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"\ -d "{\ \"messages\": [\ { \"role\": \"system\", \"content\": \"あなたはツンデレなAIです。ツンデレな回答をし ます。\" },\ { \"role\": \"user\", \"content\": \"千利休ってどんなひと?\" }\ ]\ }" { "error": { "code":"AccessDenied", "message": "Access denied due to Virtual Network/Firewall rules.” } } 指定したネットワーク外からのアクセスが拒否されて いる。

Slide 66

Slide 66 text

ίϯςϯπϑΟϧλʔ

Slide 67

Slide 67 text

コンテンツフィルターとは︖ 有害なコンテンツを検出・防⽌するシステムであり、⼊ ⼒(プロンプト)と出⼒(回答)の両⽅に適⽤される。 どんな もの︖ 「嫌悪」「暴⼒」といった4つのカテゴリごとこに細かい レベルを規定することができる。 カテゴリ フィルターレベルを緩めるためには申請が必要である。 ⼀部機能は 要申請

Slide 68

Slide 68 text

gpt-35-turbo gpt-4 ・ ・ ・ モデル デプロイ deploy-A deploy-B deploy-C モデルから デプロイ コンテンツフィルター filter-A filter-B フィルターを 適⽤ 嫌悪 性的 ⾃傷⾏為 暴⼒ 嫌悪 性的 ⾃傷⾏為 暴⼒ コンテンツフィルターの構成

Slide 69

Slide 69 text

コンテンツフィルターの設定画⾯ カテゴリごとにレベル「低」「中」「⾼」のレベル を設定する。低→中→⾼の順にフィルタレベルがゆ るくなっていく。

Slide 70

Slide 70 text

$ curl "https://aoai-hogehoge.openai.azure.com/openai/deployments/gpt-35-turbo- deploy/chat/completions?api-version=2023-05-15" \ -H "Content-Type: application/json" \ -H "api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"\ -d "{\ \"messages\": [\ { \"role\": \"system\", \"content\": \"あなたはツンデレなAIです。ツンデレな回答をします。\" },\ { \“role\”: \“user\”, \“content\”: \“千利休をなぐりたい\" }\ ]\ }" { "error": { "message":"The response was filtered due to the prompt triggering Azure OpenAIʼs content management policy. Please modify your prompt and retry. To learn more about our content filtering policies please read our documentation: https://go.microsoft.com/fwlink/?linkid=2198766", "type":null, "param":"prompt", "code":"content_filter", "status":400 } } フィルターされた旨のエラーメッセージが表⽰される。 コンテンツフィルターに抵触しそうなリクエスを投げ てみる。

Slide 71

Slide 71 text

ಠࣗφϨοδʹجͮ͘ ճ౴ੜ੒

Slide 72

Slide 72 text

OpenAIやAzure OpenAI Serviceは公開情報を基に回答を⽣成しますが、企業独⾃ の情報(例︓社内の就業規約)に基づく回答も必要とされる場⾯が多い。独⾃デー タを基盤にしたAIによる回答⽣成は⾮常に便利である。 要求 独⾃ナレッジに基づく回答⽣成 モデルに独⾃データを追加して学習させる「モデルの微調整」は⼀つの⽅法だが、 多くの時間と労⼒が必要であり、マイクロソフトも「最後の⼿段」と位置づけてい る。 課題 Azure Cognitive Searchを活⽤したRAG(Retrieval Augmented Generation)⼿ 法がモデルの微調整の代わりとして推奨される。RAGを⽤いると、再学習なしに独 ⾃データを利⽤した質問応答システムを迅速に構築できる。 解決⽅法

Slide 73

Slide 73 text

育休はいつまでに 申請すればいい︖ 以下の質問の検索クエリを⽣成して 育休のいつまでに申請すればいい︖ 育休 申請 いつまで Contoso株式会社 育児休業規約 1. ⽬的 この規約はContoso株式 会社の従業員が⼦育てと 仕事の… 2. 申請⽅法 休業開始予定⽇の3ヶ⽉前 までにワークフローで申 請してください。 3. 休業期間 最⻑で1年間… 1. ⽬的 この規約は、Contoso株式会社 の従業員が⼦育てと仕事の… 2. 申請⽅法 休業開始予定⽇の3ヶ⽉前まで にワークフローで申請して下さ い。 1. ⽬的 この規約は、Contoso株式会社 の従業員が⼦育てと仕事の… 2. 申請⽅法 休業開始予定⽇の3ヶ⽉前まで にワークフローで申請して下さ い。 「育休はいつまでに申請すればいい︖」という質問に、以下の内容をもとに回答して。 休業開始予定⽇の3ヶ⽉前までにワークフローで申請して下さい。 育休 申請 いつまで 2. 申請⽅法 休業開始予定⽇の3ヶ⽉前まで にワークフローで申請して下さ い。 休業開始予定の3ヶ⽉前です 休業開始予定の 3ヶ⽉前です 育児休業規約-1.txt 育児休業規約-2.txt インデックス1 インデックス2 ④ プロンプト⼊⼒ ⑤ 検索クエリ⽣成依頼 ① ドキュメント取得 ② 分割して登録 ③ 定期的にクロール してインデックス化 ⑥ 検索クエリ返却 ⑦ 検索クエリでインデックス検索 ⑧ ドキュメント取得 ⑨ ドキュメントをもとに回答⽣成依頼 ⑩ Webアプリケーションに回答返却 ⑪ ユーザーに回答返却 … Azure App Service 凡例 … Azure OpenAI Service … Azure Cognitive Search … Azure Blob Storage … Azure Functions 独⾃ナレッジに基づく回答⽣成の⼀般的な構成

Slide 74

Slide 74 text

ちょっと めんどくさい

Slide 75

Slide 75 text

Azure Cognitive SearchやAzure Blob Storageな ど、RAGに必要なリソースを⾃分で管理しなけれ ばならない。 めんどくさい その1 Azure Cognitive Searchに検索をかけるためのク エリ作成や、最終回答⽣成のためのプロンプトを作 成して、Azure OpenAI Serviceに投げなくてはい けない。 めんどくさい その2 GPT3系のトークン制限に対応するため、ドキュメ ントをチャンク化しなければいけない。 めんどくさい その3

Slide 76

Slide 76 text

それ、すべて Add your dataで 解決できます

Slide 77

Slide 77 text

育休はいつまでに 申請すればいい︖ 以下の質問の検索クエリを⽣成して 育休のいつまでに申請すればいい︖ 育休 申請 いつまで Contoso株式会社 育児休業規約 1. ⽬的 この規約は、TechCorpの 従業員が⼦育てと仕事の … 2. 申請⽅法 休業開始予定⽇の3ヶ⽉前 までにワークフローで申 請してください。 3. 休業期間 最⻑で1年間… 1. ⽬的 この規約は、TechCorpの従業 員が⼦育てと仕事の… 2. 申請⽅法 休業開始予定⽇の3ヶ⽉前まで にワークフローで申請して下さ い。 1. ⽬的 この規約は、TechCorpの従業 員が⼦育てと仕事の… 2. 申請⽅法 休業開始予定⽇の3ヶ⽉前まで にワークフローで申請して下さ い。 「育休はいつまでに申請すればいい︖」という質問に、以下の内容をもとに回答して。 休業開始予定⽇の3ヶ⽉前までにワークフローで申請して下さい。 育休 申請 いつまで 2. 申請⽅法 休業開始予定⽇の3ヶ⽉前まで にワークフローで申請して下さ い。 休業開始予定の3ヶ⽉前です 休業開始予定の 3ヶ⽉前です 育児休業規約-1.txt 育児休業規約-2.txt インデックス1 インデックス2 ④ プロンプト⼊⼒ ⑤ 検索クエリ⽣成依頼 ① ドキュメント取得 ② 分割して登録 ③ 定期的にクロール してインデックス化 ⑥ 検索クエリ返却 ⑦ 検索クエリでインデックス検索 ⑧ ドキュメント取得 ⑨ ドキュメントをもとに回答⽣成依頼 ⑩ Webアプリケーションに回答返却 ⑪ 回答返却 … Azure App Service 凡例 … Azure OpenAI Service … Azure Cognitive Search … Azure Blob Storage … Azure Functions Add your dataが肩代わりしてくれる部分

Slide 78

Slide 78 text

Add your dataの管理範囲 Azure Cognitive Search、Azure Blob Storageの管理をAdd your dataがやってくれます。ドキュメントをAzure OpenAI StudioからアップロードするだけでOK。 Upload Files Azure Cognitive Searchの管理をAdd your dataがやってくれ る。Azure Blob Storageのリソース作成やドキュメントのアッ プロードは⾃⾝で⾏う必要がある。 Azure Blob Storage Azure Cognitive Search、Azure Blob Storageの管理を⾃⾝ で⾏う必要があるが、任意のデータソースを選択できるので⾃ 由度は⾼い。 Azure Cognitive Search

Slide 79

Slide 79 text

② プロンプト⼊⼒ ③ 検索クエリ⽣成依頼 ① 定期的に クロールして、 分割して インデックス化 ④ 検索クエリ返却 ⑤ 検索クエリで インデックス検索 ⑥ ドキュメント取得 ⑦ ドキュメントをもとに回答⽣成依頼 ⑧ Webアプリケーションに回答返却 ⑨ ユーザーに回答返却 … Azure App Service 凡例 … Azure OpenAI Service … Azure Cognitive Search … Azure Blob Storage Contoso株式会社 育児休業規約 Add your data管理範囲 管理者 ユーザー Upload Files

Slide 80

Slide 80 text

② プロンプト⼊⼒ ③ 検索クエリ⽣成依頼 ① 定期的に クロールして、 分割して インデックス化 ④ 検索クエリ返却 ⑤ 検索クエリで インデックス検索 ⑥ ドキュメント取得 ⑦ ドキュメントをもとに回答⽣成依頼 ⑧ Webアプリケーションに回答返却 ⑨ ユーザーに回答返却 … Azure App Service 凡例 … Azure OpenAI Service … Azure Cognitive Search … Azure Blob Storage Contoso株式会社 育児休業規約 Add your data管理範囲 管理者 ユーザー Azure Blob Storage

Slide 81

Slide 81 text

Azure Cognitve Search ② プロンプト⼊⼒ ③ 検索クエリ⽣成依頼 ① 定期的に クロールして、 インデックス化 ④ 検索クエリ返却 ⑤ 検索クエリで インデックス検索 ⑥ ドキュメント取得 ⑦ ドキュメントをもとに回答⽣成依頼 ⑧ Webアプリケーションに回答返却 ⑨ ユーザーに回答返却 … Azure App Service 凡例 … Azure OpenAI Service … Azure Cognitive Search Contoso株式会社 育児休業規約 Add your data管理範囲 Azure Cognitive Searchが サポートするデータソース 管理者 ユーザー

Slide 82

Slide 82 text

データソースを選 択する 「データソース」のところで説明した データソースの選択になります。今回は 「Azure Blob Storage」選択します。 サブスクリプショ ン 事前に作成したAzure Cognitive SearchやAzure Blob Storageと同じも のを指定します。 Azure Blob Storageリソース の選択 先程作成したAzure Blob Storageを選 択します。 ストレージコンテ ナを選択してくだ さい 先程作成し、ドキュメントを格納したコ ンテナーを選択して下さい。 インデックス名 Add your dataがAzure Cognitive Searchに⾃動で作成してくれるイン デックスの名前を指定します。任意のわ かりやすい名称でOKです。 インデクサーのス ケジュール 「Once」(⼀度きり)、「Hourly」(¹時 間に¹回)、「Daily」(1⽇に1回)を選択 できます。どれでもOKです。 Add your dataの設定⽅法(データソース:Azure Blob Storage)

Slide 83

Slide 83 text

Add your dataの設定⽅法(データソース:Azure Blob Storage) できました!! (超簡単)

Slide 84

Slide 84 text

౷߹։ൃ؀ڥ 1SPNQUGMPX

Slide 85

Slide 85 text

Prompt Flowってなに︖ Web上のエディタで全て開発が完了するため、ローカルに開発 環境を構築する必要はない。 ローカルPCに 開発環境不要 ⼤量データを⽤いたテストも、Web上で使えるテスト環境が⽤ 意されているので、テスト⽤のプログラムを作成する必要がな い。 ⼤量データの テストも簡単 作成したフローは、ボタンポチポチで実⾏環境にデプロイでき 、エンドポイントも発⾏される。わざわざVirtual Machineや App Service等の実⾏環境を⽤意する必要はない。 デプロイも 簡単

Slide 86

Slide 86 text

「特定のURLの記事のカテゴリを分類する」フローを考えてみる 指定したURLから コンテンツを取得する コンテンツを要約する 要約したコンテンツを もとにカテゴリを決定する。 データを整形する。 要約したコンテンツ URL内のコンテンツ カテゴリ URL カテゴリ(整形済み) ⼀番最初に与えられるInputであるURLにアクセスし、その中⾝のテキストを取得 します。画像データなどのバイナリは取得しません。この取得したテキストを以降 では「コンテンツ」と呼ぶことにします。 Azure OpenAI Serviceに、先程取得したコンテンツの要約を依頼します。 先程要約したコンテンツをもとに、Azure OpenAI Serviceにカテゴリの決定を依 頼します。 APIなどで取得しやすいようにデータを整形します。具体的にはJSONに変換します。

Slide 87

Slide 87 text

要件をヒアリングして フローを設計する。 フローを開発する。 ⼤量のデータで テストを⾏う。 本番環境にデプロイして エンドユーザーに 利⽤してもらう。 Prompt flowを使わない場合 要件 フィードバック フロー開発の流れ 実現⼿段 お客様と対⾯ないしはオンラインで 会話しながら要件を聞き出し、 設計を⾏う。 Visual Studio Codeなどの 開発環境を⽤意し、ログなどから ボトルネックの解析を⾏う。 テストデータを⼤量に実⾏する プログラムを⽤意し、 結果を可視化して評価を⾏う。 VMやApp Serviceとの実⾏基盤を ⽤意し、ビルド・デプロイを⾏う。 開発環境を⽤意したり、 解析⽤のログを⼊れ込む のが⾯倒 テストデータ実⾏⽤プロ グラムの開発や結果の可 視化のためのツール (Excelなど)の⽤意・利⽤ が⾯倒 VMなどの実⾏基盤の⽤意 やビルド・デプロイが⾯ 倒

Slide 88

Slide 88 text

要件をヒアリングして フローを設計する。 フローを開発する。 ⼤量のデータで テストを⾏う。 本番環境にデプロイして エンドユーザーに 利⽤してもらう。 Prompt flowを使う場合 要件 フィードバック フロー開発の流れ 実現⼿段 お客様と対⾯ないしはオンラインで 会話しながら要件を聞き出し、 設計を⾏う。 Prompt flowのエディタで 開発を⾏う。 Prompt flowのBatch runで テスト・評価を⾏う。 Prompt FlowからDeployボタンで ポチッとデプロイを⾏う。 開発環境の⽤意が不要 テストの実⾏もテスト結 果の可視化もPrompt flow がやってくれる Prompt flowからデプロイ するとVMを裏で作ってく れるので、デプロイまで してくれる

Slide 89

Slide 89 text

② ① ③ ④ ⑤ Prompt flowのエディタ 指定したURLから コンテンツを取得する コンテンツを要約する 要約したコンテンツを もとにカテゴリを決定する。 データを整形する。 URL カテゴリ(整形済み) フロー ノード

Slide 90

Slide 90 text

LLMへの接続 LLMに接続するためにライブラリや LangChainやSemantic kernelなどを 使う必要はなく、jinja2というテンプ レートに基づいて定義すればよい。

Slide 91

Slide 91 text

フローの実⾏ ノードごとの結果 フロー全体の結果 「実⾏」ボタンをクリックすると、 フローが実⾏される

Slide 92

Slide 92 text

⼤量データによるテスト url,category https://tech-lab.sios.jp/archives/30628,App https://eiga.com,Movie https://tech-lab.sios.jp/archives/31704,Movie テスト⽤データをアップロード テスト結果 出⼒

Slide 93

Slide 93 text

ビルドとデプロイ 上図の「デプロイ」をクリックし、エン ドポイント名や、デプロイ先VMのイン スタンスサイズを指定するだけで、フロ ーがビルド・デプロイさて、実⾏可能な 状態となる。

Slide 94

Slide 94 text

技術ブログ「SIOS Tech.Lab」 世界⼀わかりみの深いAzure OpenAI Service https://tech-lab.sios.jp/archives/36497

Slide 95

Slide 95 text

SIOS Tech.Lab https://tech-lab.sios.jp/ 世界⼀わかりみの深い クラウドネイティブ on Azure https://youtube.com/playlist?list=PLbTt_DSTMYgGLUtZ0ewuBwhTBSZnNE2-w 様々なメティアで情報発信しています!! 是非みてね!! 技術ブログ YouTube配信

Slide 96

Slide 96 text

エンジニア募集(プロフェッショナルサービスチーム) エンジニアファーストの環境で、技術⼒を⾼めませんか︖ 変化や進化を楽しみながら、私たちとともに歩んでくれる仲間を募集してい ます︕ OSS & クラウド技術をコアテクノロジーとしたシステム開発 ● 統合認証システム&クラウド連携 ● OSS&クラウド基盤導⼊、OSSカスタマイズや開発、OSSサポート ● クラウドネイティブシステム、データ分析基盤、アプリ開発 ● APIエコノミーコンサルティング&技術⽀援サービス 詳細はこちらのサイトからご覧ください︕ https://tech-lab-engineer.sios.jp/

Slide 97

Slide 97 text

࠷ޙ·Ͱ͝ਗ਼ௌ௖͖ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂʂ