具有语义内核的mcp服务器
在Python中使用模型上下文协议(MCP)插件构建语义内核代理
什么是语义核?
Semantic Kernel(SK)是微软创建的一个开源工具包,可帮助开发人员构建能够说话、思考和行动的强大AI代理和应用程序。
这样想:
想象一下,你正在构建一个机器人助手。该助理可以:
- 使用ChatGPT或其他AI模型进行对话(如提问或回答)
- 执行查看日历、发送电子邮件或总结文档等任务
- 记住它以前做过或见过的事情
- 学习并遵循您所教授的工作流程
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发送/接收数据
