ChatGPT 开源了第一款插件,都来学习一下源码吧~

 

3 月 23 日,OpenAI 又投出了一枚重磅炸弹:为 ChatGPT 推出插件系统!

此举意味着 ChatGPT 将迎来“APP Store”时刻,也就是围绕它的能力,形成一个开发者生态,打造出基于 AI 的“操作系统”!

插件系统将为 ChatGPT 带来质的飞跃,因为借助于插件服务,它可以获取实时的互联网信息、调用第三方应用(预定酒店航班、点外卖、购物、查询股票价格等等)。

ChatGPT 是一个无比聪明的大脑,而插件会成为它的眼睛、耳朵、手脚、甚至于翅膀,能力惊人,未来不敢想象!

官方目前提供了两个插件:

  • 一个网页浏览器。利用新必应浏览器的 API,实时搜索互联网内容,并给出答案和链接

  • 一个代码解释器。利用 Python 解释器,可以解决数学问题、做数据分析与可视化、编辑图片、剪辑视频等等,还支持下载处理后的文件

另外,OpenAI 还开源了一个知识库检索插件 chatgpt-retrieval-plugin ,这个插件通过自然语言从各种数据源(如文件、笔记、邮件和公共文档)检索信息。有了开源代码后,开发者可以部署自己的插件版本。

想象一下,假如我提供了一个“Python 知识库插件”,以所有官方文档作为数据源,那以后有任何 Python 使用上的问题,我就只需询问 ChatGPT,然后它调用插件并解析数据,最后返回给我准确的答案。这将节省大量的时间!

不仅如此,你还可以用书籍作为数据源,打造出“西游记知识库”、“红楼梦知识库”、“百科全书知识库”、“个人图书馆知识库”,等等;以专业领域的论文与学术期刊为数据源,创造出一个专家助手,从此写论文查资料将无比轻松;以苏格拉底、乔布斯、马斯克等名人的资料为数据源,创造出人格化的个人顾问……

作为第一个开源的 ChatGPT 插件,chatgpt-retrieval-plugin 项目一经发布,就登上 Github 趋势榜第一,发布仅一周就获得 11K stars。

这个项目完全是用 Python 写的,不管是出于学习编程的目的,还是为了将来开发别的插件作借鉴,这都值得我们花时间好好研究一下。

接下来,我将分享自己在阅读项目文档和源码时,收获到的一些信息。

首先,该项目含 Python 代码约 3 K,规模不算大。项目结构也很清晰,目录如下:

目录描述
datastore包含使用各种向量数据库提供程序存储和查询文档嵌入的核心逻辑
examples包括配置示例、身份验证方法和面向程序提供方的示例
models包含插件使用的数据模型,例如文档和元数据模型
scripts存放实用的脚本,用于处理和上传来自不同数据源的文件
server存放主要的 FastAPI 服务端实现
services包含用于任务(如分块、元数据提取和 PII 检测)的实用服务
tests包括各种向量数据库提供程序的集成测试
.well-known存储插件清单文件和 OpenAPI 格式,定义插件配置和 API 规范等信息

除去示例、测试、配置文件等内容外,最主要的三个目录如下:

datastore 数据存储

数据源的文本数据会被映射到低维度向量空间,然后存储到向量数据库中。官方已提供 Pinecone、Weaviate、Zilliz、Milvus、Qdrant、Redis 这几种数据存储方案的示例。另外,有几个 pull requests 想要加入 PostgreSQL 的支持,大概率将来会合入。

这里使用了抽象工厂设计模式 ,DataStore 是一个抽象类,每种数据存储库是具体的实现类,需要实现三个抽象方法:

(1)_upsert(chunks: Dict[str, List[DocumentChunk]]) -> List[str] 方法,接收一个字典参数,包含有 DocumentChunk 对象列表,将它们插入到数据库中。返回值为文档 ID 的列表。

(2)_query(queries: List[QueryWithEmbedding]) -> List[QueryResult] 方法,接收一个列表参数,包含被 embedding 的查询文本。返回一个包含匹配文档块和分数的查询结果列表。

(3)delete(ids: Optional[List[str]] = None, filter: Optional[DocumentMetadataFilter] = None, delete_all: Optional[bool] = None, ) -> bool  方法,根据 id 和其它过滤条件删除,或者全部删除。返回操作是否成功。

值得注意的是,该目录下的factory.py 模块使用了 Python 3.10 新引入的 match-case 语法,紧跟着 Python 社区的新潮流呢~

server 服务端接口

这个目录只有一个main.py 文件,是整个项目的启动入口。它使用了目前主流的 FastAPI 框架,提供了增删改查的几个 API,另外使用 uvicorn 模块来启动服务。

  • /upsert-file 接口,用于上传单个文件,将其转换为 Document 对象,再进行新增或更新

  • /upsert 接口,上传一系列的文档对象,用于新增或更新

  • /query 接口,传入一系列的文本条件,转成 QueryWithEmbedding 对象后,再从向量数据库查询

  • /delete 接口,根据条件删除或者全部删除数据库中的数据

