【Semantic Kernel】1、入门

Semantic Kernel 是一种轻量级应用开发框架,用于快速开发融合 LLM AI的现代应用。以下简称SK

名词解释

LLM:大语言模型
Prompt:简单的理解它是给 AI 模型的指令。
Prompt Engineering:中文意思为提示工程,是一种人工智能(AI)技术,它通过设计和改进 AI 的 prompt 来提高 AI 的表现。Prompt Engineering 的目标是创建高度有效和可控的 AI 系统,使其能够准确、可靠地执行特定任务。

Semantic Kernel核心特性

  • 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 实现设定的,而且实现方式也非常的方便。

Semantic Kernel优势

  • 企业级:Semantic Kernel 为微软及其他500强公司提供了灵活、模块化的 AI 解决方案。并且可以轻松扩展以支持语音和视频等其他模式;在安全与可观察性方面,该框架具备先进的安全性增强功能,包括遥测支持、钩子和过滤器,确保您可以安全地部署大规模的AI解决方案。
  • 自动化业务流程:Semantic Kernel 可以将A I Prompts 与现有API结合,自动执行业务操作。它作为中间件,将AI模型的请求转换为函数调用(Function Call),并处理其结果。
  • 高度可扩展:你可以通过添加现有代码作为插件,利用一系列现成的连接器来集成AI服务。它还使用OpenAPI规范,便于与团队中的其他开发人员共享和扩展。
  • 多语言支持:兼容 C#、Python 和 Java,适合各种技术背景的开发者。
  • 面向未来设计:Semantic Kernel 设计前瞻,能够随着技术进步轻松连接最新的AI模型。新模型推出时,可以简单地进行替换,无需重写整个代码库。

Kernel

Kernel 是 Semantic Kernel 的核心组件。简单来说,Kernel是一个依赖管理容器,管理那些运行你的 AI 应用所需的所有服务(Services)和插件(Plugins)。
你需要将 AI 应用所有依赖的服务和插件提供给Kernel,在必要的时候 AI 应用会自动使用它们。

  • 服务:包括所需的 AI 服务(OpenAI)和其他服务(例如日志记录、HTTP 服务等),因此可以支持跨所有语言的服务依赖项引入。
  • 插件:是一类工具函数的集合,被 AI 服务用来执行,例如,搜索插件可以包含google搜索、bing搜索等工具

基础模型

  • TextCompletion,最常用的GPT-3的模型,常用于文本生成
  • ChatCompetion,GPT3.5模型,也就是所谓的ChatGPT的模型,基本就用于聊天功能
  • EmbeddingGeneration,嵌入模型,这个将用于Memory的生成和搜索,在后期能力扩展时将会有极大的用途
  • ImageGeneration,图形模型,也就是DALL-E模型,用于图片的生成

TextCompletion和ChatCompetion有什么区别?
TextCompletion和ChatCompletion是OpenAI GPT-3语言模型中的两个不同功能。
TextCompletion是指给定一个输入文本,模型会根据上下文和语法规则生成一个合理的、连贯的文本补全。它适用于需要对给定文本进行补全或者生成下一句的任务,比如自动补全、语言翻译等。
ChatCompletion则是一种更加交互式的对话生成功能。它可以根据用户的输入和上下文来生成回复,实现对话式的交互。ChatCompletion模型可以处理多轮对话,并且会根据上下文和用户的提问来生成合适的回答。
总结来说,TextCompletion主要用于单个文本的补全和生成,而ChatCompletion则适用于多轮对话的交互式回复生成。

由于Azure OpenAI提供了和Open AI相同的能力,所以以上的模型配置可以选择OpenAI的接口,也可以选择Azure OpenAI的接口,根据自己有哪个选哪个的原则使用。
当然以上模型也提供了基本的接口定义,如果有自己的LLM AI接口的话,也可以自行实现相关接口,然后使用。

// 1. ServiceId 用于指定当前模型的配置,相同的模型不能有重复的ServiceId配置
// 2. modelId 指定ChatCompetion所使用的LLM 模型
// 3. apikey OpenAI 接口调用需要使用的APIkey
var myKernel = Kernel.Builder
.WithOpenAIChatCompletionService("gpt-3.5-turbo", "key", serviceId: "serviceId")
.Build();

在使用OpenAIChatCompletionService的API方法时,serviceId参数用于指定聊天模型的服务标识符(Service ID)。
Service ID是用来区分不同的聊天服务实例的唯一标识。通过指定不同的Service ID,您可以创建和管理多个不同的聊天服务实例,每个实例可以有不同的设置、配置和状态。
具体来说,Service ID可用于以下情景:

  • 多用户场景:如果您希望为不同的用户或会话维护不同的聊天历史、设置或状态,可以为每个用户或会话创建唯一的Service ID,并将其传递给API方法。这样,每个用户或会话都可以拥有独立的聊天服务实例。
  • 控制聊天历史:使用不同的Service ID可以将不同的聊天历史隔离开来。例如,您可以为不同的项目、任务或对话创建不同的Service ID,以便更好地管理不同的聊天历史记录。
  • 聊天服务配置:在某些情况下,您可能希望为不同的聊天服务实例设置不同的参数、选项或模型配置。通过为每个实例分配不同的Service ID,您可以在服务器端配置独立的服务。

ChatGPT的Token计算

ChatGPT 是一种基于Token数量来计费的语言模型,它会把我们输入的文本分割成不同的Token,每1000个Token大约需要 0.002 美元,约750个词。通常,常用的多音节词会被视为一个Token,而不常用的词则会按音节拆分。
每个模型都有一个最大的Token数量限制,当我们向ChatGPT发送一段文本时,需要消耗的token数量等于我们输入的文本Token数量加上ChatGPT输出的文本Token数量。
例如,如果你发送了一个100 Token的文本,ChatGPT根据你的文本生成了一个200 Token的回复,那么你一共消耗了300 Token。

posted @ 2023-07-06 15:12  .Neterr  阅读(869)  评论(0编辑  收藏  举报