セマンティックカーネルを試す
はじめに
Semantic Kernel の名前は以前から認識していたものの、実際に触れる機会がなかったため今回試しました。公式クイックスタートに従い必要な Azure リソース(Azure OpenAI など)を用意し、掲載されているコードを最小限調整するだけで動作します。
触ってみた感想として、CLI 上で継続的な対話が簡潔に書ける点が特徴です。従来のLLM API 呼び出しでは毎回自前で履歴を構築・送信する必要がありますが、Semantic Kernel はチャット履歴管理とツール(プラグイン)呼び出しを統合し、対話的実装を標準構造で組み込めます。
以下はCLIからの実行結果です。
知識のカットオフによって、返ってくる内容にはちょっと疑問がありますが、こんな感じで対話的にAIを扱うことができます。
ついかで
CLIから使えるAIとしてGeminiやClaudeがあります。
あれを起動すると、画面に「GEMINI」や「CLAUDE CODE」の文字が出てきてかっこいいので、同じように「SEMANTIC KERNEL」の文字を出してみようかと思います。
python code
def print_banner():
"""大きめの ASCII アートで Semantic Kernel バナーを表示 (80桁以内)"""
CYAN = "\033[96m"
BOLD = "\033[1m"
RESET = "\033[0m"
banner = r"""
┌───────────────────────────────────────────────────────────────────┐░
│ ███████╗███████╗███╗ ███╗ █████╗ ███╗ ██╗████████╗██╗ ██████╗ │░
│ ██╔════╝██╔════╝████╗ ████║██╔══██╗████╗ ██║╚══██╔══╝██║██╔════╝ │░
│ ███████╗█████╗ ██╔████╔██║███████║██╔██╗██║ ██║ ██║██║ │░
│ ╚════██║██╔══╝ ██║╚██╔╝██║██╔══██║██║╚████║ ██║ ██║██║ │░
│ ███████║███████╗██║ ╚═╝ ██║██║ ██║██║ ╚███║ ██║ ██║╚██████╗ │░
│ ╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚══╝ ╚═╝ ╚═╝ ╚═════╝ │░
│ │░
│ ██╗ ██╗███████╗██████╗ ███╗ ██╗███████╗██╗ │░
│ ██║ ██╔╝██╔════╝██╔══██╗████╗ ██║██╔════╝██║ │░
│ █████╔╝ █████╗ ██████╔╝██╔██╗██║█████╗ ██║ │░
│ ██╔═██╗ ██╔══╝ ██╔══██╗██║╚████║██╔══╝ ██║ │░
│ ██║ ██╗███████╗██║ ██║██║ ╚███║███████╗███████╗ │░
│ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚══╝╚══════╝╚══════╝ │░
└───────────────────────────────────────────────────────────────────┘░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
"""
subtitle = "Semantic Kernel Interactive CLI"
tips = [
"'exit' で終了",
]
print(f"{CYAN}{BOLD}{banner}{RESET}")
print(f"{CYAN}{subtitle}{RESET}")
print()
print("Tips:")
for i, t in enumerate(tips, 1):
print(f" {i}. {t}")
print()
プラグイン
API呼出し・データ検索やプロンプトテンプレートを “関数群” として Kernel に登録し、LLM からツール選択(Function Calling)で呼ばせる仕組みとして、プラグインというものが存在します。
サンプルにあるプラグインだと、Lightsのコードが書かれていますね。
モデルが回答途中で必要な関数(ツール)を自動選択できる状態になっていて、これによりユーザーは「ライトの状態を教えて」「3番のライトを消して」のような自然言語入力をするだけで LightsPlugin の get_lights / change_state が呼ばれ、結果が会話に統合されます。
kernel.add_plugin(
LightsPlugin(),
plugin_name="Lights",
)
とりあえずセマンティックカーネルを触れてみて、どんなものか少しは理解ができた気がします。
今後は、Azure AI FoundryのAIを勝手に呼んでくれる“操作可能な統合エージェント”を作ってみようかな。
Discussion