Semantic Kernel 入门系列:🥑突破提示词的限制

无尽的上下文
LLM的语言理解和掌握能力在知识内容的解读和总结方面提供了强大的能力。
但是由于训练数据本身来自于公共领域,也就注定了无法在一些小众或者私有的领域能够足够的好的应答。
因此如何给LLM 提供足够多的信息上下文,就是如今的LLM AI应用可以充分发挥能力的地方了。
我们默认可以想到的是在提示词中提供足够的上下文信息,然而像OpenAI的模型总是有一个Max Tokens 的限制,也就意味着不可能一次性将所有的相关信息都可以放在提示词中,即便是最大的gpt-4-32k,目前也只有32,768 tokens,虽然看起来挺多的,但是相比较动则成百上千页的内部文档,或者专业资料,也不大可能将所有的内容都塞进prompt。

即便说不远未来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在这方面做了什么。
参考资料:
- https://learn.microsoft.com/en-us/semantic-kernel/concepts-sk/memories
- https://platform.openai.com/docs/models/overview
- https://openai.com/pricing
- https://learn.microsoft.com/en-us/semantic-kernel/concepts-ai/embeddings
Semantic Kernel 入门系列:🥑突破提示词的限制的更多相关文章
- 【Lucene3.6.2入门系列】第05节_自定义停用词分词器和同义词分词器
首先是用于显示分词信息的HelloCustomAnalyzer.java package com.jadyer.lucene; import java.io.IOException; import j ...
- linux入门系列12--磁盘管理之分区、格式化与挂载
前面系列文章讲解了VI编辑器.常用命令.防火墙及网络服务管理,本篇将讲解磁盘管理相关知识. 本文将会介绍大量的Linux命令,其中有一部分在"linux入门系列5--新手必会的linux命令 ...
- 数据挖掘入门系列教程(九)之基于sklearn的SVM使用
目录 介绍 基于SVM对MINIST数据集进行分类 使用SVM SVM分析垃圾邮件 加载数据集 分词 构建词云 构建数据集 进行训练 交叉验证 炼丹术 总结 参考 介绍 在上一篇博客:数据挖掘入门系列 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- ABP入门系列(2)——通过模板创建MAP版本项目
一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...
- 07. Web大前端时代之:HTML5+CSS3入门系列~H5 地理位置
Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 源码:https://github.com/duniti ...
- 03.Web大前端时代之:HTML5+CSS3入门系列~H5功能元素
Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 2.功能元素 1.hgroup 对网页或区段(secti ...
- Jenkins入门系列之——02第二章 Jenkins安装与配置
2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...
- k8s入门系列之guestbook快速部署
k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...
- 快速入门系列--WebAPI--03框架你值得拥有
接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...
随机推荐
- 2003031118—李伟—Python数据分析第四周作业—第二次作业
项目 matplotlib的使用 课程班级博客链接 班级博客 这个作业要求链接 作业要求 博客名称 2003031118-李伟-Python数据分析第四周作业-第二次作业 要求 每道题要有题目,代码( ...
- 5vue 样式绑定
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Glass Beads
UVA719 将循环串SSS展开成两倍大小:S+SS+SS+S,这样线性处理就可以处理所有循环的情况了.对S+SS+SS+S建立一个后缀自动机,让后从初始状态开始走,每次选择字典序最小的道路,走NNN ...
- flink常用命令
1.查看flink任务 /var/lib/hadoop-hdfs/flink/bin/flink list 2.停止flink任务 /var/lib/hadoop-hdfs/flink/bin/fl ...
- django_模板层的过滤器和继承
**************************************************************************************************** ...
- greenDao基础用法(一)
1.配置 1.1 在 build.gradle(project) 中,加入这句 classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // a ...
- C++ || 求一个数中1的位数
点击查看代码 #include<iostream> using namespace std; int f(int x) { int count = 0; while(x) { if (x ...
- VBA中的集合
Sub testSet() Dim c As New Collection c.Add ("A") c.Add (2) c.Add ("A") For i = ...
- centos虚拟机yum update报错Another app is currently holding the yum lock; waiting for it to exit...
1.运行yum update报错 [root@localhost ~]# yum update已加载插件:fastestmirror, langpacks/var/run/yum.pid 已被锁定,P ...
- 日志注解,基于ruoyi的后置切面改进而来
有次接口响应时间太长,想知道具体接口执行的时间是多少,于是决定通过注解来实现这个想法,刚好ruoyi本身就提供了完善的日志注解,虽然是采用后置通知,但是完全不影响我们改造它. 想要实现接口耗时的功能, ...