语义内核 Semantic Kernel:微软的 AI 编排框架

FreeGuideOnline 最新 2026-06-14

什么是语义内核

语义内核(Semantic Kernel,简称 SK)是微软推出的一款轻量级开源软件开发工具包(SDK),旨在帮助开发者将大型语言模型(LLM)与传统编程语言无缝结合,构建智能应用。它不是一个独立的 AI 模型,而是一个 AI 编排框架,让你可以用 C#、Python 或 Java 等语言“编排”复杂的 AI 工作流,召唤各种 AI 服务完成实际任务。

与直接调用 OpenAI、Azure OpenAI 等 API 不同,语义内核提供了一套更高层次的抽象:插件(Plugins)、内核(Kernel)、规划器(Planner)记忆(Memory)。通过这些组件,你可以把 AI 能力像搭积木一样组合起来,让程序不仅能“聊天”,还能执行具体操作,例如发送邮件、查询数据库、调用外部 API 等。

简单比喻:如果说大语言模型是“大脑”,语义内核就是连接大脑与“身体”(业务系统)的 神经系统。它负责把用户意图翻译成可执行的步骤,然后调用相应的技能。


为什么需要语义内核

在生成式 AI 应用开发中,仅靠“提示词 + 模型回答”的模式存在明显局限:

  • 缺乏结构化行动:模型只能返回文本,无法直接操作实际系统。
  • 难以组合复杂流程:一个真实任务往往需要多步推理、多次调用不同工具。
  • 上下文记忆管理繁琐:需要手动维护对话历史和外部知识。
  • 多模型、多服务异构:不同服务接口各异,集成成本高。

语义内核正是为了解决这些痛点而设计。它的核心价值包括:

  1. 统一编排层:将 OpenAI、Azure OpenAI、Hugging Face 等模型,与自定义代码、API、数据库等作为可复用的“技能”统一管理。
  2. 原生集成 LLM:通过“语义函数”自然描述任务,由 AI 理解并生成执行计划。
  3. 可扩展插件生态:轻松封装现有业务逻辑,让 AI 能够调用。
  4. 自动规划与执行:给定目标,内核可以自动生成多步计划并在运行时动态选择插件。
  5. 多语言支持:目前支持 C#、Python、Java,未来会扩展到更多语言。

核心架构概览

语义内核的整体架构分为以下几个核心层,从上到下依次是:

  • 表现形式层(Orchestration Layer)
    负责理解用户意图、规划任务流程、调用相关技能。核心组件是内核(Kernel)和规划器(Planner)。

  • 技能层(Skills / Plugins Layer)
    可复用的功能单元,分为两大类:语义技能(用自然语言描述,由 LLM 生成)和原生技能(用代码实现的函数)。

  • AI 连接器层(AI Connectors Layer)
    封装对各类 AI 服务的调用,例如 Completion(文本生成)、Embedding(嵌入)、Chat(对话)等。支持 OpenAI、Azure OpenAI 等,并保持接口一致。

  • 记忆层(Memory Layer)
    提供长期和短期记忆能力,支持向量嵌入、语义搜索、键值存储等,让 AI 应用能记住上下文和外部知识。

  • 基础抽象层(Kernel Core)
    包括日志、诊断、配置、管线等基础设施,保障框架轻量、可观测、易扩展。

这些层协同工作,使开发者可以聚焦于业务逻辑,而不用操心底层 AI 调用的细节。


快速上手:从零搭建一个智能应用

以下以 Python 版本为例,演示如何用语义内核构建一个简单的“天气预报助手”应用,该应用能理解用户问题并调用外部天气 API 获取实时天气。

准备工作

  1. 安装 Python 3.10 及以上版本。
  2. 安装语义内核包及其 OpenAI 连接器:
pip install semantic-kernel
  1. 获取 Azure OpenAI 或 OpenAI 的 API Key 及相应端点。在本例中,我们使用 OpenAI 的 GPT-3.5 Turbo 模型。

步骤一:初始化内核

创建 kernel.py 文件,导入必要模块并配置 AI 服务:

import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion

# 初始化内核
kernel = sk.Kernel()

