Semantic Kernelとは?

Semantic Kernel (引用:セマンティックカーネルの概要)
Semantic Kernelとは、大規模言語モデル(LLM)を中核に据えたAIエージェントを構築するためのオープンソース開発キットです。Microsoftが提供するこのフレームワークの特徴は、LLMを単なる対話型AIとしてではなく、既存のコードやAPIを操作してタスクを遂行するエージェントの頭脳として実装できる点にあります。Semantic Kernelでは、C#、Python、Javaのいずれかのプログラミング言語を使用して、ユーザーの意図を理解し、自律的にツールを選んで行動するAIエージェントを構築できます。
従来、AIエージェントを構築する際には、API呼び出しの管理、プロンプトの処理、会話履歴の保持など、多くの機能を開発者が自力で実装する必要がありました。Semantic Kernelは、これらの煩雑な作業を標準化された機能として提供することで、開発工数の削減を実現します。
そもそもAIエージェントとは?
AIエージェントとは、与えられた目標に対して自律的に判断し、必要な行動を実行するAIシステムを指します。従来のAIチャットボットが単に質問に答えるだけであったのに対し、AIエージェントは状況を分析し、適切なツールや機能を選択して問題解決を図ります。
例えば、ユーザーが「来週の東京出張の準備をして」と依頼した場合、AIエージェントは次のような処理を自律的に実行します。まず、カレンダーAPIを呼び出して出張日程を確認します。次に、交通機関の予約システムと連携して新幹線のチケットを手配し、宿泊施設の検索APIで条件に合うホテルを探します。最後に、これらの情報をまとめた出張計画書を作成して提示します。
このプロセスにおいて重要な点は、ユーザーが個々のステップを指示する必要がないことです。AIエージェントは目標達成のために必要な手順を自ら推論し、適切なツールを順次呼び出していきます。Semantic Kernelは、このようなAIエージェントを構築するための基盤を提供するフレームワークとして設計されています。次のセクションからは、Semantic Kernelについて詳しく解説します。
Semantic Kernelの主な機能

