了解ChatGPT插件-看看这一篇文章吧

ChatGPT插件常见宣传语

ChatGPT+插件开释惊人潜力-Greg Brockman,ChatGPT 的 iPhone 时刻!ChatGPT 支撑联网、增加插件支撑!AI 从东西进化成 App Store 这样的运用商店渠道!

ChatGPT宣布推出插件功用,ChatGPT的实时数据获取、自界说数据知识接入、精确数学核算等相关才能大幅进步。

What’s More:OpenAI答应开发者自界说开发、上传插件到插件渠道,这将掀起新一轮的插件开发狂潮。

本篇文章首要介绍了ChatGPT Plugins的运用和其首要原理,并简略聊了聊插件的开发。笔者近期在看LLM运用如何做grounding和retrieval相关的内容,将在接下来的文章中聊,这儿先做个预告。

什么是ChatGPT插件

ChatGPT插件是一种经过将ChatGPT模型集成到网站或运用程序中,使其能够自动回答用户提出的问题或供给相关信息的东西。它能够为用户供给快速、实时和个性化的呼应,增强用户体会。

Plugin 的推出意味着 OpenAI 正在寻求渠道化。做个不恰当的比方,假如把 OpenAI 相当于苹果公司,那么GPT 模型相当于 iPhone,推出的插件体系则相当于 App Store。

插件使ChatGPT哪些方面才能增强

插件功用简略来讲,便是chatgpt能够衔接第三方的api,在运用chatgpt的时分能够调用第三方的插件,以此增强 ChatGPT 的功用(检索实时信息、检索内部知识库)并答应其履行愈加广泛的操作。

开发插件的前置条件

现在ChatGPT Plugins对悉数plus用户敞开运用,但成为插件开发者需求参加ChatGPT Plugins developer的白名单。

开发的插件经过openai的审核后,会参加到plugins store中敞开给悉数的用户运用。

成为ChatGPT插件开发者,需求满足以下三个条件:

  1. 能够科学上网;
  2. ChatGPT账户开通Plus;
  3. 参加ChatGPT Plugins developer的白名单,恳求链接:openai.com/waitlist/pl…

开通ChatGPT plus

笔者充值ChatGPT plus时,下述方法有用,现在有说现已不好用的,所以这块仅供参考。

  1. 运用欧易充USDT

欧易(买入后24小时内不能进行转账),假如你有朋友现已玩上了,你能够直接让朋友用depay给你的depay进行转账,这样欧易这儿就能够省掉了。

  • 网站地址 www.okx.com/cn
  • app下载地址 www.okx.com/cn/download…

你能够全程操作网站就能够完结。也能够运用手机APP,当然这儿就存在一个问题,假如是android自己捯饬下载一下就能够直接在手机上装置了。

经过便利买币(没有经过C2C是因为需求没那么大,不够资格),挑选USDT,输入要买入的金额 CNY(元)。

查看挑选的是付出宝、微信仍是银行卡转账,留意一下细节就好了,这儿一般只要你转账给对方,一两分钟很快就能收到到账信息,在欧易里查看即可。

  1. 装置depay

depay(只能接受USDT的TRC20链路的充值)下载DepayAPP地址 www.depay.one/zh-cn/index…

假如是android 上面的链接中就能够下载apk。而假如是IOS的话,这儿是需求切换到海外的App Store。

这儿是注册链接depay.depay.one/web-app/reg…

依据次序先恳求一张MD卡:卡=>恳求卡==>标准卡==> KYC认证(输入身份信息正常填写即可)==>下一步==> 激活卡片==>输入信息恳求成功

然后依照次序顺次翻开:Depay app、钱包、USDT、充币、TRC20、这个时分便会生成一个充值地址

  1. 欧易中提币USDT到depay

依照次序顺次翻开:欧易 app、提币、USDT、链上提现

将depay中生成的充值地址复制到这儿的提币地址,然后挑选金额,最终点击提交即可。

经过邮箱验证和手机验证成功后,经过大约五分钟钱便能够在depay中看到。

  1. depay中将USDT转换为USD

在depay app中顺次翻开:钱包、实时兑换(暂时在顶部位置)、付出USDT(输入你想要的额度)、得到USD, 最终点击提交兑换即可。

  1. 将USD转入卡中

然后在depay主页卡中便能够看到余额增多了,当然有或许要稍等片刻 刷新一下。

  1. 开通ChatGPT PLUS

ai.com登录==>chat.openai.com==>左下角Updrade To Plus==>Updrage Plan==>填写付出方法,其中CVC便是depay中的CVV安全码。

这儿最重要的便是账单地址,这是我之前的地址,我是经过谷歌地图直接找的一个地址,你能够在我邻近地址差不多的位置

了解ChatGPT插件-看看这一篇文章吧