# 配置 OpenAI 聊天服务(也可使用 Azure OpenAI)
api_key = "你的OpenAI密钥"
org_id = ""  # 可为空
service_id = "chat-gpt"
kernel.add_service(
    OpenAIChatCompletion(service_id=service_id, api_key=api_key, org_id=org_id)
)

print("内核初始化完成")

步骤二:创建原生插件(调用天气 API)

创建一个模拟的天气函数,实际应用中可接入真实 API。定义原生插件:

from typing import Annotated
from semantic_kernel.functions import kernel_function

class WeatherPlugin:
    """天气查询插件"""

    @kernel_function(
        description="根据城市名称获取当前天气信息",
        name="get_weather"
    )
    def get_weather(
        self,
        city: Annotated[str, "城市名称,例如 '北京'"]
    ) -> str:
        """模拟返回天气数据"""
        # 实际应调用API,这里返回静态示例
        return f"{city}今天晴,气温15-25℃,微风。"

# 将插件注册到内核
weather_plugin = WeatherPlugin()
kernel.add_plugin(weather_plugin, plugin_name="WeatherPlugin")

kernel_function 装饰器将普通函数标记为可被内核调用的“技能”,description 参数会帮助 LLM 理解该函数的功能,以便在规划时自动选择。

步骤三:创建并运行对话

现在可以让内核根据用户输入自动决定是否调用天气插件,并生成最终回答。

async def main():
    # 获取聊天服务
    chat = kernel.get_service(service_id="chat-gpt")

    # 设置对话上下文,可以让模型知道可用的插件
    settings = kernel.get_prompt_execution_settings_from_service("chat-gpt")
    settings.function_call_behavior = sk.FunctionCallBehavior.Auto()  # 自动调用函数

    # 用户问题
    user_input = "请问上海今天天气怎么样?"

    print(f"用户: {user_input}")

    # 调用聊天完成,内核会自动处理函数调用
    response = await kernel.invoke(
        chat,
        prompt=user_input,
        settings=settings
    )

    print(f"助手: {response}")

# 运行异步主函数
import asyncio
asyncio.run(main())

运行时,语义内核会自动分析用户意图,识别出需要查询天气这一事实,然后调用 WeatherPlugin 中的 get_weather 函数,并将返回结果交给 LLM 整理成自然语言回复。最终输出类似:

用户: 请问上海今天天气怎么样?
助手: 根据查询,上海今天晴,气温15-25℃,微风。

如果用户只是闲聊,没有触发插件的需要,内核会直接由 LLM 生成回答,不会调用任何函数。


关键概念详解

插件

插件是语义内核中最核心的功能单元,分为两种:

  • 原生函数:直接用编程语言(如 Python/C#)编写,使用 @kernel_function 装饰,可以操作数据库、文件系统、第三方 API 等。
  • 语义函数:用自然语言描述任务的“提示词模板”。内核会将其发送给 LLM,由 AI 生成结果。语义函数本质上是 Prompt 模板 + 配置 的封装,支持变量输入。

两种函数都可以通过内核统一调用,并且可以组合成复杂流程。

规划器

规划器是语义内核的“大脑”,它能够根据用户的目标,自动创建一个多步骤计划并执行。例如,用户说“帮我整理明天的会议纪要,然后发邮件给团队”,规划器会生成计划:1) 从日历中获取会议信息;2) 总结要点;3) 调用邮件插件发送。规划器有多种实现:

  • StepwisePlanner:逐步推理,类似于 ReAct 模式,在每一步观察结果后决定下一步动作。
  • SequentialPlanner:基于 LLM 一次性生成线性步骤列表,然后顺序执行。
  • ActionPlanner:仅选择一个最合适的函数并执行。

规划器极大简化了复杂任务的编排,开发者通常只需定义好原子技能,剩下的组合工作交给内核。

记忆

记忆功能让 AI 应用具备上下文存储和检索能力。语义内核提供了两个层面的记忆:

  • 对话历史:短期记忆,通过 ChatHistory 对象维护。
  • 长期记忆:基于向量数据库的持久存储。可以利用 TextMemoryPlugin 将文本、事实等保存为向量嵌入,之后通过语义相似度检索相关信息。

