阅读原文
人工智能 (AI) 正迅速改变我们的世界,从智能助手到自动驾驶汽车,AI 的应用无处不在。对开发者而言,快速构建功能强大的 AI 应用是一个挑战。LangChain 作为一款流行的 AI 开发框架,虽然因其丰富的预制组件而广受欢迎,但由于其抽象再抽象、封装再封装,灵活性非常低,且框架的学习、理解及复杂业务逻辑调试的成本很高,使其难以大规模应用于企业业务线上部署。随着 AI 领域的快速发展,微软开源的 Semantic Kernel 框架应运而生,其独特的优势和强大功能可能使其成为 LangChain 的强力替代品。
经过笔者亲子踩坑,将在本文探讨 Semantic Kernel 的核心特点和优势,提供快速入门实践指导,并与 LangChain 的局限性进行比较,旨在帮助开发者选择并入门这个企业级 AI 应用开发框架。
1、什么是 Semantic Kernel
Semantic kernel是微软开源的一个轻量级的开源开发套件,它让你可以轻松构建 AI Agent,并将最新的 AI 模型集成到您的 C#、Python 或 Java 代码库中;它提供了一个简单易用的 API,可以连接到各种 AI 服务,例如 OpenAI、Azure OpenAI 和 Hugging Face 等;并且它作为业高效的中间件,能够快速交付企级解决方案。
1.1、核心特性:
- Kernel:依赖管理容器,管理所有运行AI 应用所需的服务(Services)和插件(Plugins)。
- Agent:提供了构建任何类型的 Agent(ChatBot、Copilot、Autonomous)的能力。
- AI Service:支持主流 AI 服务 OpenAI、Azure OpenAI 和 Hugging Face 等便捷接入。
- Plugin:一类工具的集合。可便捷实现复杂功能,包括本地代码插件、OpenAPI接口插件等。
- Planning:将函数调用作为规划(plan)和执行(execute)任务的主要方式。
- Persona:通设置 System Prompt 实现设定的,而且实现方式也非常的方便。
插件(Plugin)是 Semantic Kernel 的一大特色
1.2、优势
- 企业级:Semantic Kernel 为微软及其他500强公司提供了灵活、模块化的 AI 解决方案。并且可以轻松扩展以支持语音和视频等其他模式;在安全与可观察性方面,该框架具备先进的安全性增强功能,包括遥测支持、钩子和过滤器,确保您可以安全地部署大规模的AI解决方案。
- 自动化业务流程:Semantic Kernel 可以将A I Prompts 与现有API结合,自动执行业务操作。它作为中间件,将AI模型的请求转换为函数调用(Function Call),并处理其结果。
- 高度可扩展:你可以通过添加现有代码作为插件,利用一系列现成的连接器来集成AI服务。它还使用OpenAPI规范,便于与团队中的其他开发人员共享和扩展。
- 多语言支持:兼容 C#、Python 和 Java,适合各种技术背景的开发者。
- 面向未来设计:Semantic Kernel 设计前瞻,能够随着技术进步轻松连接最新的AI模型。新模型推出时,可以简单地进行替换,无需重写整个代码库。
2、Semantic Kernel 的核心特性
2.1、Kernel is All You Need
Kernel 是 Semantic Kernel 的核心组件。简单来说,Kernel是一个依赖管理容器,管理那些运行你的 AI 应用所需的所有服务(Services)和插件(Plugins)。你需要将 AI 应用所有依赖的服务和插件提供给Kernel,在必要的时候 AI 应用会自动使用它们。
组件 | 说明 |
---|---|
服务 | 包括所需的 AI 服务(OpenAI)和其他服务(例如日志记录、HTTP 服务等),因此可以支持跨所有语言的服务依赖项引入。 |
插件 | 是一类工具函数的集合,被 AI 服务用来执行,例如,搜索插件可以包含google搜索、bing搜索等工具 |
由于 Kernel 管理着所有服务和插件,因此 Semantic Kernel 的每个组件都基于它来驱动你的 AI 应用。这非常的 Amazing,因为意味着你作为开发者,有个统一的地方可以配置来管理和监控你的 AI 应用。 比如,当你从 Kernel 调用一个 Prompt 时,Kernel会做如下事情:
- 选择最佳的 AI 服务来运行 Prompt。
- 使用提供的 Prompt 模板构建 Prompt。
- 将 Prompt 发送到 AI 服务。
- 接收并解析响应结果。
- 最后将来自LLM的响应结果返回给你的应用程序。
在这整个过程中,你可以在上述任何步骤中间执行诸如日志记录、向用户提供更新等任何操作,因为这整个过程都在一个地方(Kernel)完成,名副其实的 Kernel is All You Need。
在 Semantic Kernel 中定义Kernel十分方便:
# Initialize the kernel
kernel = Kernel()
2.2、支持任何类型 Agent 构建
Agent 是基于软件的实体,利用 AI 模型为你完成工作。它们被构建用来执行广泛的任务,并根据它们的工作性质有不同的称呼:
- ChatBot:一个被构建用来回答问题的 Agent 称为“ChatBot”,因为它提供了聊天的体验,这些Agent通常依托于自己的数据,比如公司的文档。
- Copilot: 一个被构建来协助你完成工作的 Agent 通常被称为“Copilot”。这些 Agent 通过提供建议帮助你完成任务,如编写电子邮件或创建其他办公文档,你可以选择接受或拒绝这些建议。
- Autonomous:一个被构建来处理重复任务的 Agent 通常被称为“Autonomous”。它可以在不需要干预的情况下响应你的请求并执行操作,它是代替你工作,而不是与你一起工作。
Semantic Kernel 提供了构建任何类型的 Agent 的能力,不需要你是 AI 专家。
在 Semantic Kernel 中,一个 Agent 主要由三个核心构建模块组成:插件(Plugin)、规划器(Planner)和角色(Persona)。
2.3、轻松接入 AI 服务
AI 服务是指基于大模型等能力提供的一系列服务,比如ChatGPT等。
Semantic Kernel 的主要功能之一是其能够将不同的AI服务(Services)添加到 Kernel 中,包括 OpenAI、Azure OpenAI 和 Hugging Face 等。这使你可以轻松地替换不同的AI服务,以比较它们的性能,并利用最适合你需求的服务。
比如在接入Azure的GPT-4 Chat服务并添加到 Kernel 的代码如下,是不是非常便捷
# Add Azure OpenAI chat completion
kernel.add_service(
AzureChatCompletion(
deployment_name="your_models_deployment_name",
api_key="your_api_key",
base_url="your_base_url",
)
)
在Semantic Kernel中,有目前最主流的 AI 服务的接口。下表是在不同语言上的支持情况。
服务 | C# | Python | Java |
---|---|---|---|
Chat completion | ✅ | ✅ | ✅ |
Text generation | ✅ | ✅ | ✅ |
Embedding generation (Experimental) | ✅ | ✅ | ✅ |