Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Sementic Kernelのネイティブ関数について
Search
tomokusaba
January 26, 2024
Programming
650
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Sementic Kernelのネイティブ関数について
Sementic Kernelのネイティブ関数について
.NETラボ2024年1月
https://dotnetlab.connpass.com/event/305578/
tomokusaba
January 26, 2024
More Decks by tomokusaba
See All by tomokusaba
Azure Copilot Resiliency Agentをいろいろ試してみる
tomokusaba
0
27
30代後半からでも遅くないキャリア形成
tomokusaba
0
300
GitHub Copilotで書いたコード、レビューはどうしてる?
tomokusaba
0
58
Azure CAFで考えるAIエージェント導入の進め方
tomokusaba
1
120
GitHub Copilot app時代の開発フロー
tomokusaba
0
82
オートマトンと字句解析でRoslynを読む
tomokusaba
0
170
GitHub Copilot appとGitHub Copilot CLIとVS CodeのCopilot Chat Agent Modeの使い分け
tomokusaba
0
220
GitHub Copilot app最速の発信の裏側
tomokusaba
1
600
自宅サーバの変遷
tomokusaba
0
930
Other Decks in Programming
See All in Programming
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
130
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
180
Intent as Code
shoppingjaws
6
1.1k
Security issues being discussed on Web Platforms
petamoriken
0
1.2k
The Rails Doctrine Decade
koic
2
360
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
180
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
390
FreeBSDでZabbixを動かす
kenkino
0
320
Building an Out-of-Order CPU
latte72
1
800
iOSDC2026登壇資料.pdf
riofujimon
0
180
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
770
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
190
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
Odyssey Design
rkendrick25
PRO
2
810
The World Runs on Bad Software
bkeepers
PRO
72
12k
HDC tutorial
michielstock
2
900
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Docker and Python
trallard
47
4.2k
A designer walks into a library…
pauljervisheath
211
25k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
440
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
770
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Balancing Empowerment & Direction
lara
6
1.3k
Transcript
Sementic Kernelのネイ ティブ関数について 株式会社SAKURUG プロダクトDiv 草場 友光 .NETラボ勉強会2024年1月
自己紹介 • 普段は主にシステムをAzureにモダナ イズする仕事をしています。 • コミュニティ活動を通じて知識をアッ プデートしています。 • 2022/08-2024 Microsoft
MVP (Developer Technologies) • tomo_kusaba
宣伝 【VISION】ひとの可能性を開花させる企業であり続ける VISIONに共感できる仲間募集中。
注意 • 個人の見解・解釈が多分に入っています。 • 見解の相違・事実誤認などありましたらご指摘ください。 • #dotnetlabでtweetすると左側に表示されます
今日の目的 • 昨年から生成AIの盛り上がりがすごいことになっています。 • Semantic Kernelのなかでも中心的な機能であるPlugin(旧 Skill)についての機能を見ていきましょう。
Semantic Kernelとは? • 既存のアプリケーションにLLMエージェントを簡単に追加できる オープンソースのSDK。 • 現在は、OpenAI、Azure OpenAI、Hugging Faceなどのモ デルで使用可能。
• C#、Python、Javaで使用可能。 • AIモデルと組み合わせ質問に答えプロセスを自動化するエージェ ントを構築できる。
Semantic KernelはCopilot Stack の中心です https://github.com/Azure-Samples/miyagi?tab=readme-ov-file
なぜ、Semantic Kernelを選択するのか? • C#がメインの開発言語であるから • もはや、AIはクラウド・デスクトップ・モバイル・IoT・Web・MRな どすべての領域において不可欠の存在になりつつある。 • また、PlatformもWindows・Linux・Macすべてで動かす必要 がある。
• そのすべての領域での開発が可能なのがC#/.NET • エンタープライズ対応(監視・負荷分散・認証・認可・・・)
Semantic Kernelの始め方 • まずは、Jupyter Notebooksから! • 次に、Semantic Kernelリポジトリ内にある多数のサンプル コードを参照 •
/dotnet/samples/kernelSyntaxExamples/
Jupyter Notebooks • 前提 • .NET8 SDK • Visual Studio
Code • “polyglot” VSCode Extension • OpenAIまたはAzure OpenAI ServiceのAPIキーを取得済み • Semantic Kernelリポジトリ (https://github.com/microsoft/semantic-kernel)を クローン • /dotnet/notebooks/に移動して配下のREADME.mdを参照してウエ から順番に実行
Jupyter Notebooksやってみた動画の紹介 • https://www.youtube.com/live/8sK1SyHmmIk?si=Z eTmC6mZddiDM4gF&t=5 Microsoft アメリカ本社所属 Developer Advocate 千代田
まどかさんのJupyter Notebookやってみた動画です。
サンプルコード • /dotnet/samples/KernelSyntaxExamplesに多数のサン プルコードがある
Semantic Kernelで何が作れる? 名称 説明 Chatbot シンプルなユーザと会話するアプリケーション RAG 情報を検索してそれを元にユーザと対話する Copilot ユーザーと対話して何かを作業する
Fully autonomus 最小限の人間の入力で完全に自動化されたアプリケーション (まだこわい?)
Semantic Kernelの構成要素 手順を実行するために必要な機能を実装する。 例)データベースから情報を取得する Bingから情報を取得する 電子メールを送信する 以前の会話を記憶したり取得したりする 手順を実行する順番を計画する。 ユーザとどのように対話するかを指示する。 いわゆる「メタプロンプト」または「指示」と呼ばれるも
の。
OpenAIプラグインとは • Semantic KernelのPlugin+ OpenAPI+マニフェストファイル • https://github.com/microsoft/se mantic-kernel- starters/tree/main/sk-csharp- chatgpt-plugin
上記をテンプレートとして作成可能である がSemantic Kernelのバージョンが現在 0.19.230804.2-preview 最新まで変更かけるの結構つらい。。。 • Semantic KernelのPlugin・・・ネイティ ブ関数の書き方を知っていればいける!
プラグインとは? • AIアプリやサービスに公開できる関数のグループ • Semantic Kernelではプラグインの関数を自動または手動の 関数呼び出しまたはプランナーを使用して自動的に呼び出すこと ができる。
ネイティブ関数 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は説明文を読み取り適切な関数を実行します。 (複数該当すれば複数実行することも!) 説明文が重要!
呼び出し側 using Microsoft.SemanticKernel.Connectors.OpenAI; using Microsoft.SemanticKernel; using ConsoleApp17; Kernel kernel =
Kernel.CreateBuilder() .AddAzureOpenAIChatCompletion( “デプロイ名”, “エンドポイント”, “APIキー”).Build(); kernel.Plugins.AddFromType<ColorMode>(); 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と会話する
実行結果 画面モードの切り替え 画面モードの問い合わせ 画面モードの切り替え 関数を呼び出さない質問
デモ
タスクの自動化がとても簡単! • コンソールの文字色を変える例を見たとおりユーザからの入力に 対して適切な関数(メソッド)が呼び出されタスクを行うことがで きる。 • どの程度精度が出るかは、選択したモデルと説明文(プロンプト能 力)次第。
天気を取得してみる 1. 場所コードを取得する 2. 場所コードをもとにその場所の天気を取得する • 以上のような2段階の処理になります。 これまではPlannerでの関数の実行順を制御していましたが今 回はあえて自動実行で試してみたいと思います。 •
gpt-4のモデルで実行すると比較的成功率が高いようです。
場所コードを取得する • まず、場所コードを返すメソッドを実装。 • ポイントはメソッドにつける説明文と引数に つける説明文 Plannerや関数の自動呼び出しによって 使用される [KernelFunction, Description("天気を取得する場所コードを取得します。")]
public static int GetPlaceId([Description("天気を取得する場所")] string place) { var res = place switch { "東京" => 130000, "横浜" => 140000, "名古屋" => 230000, "京都" => 260000, "静岡" => 220000, "福井" => 180000, "新潟" => 150000, "富山" => 160000, "金沢" => 170000, "岐阜" => 210000, "長野" => 200000, "高山" => 190000, "松本" => 200000, "大津" => 250000, "大阪" => 270000, "札幌" => 016000, "仙台" => 040000, "福岡" => 400000, "那覇" => 471000, .... _ => throw new ArgumentException("対応していない地域です。") }; return res; }
場所コードに基づいて天気を返す • 先ほどの場所コードを求める関数が先に実 行されることを前提に場所コードを引数に する • 戻り値は、JSON • AIにJSONをよしなに解析させていい感じ に天気を答えてくれる(はず)
• 呼び出し側は先ほどと同じ [KernelFunction, Description("場所コードの地域の天気を返す")] public async Task<string> Weather([Description("場所コード")]int place) { return (await _client.GetAsync($"https://www.jma.go.jp/bosai/forecast/data/forecast/{place}.jso n")).Content.ReadAsStringAsync().Result; }
天気の実行結果 • 元となっているデータが少々 異なっているのですがそんな に間違ったJSONの読み取り はしてない印象。 • Plannerを書くのをサボって いるのにもかかわらずそこそ この結果が出るのはすごい。
デモ
参考文献 • 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
おしまい おしまい