记忆通常与嵌入服务(如 OpenAI Embedding)及向量存储(如内存、Chroma、Pinecone 等)配合使用。这为 RAG(检索增强生成)等模式提供了开箱即用的支持。


进阶用法:结合规划器与记忆

让我们构建一个稍复杂的例子:一个“读书笔记助手”,它可以记录书名、作者和读后感想,并根据用户提问回忆以前的笔记。我们将使用顺序规划器和文本记忆。

创建笔记插件

from semantic_kernel.functions import kernel_function
from semantic_kernel.memory import VolatileMemoryStore
from semantic_kernel.core_plugins import TextMemoryPlugin
from semantic_kernel.connectors.ai.open_ai import OpenAITextEmbedding

class NotePlugin:
    @kernel_function(description="保存一条读书笔记,包含书名、作者和感想")
    async def save_note(
        self,
        title: Annotated[str, "书名"],
        author: Annotated[str, "作者"],
        feeling: Annotated[str, "个人感想"]
    ) -> str:
        # 这里我们会用记忆保存,所以此函数只返回确认信息
        return f"笔记已记录:《{title}》- {author},感想:{feeling}"

    @kernel_function(description="搜索之前保存的读书笔记,基于查询描述")
    async def search_notes(
        self,
        query: Annotated[str, "查询描述"]
    ) -> str:
        # 实际搜索由记忆层完成,此函数仅作为触发点
        return query  # 规划器会将其结果传给记忆

配置记忆并注册插件

kernel = sk.Kernel()
# ... 添加 OpenAI 聊天和嵌入服务

# 设置嵌入服务
embedding_gen = OpenAITextEmbedding(ai_model_id="text-embedding-ada-002", api_key=api_key)
kernel.add_service(embedding_gen)

# 使用易失性内存存储(实际项目建议用持久化存储)
memory_store = VolatileMemoryStore()
memory = TextMemoryPlugin(memory_store=memory_store, embedding_generator=embedding_gen)
kernel.add_plugin(memory, "Memory")

kernel.add_plugin(NotePlugin(), "Notes")

当用户说“保存《百年孤独》的笔记”时,规划器会生成计划:调用 save_note 并获得确认文本,同时记忆插件可进一步将内容存入长期记忆。当用户问“我保存过哪本关于孤独的书?”时,会触发 search_notes,再由记忆进行语义检索。


与传统开发方式的对比

方面 直接调用 LLM API 使用语义内核
工具调用 需手动解析函数调用,编写大量胶水代码 自动函数选择与调用,声明式定义
多步流程 需要自己管理状态、循环、错误处理 规划器自动生成并执行计划
记忆管理 自己实现嵌入、检索、对话历史维护 内置记忆插件,一键集成
可维护性 业务逻辑与 AI 调用交织,复杂后难维护 插件化架构,职责清晰,易于测试
多模型支持 每个模型单独编写适配器 统一连接器接口,切换模型只需改配置

语义内核通过将“做什么”与“怎么做”解耦,让开发者聚焦于定义能力(插件),而让 AI 模型自行决定如何组合这些能力。


生态与资源

微软将语义内核定位为“AI 时代的操作系统内核”,希望它成为连接 AI 服务与真实世界的通用中间件。随着版本迭代,内置插件和规划器会越来越丰富,未来甚至可能集成更多模态(视觉、语音等)。


总结

语义内核为 AI 应用开发提供了一个成熟且高度可延伸的编排框架。它让开发者不必再从零开始拼凑提示工程、工具调用和状态管理,而是站在巨人的肩膀上,用插件、规划器、记忆等抽象快速构建具有实际行动能力的智能系统。无论是创建简单的聊天机器人,还是构建能操作数十种业务系统的 Agent,语义内核都能显著降低复杂度,提升开发效率。

如果你想立即尝试,推荐从官方示例“Copilot Chat”开始,感受语义内核如何将自然语言转化为切实行动。在这个 LLM 驱动的时代,掌握语义内核将成为 .NET/Python/Java 开发者构建下一代应用的关键技能。