语义内核代理构建工具

一个基于Python的开源工具包,用于构建能够理解、思考和行动的AI代理,支持插件扩展和记忆功能。

  • by cnrishiraj
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 cnrishiraj/mcp-server-with-semantic-kernel

使用说明

具有语义内核的mcp服务器

在Python中使用模型上下文协议(MCP)插件构建语义内核代理

在Python中使用带有语义内核的MCP服务器

什么是语义核?

Semantic Kernel(SK)是微软创建的一个开源工具包,可帮助开发人员构建能够说话、思考和行动的强大AI代理和应用程序。

这样想:

想象一下,你正在构建一个机器人助手。该助理可以:

  1. 使用ChatGPT或其他AI模型进行对话(如提问或回答)
  2. 执行查看日历、发送电子邮件或总结文档等任务
  3. 记住它以前做过或见过的事情
  4. 学习并遵循您所教授的工作流程

SK是这个助手背后的大脑。它将语言部分(如ChatGPT)与工具和内存部分(日历、文件、API等)连接起来。


SK的关键构建块

概念 初级讲解
内核 连接一切的核心部分。它与AI模型对话并运行您的指令。
插件/技能 这些就像你的助手的应用程序。例如:日历插件或电子邮件插件。
提示模板 预先编写的指令,告诉人工智能如何表现。你给它一些变量,它会填充其余的变量。比如:“总结一下:{{text}}。”
记忆 它让你的助手“记住”过去的事情,比如过去的对话或数据。
计划员/编排员 如果你的助手必须完成5个步骤才能完成某件事(例如计划一次旅行),这部分会计算出步骤。

简单的例子

假设您正在使用语义内核构建一个“会议助理”:

  • 你给它一个名为CalendarSkill的插件,它知道如何读取和创建日历事件
  • 你写了一个提示:“下周某个时候和约翰安排一次30分钟的会议。”
  • 语义内核接收你的提示,将其发送给人工智能(如ChatGPT),找出意图(“创建事件”),然后运行插件来完成它

所以SK=AI(理解语言)+工具(做动作)+记忆(记住东西)

语义核(SK)与模型上下文协议(MCP)

特征 语义核(SK) 模型上下文协议(MCP)
它是什么 构建智能AI代理的工具包/框架 将工具暴露给LLM的标准/协议
谁创建了它 微软 开放标准(灵感来自OpenAI工具调用、Claude工具使用等工具)
主要任务 让您将AI模型与内存、工具和提示连接起来 让AI代理通过通用格式与工具通信
把它想象成 人工智能代理的大脑+逻辑+应用商店 工具与任何人工智能代理协同工作的接口/插件
它有记忆吗? 是的,SK可以存储和调用事物(例如向量内存) 不,它本身不处理内存
工具使用 您可以在代码中定义和加载“技能”(函数/工具) 工具作为MCP服务器公开,任何代理都可以连接
语言焦点 Python/C#SDK 语言无关(关注格式,而不是实现)
复杂性 更高层次的抽象(如完整的工具包) 更低层次的协议(如有线格式或规范)

沟通方法

1.服务器发送事件(SSE)

太长,读不下去了 SSE是服务器通过网络向您的应用程序发送实时更新的一种方式。

可以这样想: 你在咖啡店。你给咖啡师你的订单(请求),而不是不断地回头看,你只是坐着放松。当你的饮料准备好了,他们会叫你的名字。

它是如何工作的:

  • 客户端发出一次性请求
  • 服务器保持该连接打开
  • 只要有数据,服务器就会将其作为流发送
  • 客户端实时获取更新

在MCP或AI应用程序中: 当人工智能工具与工具服务器(通过MCP)对话时,服务器可能会逐渐流式传输结果,如部分答案、令牌或日志。

2.标准输入/输出(stdio)

太长,读不下去了 stdio是计算机命令行工具读取输入和写入输出的方式。

它是如何工作的:

  • stdin:您在程序中键入或发送数据
  • stdout:程序打印结果
  • stderr:错误放在这里(这样它们就不会与正常输出混合)

在MCP中: MCP服务器可以作为命令行程序运行。代理人通过以下方式与他们交谈:

  • 将JSON输入写入stdin
  • 从stdout读取工具的响应

沟通方式比较

功能 SSE stdio
类型 Web协议 本地程序通信
用于 从服务器流式传输实时数据 与命令行工具或子流程对话
代理使用 MCP工具作为web服务器运行时 MCP工具是本地进程时
连接 客户端保持实时HTTP连接打开 输入/输出管道(如运行脚本)
示例 实时聊天,从LLM流式传输令牌 Shell脚本读取提示并打印答案

在AI工具(如MCP)中:

  • 如果工具部署在web服务器上→ 使用SSE流式传输响应
  • 如果工具是本地二进制文件/脚本→ 使用stdio发送/接收数据