在这几个接口中,增改删功能主要是给开发者/维护者使用的,ChatGPT 只需调用插件的查询接口。因此,代码中还创建了一个“/sub”子应用,只包含/query 接口,提供给 ChatGPT 调用。

另外,它使用 FastAPI 的 mount 方法挂载了一个“/.well-known”静态文件目录,暴露了关于本插件的基本信息,例如名称、描述、作者、logo、邮箱、提供给 OpenAPI 的接口文档等等。

services 任务处理方法

这个目录下是一些通用的函数,比如下面这些:

(1)chunks.py 文件包含了将字符串和 Document 对象分割成小块、以及为每个块获取嵌入向量的函数。

(2)file.py 文件提供了从上传的文件中提取文本内容及元数据的函数。目前支持解析的文件类型包括 PDF、纯文本、Markdown、Word、CSV 和 PPTX。

(3)openai.py 文件包含两个函数:get_embeddings 函数使用 OpenAI 的 text-embedding-ada-002 模型对给定的文本进行嵌入。get_chat_completion 函数使用 OpenAI 的 ChatCompletion API 生成对话。

整个而言,这个插件的几个接口功能很清晰,代码逻辑也不算复杂。核心的文本嵌入操作是借助于 openai 的 Embedding 接口,文本分块信息的存储及查询操作,则是依赖于各家向量数据库的功能。

YouTube 上有博主手画了一张示意图,字体虽潦草,但大家可以意会一下:

他这个视频 值得推荐一看,因为 up 主不仅简明地介绍了插件的工作原理,还手把手演示如何部署到 Digital Ocean、如何修改配置、如何调试,而且他有 ChatGPT 的插件权限,可以将自己部署的插件接入 ChatGPT,现场演示了知识库插件的使用!

视频:https://www.youtube.com/watch?v=hpePPqKxNq8

目前,关于 ChatGPT 插件的介绍、开发及配置等资料还比较少,毕竟是新推出的。但是,申请 waitlist 的个人和组织已经数不胜数了,一旦开放使用,各式各样的插件一定会像 Python 社区丰富的开源库一样,也将极大扩展 ChatGPT 的生态。

最后,插件 chatgpt-retrieval-plugin 的官方文档是最为详细的一手资料,推荐大家研究一番。https://github.com/openai/chatgpt-retrieval-plugin

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5708.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用ChatGPT处理excel

用ChatGPT处理excel,我们需要用到的主要工具是ChatGPT和vba代码。 VBA代码是一种用于Excel,Word,PPT的Microsoft Office软件的编程语言。 可以让用户通过编写一些简单的指令和操作,实现自动化、自定义和数据处理等功能。 就像你编…

用ChatGPT生成Excel公式,太方便了!

点击上方“Java基基”,选择“设为星标” 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应…

用ChatGPT生成Excel公式,太方便了

ChatGPT 自去年 11 月 30 日 OpenAI 重磅推出以来,这款 AI 聊天机器人迅速成为 AI 界的「当红炸子鸡」。一经发布,不少网友更是痴迷到通宵熬夜和它对话聊天,就为了探究 ChatGPT 的应用天花板在哪里,经过试探不少人发现&#xff0c…

chatgpt赋能python:Python中如何生成表格

Python中如何生成表格 在数据分析和处理中,表格是一种常见的数据格式,并且在不同的场景下都有着不同的用途。Python作为一种高效的编程语言,可以帮助我们轻松地生成和操作表格数据。在本文中,我们将介绍Python中生成表格的方法&a…

【ChatGPT实战】7.使用ChatGPT自动化操作Excel

使用ChatGPT自动化操作Excel!现在可以借助ChatGPT让我们操作表格更加智能化、高效化。无需手动操作,提高你的工作效率并减少出错率。如果你经常使用Excel,这将是一项非常实用的技能。下面我将向你展示如何使用ChatGPT自动化Excel操作&#xf…

短信验证码和邮箱验证码

目录 一、短信发送验证码 1、准备工作 2、项目整合容联云 2.1 引入依赖 2.2 编写配置文件,修改启动类 2.3.1 创建常量类 2.3.2、封装验证码生成类 2.3.3、Controller 层 2.3.4、Service层 二、邮箱验证码 1、准备工作 2、整合邮箱服务 1、引入依赖 2、开…

邮箱接收验证码登录

开发工具与关键技术:VS NVC 作者:听民谣的老猫 撰写时间:2019/7/25 11:07 已经讲过通过账号密码来进行用户的登录,今天就来讲讲邮箱发送动态密码实现用户登录。 再讲这个功能之前你得去QQ邮箱获取一下授权码。 首先登录自己的QQ邮箱,找…

表单账号,密码,邮箱验证登录

