重磅:ChatGPT提供第三方插件ChatGPT plugins,每个人、每个公司都可用上大模型

简介: 重磅:ChatGPT提供第三方插件ChatGPT plugins,每个人、每个公司都可用上大模型

ChatGPT 实现了对插件的初步支持。插件是专门为语言模型设计的工具,可帮助 ChatGPT 访问最新信息、运行计算或使用第三方服务。

插件是什么?插件可以成为语言模型的“眼睛和耳朵”,使它们能够访问最新、私人或太具体而无法包含在训练数据中的信息。

插件的诞生,对于每一个开发者,每一个公司,都是机遇和机会,因为我们公司的运营方式和程序开发方式将会迎来变革。

每一个开发者,每一个公司都可以通过ChatGPT plugins使用大型语言模型,来实现交互,提供最新信息。

ChatGPT plugins官网提供了两个插件,一个网络浏览器代码解释器,开源了知识库检索插件的代码,我们开发者也可以自定义插件。

如果我们想开发插件,文末有申请候补链接。

1.先来说说对公司的意义
我们这里举例最常见类型:

1.旅游网
通过ChatGPT插件,我们可以知道到达那里,留在那里,寻找可看可做的事情。

我们以前正常的旅途,是需要做大量准备的,比如我们去哪个酒店最便宜,最优惠,我们要去哪里玩,有没有推荐的,那里有什么风土人情,安不安全。需要带哪些东西,气温如何,有什么注意的等等。这些我们需要大量的搜索和询问,有了ChatGPT插件都解决了。

2.会计
提供并允许访问精选的市场领先的实时数据集,以获取法律、政治和监管数据和信息。

我们知道ChatGPT是大语言模型,训练数据都是过时的。可以有了插件就完全不一样了,他能够读取实时数据。

3.电商
可以实现即时购物车,从数以千计的网上商店搜索和比较价格,从各个品牌中搜索数百万种产品。

从最喜欢的当地店铺店买东西,是的,你没有看错,ChatGPT通过第三方插件,是可以实时购物的,和比较价格。

4.航班、住宿、租车
搜索航班、住宿和租车。获取在我们预算范围内可以去的所有地方的建议。

上面都是最常见公司的作用,其实每个公司,都能从ChatGPT第三方插件找到自己可以盈利的点。

2.对开发者的意义
对于开发者来说,传统开发都是使用平台提供的接口,包括ChatGPT没有提供插件以前,也是这种方式。ChatGPT提供插件后,就完全变了。不在是我们使用平台的接口,而是平台使用我们的接口。进入人工智能时代后,我们开发者将不得不借助人工智能平台,来让我们公司实现更智能、更人性的服务。

接着我们来看看官网提供的两个插件:

1.网络浏览器
允许语言模型从互联网上读取信息,获取最新鲜的数据。

这一插件,弥补了插件模型实时性的问题,比如问他今天几号,这个问题对于他来说就不是问题了。

比如,你能告诉我哪个人/电影赢得了这些类别的奥斯卡奖吗?


它提供的都是这两天的最新信息。

2.代码解释器

可以使用 Python 处理上传和下载的实验性 ChatGPT 模型

我们为模型提供了一个在 沙盒、防火墙执行环境中工作的 Python 解释器,以及一些临时磁盘空间。由我们的解释器插件运行的代码在一个持久会话中进行评估,该会话在聊天对话期间一直有效(具有上限超时),后续调用可以相互构建。我们支持将文件上传到当前对话工作区并下载您的工作结果。


使用代码解释器特别有用的用例:

  • 解决定量和定性的数学问题
  • 进行数据分析和可视化
  • 在格式之间转换文件

3.检索插件
开源检索插件使 ChatGPT 能够访问个人或组织信息源(经许可)。它允许用户通过提问或用自然语言表达需求,从他们的数据源中获取最相关的文档片段,例如文件、笔记、电子邮件或公共文档。

作为一个开源和自托管的解决方案,开发人员可以部署他们自己的插件版本并在 ChatGPT 上注册。该插件利用OpenAI 嵌入并允许开发人员选择矢量数据库(Milvus、Pinecone、Qdrant、Redis、Weaviate或Zilliz)来索引和搜索文档。信息源可以使用 webhooks 与数据库同步。

4.第三方插件开发

第三方插件由清单文件描述,其中包括插件功能的机器可读描述以及如何调用它们,以及面向用户的文档。

1. {
2.   "schema_version": "v1",
3.   "name_for_human": "TODO Manager",
4.   "name_for_model": "todo_manager",
5.   "description_for_human": "Manages your TODOs!",
6.   "description_for_model": "An app for managing a user's TODOs",
7.   "api": { "url": "/openapi.json" },
8.   "auth": { "type": "none" },
9.   "logo_url": "https://example.com/logo.png",
10.   "legal_info_url": "http://example.com",
11.   "contact_email": "hello@example.com"
12. }
复制代码

用于管理待办事项的插件的示例清单文件

