想象你是一家电商公司的开发者,老板要求你给客服系统加个"AI大脑":用户发一句"我想买双轻便的户外跑鞋",系统能自动理解需求、查库存、推荐商品,甚至关联用户过往购买记录。直接调用GPT API?你得手动处理自然语言解析、数据库查询、上下文记忆,代码乱成一团;纯写传统逻辑?又无法应对千变万化的用户提问。
这时,Semantic Kernel(SK) 就像一位"智能翻译官"——它左手牵着大语言模型(LLM),右手拉着传统代码,让AI的"天马行空"和软件的"严谨可靠"完美协作。作为微软开源的AI编排框架,SK能让你用Python/C#等熟悉的语言,像搭积木一样组合AI能力和业务逻辑,轻松构建复杂智能应用。
痛点 | 形象比喻 | 后果 |
---|---|---|
逻辑割裂 | LLM调用像"外卖点餐",业务代码像"自己做饭",两者各干各的 | 代码混乱,维护成本高 |
上下文失忆 | 聊天机器人聊两句就忘事,像"金鱼的记忆" | 用户体验差,无法进行多轮对话 |
复杂任务难拆解 | 让AI"分析销售数据并生成报告",它像"无头苍蝇"不知从何下手 | 功能局限,只能处理简单任务 |
SK给出的解决方案堪称"AI开发的操作系统":
如果把SK比作一家餐厅,各个组件的角色一目了然:
# 打开终端,输入以下命令
pip install semantic-kernel
创建plugins/RecommendPlugin/SemanticFunctions/UnderstandUser/skprompt.txt
:
你是电商需求分析师,请把用户输入转换为JSON格式,包含场景和需求列表。
示例:
用户输入:"买个轻便的游戏本"
输出:{"scenario":"游戏","requirements":["轻便","游戏本"]}
用户输入:{{$input}}
创建plugins/RecommendPlugin/NativeFunctions/product_search.py
:
from semantic_kernel.skill_definition import kernel_function
class ProductSearchPlugin:
@kernel_function(
name="search_products",
description="根据需求列表查询商品"
)
def search_products(self, requirements: str) -> str:
# 模拟商品数据库(实际项目可对接MySQL/Elasticsearch)
products = [
{"name": "户外徒步轻便跑鞋", "weight": "280g", "rating": 4.7, "price": 599},
{"name": "防水登山鞋", "weight": "350g", "rating": 4.5, "price": 799}
]
# 根据需求过滤商品(这里简化处理,实际可结合向量搜索)
requirements_list = eval(requirements) # 将字符串转为列表
filtered_products = [
p for p in products
if all(req in p["name"].lower() for req in requirements_list)
]
return str(filtered_products) # 返回JSON格式字符串
import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import AzureOpenAIChatCompletion
# 1. 创建SK内核(连接Azure OpenAI)
kernel = sk.Kernel()
kernel.add_chat_service(
"azure_chat",
AzureOpenAIChatCompletion(
deployment_name="gpt-4o", # 替换为你的模型部署名
endpoint="https://your-endpoint.openai.azure.com/", # 替换为你的端点
api_key="your-api-key" # 替换为你的API密钥
)
)
# 2. 导入插件
recommend_plugin = kernel.import_plugin_from_directory(
plugin_directory="./plugins/RecommendPlugin",
plugin_name="RecommendPlugin"
)
# 3. 调用语义函数理解用户需求
user_input = "推荐一款适合户外徒步的轻便跑鞋"
understand_function = recommend_plugin["UnderstandUser"]
需求分析结果 = await kernel.invoke_async(understand_function, input_str=user_input)
print(f"需求分析结果:{需求分析结果}")
# 输出:{"scenario":"户外徒步","requirements":["轻便","跑鞋"]}
# 4. 调用原生函数查询商品
search_function = recommend_plugin["search_products"]
商品列表 = await kernel.invoke_async(
search_function,
requirements=需求分析结果["requirements"] # 传递需求参数
)
print(f"推荐商品:{商品列表}")
# 输出:[{"name": "户外徒步轻便跑鞋", "weight": "280g", "rating": 4.7, "price": 599}]
2025年SK最激动人心的更新是多代理编排,简单说就是让多个AI"专家"协同工作。比如处理电商订单,需要"订单分析师"、“库存管理员”、"支付处理员"三个代理分工合作。
模式 | 生活案例 | SK应用场景 |
---|---|---|
顺序编排 | 做蛋糕:先烤胚→再抹奶油→最后装饰 | 订单处理:分析订单→检查库存→处理支付 |
并发编排 | 做早餐:同时煮咖啡、煎鸡蛋、烤面包 | 市场调研:同时调用多个数据源插件 |
群聊编排 | 家庭旅行规划:爸爸查路线、妈妈订酒店、孩子选景点 | 产品设计:设计师+工程师+市场专家讨论 |
交接编排 | 医院就诊:护士初诊→医生诊断→药房取药 | 客服系统:普通问题→专家问题升级 |
from semantic_kernel.agents import Agent, AgentGroup
from semantic_kernel.agents.channels import ConsoleChannel
# 1. 定义答疑代理(解释知识点)
class TutorAgent(Agent):
def __init__(self, kernel):
super().__init__(name="TutorAgent", kernel=kernel)
self.description = "解释数学概念,提供解题思路"
async def on_message(self, message: str) -> str:
# 调用语义函数生成解释(省略实现)
return f"解释:{message}的解题步骤是..."
# 2. 定义作业批改代理(检查答案对错)
class GraderAgent(Agent):
def __init__(self, kernel):
super().__init__(name="GraderAgent", kernel=kernel)
self.description = "检查数学题答案是否正确"
async def on_message(self, message: str) -> str:
# 调用原生函数验证答案(省略实现)
return f"批改结果:{message}正确,得分100分"
# 3. 创建代理组,按顺序协作
agent_group = AgentGroup(kernel=kernel, channel=ConsoleChannel())
agent_group.add_agent(TutorAgent(kernel)) # 第一步:答疑
agent_group.add_agent(GraderAgent(kernel)) # 第二步:批改作业
# 4. 运行多代理系统
await agent_group.run("求解方程:2x+3=7,并检查答案")
执行流程:
SK的记忆模块通过向量数据库实现长期记忆,支持检索增强生成(RAG)。以下是电商客服场景的RAG流程图:
技术选型建议:
痛点:传统客服需手动查询商品信息,响应慢且易出错。
SK方案:
效果:客服响应时间从3分钟缩短至15秒,用户满意度提升40%。
场景:学生问"用Python写冒泡排序",系统自动生成代码并解释。
实现:
代码生成效果:
def bubble_sort(arr):
n = len(arr)
# 外层循环控制排序轮数
for i in range(n):
# 内层循环比较相邻元素
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j] # 交换元素
return arr
# 测试
test_arr = [64, 34, 25, 12]
bubble_sort(test_arr)
print("排序结果:", test_arr) # 输出:[12, 25, 34, 64]
2025年微软AI战略中,SK扮演"企业级AI编排中枢"角色,与AutoGen、MEAI形成互补:
三者关系就像"实验室→工厂→基础设施":AutoGen在实验室探索新功能,SK将其标准化并投入生产,MEAI则提供底层电力支持。
插件命名冲突
kernel.import_plugin(plugin, "OrderPlugin")
。LLM模型选择
向量数据库选型
Semantic Kernel不是要取代传统编程,而是给它装上"AI引擎"。通过插件化封装、多代理协作、智能记忆三大核心能力,SK让开发者能像搭积木一样组合AI和业务逻辑,轻松应对从客服机器人到复杂企业系统的各种场景。
立即行动:
- 访问SK GitHub,克隆示例代码;
- 用10分钟完成"商品推荐插件"实战,感受SK的简洁;
- 思考你的业务中哪些流程可以用"多代理"重构(如订单处理、客户服务)。
AI开发的未来,不是让代码迁就LLM,也不是让LLM迁就代码,而是像Semantic Kernel这样——让它们"手牵手"一起解决问题。现在就加入这场变革,让你的应用更智能、更灵活!