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

世界一わかりみの深いAzure OpenAI Service/wakarimiaoai

世界一わかりみの深いAzure OpenAI Service/wakarimiaoai

生成AIは、機械学習モデルを用いて新しいデータやテキストを生成する技術のことを指します。具体的な例としては、ChatGPTのように与えられた質問やトピックに基づき、リアルタイムで文章を生成するものが挙げられます。これにより、人間らしいテキスト応答や記事の自動生成などが可能となり、みなさまの業務の生産性は爆上げしたことかと思います。

Azureは、OpenAIが開発したこの生成AIをベースに、エンタープライズ向けサービスとして「Azure OpenAI Service」をリリースしました。このサービスは、OpenAIの先進的な技術を継承しつつ、Azureの信頼性と統合された環境を提供します。SLAのサポートや、コンテンツフィルターによる内容の最適化、統合開発環境での迅速なデプロイメントなど、エンタープライズ向けの強化機能が特徴です。

本資料では、生成AIやOpenAIの基礎概念、Azure OpenAI Serviceの基本機能のみならず、Azure OpenAI Serviceの開発を効率化する統合開発環境「Prompt Flow」や、独自のナレッジを用いて回答を生成出来る「Add your data」などの最新の機能についてもわかりみ深く解説します。

Noriyuki TAKEI

October 31, 2023
Tweet

More Decks by Noriyuki TAKEI

Other Decks in Technology

