Slide 1

Slide 1 text

Generative AI for Software Engineer “Application設計に着手する前に考えておきたいコト” 畠山 大有 | Daiyu Hatakeyama Architect && Software Engineer && Applied Data Scientist (目指している) Microsoft Japan /dahatake @dahatake /in/dahatake /dahatake /dahatake /dahatake https://speakerdeck.com/dahatake

Slide 2

Slide 2 text

Engineering への 適用

Slide 3

Slide 3 text

Coding の現場 ドキュメントと各種サンプルコードを読み込んで 挙動と 使い方を理解する With Search サンプルコードをネットで探す。 知財に注意しながら コピペして動かす 動かないと、 エラーメッセージを基に ネットで探す With LLM ChatGPT でプロトタイプ作る (もしくは) Visual Studio Code で やりたい事をコメントに書く 動かす 動かないと、 Codex の 「fix it」で 修正させる

Slide 4

Slide 4 text

Prompt だけでどこまで出来る のか?

Slide 5

Slide 5 text

[想定シナリオ] 工場設備の 稼働監視 アプリ [Software] 工場設備管理アプリ_プロトタイプ開発 DALL-E3 – Prompt 「以下の画像を作成してください。工場での設備監視。フォトリアリスティック。」

Slide 6

Slide 6 text

自分で調べてみた 企画

Slide 7

Slide 7 text

ユースケースの洗い出し 企画

Slide 8

Slide 8 text

要件定義 : 機能要件 要件定義

Slide 9

Slide 9 text

要件定義 : 非機能要件 要件定義 OSでの 音声認識

Slide 10

Slide 10 text

アーキテクチャ図 設計

Slide 11

Slide 11 text

Mermaid Live Editor の Visual Studio Code プラグインがあって、良かったー ```mermaid graph TD subgraph Frontend mobileApp[スマートフォンアプリ] webApp[ウェブアプリケーション] end ```mermaid を付与する

Slide 12

Slide 12 text

データモデル 設計

Slide 13

Slide 13 text

画面遷移図 設計

Slide 14

Slide 14 text

実装計画 設計

Slide 15

Slide 15 text

サンプルデータ作成 実装

Slide 16

Slide 16 text

Azure SQL Database のテーブル作成 実装

Slide 17

Slide 17 text

Azure SQL Database にデータ登録 実装

Slide 18

Slide 18 text

Azure Cosmos DB (NoSQL) の作成 実装

Slide 19

Slide 19 text

Azure Cosmos DB (NoSQL) の作成 実装 論理モデル (データモデル) さえあれば、 もはや実装用のコードは どれでもいい 勿論、最適化にはエンジニアリングが必須ですけど

Slide 20

Slide 20 text

画面 (Vue.js) 作成 (1) 実装

Slide 21

Slide 21 text

画面 (Vue.js) 作成 (2) : 環境構築 実装

Slide 22

Slide 22 text

画面 (Vue.js) 作成 (3) : 環境構築 実装

Slide 23

Slide 23 text

Azure Functions で API 実装 実装

Slide 24

Slide 24 text

画面 と API 融合 実装

Slide 25

Slide 25 text

API と DB 融合 実装

Slide 26

Slide 26 text

レポーティング用のクエリ文字列作成 実装

Slide 27

Slide 27 text

Microsoft Azure コンポーネント選定 設計

Slide 28

Slide 28 text

デプロイも 実装

Slide 29

Slide 29 text

作成したファイルのダウンロード Code Interpreter は常に神 実装

Slide 30

Slide 30 text

一つの文脈での 一気通貫に価値がある 要求定義 (ユースケース) 要件定義 設計・モデリング 実装・コーディング デプロイ 要求定義が 動いているアプリに 反映される

Slide 31

Slide 31 text

案件の相談から ここまで 15分/1人で なんどもやり直せる短さ 殆どはPrompt 出力の待ち時間

Slide 32

Slide 32 text

肌感覚ですが。 95%以上の 図、スクリプト、コードは そのまま動きました

Slide 33

Slide 33 text

単体テストに 挑む

Slide 34

Slide 34 text

単体テストの工程に 挑む

Slide 35

Slide 35 text

GitHub Copilot には、 単体テストコード生成機能がある

Slide 36

Slide 36 text

GitHub Copilot には、 単体テストコード生成機能がある コード 機能要件 本来は… 単体テストの コードとデータ コード Code-First ではあります 機能要件 必要! ビジネスとコードの 整合性を可能な限り保ちたい!

Slide 37

Slide 37 text

『書き物』は、全部やってくんねぇかな… コード書く時間を増やしたいんだよね…

Slide 38

Slide 38 text

機能要件から 単体テスト仕様書を作ってもらう

Slide 39

Slide 39 text

テスト仕様書の作成

Slide 40

Slide 40 text

テスト仕様書の作成 (続き)

Slide 41

Slide 41 text

テストデータ作成

Slide 42

Slide 42 text

画像データも

Slide 43

Slide 43 text

データの調整

Slide 44

Slide 44 text

プロトタイプ と テストコードの生成

Slide 45

Slide 45 text

プロトタイプ と テストコードの生成 (続き)

Slide 46

Slide 46 text

自己改善を促す

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

メッチャ 頑張ってくれる!

Slide 52

Slide 52 text

Vue に慣れてなくて、ファイルの意味がわからん

Slide 53

Slide 53 text

これは、どこに書けばいいの?

Slide 54

Slide 54 text

「コード スプリッティング」 って何?

Slide 55

Slide 55 text

手順書も作ってもらった

Slide 56

Slide 56 text

単体テストの実行手順書も

Slide 57

Slide 57 text

アプリを動かしてみた

Slide 58

Slide 58 text

単体テストを実行してみた

Slide 59

Slide 59 text

リアルの話をしよう

Slide 60

Slide 60 text

何回も試した

Slide 61

Slide 61 text

エラー GitHub Copilot Chat

Slide 62

Slide 62 text

結局は環境問題

Slide 63

Slide 63 text

ChatGPTの作る Vue Test Units のバージョンが古い

Slide 64

Slide 64 text

解像度を上げる 単体テスト UIの単体テスト Vue.JSの単体テスト Vue3とVue Unit Test v2での単体テスト 図の大きさは、単なるイメージであって。面積の正確性はありません GPT-4が、 汎用モデルあるという特性をお忘れなく

Slide 65

Slide 65 text

• 利用ツールやフレームワークのバージョンを 公式ドキュメントで確認して、指定する • package.json や requirement.txt などは、公式があればそれを使うべし • そのドメイン (領域) に長けたモデルが使えるのであれば、 そちら優先する。 モデルの得意・不得意を理解する • ソフトウェアエンジニアリング: GitHub Copilot – でもビジネスは苦手 実装時のベストプラクティス

Slide 66

Slide 66 text

チュートリアル あるいは ハンズオン テキストに 相当近い

Slide 67

Slide 67 text

Vue Test Unit の 使い方の 勉強になった! ネットで検索するよりも早いし楽 しかも仕事で直接役に立つ機能から 優先して覚えられた

Slide 68

Slide 68 text

• Blog Post • 【ChatGPT Hack】 Prompt のみでVue.JSのUI部分の単体テストを実行して みた • Promptの入出力の全て • https://chatgpt.com/share/c03b06a0-7dc8-4095-94e5- 682f218e9918 • Promptのみ • https://github.com/dahatake/ChatGPT-Prompt-Sample- Japanese/blob/main/Software%20Enginner/%E5%8D%98%E4%BD %93%E3%83%86%E3%82%B9%E3%83%88.md ご参考

Slide 69

Slide 69 text

数理最適化への取り組み [Math] 巡回セールスマン問題 (chatgpt.com)

Slide 70

Slide 70 text

• 各種 数理最適化の手法は、比較的一般論が多い • 実際の計算処理は複雑なものが多く、プログラムコード を実行すると長時間要するものも出てくる • プログラムの実行が、ChatGPTの中で可能であれば、それを利用 • 出来ない場合は、自分のPCやクラウド環境などを適時利用 戦略

Slide 71

Slide 71 text

• この思考レベルになると、Prompt Engineering のテク ニックが必須 • それでも、正解に辿り着かない事は多々ある 真実

Slide 72

Slide 72 text

“巡回セールスマン問題” [Math] 巡回セールスマン問題 (chatgpt.com)

Slide 73

Slide 73 text

「問題」 解答 最短距離の順回路: (1,0) → (0,0) → (2,2) → (2,1) → (2,0) → (1,0) 総距離: 4+2√2 ≒ 6.83

Slide 74

Slide 74 text

No content

Slide 75

Slide 75 text

プログラムコードの方が最適と判断 Pythonのコード生成

Slide 76

Slide 76 text

