gpt-plugin

其实最重要的还是看官方的文档, 以及自己上手制作

简单理解

ChatGPT 的每个插件都包含一个 manifest 文件,除了插件开发者提供的各类 meta 信息,这个文件中还包含了 OpenAI 官方嵌入的一段面向 GPT 模型的描述

就是这段描述让 ChatGPT 知道什么时候该使用插件,它对用户是不可见的,作用在于告诉模型如何根据用户的输入/问题判断何时调用该插件,并且把 API 的返回结果整合到 ChatGPT 的回答中。

Speak 插件

比如,一个叫做 Speak 的插件,这是一款用于学习多种外语口语的应用(有同名软件)。

Learn how to say anything in another language with Speak, your AI-powered language tutor.
(跟着 Speak 学习如何使用另外一种语言说你想说。)

小哥破解了它在 ChatGPT 中的描述文件

仔细看能发现这段描述其实就是写给 ChatGPT 的 prompt,通过详细的 prompt 告诉模型什么时候调用这个插件,比如

“当用户要求语言导师或外语对话伙伴时,立即调用 Speak 插件”;
“当用户提出关于如何使用另一种语言说某个东西时的问题时,使用“translate”API 来回答。只有当用户提供了要翻译的具体短语或单词时,才使用此端点。如果问题可以更通俗或更高级的解答,则使用“explainTask”API 来回答。“

此外,prompt 还通过提供具体的例子说明什么场合应该使用哪些特定的 API。

FAQ

目前的 Ai 伙伴是怎么实现召回功能的?

之前准备写一篇专门介绍上述工具类的原理介绍(其实 ChatGPT 的 插件——chatgpt-retrieval-plugin),但是后来查看了几个项目的源码之后发现,这类工具的主要原理其实比较直观:

上述思路虽然直观,但要获取更好的结果,其实除了第三步,其余每一步都有优化的空间:

具体流程图可以参考 gpt-langchain-pdf[7]:

图片

gpt-langchain-pdf

查看@madawei2699 大佬写的 ChatGPT 应用开发小记

简单理解二

作者:天地会珠海分舵

链接:https://www.zhihu.com/question/594369824/answer/3027479751

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

先抄题吧,ChatGPT plugin 的插件功能是如何实现的?

从官方文档可以看到,插件其实说白了就是个远程 api 调用。

我们都知道 ChatGPT 是个 语言模型,擅长的是根据前文的输入来预测下一个字应该输出什么,但是无法联网,也不擅长数学等。而插件的作用就是去补全 ChatGPT 的这些短板

比如用户给 ChatGPT 一个 Prompt

今天 500 美元可以换多少人民币?

如果没有插件的话,ChatGPT 大概率会告诉你它无法联网之类云云,以下是 gpt-3.5 的一个回复

由于 外汇汇率 会不断波动,因此我无法提供一个准确的答案,但您可以使用 搜索引擎 来查找最新的汇率转换器来进行计算。例如,您可以在搜索引擎中输入“500 美元兑换人民币”来获取最新的汇率转换结果。

那这时候就需要 ChatGPT Plugin 登场了。

假如我们有个算汇率的 ChatGPT Plugin,比如就叫做 Currency Converter,那么上面的问题丢给 ChatGPT 后,它大概会这样去做:

那么回到题主副标题里问的:ChatGPT 怎么知道什么时候该使用插件呢?

其实就是上面列表中的第三点,每个插件注册的时候都必须提供一个 manifest 清单文件,其中有一项叫做 description_for_model,其功能就是要搞我们得大语言模型 ChatGPT 什么时候该调用该插件

Thedescription_for_modelattribute gives you the freedom to instruct the model on how to use your plugin generally.

在上图中,左边显示的就是我们 远程web服务器 上实现的插件功能,中间部分就是我们要暴露出去的内容

如果你感兴趣自己去实现一个插件的,那可能就更加清楚了,可以参考我此前分享的一个教程

chatgpt开发入门(八)-实战如何开发一个chatgpt插件 - 知乎

我是 @天地会珠海分舵,持续关注和分享 ChatGPT | LLM | Diffusion Model 等 AI 领域资讯和编程知识,喜欢的请点个赞并关注我,谢谢!

增强类 chatGPT 应用

由于 chatGPT 本身不是联网的,无法获取最新的数据,且输入的 Token 也是有最大限制的,因此这类应用主要是为 chatGPT 突破这些限制而设计的,比如通过爬虫获取最新的数据,然后通过 chatGPT 来生成新的文本或总结这些文字,或者通过 Embedding 的方式将大量的文本向量化,然后把文本节点与向量化的组合存储到特殊设计的索引中,然后把用户输入的 Token 向量化后,通过词向量检索寻找相关的上下文,然后把这些上下文与用户输入的 Prompt 一同提交给 chatGPT 来获取答案。

要应用自己去处理这么多繁琐的工作显然是没有必要的,因为已经有非常好的开源项目去实现这些功能了,代表就是 jerryjliu/llama_index,使用这个库可以很容易实现这些增强功能,比如给 chatGPT 提供外部数据源,从而可以让它帮助我们分析网页、文档、新闻等等任务。

一些相关的应用:

这些应用大多以 Embedding 为核心,当然也都存在共同的问题:因为 Embedding 是根据相似度去搜索相关文本的,如果问题非常宽泛,那么很难有效搜索到相关的问题,因此使用这些应用需要用户提供尽可能相关的问题,这样才能得到比较好的答案,也就是说需要用户提供好的 Prompt。

当然 openAI 官方也提供了插件市场,这些功能也可以在插件中实现,但目前插件仅能在网页版使用,而且插件现在并没有完全开放,只有一些特定的用户才能使用。

资源

我在这里分享这两个月使用 ChatGPT 给我的灵感产生的一个开源项目,你可以从中了解到 ChatGPT 官方插件:chatgpt-retrieval-plugin[3|3] ,微软 ChatGPT多模态:VisualChatGPT[4|4] 以及最近火爆的 Auto-GPT[5|5] 里面插件 (plugin) 和命令 (command) 与 ChatGPT 交互的工作原理,并且你可以通过本项目,自己也能开发一个新的工具来让 LLM(希望是国内的)也能获取外部知识、事务控制。

Plugin 官方文档

ChatGPT plugins

Plugin 测评

此外,我们也发现,联网、实时信息获取和阅读网页/PDF 功能是刚需。Wolfram(数学计算)、WebPilot(网页阅读)、Speak(专业翻译)、Prompt Perfect(提示词润色)、Show Me(流程图绘制)、AskYourPDF(PDF 阅读)、CreatiCode Scratch(少儿编程)、Chess(国际象棋游戏教练)、edX(公开课学习)、FiscalNote(政策咨询与分析)等插件商业化属性弱,功能强大,值得一试。

简单描述三

它是如何选择插件的

清单文件🧾

image

其中这个 json 文件有两个字段我们需要特别注意:

OpenAPI 规范文件📃

imageimage

现在我们知道了 ❗️

搞懂了一个插件是如何开发的,这么看下来就很清晰了: