首页 > 其他分享 >Semantic Kernel 入门系列:

Semantic Kernel 入门系列:

时间:2023-04-12 23:44:39浏览次数:40  
标签:Kernel https Semantic 入门 可以 信息 LLM 相关 com

image

无尽的上下文

LLM的语言理解和掌握能力在知识内容的解读和总结方面提供了强大的能力。

但是由于训练数据本身来自于公共领域,也就注定了无法在一些小众或者私有的领域能够足够的好的应答。

因此如何给LLM 提供足够多的信息上下文,就是如今的LLM AI应用可以充分发挥能力的地方了。

我们默认可以想到的是在提示词中提供足够的上下文信息,然而像OpenAI的模型总是有一个Max Tokens 的限制,也就意味着不可能一次性将所有的相关信息都可以放在提示词中,即便是最大的gpt-4-32k,目前也只有32,768 tokens,虽然看起来挺多的,但是相比较动则成百上千页的内部文档,或者专业资料,也不大可能将所有的内容都塞进prompt。

image

即便说不远未来MaxTokens的上限提升到了可以轻轻松松塞下一本书了,还需要考虑的就是成本问题,以目前GPT4 的价格,0.06美元/1K tokens(32K context),光是把Prompt 塞满,不指望做出回复,一次调用成本就 1.97美元了。所以在Prompt中放置大量的信息怎么算都是不划算的。

通常情况下,我们回答一个问题,并不总是需要采用所有的信息的,例如讲某本书的某个知识点,基本不会说要一次性将全书翻一遍,然后才回答问题。除非已经将书中的内容记得滚瓜烂熟了,否则通常都是根据书中关于这个知识点相关的章节或者段落,就可以得到对应的答案了。

这种方法也常常应用于搜索领域,人们所需要的答案往往仅仅在问题所涉及的很小的范围之内。搜索引擎一直在做的事情就是找到最符合你预期的相关结果。对应的结果就是,我们总是能在搜索结果的前两页,甚至前两个条目中获得答案。

所以解决LLM有限Prompt下的上下文的基本方法也是这样,提前根据问题搜索找到相关的内容信息,再将内容信息和问题都是提供给LLM,让LLM做出对应的总结和回答。

找到有用的信息

借助于 Native Function的功能,我们可以通过一些简单的方法,例如关键词等,匹配到一些相关信息,也可以对接搜索引擎(全网的或者私域的),获取一些的相关的讯息。

但是传统的方法还是传统的问题,就比较搜索引擎所采用的索引方法,也都是基于关键词,能匹配上的自然找得到,匹配不上的就很难说了。尤其是有些专用词汇无法描述清楚的时候,还有一些比较多的同义词的时候,都很难得到合适的答案。

这里就需要应用到LLM另外一个神器,Embedding。

简单地说,Embedding可以将文本进行一些转化高维向量,作为向量就有了计算的可能性,就可以的进行相似性和差异性的判断。只需要计算一下两段文本之间的距离,就可以判断是否具有相似性,这种相似性是基于语义的,也就完全突破了字面上的相似性。如此以来,将所有的信息分段或者创建摘要进行转化,将问题和所有信息进行匹配,找到距离最近的或者符合距离需求的,就都是相关的信息了。这样就可以无须关心关键词是否匹配,不用煞费苦心的提取相关关键词了。

不过也有一个问题需要注意的,那就是这种向量的映射方式决定了相关内容查找的准确性是由LLM决定的,也并不是所有的时候都能找到最合适的内容。了解LLM的脾性也是使用它的重要一环。

了解了基本原理之后,后面就可以看看Semantic Kernel在这方面做了什么。


参考资料:

  1. https://learn.microsoft.com/en-us/semantic-kernel/concepts-sk/memories
  2. https://platform.openai.com/docs/models/overview
  3. https://openai.com/pricing
  4. https://learn.microsoft.com/en-us/semantic-kernel/concepts-ai/embeddings

标签:Kernel,https,Semantic,入门,可以,信息,LLM,相关,com
From: https://www.cnblogs.com/xbotter/p/semantic_kernel_introduction_memory_part_1.html

相关文章

  • Mysql 入门之过滤数据(二)
    关键字:and、or、in、not知识点1、and并列关系,可对多个列进行过滤2、or或关系,满足条件之一即可3、in指定范围过滤4、not否定关系,取反思考1、and和or若同时存在,哪个优先级最高?2、in使用的优势?3、not存在的意义是什么?案列数据表如下:SELECT*FROMproducts......
  • Mysql 入门之过滤数据(一)
    关键字:where、between、null知识点1、where关键字在Mysql中用于获取指定搜素条件的数据,这些条件也称之为过滤条件2、between为where子句的操作符,诸如=、<、>等符号功能类似3、关于null可以初步理解为它是Mysql中不确定的“值”,从根本上讲它都不是个“值”下面给出一些案......
  • Springmvc入门
             1.什么是springmvcSpringWebMVC是一种基于Java的实现了MVC设计模式的、请求驱动类型的、轻量级Web框架。ssm:即springmvc,spring,mybatis  2.项目中加入springmvc支持2.1导入依赖<dependency><groupId>org.springframework</groupI......
  • Netty入门
    一、Netty概述1、Netty是什么?>Netty是由JBOSS提供的一个Java开源框架。Netty提供异步的、基于事件驱动的网络应用程序架构,用以快速开发高性能、高可靠性的网络IO程序。Netty可以帮助你快速、简单的开发出一个网络应用,相当于简化和流程化了NIO的开发过程Netty是目前最流行的NI......
  • Docker快速入门 第一篇
    目录Docker容器一、前言1、什么时虚拟化2、cocker是什么3、容器与虚拟化的区别4、Docker的概念二、安装dockerDocker容器一、前言1、什么时虚拟化在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转......
  • Docker快速入门 第二篇
    目录Docker一、Iass-Paas和Saas1、简介二、Docker常用命令1、镜像站设置2、启动/停止常用命令三、镜像命令相关四、容器相关命令Docker一、Iass-Paas和Saas1、简介什么是lass-Pass和Saas:#Iaas:Infrastructure-as-a-Service(基础设施即服务) IaaS公司会提供场外服务器,存储......
  • js入门
    js的基础JavaScript(简称JS”)是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。javascript又名ECMAscriptECMA是什么?1、全称:Europeancomputermanufacturersassociation欧洲计算机制造联合会;2、它的标准名单中的:ECMA—262脚本语言的规范:规范化脚本语言,......
  • Nvidia Tensor Core-WMMA API编程入门
    1WMMA(Warp-levelMatrixMultiplyAccumulate)API对于计算能力在7.0及以上的CUDA设备,可以使用CUDAC++API调用TensorCore,支持形如D=AB+C的混合精度的矩阵乘运算。template<typenameUse,intm,intn,intk,typenameT,typenameLayout=void>classfragment;......
  • Go语言入门6(struct 结构体)
    结构体​ 结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员结构体声明type+结构体名+struct+{成员列表}​ ⭐如果结构体成员名字是以大写字母开头的,那么该成员就是导出的。这是Go语言导出规则决定的。一个结构体可能同时包......
  • WSL 2 上的 Docker 远程容器入门
    [WSL上的Docker容器入门|MicrosoftLearn](https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers)本分步指南将通过使用WSL2(适用于Linux的Windows子系统,版本2)设置DockerDesktopforWindows,帮助开始使用远程容器进行开发。DockerDesktopfor......