跳转至

Microsoft Semantic Kernel

为什么要学

Semantic Kernel 是微软官方的 AI 编排 SDK,是构建企业级 AI 应用的首选:

  • 微软官方:与 Azure OpenAI、Microsoft 365 深度集成
  • 多语言:C#、Python、Java 三语言支持
  • 企业级:内置安全、监控、可靠性模式
  • 插件系统:可复用的 AI 能力模块
  • Agent 框架:内置多 Agent 编排能力
  • 渐进式:从简单调用到复杂 Agent,平滑升级

如果你在 .NET/Java 生态工作,或需要与 Azure/Microsoft 服务集成,Semantic Kernel 是最自然的选择。

核心概念

白话解释

Semantic Kernel 的设计哲学:"让 AI 成为你应用的一个可靠组件"

  • Kernel(内核):中央协调器,管理所有 AI 服务和插件
  • Plugin(插件):一组相关的 AI 函数
  • Function(函数):一个具体的 AI 能力(可以是 prompt 或原生代码)
  • Planner(规划器):让 AI 自动编排函数调用顺序

核心概念对照表

概念说明类比
Kernel核心运行时,管理服务和插件操作系统内核
Plugin一组相关函数的集合应用/模块
KernelFunction单个可调用的函数API端点
Prompt Function用prompt模板定义的函数模板化的AI调用
Native Function用代码实现的函数普通代码函数
Connector连接AI服务(OpenAI/Azure等)数据库驱动
MemoryAI的记忆系统缓存/数据库
Planner自动规划执行步骤任务调度器
Agent能自主行动的AI实体自动化员工

安装配置

Python 安装

pip install semantic-kernel

# 额外连接器
pip install semantic-kernel[openai]
pip install semantic-kernel[azure]
pip install semantic-kernel[hugging_face]

C# 安装

dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.SemanticKernel.Plugins.Core
dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI

环境配置

# OpenAI
export OPENAI_API_KEY="sk-..."

# Azure OpenAI
export AZURE_OPENAI_API_KEY="..."
export AZURE_OPENAI_ENDPOINT="https://xxx.openai.azure.com/"
export AZURE_OPENAI_DEPLOYMENT_NAME="gpt-4o-mini"

快速上手

Python 基础用法

import asyncio
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion

async def main():
    # 1. 创建Kernel
    kernel = Kernel()

    # 2. 添加AI服务
    kernel.add_service(OpenAIChatCompletion(
        service_id="chat",
        ai_model_id="gpt-4o-mini"
    ))

    # 3. 创建Prompt函数
    summarize = kernel.add_function(
        plugin_name="TextPlugin",
        function_name="summarize",
        prompt="用一句话总结以下文本:\n{{$input}}\n总结:"
    )

    # 4. 调用
    result = await kernel.invoke(summarize, input="人工智能是计算机科学的一个分支,它试图理解智能的实质,并生产出一种能以与人类智能相似的方式做出反应的智能机器。")

    print(result)

asyncio.run(main())

C# 基础用法

using Microsoft.SemanticKernel;