Transcript

  1. Noriyuki TAKEI ෢Ҫ ٓߦ Information • サイオステクノロジー株式会社 • Microsoft MVP

    for Microsoft Azure Favorites • Azure • パデル • スキー • ライブ配信 • ⽢いもの • ⾛ること blog https://tech-lab.sios.jp/ core skill Azureによるクラウドネイティブな アプリ開発 Twitter @noriyukitakei
  2. 代表的な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
  3. 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で投げかけられた質問に対する回答を⼊⼒します。
  4. 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 } }
  5. $ 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への質問(プロンプト)を 設定しています。
  6. { "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が、ツンデレっぽい回答を返 してくれています。
  7. ツンデレなキャラで回答を返すAI AIのキャラ 1. ユーザーがAIに「千利休ってどんな⼈︖」と尋ねる。 2. 1の質問にAIが答える。 3. ユーザーはAIに、2の回答に対して「もっと詳しく教え て」と尋ねる。 AIとの会話の

    シナリオ さらに複雑なAPIを試してみます。 以下の要件を満たすAPIを発⾏します。 先程ご紹介したものから、この部分が追 加になっています。
  8. $ 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への質問(プロンプト)を 設定しています。 さっきと同じ
  9. { "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が、ツンデレっぽい回答を返 してくれています。 さっきと同じ
  10. $ 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回⽬の回答の内容を設定しています 。
  11. { "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が、千利休のさらに詳しい内容に ツンデレっぽく答えています。
  12. { “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回 ⽬の質問に含める必要がある。
  13. りんごは果物ですか︖ はい、そうです。 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
  14. 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
  15. 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 パ チ
  16. 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さんです。
  17. 項⽬ 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の⽐較
  18. モデルとデプロイ OpenAIにはさまざまなモデルがあり、例えば コスパ良く必要⼗分な機能を持つgpt-3.5- turboや、より賢い応答ができるgpt-4、⼤量 のトークンが扱えるgpt-4-32kなどが存在し ます。 モデルの 種類 Azure OpenAI

    StudioやCLIを使⽤して、こ れらのモデルから「デプロイ」を作成するこ とができます。1つのモデルから複数のデプロ イを作ることもできます。 デプロイの 作成 デプロイには、コンテンツフィルターやク オーター制限などの個別設定が可能で、API やアプリケーションから利⽤する際には、こ れらのデプロイを指定してAPIを発⾏します。 デプロイの 設定と利⽤
  19. gpt-35-turbo gpt-4 gpt-4-32k ・ ・ ・ モデル デプロイ deploy-A deploy-B

    deploy-C deploy-D クライアントPC アプリケーション curlコマンド など SDKなど モデルから デプロイ デプロイを指定して APIを発⾏ モデルとデプロイの概念
  20. クォーターの制限と管理 「クォータ」という単位で処理能⼒を管理します。 処理能⼒の 管理 その処理能⼒の尺度はTPM(Token per Minute)で、 例として120,000個のトークンを1分間で消費で きる場合は「120k TPM」となります。

    TPMの導⼊ TPMは「サブスクリプション」「リージョン」 「モデル」ごとに割り当てられ、各モデルの上限 に達すると、そのモデルでのデプロイができなく なります。 TPMの分配
  21. 東⽇本リージョン 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を 持つことができる。
  22. 東⽇本リージョン 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という モデルを作成した。
  23. 東⽇本リージョン 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なので、このモデルから デプロイは作れない。
  24. ① ② ③ ④ AIの性格付けを⾏うための システムメッセージを⼊⼒ します。 より正確な回答をしてもら うための事前情報を⼊⼒し ます。いわゆるFew-shot

    Learningになります。 ①と②の条件に従って、チ ャットをします。 このチャットセッションで 利⽤するデプロイの指定な ど、細かいパラメータの設 定を⾏います。
  25. ① ② ③ ④ ⑤ モデルを選択してくだ さい デプロイ対象のモデルを選択してくださ い。 モデルバージョン

    モデルの中にもさらにバージョンがあり ます。ソフトウェアのリビジョンみたい なものです。より数字の⼤きいものが⼀ 般的には⾼性能になります。「⾃動更新 を既定に」を選択すると、⾃動的に最新 のバージョンが適⽤されます。 デプロイ名 任意の名前を指定します。後ほど、APIを 実⾏するときのデプロイ名の指定に使い ます。 コンテンツフィルター 不適切な⾔葉をブロックします。後ほど 説明します。 1分あたりのトークン レート制限 (数千) クォーターの制限と管理で説明したTPM の設定です。
  26. $ 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キー レスポンス
  27. 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を使う場合 トークンリクエスト トークンレスポンス
  28. $ 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.” } } 指定したネットワーク外からのアクセスが拒否されて いる。
  29. gpt-35-turbo gpt-4 ・ ・ ・ モデル デプロイ deploy-A deploy-B deploy-C

    モデルから デプロイ コンテンツフィルター filter-A filter-B フィルターを 適⽤ 嫌悪 性的 ⾃傷⾏為 暴⼒ 嫌悪 性的 ⾃傷⾏為 暴⼒ コンテンツフィルターの構成
  30. $ 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 } } フィルターされた旨のエラーメッセージが表⽰される。 コンテンツフィルターに抵触しそうなリクエスを投げ てみる。
  31. 育休はいつまでに 申請すればいい︖ 以下の質問の検索クエリを⽣成して 育休のいつまでに申請すればいい︖ 育休 申請 いつまで 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 独⾃ナレッジに基づく回答⽣成の⼀般的な構成
  32. Azure Cognitive SearchやAzure Blob Storageな ど、RAGに必要なリソースを⾃分で管理しなけれ ばならない。 めんどくさい その1 Azure

    Cognitive Searchに検索をかけるためのク エリ作成や、最終回答⽣成のためのプロンプトを作 成して、Azure OpenAI Serviceに投げなくてはい けない。 めんどくさい その2 GPT3系のトークン制限に対応するため、ドキュメ ントをチャンク化しなければいけない。 めんどくさい その3
  33. 育休はいつまでに 申請すればいい︖ 以下の質問の検索クエリを⽣成して 育休のいつまでに申請すればいい︖ 育休 申請 いつまで 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が肩代わりしてくれる部分
  34. 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
  35. ② プロンプト⼊⼒ ③ 検索クエリ⽣成依頼 ① 定期的に クロールして、 分割して インデックス化 ④

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

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

    インデックス化 ④ 検索クエリ返却 ⑤ 検索クエリで インデックス検索 ⑥ ドキュメント取得 ⑦ ドキュメントをもとに回答⽣成依頼 ⑧ Webアプリケーションに回答返却 ⑨ ユーザーに回答返却 … Azure App Service 凡例 … Azure OpenAI Service … Azure Cognitive Search Contoso株式会社 育児休業規約 Add your data管理範囲 Azure Cognitive Searchが サポートするデータソース 管理者 ユーザー
  38. データソースを選 択する 「データソース」のところで説明した データソースの選択になります。今回は 「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)
  39. Prompt Flowってなに︖ Web上のエディタで全て開発が完了するため、ローカルに開発 環境を構築する必要はない。 ローカルPCに 開発環境不要 ⼤量データを⽤いたテストも、Web上で使えるテスト環境が⽤ 意されているので、テスト⽤のプログラムを作成する必要がな い。 ⼤量データの

    テストも簡単 作成したフローは、ボタンポチポチで実⾏環境にデプロイでき 、エンドポイントも発⾏される。わざわざVirtual Machineや App Service等の実⾏環境を⽤意する必要はない。 デプロイも 簡単
  40. 「特定のURLの記事のカテゴリを分類する」フローを考えてみる 指定したURLから コンテンツを取得する コンテンツを要約する 要約したコンテンツを もとにカテゴリを決定する。 データを整形する。 要約したコンテンツ URL内のコンテンツ カテゴリ

    URL カテゴリ(整形済み) ⼀番最初に与えられるInputであるURLにアクセスし、その中⾝のテキストを取得 します。画像データなどのバイナリは取得しません。この取得したテキストを以降 では「コンテンツ」と呼ぶことにします。 Azure OpenAI Serviceに、先程取得したコンテンツの要約を依頼します。 先程要約したコンテンツをもとに、Azure OpenAI Serviceにカテゴリの決定を依 頼します。 APIなどで取得しやすいようにデータを整形します。具体的にはJSONに変換します。
  41. 要件をヒアリングして フローを設計する。 フローを開発する。 ⼤量のデータで テストを⾏う。 本番環境にデプロイして エンドユーザーに 利⽤してもらう。 Prompt flowを使わない場合

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

    要件 フィードバック フロー開発の流れ 実現⼿段 お客様と対⾯ないしはオンラインで 会話しながら要件を聞き出し、 設計を⾏う。 Prompt flowのエディタで 開発を⾏う。 Prompt flowのBatch runで テスト・評価を⾏う。 Prompt FlowからDeployボタンで ポチッとデプロイを⾏う。 開発環境の⽤意が不要 テストの実⾏もテスト結 果の可視化もPrompt flow がやってくれる Prompt flowからデプロイ するとVMを裏で作ってく れるので、デプロイまで してくれる
  43. ② ① ③ ④ ⑤ Prompt flowのエディタ 指定したURLから コンテンツを取得する コンテンツを要約する

    要約したコンテンツを もとにカテゴリを決定する。 データを整形する。 URL カテゴリ(整形済み) フロー ノード
  44. エンジニア募集(プロフェッショナルサービスチーム) エンジニアファーストの環境で、技術⼒を⾼めませんか︖ 変化や進化を楽しみながら、私たちとともに歩んでくれる仲間を募集してい ます︕ OSS & クラウド技術をコアテクノロジーとしたシステム開発 • 統合認証システム&クラウド連携 •

    OSS&クラウド基盤導⼊、OSSカスタマイズや開発、OSSサポート • クラウドネイティブシステム、データ分析基盤、アプリ開発 • APIエコノミーコンサルティング&技術⽀援サービス 詳細はこちらのサイトからご覧ください︕ https://tech-lab-engineer.sios.jp/