创建插件的步骤是:

  • 使用希望语言模型调用的端点构建 API(这可以是新的 API、现有的 API 或围绕专门为 LLM 设计的现有 API 的包装器)。
  • 创建一个记录您的 API 的 OpenAPI 规范,以及一个链接到 OpenAPI 规范并包含一些特定于插件的元数据的清单文件。
  • 在chat.openai.com上开始对话时,用户可以选择他们想要启用的第三方插件。有关已启用插件的文档作为对话上下文的一部分显示给语言模型,使模型能够根据需要调用适当的插件 API 来实现用户意图。目前,插件是为调用后端 API 而设计的,但我们正在探索也可以调用客户端 API 的插件。


3.聊天示例插件

有的开发者想开发聊天插件。我们举例如何构建一个无需授权的简单待办事项列表插件。

在开发过程中,可以在本地计算机或通过 GitHub Codespaces、Replit 或 CodeSandbox 等云开发环境运行插件。

1.如何构建一个无需授权的简单待办事项列表插件
1.首先,定义一个包含以下字段的 manifest.json 文件:

1. {
2.   "schema_version": "v1",
3.   "name_for_human": "TODO Plugin (service http)",
4.   "name_for_model": "todo",
5.   "description_for_human": "Plugin for managing a TODO list, you can add, remove and view your TODOs.",
6.   "description_for_model": "Plugin for managing a TODO list, you can add, remove and view your TODOs.",
7.   "auth": {
8.     "type": "service_http",
9.     "authorization_type": "bearer",
10.     "verification_tokens": {
11.       "openai": "758e9ef7984b415688972d749f8aa58e"
12.     }
13.   },
14.    "api": {
15.     "type": "openapi",
16.     "url": "https://example.com/openapi.yaml",
17.     "is_user_authenticated": false
18.   },
19.   "logo_url": "https://example.com/logo.png",
20.   "contact_email": "dummy@email.com",
21.   "legal_info_url": "http://www.example.com/legal"
22. }
复制代码


请注意,服务级别身份验证插件需要验证令牌。该令牌是在 ChatGPT 网络用户界面中的插件安装过程中生成的。

接下来,我们可以定义一些简单的 Python 端点,为特定用户创建、删除和获取待办事项列表项。端点还对身份验证进行简单检查,因为这是必需的。

1. import json
2. 
3. import quart
4. import quart_cors
5. from quart import request
6. 
7. app = quart_cors.cors(quart.Quart(__name__), allow_origin="*")
8. 
9. _SERVICE_AUTH_KEY = "TEST"
10. _TODOS = {}
11. 
12. 
13. def assert_auth_header(req):
14.     assert req.headers.get(
15.         "Authorization", None) == f"Bearer {_SERVICE_AUTH_KEY}"
16. 
17. 
18. @app.post("/todos/<string:username>")
19. async def add_todo(username):
20.     assert_auth_header(quart.request)
21.     request = await quart.request.get_json(force=True)
22.     if username not in _TODOS:
23.         _TODOS[username] = []
24.     _TODOS[username].append(request["todo"])
25.     return quart.Response(response='OK', status=200)
26. 
27. 
28. @app.get("/todos/<string:username>")
29. async def get_todos(username):
30.     assert_auth_header(quart.request)
31.     return quart.Response(response=json.dumps(_TODOS.get(username, [])), status=200)
32. 
33. 
34. @app.delete("/todos/<string:username>")
35. async def delete_todo(username):
36.     assert_auth_header(quart.request)
37.     request = await quart.request.get_json(force=True)
38.     todo_idx = request["todo_idx"]
39.     # fail silently, it's a simple plugin
40.     if 0 <= todo_idx < len(_TODOS[username]):
41.         _TODOS[username].pop(todo_idx)
42.     return quart.Response(response='OK', status=200)
43. 
44. 
45. @app.get("/logo.png")
46. async def plugin_logo():
47.     filename = 'logo.png'
48.     return await quart.send_file(filename, mimetype='image/png')
49. 
50. 
51. @app.get("/.well-known/ai-plugin.json")
52. async def plugin_manifest():
53.     host = request.headers['Host']
54.     with open("manifest.json") as f:
55.         text = f.read()
56.         text = text.replace("PLUGIN_HOSTNAME", f"https://{host}")
57.         return quart.Response(text, mimetype="text/json")
58. 
59. 
60. @app.get("/openapi.yaml")
61. async def openapi_spec():
62.     host = request.headers['Host']
63.     with open("openapi.yaml") as f:
64.         text = f.read()
65.         text = text.replace("PLUGIN_HOSTNAME", f"https://{host}")
66.         return quart.Response(text, mimetype="text/yaml")
67. 
68. 
69. def main():
70.     app.run(debug=True, host="0.0.0.0", port=5002)
71. 
72. 
73. if __name__ == "__main__":
74.     main()
复制代码

最后,我们需要设置和定义 OpenAPI 规范以匹配本地或远程服务器上定义的端点。通常,无论身份验证方法如何,OpenAPI 规范看起来都是一样的。使用自动 OpenAPI 生成器将减少创建 OpenAPI 规范时出错的可能性,因此值得探索这些选项。