Pythonのコード 実行 Code Interpreterによる 正解

Slide 77

Slide 77 text

“シフトスケジュール問題” [Math] シフトスケジュール問題

Slide 78

Slide 78 text

問題も作ってもらいました [Math] シフトスケジューリング課題

Slide 79

Slide 79 text

Prompt 投入 Prompt 参考: [2402.03620] Self-Discover: Large Language Models Self-Compose Reasoning Structures (arxiv.org)

Slide 80

Slide 80 text

実行プランの作成 (1)

Slide 81

Slide 81 text

実行プランの作成 (2)

Slide 82

Slide 82 text

数理モデルの実装と実行 (1) コードの実行と 実行時エラーの解析

Slide 83

Slide 83 text

数理モデルの実装と実行 (2)

Slide 84

Slide 84 text

自分のPCでの実行手順書の作成

Slide 85

Slide 85 text

コード実行

Slide 86

Slide 86 text

実行結果の妥当性確認

Slide 87

Slide 87 text

改善策の自己立案 (1)

Slide 88

Slide 88 text

改善策の自己立案 (2)

Slide 89

Slide 89 text

実行結果の妥当性確認 (2回目)

Slide 90

Slide 90 text

実行結果の妥当性確認 (2回目)

Slide 91

Slide 91 text

数理モデルは いろいろある

Slide 92

Slide 92 text

現在のアルゴリズムの確認

Slide 93

Slide 93 text

他に効果がありそうなアルゴリズム一覧作成

Slide 94

Slide 94 text

モデル(コード)作成 (1)

Slide 95

Slide 95 text

モデル(コード)作成 (2)

Slide 96

Slide 96 text

モデル(コード)作成 (3)

Slide 97

Slide 97 text

モデル(コード)作成 (4) : 遺伝的アルゴリズム

Slide 98

Slide 98 text

モデル(コード)作成 (5) : 遺伝的アルゴリズム

Slide 99

Slide 99 text

問題の作成から 初期モデル作成 そして、複数モデル作成 45分 注:プログラミングの環境作成と実行に慣れた人の例です。私の例

Slide 100

Slide 100 text

言語モデルの進化により 今後 より 複雑な問題が解ける可能性

Slide 101

Slide 101 text

問題解決の方法の助けになりうる 計算 解答 計算式の 定義 解決策の 体系化・ 論理化 問題の定義 問題 観察 解決案の作成 とリストアップ 評価と選択 情報収集 一例として提示しているでのみで、全てを網羅できているわけではありません データ入力あるいは プログラミング作成 計算処理 あるいは プログラミング実行 似た問題の創作 生成AIがサポート できる可能性が高い 生成AI無しで困難だったコト 相談相手 サンプルデータ 作成

Slide 102

Slide 102 text

生産性と品質を上げるための 戦略

Slide 103

Slide 103 text

戦略 既存開発環境との融合 Token の Input - Output 論理モデルと実装の疎結合 100%にならない問題

Slide 104

Slide 104 text

でも、その残り 5%が動かなくて。 半日費やすこともある 100%にならない問題

Slide 105

Slide 105 text

テンプレート or 公式サンプルコード の活用は、常に正義 100%にならない問題 Visual Studio Code の Azure Functions Extensions で作成 ChatGPT で作成したコード 適時利用 要件(利用関数、データモデルなど)は 入っていない 要件あり (利用関数、データモデル など)

Slide 106

Slide 106 text

GitHub Copilot Chat もすげぇ! 実は殆どの Prompt が動く! Engineering からかけ離れると… 感動! VS Code内でのファイル作成! 100%にならない問題

Slide 107

Slide 107 text

戦略 既存開発環境との融合 Token の Input - Output 論理モデルと実装の疎結合 100%にならない問題

Slide 108

Slide 108 text

実際の入力#2のトークン: 128,000 LLMのトークン制限は Chat 前提 Token の Input - Output Azure OpenAI Service モデル - Azure OpenAI | Microsoft Learn 入力#1 出力#1: 16,384 入力#2 出力#2: 16,384 一度に大量の出力はできない トークン数が増えると、精度が落ちやすい。ノイズになる 対話の継続 = 入力トークン のデータ追加

Slide 109

Slide 109 text

戦略 既存開発環境との融合 Token の Input - Output 論理モデルと実装の疎結合 100%にならない問題

Slide 110

Slide 110 text

管理すべきは 論理モデル for ChatGPT 論理モデルと実装の 疎結合 論理データモデル RDBMS: Azure SQL Database Document: Azure Cosmos DB SQL API Optimize Optimize Technology Neutral

Slide 111

Slide 111 text

管理すべきは 論理モデル for ChatGPT 論理モデルと実装の 疎結合 論理データモデル RDBMS: Azure SQL Database Document: Azure Cosmos DB SQL API Technology Neutral 各サービス・テクノロジーへの 最適化こそ Engineer の 腕の見せ所! Optimize Optimize

Slide 112

Slide 112 text

“Business”を どう実装しているのか Hardware Data Model Programming Architecture Business Mainframe Structured File COBOL monolithic Cloud Document, etc C# microservices Virtualization Containerize x64 Server Relational Java Web 3 Tier Hyper-V T-SQL Vue. js Semantic Kernel

Slide 113

Slide 113 text

戦略 既存開発環境との融合 Token の Input - Output 論理モデルと実装の疎結合 100%にならない問題

Slide 114

Slide 114 text

Project Manager | Architect Developer | Data Engineer UX Designer チームでの Prompt 実行と Output 共有例 Prompt Prompt Prompt メール・チャット・議事録など Prompt Prompt Prompt Prompt GitHub などに Project の ドキュメント 機能要件 Cosmos DB MySQL Mongo DB HTML Image Java C# 非機能要件 画面遷移図 アーキテクチャ図 メッセージ図 プロジェクト スケジュール データモデル Python JavaScript SQL Database IaC CSS Prompt Prompt Prompt Copilot for Microsoft 365 GitHub Copilot GitHub Copilot Prompt GitHub Copilot 既存開発環境との 融合 .docx, .pptx など .md など .ts, .js など .csharp, .java, .py, .sql など

Slide 115

Slide 115 text

Project Manager | Architect Developer | Data Engineer UX Designer チームでの Prompt 実行と Output 共有例 Prompt Prompt Prompt メール・チャット・議事録など Prompt Prompt Prompt Prompt GitHub などに Prompt Prompt Prompt Copilot for Microsoft 365 GitHub Copilot GitHub Copilot Prompt GitHub Copilot 既存開発環境との 融合 ほとんどが テキスト Project の ドキュメント 機能要件 Cosmos DB MySQL Mongo DB HTML Image Java C# 非機能要件 画面遷移図 アーキテクチャ図 メッセージ図 プロジェクト スケジュール データモデル Python JavaScript SQL Database IaC CSS

Slide 116

Slide 116 text

既存コードから図的なものの作成 Azure OpenAI アシスタント コード インタープリターを使用する方法 - Azure OpenAI | Microsoft Learn GitHub Copilot Chat ChatGPT

Slide 117

Slide 117 text

更なる自動化への ツールの登場も近いでしょう

Slide 118

Slide 118 text

LLM Apps 開発

Slide 119

Slide 119 text

Application Design が 超大事

Slide 120

Slide 120 text

アプリとしての ChatGPT から学びたい 分量に限らず、 最初の1文字の 迅速な返答 URL 共有 自分の Prompt 履歴 正確性の保証が 出来ない点の通知 結果文字列の コピペ Plugins

Slide 121

Slide 121 text

アプリとしての ChatGPT から学びたい 分量に限らず、 最初の1文字の 迅速な返答 URL 共有 自分の Prompt 履歴 正確性の保証が 出来ない点の通知 結果文字列の コピペ Plugins 多くのユーザーにとって ChatGPT と言えば、 この挙動

Slide 122

Slide 122 text

LLM Apps は ユーザーの Prompt 全文入力を 肩代わり RAG Few-Shot Learning ReAct …

Slide 123

Slide 123 text

Copilot stack AI infrastructure Foundation models AI safety BYO models Hosted fine-tuned foundation models Hosted foundation models Plugin 拡張性 Plugin 拡張性 Grounding Metaprompt Prompt & フィルタリング Orchestration Copilot frontend UX Semantic Kernel, LangChain など

Slide 124

Slide 124 text

LLM を アプリ に組み込む ロードマップ 適切な モデル の 選択 追加 データ (Grounding) を加味しての Prompt の 出力の検証 利用 サービス 検討 (Option) Plugin エコシステム Coding & Deploy SDK 選択 Azure OpenAI Service Azure Cognitive Service Fine-Tuning した 独自モデル (ほか) Azure OpenAI Service – PlayGround (ほか) チャット履歴 検索 Prompt Template LLM: ChatGPT チャット履歴 Azure Cognitive Search Semantic Kernel (ほか) LangChain (ほか) Azure Functions (ほか) Azure Kubernetes Service 顧客情報 Hugging Face Prompt Template LLM: ChatGPT

Slide 125

Slide 125 text

Client 問い合わせ 顧客情報 チャット履歴 顧客情報 LLM App 意図 (Intent)の判断 Connections 製品情報 検索 提案されたチャット返信文 LLM: ChatGPT LLM: ChatGPT Azure Cognitive Search コンテキストに基づいて 返答文を作成 Prompt Template チャット履歴 顧客情報 Product ID Intent intent, proposed_reply, product_id product_info 製品を探す Prompt Template product_id

Slide 126

Slide 126 text

画面の端 中央 アプリの外 アプリのヘルパー アプリ自身 複数のアプリとタスクを横断 User Interface Client

Slide 127

Slide 127 text

テキスト入力以外も Client 1.電源が入らない 困った時に 2.音が聞こえない 3.ボタンが反応しない 9.そのほか ### 役割り お客様と対峙しているパソコン売り場の優秀な店員として振舞ってください。 ### タスク ユーザーがパソコンを使う上で困っています。以下の{現象}を解決するための考え られる原因と、その測定・確認方法と、その解決策を作成してください。 ### 現象 パソコンの電源が入りません。 ### 現象 パソコンの音が聞こえません。 ### 現象 パソコンのキーボードが反応しません。 ### 現象 ユーザーが状況を説明できません。 LLM: ChatGPT 範囲を狭める テキスト or 音声入力よりも、 はるかに間違えにくく、速い

Slide 128

Slide 128 text

Steam = True Azure OpenAI Service の REST API リファレンス - Azure OpenAI | Microsoft Learn Client

Slide 129

Slide 129 text

Client 問い合わせ 顧客情報 チャット履歴 顧客情報 LLM App 意図 (Intent)の判断 Connections 製品情報 検索 提案されたチャット返信文 LLM: ChatGPT LLM: ChatGPT Azure Cognitive Search コンテキストに基づいて 返答文を作成 Prompt Template チャット履歴 顧客情報 Product ID Intent intent, proposed_reply, product_id product_info 製品を探す Prompt Template product_id

Slide 130

Slide 130 text

Client 問い合わせ 顧客情報 チャット履歴 顧客情報 LLM App Connections 製品情報 検索 提案されたチャット返信文 LLM: ChatGPT Azure Cognitive Search コンテキストに基づいて 返答文を作成 Prompt Template チャット履歴 顧客情報 Product ID Intent intent, proposed_reply, product_id product_info 製品を探す product_id 意図 (Intent)の判断 LLM: ChatGPT Prompt Template Function Calling が超絶便利 ユーザー Prompt から どの関数を呼ぶのかを決めてもらう ChatGPT Plugin Intent/Task の理解 Plugin のマッチング Plugin の呼び出し

Slide 131

Slide 131 text

意図 (Intent)の判断 ユーザーの意図 (Intent) = API の能力 Prompt Template LLM: ChatGPT お客様と対峙している優秀な店員として振舞ってください。ユーザーの行動をお手伝いをします。そのために、ユーザーが何をした いのかの要約の文章を作成します。その要約の文章から、ユーザーの意図を判断してください。 以下が要約の例です: - 製品情報の検索 - 製品の購入 - 製品についての問い合わせ 製品の検索の問い合わせは、商品データベースの中からユーザーのニーズに最も近い商品を5件検索します。 例えば以下の様な問い合わせがあります: - どんなマグカップがありますか? - 夏に適したシャツはありますか? - 人気のある製品はどれですか? 製品の購入の問い合わせは、選択した商品の購入をします。その前に購入したい製品が1つ以上選択されていなければなりま せん。 以下が問い合わせの例です: - 購入手続きに進んでください - 買います ... (他の例も) ... 問い合わせ: 人気のある製品はどれですか? 意図: 製品検索 問い合わせ: 別の色のシャツはありますか? 意図: 製品検索 凡例: System Prompt, ユーザー入力の Prompt Completion Prompt サンプル データ ログとして収集 プライバシーなどへの配慮

Slide 132

Slide 132 text

Client 問い合わせ 顧客情報 チャット履歴 顧客情報 LLM App 意図 (Intent)の判断 Connections 製品情報 検索 提案されたチャット返信文 LLM: ChatGPT LLM: ChatGPT Azure Cognitive Search コンテキストに基づいて 返答文を作成 Prompt Template チャット履歴 顧客情報 Product ID Intent intent, proposed_reply, product_id product_info 製品を探す Prompt Template product_id

Slide 133

Slide 133 text

• Azure OpenAI Service の論理的な スケールアウトは容易 Prompt チャット履歴 LLM: ChatGPT モデルは、ステートレス 問い合わせ 顧客情報 機械学習で作成されたモデルでの 推論は常にステートレス。何も保存しない 問い合わせ 顧客情報 問い合わせ 顧客情報 今回 必要に応じて過去の問い合わせと、 その回答も Prompt に組み込む 1 セッション内のチャット履歴 と そのユーザーの過去のチャット履歴 は別

Slide 134

Slide 134 text

Client 問い合わせ 顧客情報 チャット履歴 顧客情報 LLM App 意図 (Intent)の判断 Connections 製品情報 検索 提案されたチャット返信文 LLM: ChatGPT LLM: ChatGPT Azure Cognitive Search コンテキストに基づいて 返答文を作成 Prompt Template チャット履歴 顧客情報 Product ID Intent intent, proposed_reply, product_id product_info 製品を探す Prompt Template product_id

Slide 135

Slide 135 text

GPT-4 Turbo 1106 別のモデル コンテキストの長さ ドキュメントの深さ コンテキストの長さ ドキュメントの深さ LLMはプロンプトが増えると序盤の方は忘れてしまうという性質は押さえておいた方が良い。コンテキストの順序も重要で、「最後>最初>後 半>前半」の順番で解釈性が高いという性質がある。コンテキストの挿入順序においても重要な性質になる。 Source: https://github.com/gkamradt/LLMTest_NeedleInAHaystack Source: https://bito.ai/blog/claude-2-1-200k-context-window-benchmarks/ 同じタスク、より多くのトークン:入力長が大規模言語モデルの推論性能に与える影響 (arxiv.org) コンテキスト量が増えると解釈性は悪化する

Slide 136

Slide 136 text

RAG = Retrieval Augmented Generation

Slide 137

Slide 137 text

Data中心の世界では 目的に合わせて Data 作成する 分析 機械学習 生成AIの参照用 生データ Data source App クリーニング 用途毎の構造 Data Lake <<構造化>> 正規化 <<非構造化>> 正規化 非正規化 スタースキーマ 非正規化 学習用 データセット 生成AI 参照用 データセット Copy

Slide 138

Slide 138 text

Azure OpenAI Service on your data (Preview) データソース (検索, ファイル,データベース, ストレージetc.) 追加のサードパーティーデータソース (将来的な機能) Azure OpenAI Service on your data API & SDK アプリ Copilot エージェント 製品情報 検索 Azure Cognitive Search

Slide 139

Slide 139 text

入力情報の加工 ドキュメント・クエリマッチング 検索実行 コンテキストベース回答 ➢ 一般情報+聞き返し指示 ➢ 検索実行条件プロセス定義 ➢ クエリ拡張 ➢ ドキュメント加工 ➢ 類似度チューニング ➢ ハイブリッド検索 ➢ フィルタリング ➢ リランク ➢ チャンクチューニング ➢ データの構造化 ➢ コンテキストの要約 対 策 AI技術の強みを教えて。 初心者用バットがほしい 初心者用バット、ほしいですよね! 子供が初心者バットを欲しがってる 壊れてしまった初心者用バット 類似度ヒットしたドキュメント 類似はしているが 意図が拾えてない User Questionに回答せよ。 # User Question たまごはコレステロールが多く健康に悪いで すよね? # Context 表1のように卵の摂取は長年健康への悪 影響が懸念されていた。しかし、 プロンプト 途中で文章が切れている。 図表が取り込めていない 精度向上施策を打つ前に、原因を特定することが極めて重要 検索するための情報が 足りない 初心者でも扱いやすいように、特 別に軽量化されています。 かなり振りやすいので初めてでも 扱いやすいバットといえます。 クリケットの初心者は、バットと 同じ要領でスイングしてしまいます。 検索対象ドキュメント 1 2 3 スコア 0.702 0.401 0.780 ユーザ入力に検索のための 情報が足りない、整理されていない 入力された内容と検索対象が 意図した類似になっていない 検索エンジンの精度が悪い。 検索結果を 正しく解釈できていない 原 因 ステップごとのRAGの精度影響因子

Slide 140

Slide 140 text

RAG のためのデータは作ったほうが良い

Slide 141

Slide 141 text

RAG のためのデータは作ったほうが良い [2408.09017] Meta Knowledge for Retrieval Augmented Large Language Models (arxiv.org) 1つの例としての PR3 (Prepare-Rewrite-Retrieve-Read) アプローチ RAGでの課題 1.チャンクによる情報分断・ 全体像の喪失 2.クエリと文書のミスマッチ 1) 元文書からメタデータと 質問&回答セットを作って index 化 2) メタ知識要約 (MK Summary)を生成 3) クエリの拡張生成と検索

Slide 142

Slide 142 text

# Task User入力のドキュメントから余計な文言は排除し て知識だけを纏めたFAQリストを作ろうと思います。 抜け漏れが無いように質問と回答のペアを Output_formatの出力形式で作成してください。 # Output ## Format jsonl形式で出力をします。各JSONオブジェクトは 下記の形式とします。 {"question":<ドキュメントを基に作成した質問>, "answer":} ## Policy - question, answerの出力はUserの入力に基づ いたものとすること FAQやナレッジグラフへの変換 {"question": "Azure OpenAI Serviceで利用可能なモデルは何ですか?", "answer": "GPT-4 シリーズ (GPT-4 Turbo with Vision を含む)、GPT-3.5-Turbo シリーズ、埋め込みシリーズが利用可能です。"} {"question": "Azure OpenAI Serviceで新しく一般提供されたモデルは何ですか?", "answer": "新しい GPT-4 と GPT-3.5-Turbo モデルシリーズが一般提供になりました。"} {"question": "Azure OpenAI Serviceの機能は何ですか?", "answer": "コンテンツの生成、要約、画 像の解釈、セマンティック検索、自然言語からコードへの翻訳などが可能です。"} {"question": "Azure OpenAI Serviceにアクセスする方法は何ですか?", "answer": "REST API、 Python SDK、または Azure OpenAI Studio の Web ベースのインターフェイスを介してアクセスできます。"} {"question": "Azure OpenAI Serviceの価格情報はどこで確認できますか?", "answer": "価格情報は 、公式ウェブサイトで入手可能です。"} {"question": "Azure OpenAI Serviceは仮想ネットワークとプライベートリンクをサポートしていますか?", "answer": "はい、サポートしています。"} {"question": "Azure OpenAI ServiceのUIエクスペリエンスはどのようなものですか?", "answer": "Azure portal でアカウントとリソースの管理ができ、モデルの探索と微調整には Azure OpenAI Service Studio を使用します。"} {"question": "Azure OpenAI Serviceでのコンテンツフィルタリングはどのように行われますか?", "answer": "プロンプトと入力候補は、自動システムを使ってコンテンツ ポリシーに対して評価され、重大度 の高いコンテンツはフィルターで除外されます。"} {"question": "Azure OpenAI Serviceへのアクセスは制限されていますか?", "answer": "はい、高い需 要とMicrosoftの責任あるAIへのコミットメントを考慮し、制限されています。"} {"question": "Azure OpenAI ServiceとOpenAIの違いは何ですか?", "answer": "Azure OpenAI Serviceは、OpenAIのモデルをAzureのセキュリティとエンタープライズの約束と共に提供し、プライベートネッ トワークやリージョンの可用性、責任あるAIコンテンツのフィルタリングを提供します。"} プロンプト 生の文章ではなく検索時に応えやすい形式としてドキュメントを加工することで、ユーザ問い合わせに回答しやすくなることも GPTによる ドキュメント加工 1) 元文書からメタデータと質問&回答セットを作って index 化

Slide 143

Slide 143 text

LLMシステム評価の大まかな手順 (RAG評価の例) RAGの評価は意外にもシンプルだが、精度が悪いときにどこに原因があるかを突き止めるためログを保管しておくことは必須。 RAGシステムからの出力収集 正解となるデータセットの準備 「質問」、「理想の回答」、「検索されるべきドキュメント」のペアを多量に用意する。 件数の目安は特に無いが、バリエーションや数が多いほど評価の信頼性が高まる。 1で用意した質問をRAGシステムへ入力し、 「RAGシステムの最終回答」、「検索された ドキュメント(群)」を取集する。LLMは確率的な生成をするため同じ質問でも聞き方を 変えるなどして、複数生成させておくのが望ましい。 出力と正解の突合せ 1と2を比較し、適切なドキュメント抽出が出来ているか、回答の正確性を評価する。 ドキュメントについてはIDを突き合せれば評価できるが、回答についてはLLMを用いて 評価する必要がある。 1 2 3 Azure OpenAIで 使えるモデルは? 2で出力された結果 1で用意した正解 検索されたドキュメント 正解のドキュメントが 含まれているか判定 正解のドキュメント RAGシステム gpt-4, gpt-35-turbo, …が利用 可能です。 検索結果をコンテキストとして 与えた際の最終回答 採点 正解の回答 現在使えるモデルはgpt-4, gpt-35-turbo, …です。 LLM or 人 ドキュメント検索 検索結果を基にした回答

Slide 144

Slide 144 text

評価役LLMの採点ステップにおける注意点 各ステップでは準備に注意点がある。特に対話履歴データをどう用意するかはポイントとなる。 対話履歴データの用意 評価役LLMの開発 人間によるチェック (人間のスコアとの比較) ① 実際の対話データを使って検証する →手軽だが、良いデータと悪いデータを満遍なく集めにくい。稼働前はデータが無いなどの欠点がある。 (稼働後のPost Analyticsでは実際の対話データをユーザ分析のために活用することはアリ) ② シミュレーションした対話データを使って検証する →正例、負例をコントロールしやすいが、リアルな対話とは乖離がある。シミュレーションシステムの構築が手間。 全てのチェックは不可能なのでサンプリングした結果で判断することになる。 統計学的に判断が必要になる。対話履歴データが実際の対話データになる分布に偏りが発生しうるため、 特に判断に注意。品質保証部門やデータサイエンティストなど専門家と相談し、 通常のソフトウェアテストと同じく、Go/No Goの判定基準を事前に設けておく。 実運用に比べるとトークン消費は抑えられる傾向にあるため、精度が良いモデルが使える。 多くは速度性能を求められることは少ないため、 多段推論を含めプロンプトもなるべく精度が出るようリッチに実装が可能。

Slide 145

Slide 145 text

表部分は Markdown でなく JSON でテキスト化 マークダウン形式への変換は多くの場合、上手く動作する。一方でカラム名構成を上手く反映できないときがある。 Azure OpenAI マークダウン化の指示 列がおかしい

Slide 146

Slide 146 text

