了解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插件开发者,需求满足以下三个条件:
- 能够科学上网;
- ChatGPT账户开通Plus;
- 参加ChatGPT Plugins developer的白名单,恳求链接:openai.com/waitlist/pl…
开通ChatGPT plus
笔者充值ChatGPT plus时,下述方法有用,现在有说现已不好用的,所以这块仅供参考。
- 运用欧易充USDT
欧易(买入后24小时内不能进行转账),假如你有朋友现已玩上了,你能够直接让朋友用depay给你的depay进行转账,这样欧易这儿就能够省掉了。
- 网站地址 www.okx.com/cn
- app下载地址 www.okx.com/cn/download…
你能够全程操作网站就能够完结。也能够运用手机APP,当然这儿就存在一个问题,假如是android自己捯饬下载一下就能够直接在手机上装置了。
经过便利买币(没有经过C2C是因为需求没那么大,不够资格),挑选USDT,输入要买入的金额 CNY(元)。
查看挑选的是付出宝、微信仍是银行卡转账,留意一下细节就好了,这儿一般只要你转账给对方,一两分钟很快就能收到到账信息,在欧易里查看即可。
- 装置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、这个时分便会生成一个充值地址
- 欧易中提币USDT到depay
依照次序顺次翻开:欧易 app、提币、USDT、链上提现
将depay中生成的充值地址复制到这儿的提币地址,然后挑选金额,最终点击提交即可。
经过邮箱验证和手机验证成功后,经过大约五分钟钱便能够在depay中看到。
- depay中将USDT转换为USD
在depay app中顺次翻开:钱包、实时兑换(暂时在顶部位置)、付出USDT(输入你想要的额度)、得到USD, 最终点击提交兑换即可。
- 将USD转入卡中
然后在depay主页卡中便能够看到余额增多了,当然有或许要稍等片刻 刷新一下。
- 开通ChatGPT PLUS
ai.com登录==>chat.openai.com==>左下角Updrade To Plus==>Updrage Plan==>填写付出方法,其中CVC便是depay中的CVV安全码。
这儿最重要的便是账单地址,这是我之前的地址,我是经过谷歌地图直接找的一个地址,你能够在我邻近地址差不多的位置
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插件
- 开启插件功用
- 在plugin store挑选插件
- 装置插件
- 点击右下角[Develop your own plugin]能够开发调试自己本地的plugin
- 输入本地的endpoint,调试自己本地的插件
- 以Wolfram插件为例,ChatGPT首先依据用户输入分析出用户目的是运用Wolfram插件,然后抽取槽位作为插件输入,插件进行处理后,回来结果
ChatGPT插件的原理
为了画图描绘简略清晰,下面流程描绘单轮的情形,多轮的情况与单轮类似。留意:下面流程是笔者自己的理解,openai的真实实现过程的拆分粒度或许与笔者有收支(笔者出于易于理解的角度这样拆分)。过程3、过程4有或许在一个prompt内完结。
-
过程1:用户输入问题(以calculate 123*456),触发会话开端;
-
过程2:依据用户当时装置并选中的插件(beta版别仅支撑选中3个插件),生成一个紧凑的描绘(包括plugin description, endpoints, and examples),这儿我们将它标记为compact plugin description。
-
过程3:判别compact plugin description与用户问题(calculate 123*456)相关性(relevant),判别相关性或许运用ground+retrieval(下一篇文章详细聊这一块,笔者近期把这块看差不多了)
- 假如无关,则将用户问题(calculate 123*456)交给GPT,GPT完结completion;
- 假如有关,则将插件信息与用户问题一同交给GPT,并进入过程4
-
过程4:GPT选中插件(wolfram),并抽取出槽位(input:”123*456″)
-
过程5:插件履行器担任调用详细的API并传入parameters
-
过程6:插件担任履行,并将履行结果回来,回来结果样例参考如何运用插件末节
-
过程7:插件履行器将履行结果和上下文传给GPT,GPT做completion,并回来给用户
ChatGPT插件开发
插件清单和接口界说文件
ChatGPT插件都需求界说两个文件ai-plugin.json和openapi.yaml。
- ai-plugin.json 是 ChatGPT 插件的清单文件,用于记载插件的基本信息和 API 服务身份验证设置。当经过 ChatGPT UI 装置插件时,体系会在后端查找此文件,假如找不到文件,则无法装置插件。
- 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看一下如何写好这个字段。
- 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能够持久下去的柱石。