1. openapi: 3.0.1
2. info:
3.   title: TODO Plugin
4.   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".
5.   version: 'v1'
6. servers:
7.   - url: https://example.com
8. paths:
9.   /todos/{username}:
10.     get:
11.       operationId: getTodos
12.       summary: Get the list of todos
13.       parameters:
14.       - in: path
15.         name: username
16.         schema:
17.             type: string
18.         required: true
19.         description: The name of the user.
20.       responses:
21.         "200":
22.           description: OK
23.           content:
24.             application/json:
25.               schema:
26.                 $ref: '#/components/schemas/getTodosResponse'
27.     post:
28.       operationId: addTodo
29.       summary: Add a todo to the list
30.       parameters:
31.       - in: path
32.         name: username
33.         schema:
34.             type: string
35.         required: true
36.         description: The name of the user.
37.       requestBody:
38.         required: true
39.         content:
40.           application/json:
41.             schema:
42.               $ref: '#/components/schemas/addTodoRequest'
43.       responses:
44.         "200":
45.           description: OK
46.     delete:
47.       operationId: deleteTodo
48.       summary: Delete a todo from the list
49.       parameters:
50.       - in: path
51.         name: username
52.         schema:
53.             type: string
54.         required: true
55.         description: The name of the user.
56.       requestBody:
57.         required: true
58.         content:
59.           application/json:
60.             schema:
61.               $ref: '#/components/schemas/deleteTodoRequest'
62.       responses:
63.         "200":
64.           description: OK
65. 
66. components:
67.   schemas:
68.     getTodosResponse:
69.       type: object
70.       properties:
71.         todos:
72.           type: array
73.           items:
74.             type: string
75.           description: The list of todos.
76.     addTodoRequest:
77.       type: object
78.       required:
79.       - todo
80.       properties:
81.         todo:
82.           type: string
83.           description: The todo to add to the list.
84.           required: true
85.     deleteTodoRequest:
86.       type: object
87.       required:
88.       - todo_idx
89.       properties:
90.         todo_idx:
91.           type: integer
92.           description: The index of the todo to delete.
93.           required: true
复制代码


目录
相关文章
|
22天前
|
数据采集 自然语言处理 监控
大模型微调使GPT3成为了可以聊天发布指令的ChatGPT
正是通过微调大模型使得GPT3成为了可以聊天发布指令的ChatGPT。聊天大模型在通用大模型的基础上加一层微调就实现人人能用的大模型,使得通用大模型的能力被更多人使用和了解。
38 4
大模型微调使GPT3成为了可以聊天发布指令的ChatGPT
|
16天前
|
人工智能 API Python
ChatGPT 插件开发
本教程旨在帮助您掌握ChatGPT API的基本使用方法,包括应用开发、代码分析、插件开发及专属领域模型应用等。通过学习,您将为未来的人工智能应用开发打下坚实基础。教程包含官方文档介绍、环境搭建步骤及Python示例代码,助您快速上手。请注意,API调用需收费,初始提供5美元免费额度。
29 3
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
让非算法同学也能了解 ChatGPT 等相关大模型
让非算法同学也能了解 ChatGPT 等相关大模型
让非算法同学也能了解 ChatGPT 等相关大模型
|
1月前
|
人工智能 分布式计算 自然语言处理
ChatGPT 等相关大模型问题之建设一个prompt平台来提升业务效率如何解决
ChatGPT 等相关大模型问题之建设一个prompt平台来提升业务效率如何解决
|
1月前
|
自然语言处理 数据挖掘 BI
ChatGPT 等相关大模型问题之将现有的数据分析平台与大模型结合如何解决
ChatGPT 等相关大模型问题之将现有的数据分析平台与大模型结合如何解决
|
1月前
|
机器学习/深度学习 自然语言处理
ChatGPT 等相关大模型问题之Attention 机制的定义如何解决
ChatGPT 等相关大模型问题之Attention 机制的定义如何解决
|
1月前
|
机器学习/深度学习 人工智能 算法
ChatGPT 等相关大模型问题之人工智能的过拟合 / 欠拟合的定义如何解决
ChatGPT 等相关大模型问题之人工智能的过拟合 / 欠拟合的定义如何解决
|
1月前
|
机器学习/深度学习 人工智能 算法
ChatGPT 等相关大模型问题之ChatGPT 的概念如何解决
ChatGPT 等相关大模型问题之ChatGPT 的概念如何解决
|
1月前
|
人工智能 开发者 芯片
【51单片机】单片机开发者的福音: 让AI看电路图帮你编写程序(使用ChatGPT 中训练好的单片机工程师模型)
使用AI大语言模型编写 单片机程序. 使用的是 OpenAI公司发布的 ChatGPT .在ChatGPT上有别人训练好的 单片机工程师 with Keil uVision 5 - C Code Explainer模型, 可以上传电路图改模型可以通过这个用户所给的电路图进行编程.
【51单片机】单片机开发者的福音: 让AI看电路图帮你编写程序(使用ChatGPT 中训练好的单片机工程师模型)
|
25天前
|
存储 Linux API
物理地址模型 【ChatGPT】
物理地址模型 【ChatGPT】