Slide 1

Slide 1 text

Semantic Kernelのすすめ 株式会社SAKURUG プロダクトDiv 草場 友光 .NET の 2 日間 ~3 コミュニティ合同イベント~

Slide 2

Slide 2 text

自己紹介 • 普段は主にシステムをAzureにモダナ イズする仕事をしています。 • コミュニティ活動を通じて知識をアッ プデートしています。 • 2022/08-2024 Microsoft MVP (Developer Technologies) • tomo_kusaba

Slide 3

Slide 3 text

宣伝 【VISION】ひとの可能性を開花させる企業であり続ける VISIONに共感できる仲間募集中。

Slide 4

Slide 4 text

注意 • 個人の見解・解釈が多分に入っています。 • 見解の相違・事実誤認などありましたらご指摘ください。

Slide 5

Slide 5 text

今日の目的 • 昨年から生成AIの盛り上がりがすごいことになっています。 • LLMオーケストレーションSDKであるSemantic Kernelの立ち 位置やこれを使用するメリットを今一度再確認していきましょう。

Slide 6

Slide 6 text

Semantic Kernelとは? • 既存のアプリケーションにLLMエージェントを簡単に追加できる オープンソースのSDK。 • 現在は、OpenAI、Azure OpenAI、Hugging Faceなどのモ デルで使用可能。 • C#、Python、Javaで使用可能。 • AIモデルと組み合わせ質問に答えプロセスを自動化するエージェ ントを構築できる。

Slide 7

Slide 7 text

Semantic KernelはCopilot Stack の中心です https://github.com/Azure-Samples/miyagi?tab=readme-ov-file

Slide 8

Slide 8 text

なぜ、Semantic Kernelを選択するのか? • C#がメインの開発言語であるから • もはや、AIはクラウド・デスクトップ・モバイル・IoT・Web・MRな どすべての領域において不可欠の存在になりつつある。 • また、PlatformもWindows・Linux・Macすべてで動かす必要 がある。 • そのすべての領域での開発が可能なのがC#/.NET • エンタープライズ対応(監視・負荷分散・認証・認可・・・)

Slide 9

Slide 9 text

Semantic Kernelの始め方 • まずは、Jupyter Notebooksから! • 次に、Semantic Kernelリポジトリ内にある多数のサンプル コードを参照 • /dotnet/samples/kernelSyntaxExamples/

Slide 10

Slide 10 text

Jupyter Notebooks • 前提 • .NET7 SDK • Visual Studio Code • “polyglot” VSCode Extension • OpenAIまたはAzure OpenAI ServiceのAPIキーを取得済み • Semantic Kernelリポジトリ (https://github.com/microsoft/semantic-kernel)を クローン • /dotnet/notebooks/に移動して配下のREADME.mdを参照してウエ から順番に実行

Slide 11

Slide 11 text

Jupyter Notebooksやってみた動画の紹介 • https://www.youtube.com/watch?v=8sK1SyHmmIk Microsoft アメリカ本社所属 Developer Advocate 千代田 まどかさんのJupyter Notebookやってみた動画です。

Slide 12

Slide 12 text

サンプルコード • /dotnet/samples/KernelSyntaxExamplesに多数のサン プルコードがある

Slide 13

Slide 13 text

.NET Conf Japan2023「.NET + AI」 • https://info.microsoft.com/JA-ModApps-WBNR- FY24-12Dec-19-NET-Conf-2023-Recap-Japan- Latest-Learn-NET-SREVM25677_LP01- Registration---Form-in-Body.html • https://zenn.dev/microsoft/articles/231219-dot- net-conf?redirected=1

Slide 14

Slide 14 text

Semantic Kernelで実際にやってみた • Semantic Kernelにやらせたいことは多岐にわたります。 • ユーザーからの入力や何らかの状況、ログなどに応じて何かのア クションを行わせたいという要求があります。 • この中で、とても単純な例としてコンソールの文字色を変化させ てみたいと思います。

Slide 15

Slide 15 text

プラグイン using Microsoft.SemanticKernel; using System.ComponentModel; namespace ConsoleApp17; public class ColorMode { public bool IsOn { get; set; } = false; [KernelFunction, Description("画面モードの状態を取得します。")] public string GetMode() { return IsOn ? "ON" : "OFF"; } [KernelFunction, Description("画面モードを切り替えます。")] public string ToggleMode() { IsOn = !IsOn; if (IsOn) { Console.ForegroundColor = ConsoleColor.DarkBlue; } else { Console.ResetColor(); } return GetMode(); } } • AIにコードを呼び出させたいときは説明文をつ けてその関数の使い方をAIに理解させる必要 があります。(Description) • AIは説明文を読み取り適切な関数を実行します。 (複数該当すれば複数実行することも!)

Slide 16

Slide 16 text

呼び出し側 using Microsoft.SemanticKernel.Connectors.OpenAI; using Microsoft.SemanticKernel; using ConsoleApp17; Kernel kernel = Kernel.CreateBuilder() .AddAzureOpenAIChatCompletion( “デプロイ名”, “エンドポイント”, “APIキー”).Build(); kernel.Plugins.AddFromType(); OpenAIPromptExecutionSettings? setting = new() { ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, }; while (true) { Console.Write("User > "); string input = Console.ReadLine()!; if (input == "exit") { break; } else { var result = await kernel.InvokePromptAsync(input, new(setting)); Console.WriteLine($"Assistant > {result}"); } } • Semantic KernelのKernelに先ほど作った プラグインと使用するモデルを渡します。 • ToolCallBehavior.AutoInvokeKernelF unctionで関数を説明文に従って自動的に呼 び出します。 使用するモデル 使用するプラグイン 自動的に関数を呼び 出す LLMと会話する

Slide 17

Slide 17 text

実行結果 画面モードの切り替え 画面モードの問い合わせ 画面モードの切り替え 関数を呼び出さない質問

Slide 18

Slide 18 text

デモ

Slide 19

Slide 19 text

タスクの自動化がとても簡単! • コンソールの文字色を変える例を見たとおりユーザからの入力に 対して適切な関数(メソッド)が呼び出されタスクを行うことがで きる。 • どの程度精度が出るかは、選択したモデルと説明文(プロンプト能 力)次第。

Slide 20

Slide 20 text

続きは、.NETラボ2024年1月で • リアル会場:ピクシブ株式会社本社ビル 東京都渋谷区千駄ヶ谷4-23-5 JPR千駄ヶ谷ビル5階 • オンライン:Teams or YoutubeLive • 2024/1/27 13:00 Start お待ちしてます。

Slide 21

Slide 21 text

参考文献 • What is Semantic Kernel? https://learn.microsoft.com/ja-jp/semantic-kernel/overview/ • .NET Conf 2023 Recap Japan ~ 最新の.NETを学ぶ https://info.microsoft.com/JA-ModApps-WBNR-FY24-12Dec-19- NET-Conf-2023-Recap-Japan-Latest-Learn-NET- SREVM25677_LP01-Registration---Form-in-Body.html • .NET Conf Japan 2023「.NET + AI」補足記事 https://zenn.dev/microsoft/articles/231219-dot-net- conf?redirected=1 • semantic-kernel https://github.com/microsoft/semantic-kernel

Slide 22

Slide 22 text

おしまい おしまい