表部分は Markdown でなく JSON でテキスト化する JSONでの出力指示により、マークダウンでは表現できなかった表のカラム階層を維持してテキスト化が可能 Azure OpenAI JSON化の指示 [ { "Group": "A", "Country": "America", "Estimated Economic Size (GDP)": "Largest", "Future Prospect Assessment": "High", "Median Annual Income($)": 74580, "Subsidies": { "Income less than 3000$/month": true, "Income 3000$/month or more": false } }, … カラムをきちんと階層化出来ている

Slide 147

Slide 147 text

対話履歴データのシミュレータ ➢ ユーザ・アシスタントの会話履歴をLLM同士の会話で作成 →両方のロールのGPTを準備 ➢ 特定の観点における正例、負例を作る →評価したい観点に応じてassistant側のSystem Promptを書き換えて恣意的に負の例を作る。 例えば「長くしゃべり過ぎない」という観点の負の例を作るため、敢えて「回答は長く詳細に」とPromptを書き換えるなど。 User役 GPT アシスタント GPT 対話 評価対象の内容が なるべく出てくるような 質問を投げる 対話履歴 基本方針

Slide 148

Slide 148 text

検索結果の要約・抽出 検索結果の取得 検索結果の加工(もしくはチャンクで調整) 三苫の1mmってなに? 三苫薫.txt 神奈川県川崎市宮前区出身のプロサッカー選手。 プレミアリーグ・ブライトン・アンド・ホーヴ・アルビオンFC所属。 ~~~~ 田中碧.txt 神奈川県川崎市宮前区出身のプロサッカー選手 ブンデスリーガ・フォルトゥナ・デュッセルドルフ所属。 ~~~~ FIFA World Cup 2022.txt カタールで実施されたサッカーの世界大会。 ~~~~ 検索結果 第3戦目のスペイン戦では、後半6分に堂安 律が右サイドからグラウンダーのクロスを上げ、 そのボールが逆サイドに流れてボールがラインを 割る寸前で三笘が折り返し、そのボールを田 中碧が押し込んだ。 グループリーグでは2試合に出場し、12月2日に 行われたGL3戦目のスペイン戦では幼なじみ の三笘薫からの折り返し(後に三笘の1mmと 語り継がれるパス)に合わせて逆転ゴールを決 め、マン・オブ・ザ・マッチに選ばれた 日本対スペイン戦では後半6分にVAR判定で 厳密な審査が実施され数ミリ単位の精密な 判定が話題となり、「三苫の1mm」としてマス メディアで大きく話題となった。 GPT 回答生成 GPT 要約・抽出 検索後の情報を一度要約を挟むことでノイズが減少し精度向上が見込める。

Slide 149

Slide 149 text

1. 機械学習 ~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.1 教師あり学習 ~~~~~~~~~~~~~~~~~~~~~~~~ Fig.1 XXXXXX ~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ 1.2 教師なし学習 ~~~~~~~~~~~~~~ Table1 XXXXXX ~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 図の画像 # A B C ① ~~~ ~~~ ~~~ ② ~~~ ~~~ ~~~ ③ ~~~ ~~~ ~~~ 元となるドキュメント Read分析 RAG の 実装例 (ドキュメントのテキスト化) Azure Document Intelligence Azure DIのOCR結果を補助情報として与えることでGPT-4oによる日本語テキスト化の精度が向上する。(手書きテキストが無ければ省略可) "lines": [ { “content”: “1. 機械学習” "polygon": [… … Azure OpenAI マークダウン化の指示 1 3 2 1

Slide 150

Slide 150 text

# 1. 機械学習 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ ## 1.1 教師あり学習 ~~~~~~~~~~~~~~~~~~~~~~~ { “title”: “Fig.1 XXXXXX” “diag_info”: “~~~~~~~~~~~~~~~” “image_file_path”: “~~~~~~~~” } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ ## 1.2 教師なし学習 ~~~~~~~~~~~~~~ [ {"#": "①", "A": "~~~~", "B": "~~~~", "C": "~~~~" }, {"#": "②", "A": "~~~~", "B": "~~~~", "C": "~~~~" }, {"#": "③", "A": "~~~~", "B": "~~~~", "C": "~~~~" } ] Table1 XXXXXX ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ RAG の 実装例 (チャンク&情報抽出) 情報抽出したテキストはGPTでキーワードや補足情報を入れながら適切な幅にチャンクを施す。 3 Azure OpenAI GPT-4 Dynamic Chunk {“chunk”: “# 1. 機械学習 ~~~~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } {“chunk”: “## 1.1 教師あり学習~~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } {“chunk”: “~~~~~~~~~~~~~~~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } {“chunk”: “## 1.2 教師なし学習~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } {“chunk”: “~~~~~~~~~~~~~~~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } 4 Markdown結果 TableはJSONで 出力

Slide 151

Slide 151 text

RAG の 実装例 (インデックス化 – Chunkに情報を付加して検索対象とする) 前後関係を踏まえた付加情報を足したチャンクを検索対象としている例 {“seach_text”: “purpose: ~~~~~~~, keywords: ~~~,~~~,~~~, main_text: # 1. 機械学習 ~~~~~~~~~~~” “search_vector”, []} {“seach_text”: “purpose: ~~~~~~~, keywords: ~~~,~~~,~~~, main_text: ## 1.1 教師あり学習~~~~~~~~~~~” “search_vector”, []} {“seach_text”: “purpose: ~~~~~~~, keywords: ~~~,~~~,~~~, main_text: ~~~~~~~~~~~” “search_vector”, []} {“seach_text”: “purpose: ~~~~~~~, keywords: ~~~,~~~,~~~, main_text: ## 1.2 教師なし学習 ~~~~~~~~~~~” “search_vector”, []} {“seach_text”: “purpose: ~~~~~~~, keywords: ~~~,~~~,~~~, main_text: # 1. 機械学習 ~~~~~~~~~~~” “search_vector”, []} 5 6 {“chunk”: “# 1. 機械学習 ~~~~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } {“chunk”: “## 1.1 教師あり学習~~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } {“chunk”: “~~~~~~~~~~~~~~~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } {“chunk”: “## 1.2 教師なし学習~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } {“chunk”: “~~~~~~~~~~~~~~~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } 4 Embedding 情報を結合して search_textに 登録時はURLなど メタ情報なども足す

Slide 152

Slide 152 text

RAG の 実装例 (インデックス化 – Chunkに対する想定質問を検索対象とする) 1つのチャンクに対して複数の想定質問を用意し、その質問を検索対象とする。チャンク1つに対してn個の検索対象が作られる {“search_question”: “~~~~~~~, keywords: ~~~,~~~,~~~,…” “search_vector”, [< search_questionをベクトル化した結果>], “chunk”: “# 1. 機械学習 ~~~~~~~~~~”} 6 {“chunk”: “# 1. 機械学習 ~~~~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } {“chunk”: “## 1.1 教師あり学習~~~~~~~~”, “keywords”: [“~~~”, “~~~”, …], “purpose”: ”~~~~~~~~~~~~~~”, “questions” [“~~~~~”, “~~~~~”, …] } 5 4 {“search_question”: “~~~~~~~, keywords: ~~~,~~~,~~~,…” “search_vector”, [< search_questionをベクトル化した結果>], “chunk”: “# 1. 機械学習 ~~~~~~~~~~”} {“search_question”: “~~~~~~~, keywords: ~~~,~~~,~~~,…” “search_vector”, [< search_questionをベクトル化した結果>], “chunk”: “# 1. 機械学習 ~~~~~~~~~~”} {“search_question”: “~~~~~~~, keywords: ~~~,~~~,~~~,…” “search_vector”, [< search_questionをベクトル化した結果>], “chunk”: “## 1.1 教師あり学習~~~~~~~~”} {“search_question”: “~~~~~~~, keywords: ~~~,~~~,~~~,…” “search_vector”, [< search_questionをベクトル化した結果>], “chunk”: “## 1.1 教師あり学習~~~~~~~~”} … Embedding 登録時はURLなど メタ情報なども足す

Slide 153

Slide 153 text

RAG の 実装例 (Function Calling) メインとなるGPTに対してFunctionを定義しておき、ユーザの入力を基に検索が必要かどうか判定しクエリ化を実行。 Function定義を工夫するなどして拡張も含め最適な検索クエリを得る。(質問のカテゴリ分類をして検索のフィルタリングに用いるなども可能) AIの〇〇技術の強みを 教えて。 ユーザ Azure OpenAI GPT Chat Completions 検索 Function "parameters": { "type": "object", “search_query": { "type": "string", "description": "Output keywords for the search query generated from the input text in list form.“}, “category": { "type": "string", “description”: “Classify the input text. Choose one from AI, Database, ・・・・・・・. } } 検索Function定義 “search_query”:[〇〇技術, AI], “category”: “AI” クエリ情報 7

Slide 154

Slide 154 text

RAG の 実装例 (検索) 得られたクエリキーワードと元の質問テキストを適切にクエリ拡張したベクトル値を使って、検索を掛ける。 AIの〇〇技術の強みを 教えて。+~~~~ Embedding ベクトル化 [0.01, -0.01, -0.0, 0.02, -0.03, …] Azure OpenAI 検索 ハイブリッド検索 セマンティックリランク {“search_question”: “~~~~~~~, keywords: ~~~,~~~,~~~,…” “search_vector”, [< search_questionをベクト ル化した結果>], “chunk”: “## 1.1 教師あり学習~~~~~~~~”} {“search_question”: “~~~~~~~, keywords: ~~~,~~~,~~~,…” “search_vector”, [< search_questionをベクト ル化した結果>], “chunk”: ~~~~~~~~”} … 検索結果 6 8 “search_query”:[〇〇技術, AI], “category”: “AI” 7 ケースに合わせてクエリ拡張する (特に主要なキーワードなどは 必要になることが多い)

Slide 155

Slide 155 text

RAG の 実装例 (回答) Function Callingの戻り値として結果のn件をGPTに渡す。検索対象とGPTへ渡す値は同じとは限らないので注意。 下の例だと、検索対象はsearch_questionやsearch_vectorだが、GPTへ返すのはchunkとなる。 検索結果 8 GPT Completion キーワード化 〇〇技術の強みは~~~によると…です。 〇〇技術は他にも… {“search_question”: “~~~~~~~, keywords: ~~~,~~~,~~~,…” “search_vector”, [< search_questionをベクト ル化した結果>], “chunk”: “## 1.1 教師あり学習~~~~~~~~”} {“search_question”: “~~~~~~~, keywords: ~~~,~~~,~~~,…” “search_vector”, [< search_questionをベクト ル化した結果>], “chunk”: ~~~~~~~~”} … ケースに合わせてクエリ拡張する (特に主要なキーワードなどは 必要になることが多い)

Slide 156

Slide 156 text

有用なRAG関連のリンク ◆ ハイブリッド検索による精度検証 https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/azure-AI-search-outperforming-vector- search-with-hybrid/ba-p/3929167 ◆ RAGの精度向上施策 https://speakerdeck.com/smiyawaki0820/retrieval-based-lm-rag-system-zatukurili-jie-suru ◆ Azure Chat (Sample実装) https://github.com/microsoft/azurechat ◆ RAGアーキテクチャの基本 https://qiita.com/nohanaga/items/803c09b5a3a4e2d1776f… ◆ Azure AI Search ベクトル検索RAGアーキテクチャ詳細解説 https://qiita.com/tmiyata25/items/875f563ba7a91f3da823… ◆ 更に会話履歴機能を付ける https://qiita.com/nohanaga/items/18baccb843b4148e6a77… ◆ Azure AI Searchのインデクサやスキルセットの関係性 https://zenn.dev/masakikato/articles/azure-AIsearch-json-basic… ◆ Azure AI Searchのベクトルハイブリッド検索の威力 https://qiita.com/nohanaga/items/e156d8be60622b42e8eb… ◆ Prompt flow+ Azure AI Searchを使うときの解説 https://qiita.com/nohanaga/items/7c8b797f20ab8a3d5c92… ◆ Azure OpenAIのAdd your data機能で使われてるリポジトリ https://github.com/microsoft/sample-app-aoai-chatGPT/tree/main… ◆ C#でRAGを実装したリポジトリ https://github.com/Azure-Samples/azure-search-openai-demo-csharp/… ◆ RAG含むChatGPT大規模利用に役立つリンク https://qiita.com/nohanaga/items/a18009f8b605591348fe…

Slide 157

Slide 157 text

LLM アプリの評価は 簡単ではない UIでの注意書き含めて 多面的に取り扱いたい

Slide 158

Slide 158 text

Azure AI Content Safety 重要度スコアを検出して安全 でないコンテンツに割り当てる テキストと画像 Azure AI 全体で統合 利用シナリオ例 •製品カタログやその他のユーザー生成コンテンツを モデレートするオンラインマーケットプレイス •ユーザーが生成したゲームアーティファクトとチャットルー ムをモデレートするゲーム会社 •ユーザーが追加した画像やテキストを管理するソー シャルメッセージングプラットフォーム •コンテンツの集中管理を実装するエンタープライズメ ディア企業 •小学生向けの教育ソリューションプロバイダーは、学 生や教育者に不適切なコンテンツを除外します Content Safety のドキュメント - クイック スタート、チュートリアル、API リファレンス - Azure Cognitive Services | Microsoft Learn カテゴリ 説明 増悪 増悪とは、そのグループの特定の差別化属性に基づいて個人または ID グループを攻撃する、 あるいはそのグループに関して軽蔑的または差別的な言葉を使用するコンテンツを指します。 これには、人種、民族、国籍、性同一性と表現、性的指向、宗教、移民状態、能力状態、 容姿、体格が含まれますが、これらに限定されるものではありません。 性的 性的とは、解剖学的臓器や性器、恋愛関係、性的または情愛的な言葉で描かれた行為、 妊娠、物理的な性的行為 (人の意志に反する暴行や強制性的暴力行為として描かれた ものを含む)、売春、ポルノ、虐待に関連するコンテンツを表します。 暴力 暴力とは、人を傷つけたり、殺めたり、あるいは物を傷つけたり、壊したりすることを意図した 物理的な行為に関連するコンテンツを表します。 また、武器、銃、およびメーカー、協会、 法律などの関連エンティティも含まれます。 自傷行為 自傷行為とは、故意に自分の体を傷つけたり、自殺を意図した物理的な行為に関連する コンテンツを表します。 危害カテゴリ

Slide 159

Slide 159 text

Azure AI Content Safety Content Safety のドキュメント - クイック スタート、チュートリアル、API リファレンス - Azure Cognitive Services | Microsoft Learn テキストの対応言語 英語、ドイツ語、日本語、スペイン語、 フランス語、イタリア語、ポルトガル語、中国語

Slide 160

Slide 160 text

Azure OpenAI Service Learning Guide Azure OpenAI Workshop OpenAI Cookbook support and help ◉ Learn more in the Azure OpenAI WorkshopI ◉ See examples in the OpenAI Cookbook ◉ 実験と MVP の開発を始めましょう! ◉ Get support and help Advanced ◉ How-to guides: Generate embeddings and Fine-tune ◉ 埋め込みと文書検索のチュートリアル ◉ Azure OpenAIにおけるお客様/お客様のデータの処理、使用、保存方法: Data, privacy and security ◉ Tech Blog「Enterprise Data with ChatGPT」を確認し、付属の GitHub リポジトリを確認 してください。 ◉ APIs を使いこなす Intermediate ◉ 「Azure OpenAIとは何か」を理解する:Azure OpenAIとOpenAIを比較する。 重要な概念を確認 ◉ OpenAI Serviceのトレーニングモジュール「Introduction to Azure OpenAI Service」のウォークスルー ◉ Responsible AI の主要なガイドラインと原則を探る Basic ◉ Azure サブスクリプションを作成する ◉ Azure OpenAI Serviceへのアクセスを申請: https://aka.ms/oai/access ) ◉ 動画: An Introduction to Azure OpenAI ◉ 製品の紹介: Azure OpenAI Page ◉ 他のお客様が Azure AI をどのように利用しているかを確認 Start Here!

Slide 161

Slide 161 text

• Azure OpenAI Service • https://azure.microsoft.com/ja-jp/products/cognitive- services/openai-service/ • Bing Chat • https://www.bing.com/new • Azure OpenAI Developer セミナー • Azure OpenAI Developers セミナー – YouTube • Azure OpenAI Developers セミナー第 2 回 - YouTube 直ぐに試しましょう!

Slide 162

Slide 162 text

AI Agent

Slide 163

Slide 163 text

ジェネレーティブAIの急速な進歩 記事、詩、物語、さらには コンピューターコードを含む、 人間のようなテキストの作成 Text generation Chatbot Code Generation Automation よりコンテキストを認識し、 一貫性のある関連性のある マルチターンの会話を実現 さまざまなプログラミング言語の コードを理解して生成し、 開発者が複雑なコーディング タスクに取り組むのを支援 外部システムでアクションを トリガーできる高度な関数 またはツール呼び出しを生成し、 タスクの自動化を促進 Human level interactions 音声と視覚を使用してリアルタイムの 会話に参加し、物理世界をより 包括的に理解することで、人間の コミュニケーションにおける感情や その他の機微を理解します Text Vision Real Time Audio Larger Context Function Calling Image & Video Generation Real Time Audio Generation 様相 機能・能力

Slide 164

Slide 164 text

Building an agentic world Personal agents Organizational agents Business process agents Cross-org agents

Slide 165

Slide 165 text

主な技術的要素 人間レベルの推論能力 批判的思考、再計画を可能にし、 解決戦略を確立し、ループに人を 組み込むことができる より大きなコンテキストウィンドウ 実行履歴を推論して、複数のエージェント からのフィードバックを再計画 + 統合できる 専門エージェント向けのSLM 迅速な実行を可能にして、人をループに 巻き込み続け、費用対効果の高い 解決を可能にする マルチモーダルのサポート ユースケースの範囲を広げ、エージェントAI システムへのアクセスを容易にする document summary prompt answer question data query prompt + data docs エージェント不要: Simple Prompt 非常に狭いワンショットタスク。 例: ログからJSONへの変換 Single Agent 非常に明確にスコープされた反復タスク 例: 複雑な質問に対する裏付けとなる 証拠を含む回答を提供する Multi-Agent System 多様なスキルを必要とする広範囲にわたる複 雑なユースケース 例: 前四半期の売上高の最近の上位2つのト レンドを活用して、メーリングリストの ユーザーベースを強化し、各キャンペーンの 影響を予測するアセットを含む2つの Instagramマーケティングキャンペーンを提案させ る conversation data query data docker databases docs history of work output input Agent への進化

Slide 166

Slide 166 text

キーとなる技術要素 System Prompt RAG Function Calling User Prompt / Multi- Modal 人とのコラボレーション マルチモーダルによる可能な限り省力化 Application / Agent の挙動の制御 (ある程度) Dataから、動的に返答情報の生成 最適なAPIの判断と、API処理結果を踏まえ た動的な返答情報の生成の補助 Coordinator / Orchestrator 目的達成のための実行計画の作成と複数の エージェント連携のための管理 docs

Slide 167

Slide 167 text

• 高いレベルの自律性 (完全では ない) と可能な限りの推論を備えた 複雑な目標を達成するように設計 • マルチモーダルを使用して 人をタスク完了のループに効果的に 組み込む選択肢をもつ Autonomy: 最小限の人の介入で目標指向の 行動を取る Reasoning: 与えられたコンテキストに基づいての判断 やトレードオフの考慮 Adaptable Planning: 変化する条件に基づいて タスクの実行計画を動的に調整し、効率的に完了させる Context Understanding: 自然言語やその他の モダリティを理解し、それに従う Action Enabled: 必要に応じてスキルを提供するAPIな どのWebサービスなどへのアクセスを通じて行動を起こす 権限も付与される Coordinator / Orchestrator

Slide 168

Slide 168 text

• 「目標」情報を使用して、モデルベースの エージェントの機能をさらに拡張 • 目標は、望ましい状況を表す • エージェントは、複数の可能性の中から 選択する方法を提供し、目標に到達するものを選択 • 検索と計画は、エージェントの目標を達成する アクションシーケンスを見つけることに 専念するAIの一機能として位置づけられる 目標ベースのエージェント

Slide 169

Slide 169 text

一般的なデザインパターン RAG Agent Code Generation Agent Multi-Agent System Multi-Domain Agent System

Slide 170

Slide 170 text

Retrieval Augmented Generation Agent Search Tools discussion D Intelligent RAG Agent Plan Query Observe Update plan Compile answer Knowledge Graph 人間がループ内で質問を調査問題などに変換し、そのドメインの範囲内で複雑な質問に対する高品質の回答を生成 question final answer

Slide 171

Slide 171 text

Session and memory management Dynamic context look-up Planning & tracking Toolsets & coding interface Human interaction Coordinator Multi-turn reasoning and action (ReAct) Code Generation Agent 自然言語の要件に基づいてコードを生成し、既存のコードベース、テンプレート、ガイドライン、ライブラリを活用してポリシーと ベストプラクティスに一致させながら、人間と対話して意図したとおりに機能を明確に、検証、提供します Code Executor Constraints Existing Codebase Coding Guidelines (docs) Internal SDKs Dev Task (spec / bug / feature) Code w/ Tests, Doc, DevOps code, etc

Slide 172

Slide 172 text

MS #3 MS #2 MS #1 Multi-Agent System 複雑な問題は、より小さく管理可能な部分に分解され、それぞれが専門のエージェントによって対処され、事実上 マイクロサービス(MS)になる。これらのエージェントは、ワークフロー内で協調して連携し、問題全体を効率的に解決します。 conversation data query docker Coding Guidelines history of work 重要な設計要素 既存の厳密にスコープされたスキル (エージェント) の範囲内での適応計画 曖昧さを人間と議論し、調整することで対 処します プランの複雑で長時間実行される実行を 処理するメモリ 効果的なエージェント間コミュニケーション 各Agentが依存することなく、テスト、監視、 リリース、保守できるようにすることで、品質 と安全性の問題を迅速に処理

Slide 173

Slide 173 text

Multi-Domain Agents System 複数のドメイン固有のエージェントは、Agent Runner によってオーケストレーションされ、ユーザーには 1 つのエージェント として表示されながら、複数のドメインにまたがって拡張されます。 Agent pool Agent Runner Active Agent Agent 1 Revaluate agent assignment Run Transfer Run + Back-off Role/goals + skills Agent 2 Run + Back-off Role/goals + skills Agent n Run + Back-off Role/goals + skills Shared context memory 重要な設計要素 エージェント自身の機能の明文化 数十から数百のエージェントを 管理できるスケーラブルなエージェント ランナー 適切なメモリ管理でドメインの 切り替えを管理する機能 個々のエージェントがユーザーとの 直接のコミュニケーションを維持し、 必要に応じて引き継ぐことで、 単一のインターセプターの問題を回避

Slide 174

Slide 174 text

どちらのアーキテクチャがより効果的か? • Single 長所 • シンプルさ: 実装と管理が簡単 • 予測可能性: 行動は予測と制御が容易 • 複雑さの軽減: 管理するコンポーネントと インタラクションが軽減 短所 • スケーラビリティ: 1 つのエージェントがすべての タスクを処理する必要があるため、 スケーラビリティは限定 • パフォーマンスのボトルネック: 1 つの エージェントが過負荷になると、パフォーマンス が低下する可能性が高まる • 冗長性の欠如: 1 つのエージェントに障害が 発生した場合のフォールバックが難しい アプリケーション: パーソナルバーチャル アシスタント(Siriなど)、シングルプレイヤーゲーム、 スタンドアロンロボット工学など、 コラボレーションや調整は不要 • Multiple 長所 • スケーラビリティ: 複雑で大規模な問題に適して いる • 堅牢性:1つのエージェントに障害が発生しても、 システム全体が機能不全に陥ることはほぼ無い • 柔軟性:変化するニーズに適応するために簡単に 追加または削除できます。 短所 • 複雑さ: 複数のエンティティが相互作用するため、 設計、開発、管理がより複雑に • 通信のオーバーヘッド: 効果的な通信と 調整のメカニズムが必要 • 同期の問題: すべてのエージェントが調和して 連携していることを確認するのは 難しい場合がある Application: スウォームロボティクス、 マルチプレイヤーゲーム、自律走行車フリート、 分散型センサーネットワークなどの複雑なタスク、 分散タスク、またはコラボレーションタスク

Slide 175

Slide 175 text

Muti-Agent の一つの姿? [2412.14135] Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective The Rise and Potential of Large Language Model Based Agents: A Survey

Slide 176

Slide 176 text

AI Agent: Brain + Perception + Action • Perception (Eyes, ears) • Perceives and processes multimodal info from external • Brain (Control center) • Memorizing, thinking, knowledge, & decision making • Action (Limbs) • Carry out execution using tools and influences surroundings The Rise and Potential of Large Language Model Based Agents: A Survey

Slide 177

Slide 177 text

Typology of the Brain Module

Slide 178

Slide 178 text

Typology of Perception Module

Slide 179

Slide 179 text

Typology of Action Module

Slide 180

Slide 180 text

Agent AI Towards a Holistic Intelligence Position Paper: Agent AI Towards a Holistic Intelligence, by MSR and Stanford

Slide 181

Slide 181 text

AI Agent: LLM + Planning + Memory + Tool Use LLM Powered Autonomous Agents | Lil'Log (lilianweng.github.io)

Slide 182

Slide 182 text

“Generative AI” Ready Organization

Slide 183

Slide 183 text

Generative AI Ready Application もしくは Enterprise Architecture Physical Data Location Data as an Asset Management Application Function UX On-premise Data Mesh Data Lake (Other Cloud) Data Lake (Microsoft Azure) Data Catalog Application Data Database File Bronze Silver Gold API Application GUI | new Multi-Modal UX Persona API Catalog Customer Partner Employee Model API ML Model Factory Copilot Foundation Model Database File API Database File API “AI Agent” Security, Privacy, Compliance, Governance, Monitoring etc…

Slide 184

Slide 184 text

アプリは、API コールで 出来ていますよね? REST API Static web content HTML, JavaScript, images, CSS

Slide 185

Slide 185 text

宿泊予約プラグイン Enterprise AI Transformation のロードマップ 7/10から5日間シアトルに 出張するんだけど ホテルと飛行機の予約をお願い 7/10~7/15 までの旅程を作成しまし た。確認してください。 .... 解答 旅程作成: エージェント プラグイン /search /reserve 予約 予約検索 宿泊予約システム endpoints /search /reserve 航空券予約プラグイン 出張申請プラグイン 帳票OCRプラグイン レストラン予約プラグイン 問い合わせ Function Calling + オ ー ケ ス ト レ ー シ ョ ン データ分析プラグイン /confirm 航空券予約システム レストラン予約システム 出張申請システム /delete 予約確認 予約削除 … DB /aggregate /predict 申請 /request … /analyze 読み取り 7/14 のタクシーのレシートを添付す るから登録お願い /recommend ML models … 問い合わせ … /search … 検索 API 既存システム/データ Your Copilots Your Copilots Your Copilots Your Copilots Phase 1 Phase 3 アプリケーションのモダナイゼーション Phase の数字は例です 社内汎用Chatアプリ Your Copilots Phase 2 API呼び出しの定義 出張規定のWordファイル

Slide 186

Slide 186 text

宿泊予約プラグイン Enterprise AI Transformation のロードマップ 7/10から5日間シアトルに 出張するんだけど ホテルと飛行機の予約をお願い 7/10~7/15 までの旅程を作成しまし た。確認してください。 .... 解答 プラグイン /search /reserve 予約 予約検索 宿泊予約システム endpoints /search /reserve 航空券予約プラグイン 出張申請プラグイン 帳票OCRプラグイン レストラン予約プラグイン 問い合わせ Function Calling + オ ー ケ ス ト レ ー シ ョ ン データ分析プラグイン /confirm 航空券予約システム レストラン予約システム 出張申請システム /delete 予約確認 予約削除 … DB /aggregate /predict 申請 /request … /analyze 読み取り 7/14 のタクシーのレシートを添付す るから登録お願い /recommend ML models … 問い合わせ … /search … 検索 API 既存システム/データ Your Copilots Your Copilots Your Copilots Your Copilots Phase 1 Phase 3 アプリケーションのモダナイゼーション Phase の数字は例です 社内汎用Chatアプリ Your Copilots API呼び出しの定義 旅程作成: エージェント 出張規定のWordファイル Phase 2 「エージェント」は、会社の出張規定のドキュメントの ルールとワークフローを順守するように動く。 その実装は、ドキュメントを読み込むのみ

Slide 187

Slide 187 text

Enterprise AI Transformation のロードマップ 7/10から5日間シアトルに 出張するんだけど ホテルと飛行機の予約をお願い 7/10~7/15 までの旅程を作成しまし た。確認してください。 .... 解答 旅程作成: エージェント プラグイン /search /reserve 宿泊予約システム 問い合わせ 航空券予約システム レストラン予約システム 出張申請システム DB 7/14 のタクシーのレシートを添付す るから登録お願い ML models … 問い合わせ … API 既存システム/データ Your Copilots Your Copilots Your Copilots Your Copilots Phase 1 Phase 3 アプリケーションのモダナイゼーション Phase の数字は例です 社内汎用Chatアプリ Your Copilots API呼び出しの定義 出張規定のWordファイル 宿泊予約プラグイン 航空券予約プラグイン 出張申請プラグイン 帳票OCRプラグイン レストラン予約プラグイン Function Calling + オ ー ケ ス ト レ ー シ ョ ン データ分析プラグイン Phase 2 なぜ、この場で、どの関数を使うのが最適なのか? その際の引数は何が必要なのか?という判断を行う 関数の実行結果を含めた、応答を作成する 予約 endpoints /reserve /confirm /delete 予約確認 予約削除 … /aggregate /predict 申請 /request … /analyze 読み取り /recommend /search … 検索 /search 予約検索

Slide 188

Slide 188 text

宿泊予約プラグイン Enterprise AI Transformation のロードマップ 7/10から5日間シアトルに 出張するんだけど ホテルと飛行機の予約をお願い 7/10~7/15 までの旅程を作成しまし た。確認してください。 .... 解答 旅程作成: エージェント プラグイン /search /reserve 予約 予約検索 endpoints 航空券予約プラグイン 出張申請プラグイン 帳票OCRプラグイン レストラン予約プラグイン 問い合わせ Function Calling + オ ー ケ ス ト レ ー シ ョ ン データ分析プラグイン 予約確認 予約削除 … 申請 … 読み取り 7/14 のタクシーのレシートを添付す るから登録お願い … 問い合わせ … … 検索 API 既存システム/データ Your Copilots Your Copilots Your Copilots Your Copilots Phase 1 Phase の数字は例です 社内汎用Chatアプリ Your Copilots Phase 2 API呼び出しの定義 出張規定のWordファイル 宿泊予約システム /search /reserve /confirm 航空券予約システム レストラン予約システム 出張申請システム /delete /aggregate /predict /request /analyze /recommend /search Phase 3 アプリケーションのモダナイゼーション モダナイゼーションの検討 サーバー側はAPI化されているか? 既存システムでも、オーケストレーションでも 使える SOA や Microservice Architecture を 意識した Enterprise Architecture の実現 Service Catalog, Data Catalog, Model Catalog (Model as a Service) DB ML models

Slide 189

Slide 189 text

microservices x Big Data for Agile Web / Mobile IoT Device Search Application の世界 Big Data の世界 Streaming Operational Store Operational Store Operational Store Operational Store Operational Store Operational Store Search Web / Mobile Web / Mobile Web / Mobile Web / Mobile Web / Mobile Web / Mobile Web / Mobile Web / Mobile IoT Device Streaming IoT Device Streaming Operational Store Data Lake Data Warehouse API Visualize (Graph表現など) Build ML Model Data Catalog Data Warehouse Data Warehouse Reference for 生成AI 非構造化 半構造化 データ データの管理者・意味 などのメタデータ なるべくサイズを 小さく 構造化データ

Slide 190

Slide 190 text

データ加工・活用 - Medallion Architecture コーポレートBI データ解析や AIモデル開発 データ資産の検索 生データ (Bronze/Raw) 目的に沿ったデータ加工 (Gold/Curated) 最低限の クレンジング クレンジング済み データ加工 (Silver/Standardized) クエリで扱いやすくDWH内に永続化 もしくはViewとして定義 セルフサービスBI セルフサービス データ加工 セルフサービス データ加工 データが活用されるまでの流れ 事業部門 5. 活用できそうなデータ資産の検索 6. 新しい業務ニーズに応じた実験的、 アドホックなデータ探索や、データ加工 7. セルフサービスでのデータ活用(BIレポー ティング、データ解析、モデル開発) 8. 確立した分析モデルは基盤に引き渡し データ管理部門 1. データを活用するために大前提として行うべき抽出やクレンジング 2. 全社横断的に求められる基本的なデータ加工ロジックの実装 3. 全社横断的に求められるBIレポートの作成 4. Bronze~Gold、DWHのデータ品質維持 シームレス 利用 現場での活用モデル (Gold)が固まったら 基盤側に引き渡し 現場でのモデル 試行錯誤

Slide 191

Slide 191 text

API と Data の整備 それは 生成AI以外でも使える

Slide 192

Slide 192 text

さいごに

Slide 193

Slide 193 text

2023年3月 2023年11月 2024年5月 GPT-4 GPT-4 Turbo GPT-4o ⅙ ⅟₁₂ 料金 応答速度 2倍 6倍 性能は良くなるだけ。コストは下がるだけ。

Slide 194

Slide 194 text

• 人の指示をComputerに伝える 手段 • GPT-4 に代表される機械学習で 作成された自然言語のモデル • 文字列生成として プログラム言語のコードを生成 • その自動実行・エラー修正の プロジェクトが複数走っている • Microsoft Copilot • Auto-GPT • Code Interpreter CPU Machine Language Assembly “Programming Language” Operating System LLM Java C# JavaScript Python SQL HTML yaml … Excel Word Teams Fabric Windows … Bing GitHub 生成・実行 操作 LLM Apps (Copilot) Next Generation Computer Language タスク・やりたい事 など

Slide 195

Slide 195 text

Prompt のサンプル dahatake - Qiita dahatake/GenerativeAI-Prompt-Sample-Japanese: ChatGPTや Copilotなど各種生成AI用の「日本語]の Prompt のサンプル https://github.com/dahatake/GenerativeAI-Prompt-Sample-Japanese https://qiita.com/dahatake

Slide 196

Slide 196 text

デジタル庁公開の Prompt サンプルなど 2023年度 デジタル庁・行政における生成AIの適切な利活用に向けた技術検証を実 施しました(最終更新日:)

Slide 197

Slide 197 text

• Prompt Engineering Guide | Prompt Engineering Guide (promptingguide.ai) • https://www.promptingguide.ai/jp • はじめに | Learn Prompting: Your Guide to Communicating with AI • はじめに | Learn Prompting: Your Guide to Communicating with AI • Best practices for prompt engineering with OpenAI API | OpenAI Help Center • https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api • Examples • https://platform.openai.com/examples • Prompt のサンプル • dahatake/ChatGPT-Prompt-Sample-Japanese: ChatGPT の Prompt のサンプルです。 (github.com) • [ChatGPT Hack] Bing Chat と ChatGPT を使って、特定の企業へ入社するためのエントリーシートのドラフトを作ってみた – Qiita • [ChatGPT Hack] Bing Chat を使って、新規アプリ開発の Azure 概算見積もりを作ってみた – Qiita 効率的な Prompt のブクマ

Slide 198

Slide 198 text

ChatGPT のより深い理解 • ⿊橋教授(京都大学)- ChatGPT の仕組みと社 会へのインパクト / NII 教育機関 DX シンポ (2023) • https://www.nii.ac.jp/event/upload/20230303-04_Kurohashi.pdf • 話題爆発中のAI「ChatGPT」の仕組みにせまる! - Qiita • https://qiita.com/omiita/items/c355bc4c26eca2817324

Slide 199

Slide 199 text

© Copyright Microsoft Corporation. All rights reserved. Invent with purpose.