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
660
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 (preview)
tomokusaba
0
8
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
420
Azure Copilot Resiliency Agentをいろいろ試してみる
tomokusaba
0
160
30代後半からでも遅くないキャリア形成
tomokusaba
0
320
GitHub Copilotで書いたコード、レビューはどうしてる?
tomokusaba
0
67
Azure CAFで考えるAIエージェント導入の進め方
tomokusaba
1
130
GitHub Copilot app時代の開発フロー
tomokusaba
0
93
オートマトンと字句解析でRoslynを読む
tomokusaba
0
190
GitHub Copilot appとGitHub Copilot CLIとVS CodeのCopilot Chat Agent Modeの使い分け
tomokusaba
0
240
Other Decks in Programming
See All in Programming
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.2k
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
170
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
290
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
0
460
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
1k
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
260
Featured
See All Featured
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Navigating Team Friction
lara
192
16k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
New Earth Scene 8
popppiees
4
2.7k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Facilitating Awesome Meetings
lara
57
7.2k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Paper Plane
katiecoart
PRO
5
54k
Product Roadmaps are Hard
iamctodd
55
13k
Making Projects Easy
brettharned
120
6.8k
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
おしまい おしまい