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 ...
随机推荐
- vue 组件之间事件触发($emit)与event Bus($on)的用法说明
组件之间事件触发 新增按钮组件: 操作按钮组合组件: 此时有个需求就是,无论是哪个按钮,如果改变了列表中的数据,列表需要实时更新数据. 此时就需要用到组件间的事件触发. 父子组件之间事件触发可以使用$ ...
- vue-封装组件-结合vant实现点击按钮弹出泡泡(Popover)事件控制多个泡泡出现时,弹出对应的泡泡
<template> <div class="sale-share-box"> <span class="sale-share-btn&qu ...
- login_while
# -*- coding: utf-8 -*- # @Time : 2020/7/25 22:45 # @Author : Breeze # @FileName: login_while.py use ...
- C/C++ 数据结构使用数组实现队列的基本操作
//使用数组实现队列 #include <iostream> #include <Windows.h> using namespace std; #define MAXSIZE ...
- git push 报错error: remote unpack failed: error Short read of block
1.解决办法:找管理代码的人给你开权限. 2如果你的push的命令写错的话,也是会出现远端拒绝的提示,所以记得检查自己的push 命令是否正确 另一种明显的权限拒绝的例子: 英语学习:to push ...
- sql server 索引检测
-- 声明表变量 DECLARE @userTable TABLE (table_name NVARCHAR(20)); -- 将源表中的数据插入到表变量中 INSERT INTO @userTabl ...
- Spring mvc 使用RestController 和 Controller
1.RestController相当于Controller和ResponseBody两个注解功能的结合体 2.只有Controller 返回的结果是 视图,一个页面 . 这个要自己写相关的 hello ...
- PointGNN未修改之前的结果 ---行人,骑行者
dl 18 23
- 关于使用antd-proTable,报错 ResizeObserver loop limit exceeded
错误如上,原因有几种情况 一:columns中,属性又ellipsis属性,但是没有设置width,导致table不知道如何计算在什么时候,开始对内容进行加省略号,出现了计算错误 如 const c ...
- Python学习笔记--序列+集合+字典
序列 切片:从一个序列中,取出一个子序列 注意: 案例: 实现: 集合 无序性.唯一性 添加新元素: .add 移除元素: .remove 随机取出某个元素: 清空集合: .clear 取两个集合的差 ...