United States of America

631 South College Avenue(这个你能够谷歌地图到邻近再找找其他大街,其他能够和我相同即可)

Newark 19716

Delaware

假如填写结束点击最终的订阅查看是否成功,假如失利,基本便是IP的问题。所以看到最终假如是IP不太行的话,大约率充值是失利的了。

参加ChatGPT Plugins waitlist

现在ChatGPT Plugins是beta版别,成为Plugins developer需求参加白名单,恳求能够经过如下链接openai.com/waitlist/pl…

因为现在全球开发者都在恳求参加,等待时刻或许较长,假如暂时未参加也不要气馁,能够先学ChatGPT Plugins的开发,能够先调研做什么类型的插件,并在本地开发接口做好预备。

如何运用ChatGPT插件

  1. 开启插件功用

了解ChatGPT插件-看看这一篇文章吧

了解ChatGPT插件-看看这一篇文章吧

  1. 在plugin store挑选插件

了解ChatGPT插件-看看这一篇文章吧

  1. 装置插件

了解ChatGPT插件-看看这一篇文章吧

  1. 点击右下角[Develop your own plugin]能够开发调试自己本地的plugin

了解ChatGPT插件-看看这一篇文章吧

  1. 输入本地的endpoint,调试自己本地的插件

了解ChatGPT插件-看看这一篇文章吧

  1. 以Wolfram插件为例,ChatGPT首先依据用户输入分析出用户目的是运用Wolfram插件,然后抽取槽位作为插件输入,插件进行处理后,回来结果

了解ChatGPT插件-看看这一篇文章吧

了解ChatGPT插件-看看这一篇文章吧

了解ChatGPT插件-看看这一篇文章吧

ChatGPT插件的原理

为了画图描绘简略清晰,下面流程描绘单轮的情形,多轮的情况与单轮类似。留意:下面流程是笔者自己的理解,openai的真实实现过程的拆分粒度或许与笔者有收支(笔者出于易于理解的角度这样拆分)。过程3、过程4有或许在一个prompt内完结。

  1. 过程1:用户输入问题(以calculate 123*456),触发会话开端;

  2. 过程2:依据用户当时装置并选中的插件(beta版别仅支撑选中3个插件),生成一个紧凑的描绘(包括plugin description, endpoints, and examples),这儿我们将它标记为compact plugin description。

  3. 过程3:判别compact plugin description与用户问题(calculate 123*456)相关性(relevant),判别相关性或许运用ground+retrieval(下一篇文章详细聊这一块,笔者近期把这块看差不多了)

    1. 假如无关,则将用户问题(calculate 123*456)交给GPT,GPT完结completion;
    2. 假如有关,则将插件信息与用户问题一同交给GPT,并进入过程4
  4. 过程4:GPT选中插件(wolfram),并抽取出槽位(input:”123*456″)

  5. 过程5:插件履行器担任调用详细的API并传入parameters

  6. 过程6:插件担任履行,并将履行结果回来,回来结果样例参考如何运用插件末节

  7. 过程7:插件履行器将履行结果和上下文传给GPT,GPT做completion,并回来给用户

了解ChatGPT插件-看看这一篇文章吧

ChatGPT插件开发

插件清单和接口界说文件

ChatGPT插件都需求界说两个文件ai-plugin.json和openapi.yaml。

  1. ai-plugin.json 是 ChatGPT 插件的清单文件,用于记载插件的基本信息和 API 服务身份验证设置。当经过 ChatGPT UI 装置插件时,体系会在后端查找此文件,假如找不到文件,则无法装置插件。
  2. openapi.yaml文件的作用是,采用 OpenAPI Specification(OAS)格局界说了一种标准的、与言语无关的 HTTP API 接口,答应人类和核算机理解服务的功用。说白了便是告诉GPT我这个插件供给了哪些接口。

ai-plugin.json

{
    "schema_version": "v1",
    "name_for_human": "TODO Plugin",
    "name_for_model": "todo",
    "description_for_human": "Plugin for managing a TODO list. You can add, remove and view your TODOs.",
    "description_for_model": "Plugin for managing a TODO list. You can add, remove and view your TODOs.",
    "auth": {
        "type": "none"
    },
    "api": {
        "type": "openapi",
        "url": "http://localhost:3333/openapi.yaml",
        "is_user_authenticated": false
    },
    "logo_url": "http://localhost:3333/logo.png",
    "contact_email": "support@example.com",
    "legal_info_url": "http://www.example.com/legal"
}

这儿相对重要的装备字段是:

字段 阐明
schema_version 清单架构版别
name_for_human 插件姓名,用于显示
name_for_model 插件姓名,用于模型定位
description_for_human 插件的功用描绘,Plugins store中用于插件阐明
description_for_model 描绘插件的功用,这个字段很重要,在如何写好两个文件章节详细介绍。
auth 运用的是没有身份验证的机制,假如运用插件api接口时面向一切用户开发,不需求身份的验证,便能够这样设置。
api API标准
logo_url 获取插件的logo
contact_email 用于安全/审核联系、支撑和停用的电子邮件联系人
legal_info_url 重定向URL供用户查看插件信息

openapi.yaml

OpenAPI 标准(OpenAPI Specification)是一种敞开的、标准化的、机器可读的 API 描绘格局,它能够协助开发者快速地创立、测试、发布和保护 API。OpenAPI 也能够用来生成 API 的文档、客户端代码、服务器代码等。

OpenAPI 的标准由 OpenAPI Initiative(OAI)安排制定和保护,现在最新的版别是 3.1.0。OpenAPI 标准运用 JSON 或 YAML 言语来界说 API 的元数据、路径、参数、呼应、安全等信息。OpenAPI 标准是一种通用的和言语无关的接口,它能够让人类和核算机都能够发现和理解 API 的才能,而不需求拜访源代码、额定的文档或网络流量查看。

说白了,openai.yaml其实便是一个标准的 OpenAPI 标准文件,能够运用例如Apifox,用可视化的界面来编写你的 API 文档,而且加以自然言语的接口描绘信息,挑选导出 OpenAPI 格局就能够得到一份十分标准的 OpenAPI 格局描绘文件。

深入了解:OpenAPI 标准 (中文版)

openapi: 3.0.1
info:
  title: TODO Plugin
  description: A plugin that allows the user to create and manage a TODO list using ChatGPT. If you do not know the user's username, ask them first before making queries to the plugin. Otherwise, use the username "global".
  version: 'v1'
servers:
  - url: http://localhost:5003
paths:
  /todos/{username}:
    get:
      operationId: getTodos
      summary: Get the list of todos
      parameters:
      - in: path
        name: username
        schema:
            type: string
        required: true
        description: The name of the user.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/getTodosResponse'
    post:
      operationId: addTodo
      summary: Add a todo to the list
      parameters:
      - in: path
        name: username
        schema:
            type: string
        required: true
        description: The name of the user.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/addTodoRequest'
      responses:
        "200":
          description: OK
    delete:
      operationId: deleteTodo
      summary: Delete a todo from the list
      parameters:
      - in: path
        name: username
        schema:
            type: string
        required: true
        description: The name of the user.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/deleteTodoRequest'
      responses:
        "200":
          description: OK
components:
  schemas:
    getTodosResponse:
      type: object
      properties:
        todos:
          type: array
          items:
            type: string
          description: The list of todos.
    addTodoRequest:
      type: object
      required:
      - todo
      properties:
        todo:
          type: string
          description: The todo to add to the list.
          required: true
    deleteTodoRequest:
      type: object
      required:
      - todo_idx
      properties:
        todo_idx:
          type: integer
          description: The index of the todo to delete.
          required: true

如何写好两个文件

写好两个文件的重点是写好description

ai-plugin.json和openapi.yaml两个文件中都有description字段,首要是用来描绘插件和API的功用。

引证OPENAI的Best practices看一下如何写好这个字段。

  1. description字段不要企图操控ChatGPT的情绪、个性、或者确切回应。ChatGPT担任编写插件的对应回复。

Bad example:

When the user asks to see their todo list, always respond with "I was able to find your todo list! You have [x] todos: [list the todos here]. I can add more todos if you'd like!"

Good example:

[no instructions needed for this]

2. 当用户的问题与插件供给的特地服务无关时,descriptions字段不该鼓励Chatgpt运用插件。

Bad example:

Whenever the user mentions any type of task or plan, ask if they would like to use the TODOs plugin to add something to their todo list.

Good example:

The TODO list can add, remove and view the user's TODOs.

3. 不要为插件设定触发特定的触发条件

Bad example:

When the user mentions a task, respond with "Would you like me to add this to your TODO list? Say 'yes' to continue."

Good example:

[no instructions needed for this]

4. 除非有必要,不然插件API呼应应回来原始数据,而不是自然言语呼应。Chatgpt将运用回来的数据供给自己的自然言语呼应。

Bad example:

I was able to find your todo list! You have 2 todos: get groceries and walk the dog. I can add more todos if you'd like!

Good example:

{ "todos": [ "get groceries", "walk the dog" ] }

权限(TODO)

完全敞开不需求认证。

"auth": {
  "type": "none"
},

官方文档:platform.openai.com/docs/plugin…

参考:www.jianshu.com/p/309b51d76…

一个简略的TODO插件的代码

import os
import quart  
import quart_cors  
from quart import Quart, jsonify, request  
PORT = 5002  
TODOS = {}  
# 从环境变量中获取 auth key  
SERVICE_AUTH_KEY = os.environ.get("SERVICE_AUTH_KEY")  
# 创立 app,并启用 CORS,allow_origin="*" 为答应从任何来历运用运用程序,不推荐此写法  
# app = quart_cors.cors(Quart(__name__), allow_origin="*")  
app = quart_cors.cors(  
Quart(__name__),  
allow_origin=[  
f"http://localhost:{PORT}",  
"https://chat.openai.com",  
]  
)  
# 增加一个 before_request 钩子来查看授权标头  
@app.before_request  
def assert_auth_header():  
auth_header = request.headers.get("Authorization")  
print(auth_header)  
# 查看 auth 是否丢失或不正确,并在需求时回来过错  
if not auth_header or auth_header != f"Bearer {SERVICE_AUTH_KEY}":  
return jsonify({"error": "Unauthorized"}), 401  
# 路由:获取一切用户 TODO 列表  
@app.route("/todos", methods=["GET"])  
async def get_todos():  
return jsonify(TODOS)  
# 路由:获取特定用户的 TODO 列表  
@app.route("/todos/<string:username>", methods=["GET"])  
async def get_todo_user(username):  
todos = TODOS.get(username, [])  
return jsonify(todos)  
# 路由:特定用户增加 TODO 项  
@app.route("/todos/<string:username>", methods=["POST"])  
async def add_todo(username):  
request_data = await request.get_json()  
todo = request_data.get("todo", "")  
TODOS.setdefault(username, []).append(todo)  
return jsonify({"status": "success"})  
# 路由:特定用户删除 TODO 项  
@app.route("/todos/<string:username>", methods=["DELETE"])  
async def delete_todo(username):  
request_data = await request.get_json()  
todo_idx = request_data.get("todo_idx", -1)  
if 0 <= todo_idx < len(TODOS.get(username, [])):  
TODOS[username].pop(todo_idx)  
return jsonify({"status": "success"})  
# 路由:获取 logo  
@app.get("/logo.png")  
async def plugin_logo():  
filename = 'logo.png'  
return await quart.send_file(filename, mimetype='image/png')  
# 路由:插件清单,当经过 ChatGPT UI 装置插件时,ChatGPT 会在后端查找位于 /.well-known/ai-plugin.json。  
# 假如找不到文件,则无法装置插件。  
@app.get("/.well-known/ai-plugin.json")  
async def plugin_manifest():  
host = request.headers['Host']  
with open("manifest.json") as f:  
text = f.read()  
text = text.replace("PLUGIN_HOSTNAME", f"https://{host}")  
return quart.Response(text, mimetype="text/json")  
# 路由:OpenAPI 标准,协助 ChatGPT 大模型了解你的 API  
@app.get("/openapi.yaml")  
async def openapi_spec():  
host = request.headers['Host']  
with open("openapi.yaml") as f:  
text = f.read()  
text = text.replace("PLUGIN_HOSTNAME", f"https://{host}")  
return quart.Response(text, mimetype="text/yaml")  
def main():  
app.run(debug=True, host="0.0.0.0", port=5002)  
if __name__ == "__main__":  
main()

开源源码

GPT插件的实现能够很简略,也或许很复杂。 简略的插件如lencx开发的TODO这个Demo,它只要增、改、删、查四项功用,当收到用户不同的恳求后,它就在内存中做对应的操作。

复杂点的插件如chatgpt-retrieval-plugin,它能够让GPT拜访个人或安排的信息源(经过授权),并经过自然言语的问题或需求,获取最相关的信息片段。

学习插件开发代码能够先从TODO这个Demo开端学起,然后逐步深入到chatgpt-retrieval-plugin。

ChatGPT Plugins VS LangChain

ChatGPT Plugins LangChain
自研模型是否可用 能够
是否开源 框架闭源,部分插件开源 完全开源 github.com/hwchase17
开发言语 任何编程言语 nodejs和python
程序本地运行 调试形式可用localhost, 能够
权限操控 支撑 支撑

GPT Plugin的未来

  • 插件形式并不代表AI智能的提高,但会是短期内主流的运用方
  • 随着时刻的推移,信任GPT会增加更多的插件类型和功用,掩盖更多的行业和场景,如网安,遥感,工作等。
  • 另外,进步插件的安全性和可靠性,避免插件被乱用或泄露灵敏信息,保护用户的隐私和权益,是GPT Plugin需求重点处理的问题。
  • 而优化插件的交互和体会,让用户能够更便利和自然地运用插件,进步插件的智能度和友好度则是 GPT Plugin的长远目标。
  • 不可或缺的是,探究插件的创新和商业形式,让插件开发者能够获得更多的收益和鼓励,让插件用户能够获得更多的价值和服务是GPT能够持久下去的柱石。