Semantic Kernelの構造 引用:カーネルについて
このセクションでは、Semantic Kernelが提供する機能について詳しくご説明します。
カーネル
カーネルは、Semantic Kernelの中核となる機能です。AIモデル、プラグイン、メモリなどの各種コンポーネントを統合管理し、それらを協調動作させる役割を担います。
開発者は、カーネルを通じてAIモデルへのリクエストを送信し、必要に応じてプラグインを呼び出すことができます。
AIサービスコネクタ
AIサービスコネクタは、各種AIモデルへの接続を標準化する機能です。Azure OpenAI、Hugging Faceなど、異なるプロバイダのモデルに対して統一されたインターフェースでアクセスできます。
これにより、モデルの切り替えが容易になり、将来的なAIモデルの換装にも柔軟に対応できます。
プラグイン
プラグインは、AIモデルの能力を拡張する機能です。既存のコードやAPIをプラグインとして登録することで、AIモデルが必要に応じてそれらを呼び出せるようになります。プラグインの実装方法は、大きく以下の2つに分類されます。
ネイティブコードプラグイン
C#、Python、Javaで記述した関数をプラグインとして登録する方法です。KernelFunction属性(Pythonではkernel_functionデコレータ)を付与したメソッドを定義することで、AIモデルから呼び出し可能な関数として認識されます。関数には、目的や入出力を説明するメタデータ(.NET側ではDescription属性など、Pythonではkernel_functionのdescriptionなど)を付与します。
OpenAPIプラグイン
REST APIの仕様書であるOpenAPI定義に基づいてプラグインを自動生成する方法です。既存のWebサービスがOpenAPI仕様を公開している場合、その定義ファイルを指定するだけでプラグインを作成できます。
関数呼び出しの自動実行
Semantic Kernelの特徴的な機能として、関数呼び出しの自動実行があります。これは、AIモデルがユーザーの要求を分析し、目標達成に必要な関数を自律的に選択して実行する仕組みです。FunctionChoiceBehaviorの設定により、この動作を制御できます。
Auto設定を有効にすると、モデルのツール呼び出し機能を用いて、登録されている関数(プラグイン)から必要なものを選び、必要に応じて呼び出し結果を取り込んで回答を生成します。例えば、「東京の天気を教えて」という質問に対し、天気情報を取得するプラグインが登録されていれば、AIモデルはそのプラグインを呼び出し、結果を組み込んだ回答を生成します。
メモリとベクタデータベース連携
メモリは、(1) 会話の履歴(ChatHistory)を保持する仕組みと、(2) ベクトル検索を用いた「知識メモリ(RAG)」を扱う仕組みを指して語られることがあります。
Semantic Kernelは、Azure AI SearchやElasticsearchなど、複数のベクタストア/検索基盤と連携してRAGを実装できるように設計されています。
RAGでは、ユーザーの質問に関連する情報をデータベースから検索し、その情報を基にAIモデルが回答を生成します。社内文書やマニュアルをデータベースに保存しておくことで、AIエージェントが最新の情報に基づいて正確な回答を提供できるようになります。
マルチエージェントシステム
複雑な業務プロセスに対応するため、Semantic Kernelはマルチエージェントシステムの構築をサポートしています。複数の専門的なエージェントを協調動作させることで、高度な問題解決が可能になります。
エージェント間の連携は、Semantic KernelのAgents(Agent Framework)などを通じて実装します。各エージェントは独自のプラグインセットと処理ロジックを持ち、必要に応じて他のエージェントに処理を委譲します。
セキュリティとモニタリング
エンタープライズ環境での利用を想定し、Semantic Kernelはセキュリティ機能とモニタリング(可観測性)に関する仕組みを提供しています。フィルタを使用することで、プラグイン呼び出しの前後に検証処理を挿入できます。これにより、不適切な引数の検出や、機密情報の漏洩防止などのセキュリティ対策を実装できます。
モニタリングについては、アプリケーション側でログ/メトリクス/トレースを収集・可視化できるよう、OpenTelemetry互換の出力を利用する形が基本です。AIモデルへのリクエストやプラグイン実行の状況を観測可能にし、パフォーマンス分析、コスト管理、問題診断に活用します。
Semantic Kernelの料金
2026年1月現在、Semantic Kernelはオープンソースとして提供されており、無料で利用可能です。
ただし、利用するAIモデル(Azure OpenAI、OpenAIなど)やホスティングサービスのコストは別途計上が必要です。
最新情報は、Semantic Kernel公式ドキュメントをご覧ください。
Semantic Kernelの利用手順
それでは、Semantic Kernelを実際に利用するための手順をご説明します。ここでは、Azure OpenAIを使用する前提で、Pythonでの実装例を示します。
前提条件
Azure OpenAIを利用する場合、Azureアカウントの作成が必要です。Azure PortalからAzure OpenAIリソースを作成し、デプロイするAIモデルを選択します。作成後、エンドポイントURLとAPIキーを控えておきましょう。これらの認証情報は、Semantic KernelからAIモデルに接続する際に使用します。
1, パッケージのインストール
以下のpipコマンドでパッケージのインストールを行います。
pip install "semantic-kernel[azure]"
# Entra ID(DefaultAzureCredential等)で認証する場合に利用します
pip install azure-identity
2. 基本的な実装
基本的な実装例として、以下にAIモデルに質問して回答を得るコードを示します。
semantic_kernelモジュールをインポートし、Kernelインスタンスを作成します。add_serviceでAzure OpenAIサービスを追加し、invoke_promptでAIモデルに問い合わせを行います。
import asyncio
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
async def main():
kernel = Kernel()
service_id = "default"
kernel.add_service(
AzureChatCompletion(
service_id=service_id,
deployment_name="deployment-name",
endpoint="https://your-endpoint.openai.azure.com",
api_key="your-api-key"
)
)
result = await kernel.invoke_prompt("Semantic Kernelについて簡潔に説明してください")
print(result)
if __name__ == "__main__":
asyncio.run(main())
以下のような出力が得られます。
**Semantic Kernel(セマンティック・カーネル)**は、**大規模言語モデル(LLM)をアプリケーションに組み込むためのオープンソースSDK**です。
主に **Microsoft** が提供しています。
### 要点(簡潔)
* **目的**:LLM(例:ChatGPT系)を使った機能を、実用的なアプリに安全・再利用可能に組み込む
* **特徴**:
* プロンプトを**関数(スキル)**として定義・再利用
* **C# / Python / Java**などから利用可能
* 外部API・データベース・プラグインと**LLMをオーケストレーション**
* メモリ(ベクトル検索)やツール呼び出しを統合
* **用途例**:業務自動化、チャットボット、要約・検索、エージェント型アプリ
一言で言うと、**「LLMを中心に、コード・データ・ツールをつなぐための実装フレームワーク」**です。
3. プラグインの追加
次に、kernel_functionデコレータを使用してプラグイン機能を実装します。プラグインを追加することで、AIモデルが外部の機能を呼び出せるようになります。
型ヒントとしてAnnotatedを使用することで、戻り値の説明を追加できます。
from typing import Annotated
from semantic_kernel.functions import kernel_function
class TimePlugin:
@kernel_function(name="get_current_datetime", description="現在の日時を取得します")
def get_current_datetime(self) -> Annotated[str, "現在の日時"]:
from datetime import datetime
return datetime.now().strftime("%Y年%m月%d日 %H時%M分")
プラグインをカーネルに追加する際は、add_pluginを使用します。
# main()内で、Kernel作成・サービス追加の後に実行します
kernel.add_plugin(TimePlugin(), plugin_name="Time")
4. 関数の自動呼び出し設定
プラグインが登録されただけでは、AIモデルは自動的にそれらを呼び出しません。FunctionChoiceBehaviorの設定により、自動呼び出しを有効化します。
FunctionChoiceBehaviorをAutoに設定し、この設定をinvoke_promptに渡すことで、AIモデルが必要に応じてプラグインを呼び出すようになります。
import asyncio
from typing import Annotated
from semantic_kernel import Kernel
from semantic_kernel.functions import kernel_function
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.connectors.ai.function_choice_behavior import FunctionChoiceBehavior
from semantic_kernel.connectors.ai.open_ai.prompt_execution_settings.azure_chat_prompt_execution_settings import AzureChatPromptExecutionSettings
class TimePlugin:
@kernel_function(name="get_current_datetime", description="現在の日時を取得します")
def get_current_datetime(self) -> Annotated[str, "現在の日時"]:
from datetime import datetime
return datetime.now().strftime("%Y年%m月%d日 %H時%M分")
async def main():
kernel = Kernel()
kernel.add_service(
AzureChatCompletion(
service_id="default",
deployment_name="deployment-name",
endpoint="https://your-endpoint.openai.azure.com",
api_key="your-api-key"
)
)
kernel.add_plugin(TimePlugin(), plugin_name="Time")
settings = AzureChatPromptExecutionSettings(
function_choice_behavior=FunctionChoiceBehavior.Auto()
)
result = await kernel.invoke_prompt(
"現在の時刻は何時ですか",
settings=settings
)
print(result)
if __name__ == "__main__":
asyncio.run(main())
**現在の時刻**:**0時49分** です。
これにより、「現在の時刻は何時ですか」という質問に対して、AIモデルは自動的にTimePluginのget_current_datetime関数を呼び出し、その結果を使って回答を生成します。
上記のステップで、Semantic Kernelを使用してAIエージェントを構築できます。Semantic Kernelの公式リポジトリでは、より詳細な実装例が公開されています。本記事と併せてご確認ください。
Semantic Kernelの使い方のコツ
このセクションでは、Semantic Kernelを効果的に活用するためのコツをご説明します。これらのベストプラクティスを実践することで、開発効率と出力品質の向上が期待されます。
プラグイン設計
プラグインの設計において、関数の説明文は重要です。AIモデルは、この説明文を基に関数の使用判断を行うため、明確で具体的な記述が求められます。曖昧な表現や専門用語の多用は避け、何を入力として受け取り、何を出力するのかを平易な言葉で説明します。
関数名は、その機能を端的に表す動詞で始める形式が推奨されます。GetCurrentWeather、SearchProducts、CreateOrderなど、処理内容が一目で理解できる命名を心がけましょう。
パラメータの説明も重要です。各パラメータに対してDescription属性を設定し、期待される値の形式や範囲を明示します。例えば、日付を受け取るパラメータであれば、「YYYY-MM-DD形式の日付文字列」と具体的に指定します。
プロンプトエンジニアリング
プロンプトの設計は、AIモデルの出力品質に直結します。システムプロンプトでは、エージェントの役割、対応方針、制約事項を明確に定義しましょう。例えば、「専門的な内容は平易な言葉で説明する」「不確実な情報は推測せず、確認を求める」といった指針を含めます。
コンテキストの提供も重要な要素です。業務固有の用語や略語がある場合、それらの定義をシステムプロンプトに含めることで、適切な理解を促します。
システムのテスト
Semantic Kernelを使用したシステムのテストには、特有の考慮事項があります。AIモデルの出力は確率的であり、同じ入力に対しても異なる出力が生成される場合があります。完全一致での検証ではなく、出力が期待される要素を含んでいるかを確認する方式が適切です。
プラグインのテストは、モックオブジェクトを使用して独立して実行できます。AIモデルへの依存を排除することで、プラグイン自体のロジックを効率的に検証できます。
Microsoft Foundryとの連携
プラグインやプロンプトにエンドポイントやモデル名を直接書き込まず、設定ファイルや環境変数から読み込む構成にしておくことで、Foundry上のモデルを柔軟に切り替えられます。
Semantic Kernel側ではオーケストレーションに集中し、モデル管理やバージョン管理はFoundry側に寄せる役割分担を意識すると、保守性が高まります。Tracing UIなどの観測機能を併用することで、ボトルネックの可視化やチューニングサイクルも回しやすくなります。
Foundry Localとの連携
開発・検証ではFoundry Localを使い、本番ではFoundryへ切り替える段階的アプローチが有効です。同じプラグイン設計を維持したまま接続先だけ変更できるため、ローカルで挙動を固めてからクラウドでスケールさせる、というPoCから本番への移行がスムーズになります。
機密データやオフライン環境での検証が必要な場合にも、Foundry Localを活用することでコストを抑えながら開発できます。
Semantic Kernelの活用シーン
Semantic Kernelは、その柔軟性から多様なビジネスシーンでの活用が期待されます。ここでは、企業におけるSemantic Kernelの具体的な活用シーンをご紹介します。
カスタマーサポートの自動化
Semantic Kernelを活用することで、顧客からの問い合わせを分類し、FAQ検索、製品情報提供、トラブルシューティングなどを自動で実行するエージェントを構築できます。
まず問い合わせの内容を分析するプラグインを用意し、FAQデータベースをベクタストアに格納して類似する質問を検索するプラグインを実装します。さらに、顧客情報を取得するプラグインを追加することで、パーソナライズされた対応が可能になります。
この活用により、一次対応の自動化が実現し、オペレーターは複雑な案件に集中できるようになります。また、24時間対応が可能となり、顧客満足度の向上も期待されます。
社内ナレッジ管理とドキュメント検索
社内に蓄積された文書、マニュアル、過去のプロジェクト資料などを活用するシステムを構築できます。従業員が自然言語で質問すると、関連する文書を検索し、要点を抽出して回答するエージェントをSemantic Kernelを用いて実装することが可能です。
各種文書をベクタデータベースに格納し、Azure AI Searchを活用してRAGを実装することで、セマンティック検索が可能になります。
これにより、情報の検索時間の削減が期待されます。新入社員のオンボーディング支援や、複数部門にまたがる知識の共有にも有効です。
人事業務の効率化
採用プロセスの自動化にもSemantic Kernelを活用できます。応募者からの質問に自動で回答し、面接日程の調整を行い、必要書類の案内を送るエージェントを実装できます。
また、社内規程や福利厚生に関する応募者からの問い合わせに対応するシステムも構築可能です。これにより、人事業務の負担が軽減され、業務効率の向上が期待できます。
Semantic Kernelの注意点
このセクションでは、Semantic Kernelを導入する際に留意すべき点をご説明します。これらの注意点を理解し、適切な対策を講じることで、安全で効果的なシステム構築が可能になります。
セキュリティとプライバシー
機密情報の取り扱いには特に注意が必要です。機密性の高い情報を含むプロンプトを送信する前に、AIモデルのデータの取り扱い方針を確認しましょう。Azure OpenAIなどのサービスでは、プロンプトや生成結果が基盤モデルの学習・再学習・改善に使用されない旨が明記されています。
アクセス制御の実装も重要です。プラグインが外部システムにアクセスする際の適切な認証を実装します。APIキーやアクセストークンは、環境変数やシークレット管理サービスを使用して安全に管理し、ソースコードに直接記述することは避けましょう。
出力の品質と信頼性
AIモデルの出力は確率的であり、常に正確とは限りません。特に重要な業務判断を行う際には、人間による最終確認のプロセスを組み込むことが推奨されます。
プロンプトで「確実な情報のみを提供する」「不明な場合は推測しない」といった指示を明確に与えることで、ハルシネーションを抑制することができます。また、出力の根拠となる情報源を示すよう求めることで、検証可能性を高めることが可能です。
法的コンプライアンス
AIを活用したシステムには法的な考慮事項が存在し、GDPRなどのデータ保護規制に準拠する必要があります。ユーザーの同意取得、データの保管期間、削除権の保障など、要件を満たす仕組みを実装しましょう。
AIの判断により重要な業務決定を行う場合、その根拠を説明できる仕組みを整備します。AIモデルによる推論のログを保存し、必要に応じて判断プロセスを検証できるようにすることで、透明性と説明可能性を担保することができます。
まとめ
Semantic Kernelは、AIエージェントやマルチエージェントシステムを構築するためのオープンソースSDKです。本記事では、Semantic Kernelの役割やアーキテクチャ、主な機能、具体的な活用例、導入時の注意点について解説しました。
Semantic Kernelを活用することで、AIモデルを既存のシステムに統合し、業務効率化や新たな価値創出を実現できます。特に、プラグインの追加やメモリ機能、関数呼び出しの自動化などの機能を活用することで、柔軟かつ拡張性の高いAIエージェントを構築可能です。
導入にあたっては、セキュリティやプライバシー、出力の品質管理、法的コンプライアンスへの配慮が重要です。これらのポイントを押さえた上で、Semantic Kernelを効果的に活用し、AI技術をビジネスに取り入れていきましょう。
東京エレクトロンデバイスは、Semantic Kernelを活用したAIアプリケーション開発や、Microsoft Agent Frameworkへの移行支援を行っています。
AIエージェントの構築や既存システムとの連携にご興味のある方は、お気軽にご相談ください。