1.要求代码实现如下&#xff1a; “账号”和“密码”为必填项且自动获得光标焦点&#xff1b; 设置“密码”由字母开头&#xff0c;长度为6-10&#xff0c;仅包含数字&#xff0c;字母和下划线&#xff1b; “邮箱”检查其格式的合法性。 代码如下&#xff1a; <html&g…

谷歌邮箱(@gmail.com):两步验证+应用专用密码登录

Gmail是Google出品的邮箱&#xff0c;有普通邮箱&#xff08;Gmail.com&#xff09;&#xff0c;也有企业邮箱&#xff08;谷歌企业套件&#xff09; 本文将详细讲解&#xff1a;如何在第三方客户端绑定谷歌邮箱&#xff08;Gmail&#xff09;进行邮件收发&#xff1f; 由于环境…

邮箱验证的思路及实现

邮箱验证 一、开启POP3/SMTP服务 QQ邮箱、网易163邮箱均可。这里以网易163邮箱为例 1、注册163邮箱帐号&#xff0c;进入设置 1、进入设置的POP3/SMTP/IMAP选项 2、开启两个服务&#xff0c;IMAP/SMTP、POP3/SMTP服务。会有一系列验证&#xff0c;最后会给一个授权码&…

如何实现邮箱验证

实现邮箱验证 首先需要借助nodemailer往注册邮箱发送邮件。而通过nodemailer代理发送需要先获取授权码 具体代码实现如下 var nodemailer require(nodemailer); var send function(user){var transporter nodemailer.createTransport({service: qq,auth: {user: xxxxxxx…

TP6------邮箱验证码发送邮件

一、安装tp6mail tp6缺少好多扩展&#xff0c;需要自己手动安装 composer require phpmailer/phpmailer 二、创建控制器 1.在app\admin\controller 创建Mailcheck控制器 <?php /***Created by giveLive*user:lingm*Date:2021/10/4*timer:下午 10:16*Atom:现在的努力是…

PHP + QQ邮箱发送邮箱验证码

一、说明 PHPMailer需要 PHP 的 sockets 扩展支持&#xff0c;而登录 QQ 邮箱 SMTP 服务器则必须通过 SSL 加密的&#xff0c; PHP 还得包含 openssl的支持。 查看PHP 是否开启 SSL &#xff1a; 检查 php.ini 中是否存在;extensionphp_openssl.dll&#xff0c; 如果存在&am…

邮箱验证码发送及验证

邮箱验证码发送及验证 代码简化&#xff0c;有需求可以联系 成果展示图 //获取验证码 //接收图 配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dependency>s…

引入QQ邮箱发送验证码进行安全校验

其他方案>引入短信服务发送手机验证码进行安全校验 操作相对复杂且收费&#xff0c;详细教程可供参考选择 在我们进行登录注册等等敏感操作时&#xff0c;为了保证用户信息的安全性&#xff0c;常常会碰到需要接收手机短信验证码进行验证的场景&#xff0c;虽然它的安全系数…

ChatGPT与教育的未来

Datawhale干货 作者&#xff1a;王鹏&#xff0c;腾讯研究院专家 来源&#xff1a;数说职教 历史上&#xff0c;每一次技术替代人类时&#xff0c;又提供了更多更好的新岗位。但我们往往忘记这个过程中牺牲掉的一代甚至几代人。教育系统的响应方式和速度也许将决定这个替代过程…

万字知识长文:ChatGPT 从零完全上手实操指南

ChatGPT 的横空出世&#xff0c;让很多人焦虑不已&#xff0c;不过&#xff0c;你完全不需要为此焦虑&#xff0c;因为比 AI 更强大永远是驾驭 AI 为自己所用的人类。 而且 GPT 远没有各大商家炒作的那么玄乎 &#xff0c;它应用逻辑也非常简单&#xff0c;你完全没必要为此去…

玩转ChatGPT:吴恩达/OpenAI合作教程《面向开发者的ChatGPT提示工程》

一、写在前面 最近&#xff0c;吴恩达与CloseOpenAI合作出了一个教程《面向开发者的ChatGPT提示工程》&#xff0c;第一时间就观摩了&#xff0c;有些体会&#xff0c;现在把个人觉得有意思的搬运过来。 我的机器学习入门就是看的吴恩达的教程&#xff01;大佬长得像冯巩&…

Android多语言切换

先看下demo中点击对应要显示语言的按钮&#xff0c;效果图如下&#xff1a; 先贴上项目目录图&#xff1a; values-语言代号-地区代号 分别表示不同地区语言资源&#xff0c;常用的国际化资源如下&#xff1a; 中文&#xff08;中国&#xff09;&#xff1a;values-zh-rCN 中…

Android国际化多语言切换

关于App国际化&#xff0c;之前有讲到国际化资源、字符换、布局相关&#xff0c;想要了解的猛戳用力抱一下APP国际化。借着本次重构多语言想跟大家聊一下多语言切换&#xff0c;多语言切换对于一款国际化App来讲是重中之重&#xff0c;并非难事&#xff0c;但是若要做好也是一件…