var kernel = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion("gpt-4o-mini", Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
    .Build();

var result = await kernel.InvokePromptAsync(
    "用一句话总结: {{$input}}",
    new() { ["input"] = "人工智能是计算机科学的一个分支..." }
);

Console.WriteLine(result);

创建插件

from semantic_kernel.functions import kernel_function

class MathPlugin:
    """数学计算插件"""

    @kernel_function(name="add", description="计算两个数的和")
    def add(self, a: float, b: float) -> float:
        return a + b

    @kernel_function(name="multiply", description="计算两个数的积")
    def multiply(self, a: float, b: float) -> float:
        return a * b

    @kernel_function(name="factorial", description="计算阶乘")
    def factorial(self, n: int) -> int:
        if n <= 1:
            return 1
        return n * self.factorial(n - 1)

# 注册插件
kernel.add_plugin(MathPlugin(), plugin_name="Math")

# AI可以自动调用这些函数

进阶用法

1. 自动函数调用(Tool Use)

from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
from semantic_kernel.connectors.ai.function_choice_behavior import FunctionChoiceBehavior
from semantic_kernel.contents import ChatHistory

async def auto_function_calling():
    kernel = Kernel()
    kernel.add_service(OpenAIChatCompletion(service_id="chat", ai_model_id="gpt-4o-mini"))
    kernel.add_plugin(MathPlugin(), "Math")

    # 启用自动函数调用
    settings = kernel.get_prompt_execution_settings_from_service_id("chat")
    settings.function_choice_behavior = FunctionChoiceBehavior.Auto()

    chat_history = ChatHistory()
    chat_history.add_user_message("计算 15 * 7 + 23 的结果")

    result = await kernel.invoke_prompt(
        "{{$chat_history}}",
        chat_history=chat_history,
        settings=settings
    )

    print(result)  # AI会自动调用Math插件的函数

2. Prompt 模板

# 使用Handlebars语法的模板
prompt_template = """
{{#system~}}
你是一位{{$role}}专家,请用中文回答。
{{~/system}}

{{#user~}}
请分析以下{{$type}}:
{{$content}}

要求:
1. 列出要点
2. 给出建议
{{~/user}}
"""

analysis_function = kernel.add_function(
    plugin_name="Analysis",
    function_name="analyze",
    prompt=prompt_template,
    template_format="handlebars"
)

result = await kernel.invoke(
    analysis_function,
    role="数据科学",
    type="代码",
    content="import pandas as pd\ndf = pd.read_csv('data.csv')\nprint(df.describe())"
)

3. Agent 系统

from semantic_kernel.agents import ChatCompletionAgent, AgentGroupChat

# 创建多个Agent
coder = ChatCompletionAgent(
    kernel=kernel,
    service_id="chat",
    name="Coder",
    instructions="你是一位Python开发者,负责编写代码"
)

reviewer = ChatCompletionAgent(
    kernel=kernel,
    service_id="chat",
    name="Reviewer",
    instructions="你是代码审查专家,负责审查代码质量和安全性"
)

# Agent协作
group_chat = AgentGroupChat(agents=[coder, reviewer])

async for message in group_chat.invoke("实现一个用户认证系统"):
    print(f"[{message.name}]: {message.content}")

4. 记忆系统

from semantic_kernel.memory import SemanticTextMemory
from semantic_kernel.connectors.memory.chroma import ChromaMemoryStore
from semantic_kernel.connectors.ai.open_ai import OpenAITextEmbedding

# 创建记忆存储
memory = SemanticTextMemory(
    storage=ChromaMemoryStore(persist_directory="./memory_db"),
    embeddings_generator=OpenAITextEmbedding(ai_model_id="text-embedding-3-small")
)

# 存储记忆
await memory.save_information(
    collection="knowledge",
    id="fact1",
    text="Python 3.12 于2023年10月发布,引入了更好的错误消息和性能提升"
)

# 检索记忆
results = await memory.search(
    collection="knowledge",
    query="Python最新版本有什么新特性?",
    limit=3
)

for r in results:
    print(f"相关度: {r.relevance} | {r.text}")

5. Planner(自动规划)

from semantic_kernel.planners import FunctionCallingStepwisePlanner

# 注册多个插件
kernel.add_plugin(MathPlugin(), "Math")
kernel.add_plugin(WebSearchPlugin(), "Search")
kernel.add_plugin(FilePlugin(), "File")

# 创建规划器
planner = FunctionCallingStepwisePlanner(
    service_id="chat",
    max_iterations=10
)

# AI自动规划执行步骤
result = await planner.invoke(
    kernel,
    "搜索Python 3.12的新特性,计算从3.10到3.12有几个版本,然后把总结保存到文件"
)

6. 过滤器(中间件)

from semantic_kernel.filters import FunctionInvocationContext

# 函数调用过滤器(类似中间件)
@kernel.filter(filter_type="function_invocation")
async def logging_filter(context: FunctionInvocationContext, next):
    print(f"调用函数: {context.function.name}")
    print(f"参数: {context.arguments}")

    await next(context)  # 执行函数

    print(f"结果: {context.result}")

# 提示渲染过滤器
@kernel.filter(filter_type="prompt_rendering")
async def prompt_filter(context, next):
    await next(context)
    print(f"渲染后的Prompt: {context.rendered_prompt}")

7. Azure OpenAI 集成

from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion

kernel.add_service(AzureChatCompletion(
    service_id="azure-chat",
    deployment_name="gpt-4o-mini",
    endpoint="https://myresource.openai.azure.com/",
    api_key="..."
))

常见问题

Q1: SK vs LangChain?

方面Semantic KernelLangChain
语言C#/Python/JavaPython/JS
生态Microsoft/Azure开源社区
设计插件+内核Chain+Agent
企业微软级别创业公司级
适合.NET/企业/AzurePython/快速原型

Q2: 支持哪些 AI 服务?

  • OpenAI (GPT-4o, GPT-4o-mini)
  • Azure OpenAI
  • HuggingFace
  • Ollama (本地模型)
  • Google AI (Gemini)
  • Mistral

Q3: 如何处理长对话?

# 自动截断历史
chat_history = ChatHistory()
chat_history.add_system_message("...")

# 设置最大token限制
settings = OpenAIPromptExecutionSettings(
    max_tokens=2000,
    # SK会自动管理历史截断
)

Q4: C# 和 Python 功能一样吗?

C# 是第一公民,功能最完整。Python 紧随其后,大部分功能同步。Java 版本相对滞后。

参考资源