Embedding实现GPT回答和知识库内容相关的内容

news/2024/10/17 17:56:43/

现在的gpt应用基本都实现了这个场景的应用,比如:

  1. 联网搜索,根据网上找到的内容来回答你的内容,像bing和kimi或者其他AI搜索引擎
  2. 智能客服,把网站里的内容或者相关的其他什么资料预置到系统中,提高回答的质量

在这些场景下,不再通过关键词的匹配,而是通过语意的匹配。

比方说你输入的关键字是【车没油了怎么办】,通过关键词匹配可能需要对应的结果里要有【车没油了怎么办】对应的关键词,通过语意匹配的话可能能找到更适合你但是没有这几个关键词的结果,比方说直接给你几个加油站的点位。当然这里只是举个例子。

举这些例子应该比较容易理解这一块场景的应用。

写之前叠个甲,这篇博客的内容是比较早期的实践了,23年底听说出现了RAG这一项更厉害的技术,具体更厉害在哪里还没研究过,等有空研究的时候写出来分享一下。

所以本篇博客分享的内容可能有一些过时,但肯定是能用的,而且手动实现也更能清楚这里面最基本的原理。

核心在于GPT模型的embedding方法,embedding会将文本转化成向量(其实图片也可以),然后用户给出文本或者图片内容的时候需要将这部分的内容再embedding一次,也得到向量,通过向量的对比获取到相似的内容。

注意embedding方法是模型提供的,所以调用方式会有所不同,所以下面就不给出具体的代码展示了,另外同一内容embedding出来的结果也会根据模型不同会有所差距。并且embedding需要调用接口消耗token。

举个🌰:

预先在平台置入下面的内容
在这里插入图片描述
实际的技术过程会需要把知识库的内容通过embedding方法转化成向量。就是把【把十二生肖过一遍需要多少年?正确答案是13.5年,因为鸡年要过两年半】转化成类似[-0.00024867404135875404, -0.011203940957784653, -0.007343926001340151, -0.012206885032355785]这样格式的数据,并存储起来。这个过程需要注意对长文本的切割,因为太长会导致请求不了embedding接口。

等到有人问【把十二生肖过一遍需要多少年?】的时候,需要把这句话再embedding成上面那种格式的数据。

然后再进行向量对比,一般来说模型所有者会提供一个免费的方法供你在本地运行,如OpenAI官方提供了distances_from_embeddings(input_vectors, knowledge_vectors, distance_metric)函数,input_vectors是用户输入的内容转化成的向量,knowledge_vectors是系统预置的知识库内容转化成的向量,是数组格式的,distance_metric是对比方式,一般用cosine余弦对比,这个不会消耗token。

这个函数会返回向量相关的距离,挑离得比较近的内容,预置到system里去做gpt参考内容的回答就可以了,然后发起大概这样的请求:

{[{"role": "user", "content": "把十二生肖过一遍需要多少年?"}],[{"role": "system", "content": "把十二生肖过一遍需要多少年?正确答案是13.5年,因为鸡年要过两年半"}]
}

GPT就会给出下面这样的回答:

在这里插入图片描述


http://www.ppmy.cn/news/1539766.html

相关文章

扫雷(C 语言)

目录 一、游戏设计分析二、各个步骤的代码实现1. 游戏菜单界面的实现2. 游戏初始化3. 开始扫雷 三、完整代码四、总结 一、游戏设计分析 本次设计的扫雷游戏是展示一个 9 * 9 的棋盘,然后输入坐标进行判断,若是雷,则游戏结束,否则…

MySQL-11.DQL-基本查询

一.DQL语句 -- DQL:基本查询 -- 1.查询指定字段 name,entrydate并返回 select name , entrydate from tb_emp;-- 2.查询返回所有字段 select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;select * from tb…

农合生活平台用户量已突破5万人大关。

回顾走来的这一路,农合生活一直在成长的路上,从未停歇。 2024年1月,农合生活小程序1.0推出,上线1个月GMV破百万; 2024年4月,农合生活APP上线,注册用户破万; 2024年4月,…

Excelize 开源基础库 2.9.0 版本正式发布

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Excel、WPS、OpenOffice 等办公软件创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&#xf…

重构长方法之保留整个对象

在开发中我们会遇到需要从同一个对象中获取多个值的情况,例如从对象rectangle 中获取长方形的宽width和高height,然后将这个两个值传递给方法GetArea去计算面积: public class Demo {public void Method(){//---------------//more code//--…

MVS海康工业相机达不到标称最大帧率

文章目录 一、相机参数设置1、取消相机帧率限制2、修改相机图像格式3、调整相机曝光时间4、检查相机数据包大小(网口相机特有参数)5、 恢复相机默认参数6、 相机 ADC 输出位深调整 二、系统环境设置1、 网口相机设置2、 USB 相机设置 一、相机参数设置 …

如何在全平台启用 IPv6 网络?(路由器、Windows、Linux、Docker)

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 如今 IPv6 网络越来越普及,也是时候开启 IPv6 网络了,特别是对于 NAS 玩家,开启 IPv6 后,NAS 可以获取到公网 IPv6 用于外网访问,通过 ZeroTier …

Python_网络编程(IP 端口 协议)

网络编程: 互联网时代,现在基本上所有的程序都是网络程序,很少有单机版的程序了。网络编程就是如何在程序中实现两台计算机的通信。Python语言中,提供了大量的内置模块和第三方模块用于支持各种网络访问,而且Python语言…