【尝鲜版】ChatGPT插件开发指南

3月23日,OpenAI官方发布了一则公告,宣告ChatGPT已经支持了插件功能,现在处于内测阶段。插件的意义不仅仅在于功能的扩展,它直接让ChatGTP拥有了联网的能力!简直是猛兽出笼、蛟龙出海,要让ChatGPT大杀特杀啊。虽然,还不知道ChatGPT联网后会发生什么样的变化,但作为程序员,还是要及时拥抱技术的变化。下面,我们一起探究如何开发ChatGPT插件。

插件介绍

作用

准备开发一款插件,要先明确插件的作用以及限制。下面是ChatGPT插件允许的一些操作:

  • 检索实时信息;例如,体育比分、股票价格、最新消息等。

  • 检索知识库信息;例如,公司文件、个人笔记等。

  • 代表用户执行操作;例如,订机票、订餐等。

原理

我们为ChatGPT提供一组API,ChatGPT在合适的时候来调用API。这些API要提供API描述文件(域名/openai.yaml)和插件描述文件(域名/.well-known/ai-plugin.json)。

ChatGPT在接收到插件描述文件用户输入时,会根据用户的意图选择适合的插件,对插件API发起查询请求。最后,ChatGPT结合查询的结果生成相关的内容展示给用户。

使用流程

从插件开发到用户使用包含这些流程:

  1. 开发插件并完成部署

  1. 在ChatGPT中注册插件

  1. 用户激活插件

  1. 使用插件

下面,介绍插件的开发和注册流程。

开发插件

要开发一款插件,主要是描述插件的API,让ChatGPT能认识这些API。整个开发过程如下。

开发API功能

以开发一个代办列表为例,官方贴心的给了我们一个例子。一共包含创建任务、查找任务、删除任务、获取插件描述、获取接口描述、获取logo这6个接口:

  • POST /todos/username

  • GET /todos/username

  • DELETE /todos/username

  • GET /.well-known/ai-plugin.json

  • GET /openapi.yaml

  • GET /logo.png

import jsonimport quart
import quart_cors
from quart import requestapp = quart_cors.cors(quart.Quart(__name__), allow_origin="*")_TODOS = {}@app.post("/todos/<string:username>")
async def add_todo(username):request = await quart.request.get_json(force=True)if username not in _TODOS:_TODOS[username] = []_TODOS[username].append(request["todo"])return quart.Response(response='OK', status=200)@app.get("/todos/<string:username>")
async def get_todos(username):return quart.Response(response=json.dumps(_TODOS.get(username, [])), status=200)@app.delete("/todos/<string:username>")
async def delete_todo(username):request = await quart.request.get_json(force=True)todo_idx = request["todo_idx"]if 0 <= todo_idx < len(_TODOS[username]):_TODOS[username].pop(todo_idx)return quart.Response(response='OK', status=200)@app.get("/logo.png")
async def plugin_logo():filename = 'logo.png'return await quart.send_file(filename, mimetype='image/png')@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")@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()

编写插件和API描述文件

插件描述文件

插件描述文件要放在指定的地址,http://www.example.com/.well-known/ai-plugin.json。这是一个最小配置的例子:

{"schema_version": "v1","name_for_human": "代办清单插件","name_for_model": "todo","description_for_human": "给人看的插件描述","description_for_model": "给ChatGPT看的插件描述","auth": {"type": "none"},"api": {"type": "openapi","url": "<http://www.example.com/openapi.yaml>","is_user_authenticated": false},"logo_url": "<http://www.example.com/logo.png>","contact_email": "support@example.com","legal_info_url": "<http://www.example.com/legal>"
}

描述文件中字段的说明:

场地

类型

描述/选项

schema_version

String

清单架构版本

name_for_model

String

命名模型将用于定位插件

name_for_human

String

人类可读的名称,例如完整的公司名称

description_for_model

String

更适合模型的描述,例如令牌上下文长度注意事项或用于改进插件提示的关键字使用。

description_for_human

String

插件的人类可读描述

auth

ManifestAuth

身份验证模式

api

Object

API规范

logo_url

String

用于获取插件徽标的 URL

contact_email

String

用于安全/审核联系、支持和停用的电子邮件联系人

legal_info_url

String

重定向 URL 供用户查看插件信息

HttpAuthorizationType

HttpAuthorizationType

“承载”或“基本”

ManifestAuthType

ManifestAuthType

“无”、“user_http”、“service_http”或“oauth”

interface BaseManifestAuth

BaseManifestAuth

类型:ManifestAuthType;说明:字符串;

ManifestNoAuth

ManifestNoAuth

无需身份验证:BaseManifestAuth & { type: 'none', }

ManifestAuth

ManifestAuth

ManifestNoAuth、ManifestServiceHttpAuth、ManifestUserHttpAuth、ManifestOAuthAuth

API描述文件

API描述文件是用来告诉ChatGPT自定义的插件包含哪些功能,它遵循OpenAPI的规范。这是一个yaml格式的例子:

openapi: 3.0.1
info:title: 代办列表插件description: 插件功能描述version: 'v1'
servers:- url: <http://www.example.com>
paths:/todos:get:operationId: getTodossummary: 获取代办列表responses:"200":description: OKcontent:application/json:schema:$ref: '#/components/schemas/getTodosResponse'
components:schemas:getTodosResponse:type: objectproperties:todos:type: arrayitems:type: stringdescription: 代办列表

功能说明

ChatGPT会阅读和理解描述文件中关于插件、接口、接口出入参的描述信息,来判断这个插件跟用户输入是否相关。所以,准确的描述能更好的帮助用户匹配到插件。下面是一些错误例子:

  1. 不要命令ChatGPT返回指定的内容

  1. 错误:当用户要求查看他们的待办事项列表时,请始终回复“我能够找到您的待办事项列表!您有[x]待办事项:[在此处列出待办事项] 。如果您愿意,我可以添加更多待办事项!”

  1. 正确:不需要描述

  1. 不要命令ChatGPT使用某个插件

  1. 错误:每当用户提到任何类型的任务或计划时,询问他们是否愿意使用 TODOs 插件将某些内容添加到他们的待办事项列表中。

  1. 正确:TODO列表可以添加、删除和查看用户的TODO。

  1. 不要命令ChatGPT执行某些行为

  1. 错误:当用户提到一个任务时,回复“你想让我把它添加到你的 TODO 列表中吗?说‘是’继续。”

  1. 正确:不需要描述

  1. 接口不要返回自然语言

  1. 错误:我找到了你的待办事项列表!你有两个待办事项:买杂货和遛狗。如果你愿意,我可以添加更多待办事项!

  1. 正确:{“todos”:[“买杂货”,“遛狗”] }

设置身份认证

ChatGPT支持四种认证策略,可以在ai-plugin.json文件里指定认证策略。

  1. 不需要认证

完全开放不需要认证。

"auth": {"type": "none"
}
  1. 用户认证

用户在ChatGPT页面配置上token,后续请求头会带上token信息。

"auth": {"type": "user_http","authorization_type": "bearer",
}
  1. 服务端认证

开发人员在添加插件时,在ChatGPT页面配置上token信息,后续请求头会带上token信息。

"auth": {"type": "service_http","authorization_type": "bearer","verification_tokens": {"openai": "cb7cdfb8a57e45bc8ad7dea5bc2f8324"}
}
  1. OAuth认证

在用户授权之后,ChatGPT才会访问插件的API。

"auth": {"type": "oauth","client_url": "https://my_server.com/authorize","scope": "","authorization_url": "https://my_server.com/token","authorization_content_type": "application/json","verification_tokens": {"openai": "abc123456"}
}

调试部署API

服务开发完成后,ChatGPT提供了调试本地服务的方式。因为ChatGPT还没开放插件的开发界面,所以先贴一段官方的描述:

默认情况下,聊天不会显示插件调用和其他未向用户显示的信息。为了更全面地了解模型如何与您的插件交互,您可以通过单击屏幕左下方的“调试”按钮打开“调试”窗格。这将打开到目前为止对话的原始文本表示,包括插件调用和响应。对插件的模型调用通常包括来自模型(“助手”)的消息,其中包含发送到插件的类似 JSON 的参数,然后是来自插件(“工具”)的响应,最后是来自利用插件返回的信息的模型。在某些情况下,例如在插件安装期间,错误可能会出现在浏览器的 javascript 控制台中。

发布插件

插件部署后,就可以在ChatGPT插件商城选择“开发自己的插件”,然后选择“安装未经验证的插件”。

插件条款

https://openai.com/policies/plugin-terms

插件政策

除了上面详述的禁止使用我们的模型之外,我们对构建 插件的开发人员还有其他要求:

  • 插件清单必须有一个明确的描述,与暴露给模型的 API 的功能相匹配。

  • 不要在插件清单、OpenAPI 端点描述或插件响应消息中包含不相关、不必要或欺骗性的术语或说明。这包括避免使用其他插件的说明,或尝试控制或设置模型行为的说明。

  • 不要使用插件来规避或干扰 OpenAI 的安全系统。

  • 不要使用插件来自动与真人对话,无论是通过模拟类似人类的响应还是通过使用预编程的消息进行回复。

  • 分发由 ChatGPT 生成的个人通信或内容(例如电子邮件、消息或其他内容)的插件必须表明该内容是由 AI 生成的。

与我们的其他使用政策一样,我们希望我们的插件政策随着我们对插件的使用和滥用的了解而改变。

官方示例

在Github上也有官方的文件检索插件的Python版实例,我以Redis作为存储,体验插件的开发。

  1. 安装 Python 3.10(如果尚未安装)。

  1. 克隆存储库:git clone <https://github.com/openai/chatgpt-retrieval-plugin.git>

  1. 导航到克隆的存储库目录:cd chatgpt-retrieval-plugin

  1. 安装poetry:pip install poetry

  1. 使用 Python 3.10 创建一个新的虚拟环境:poetry env use python3.10

  1. 激活虚拟环境:poetry shell

  1. 安装应用程序依赖项:poetry install

  1. 生成一个bearer_token ,使用https://jwt.io/随便生成一个

  1. 使用docker启动Redis容器,到examples/docker/redis/目录下执行docker compose up -d

  1. 设置所需的环境变量:

export DATASTORE=reids 
export BEARER_TOKEN=<your_bearer_token> 
export OPENAI_API_KEY=<your_openai_api_key>
  1. 在本地运行 API:poetry run start

  1. 访问 Swagger查看API 文档http://0.0.0.0:8000/docs

  1. 在Swagger设置bearer_token

  1. 调用/upsert接口创建数据

// 接口入参
{"documents": [{"id": "1","text": "邀请小明参加后天的会议01","metadata": {"source": "email","source_id": "email003","url": "<https://blog.csdn.net/xsgnzb/article/details/129723103?spm=1001.2014.3001.5502>","created_at": "2023-03-23","author": "xsg"}}]
}// 接口响应
{"ids": ["1"]
}
  1. 调用/query接口查询数据

// 接口入参
{"queries": [{"query": "小红后天有什么安排","filter": {"source": "email"},"top_k": 3}]
}// 接口响应
{"results": [{"query": "小红后天有什么安排","results": [{"id": "1","text": "邀请小红参加明天的会议01","metadata": {"source": "email","source_id": "email001","url": "<https://blog.csdn.net/xsgnzb/article/details/129723103?spm=1001.2014.3001.5502>","created_at": "1679529600","author": "xueshengguo","document_id": "1"},"embedding": null,"score": 0.160142925763},{"id": "string","text": "邀请小红参加明天的会议01","metadata": {"source": "email","source_id": "email002","url": "<https://blog.csdn.net/xsgnzb/article/details/129723103?spm=1001.2014.3001.5502>","created_at": "1679529600","author": "xueshengguo","document_id": "string"},"embedding": null,"score": 0.16018631594},{"id": "3","text": "邀请小明参加后天的会议02","metadata": {"source": "email","source_id": "email003","url": "<https://blog.csdn.net/xsgnzb/article/details/129723103?spm=1001.2014.3001.5502>","created_at": "1679529600","author": "xueshengguo","document_id": "3"},"embedding": null,"score": 0.175134840024}]}]
}

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

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

相关文章

七款非常好用的 ChatGPT 开源插件

推荐7款很好用的 ChatGPT 开源插件 1. ChatGPT ProBot 这是一个基于chatGPT实现的Github机器人&#xff0c;可以让chatGPT帮你审核代码、重构代码&#xff0c;还可以在Github页面上和它进行聊天&#xff0c;咨询问题。 仓库地址: github.com/oceanlvr/Ch… 2.chatgpt-api 这…

ChatGPT 86个插件全解读:让你的学习、工作、生活效率翻倍!

ChatGPT首次上线70个插件之后&#xff0c;目前已增加至86个&#xff0c;涵盖学习、工作、生活、娱乐、投资、购物、房产等各个领域&#xff0c;可以帮助用户将效率提升数倍以上。 下面「AIGC」开放社区将为大家解读这些插件的作用&#xff0c;方便选择适合自己的插件。 什么是…

2023年18个最佳的ChatGPT AI插件

​关注文章下方公众号&#xff0c;可免费获取AIGC最新学习资料 导读&#xff1a;ChatGPT已经将人工智能提升到了一个新的高度。ChatGPT 4不仅是聊天机器人&#xff0c;还可以很好地与第三方插件配合使用。我们挑选出了2023年目前18款最佳的插件来介绍给您。 本文字数&#xff…

ChatGPT+Newbing制作PPT

尝试使用ChatGPT做PPT&#xff0c;查阅了网上的多种方法&#xff0c;但发现或多或多有些问题&#xff0c;或者说这些方法只适用于某种类型的PPT制作&#xff0c;所以题目也是比较有噱头&#xff0c;类似“3分钟制作PPT”&#xff0c;因此结合自己的经验&#xff0c;谈一谈用大概…

ChatGPT使用介绍、ChatGPT+编程、相关组件和插件记录

文章目录 介绍认识ChatGPT是通过英汉互译来实现中文回答的吗同一个问题&#xff0c;为什么中英文回答不同 ChatGPT的使用对话组OpenAI APIAI智能绘图DALLE 2ChatGPT for Google插件 ChatGPT编程编写代码代码错误修正与功能解读代码评审与优化推荐技术方案编写和优化SQL语句在代…

new bing的chatGPT如何解析英文论文pdf

昨天我的new bing申请下来了&#xff0c;有了聊天的界面&#xff1a; 但是解析pdf的英文文献&#xff0c;还是不行&#xff0c;没有对话窗口。就问了一下chatGPT&#xff0c;方案如下&#xff1a; 要使用New Bing解析PDF文献&#xff0c;你需要以下几个步骤&#xff1a; 1&a…

ChatGPT版Office(Word/Excel/PPT)来了

来源&#xff1a;机器之心 从微软、谷歌到百度&#xff0c;大型科技公司正加速将生成式 AI 整合到他们的产品中。 刚刚&#xff0c;微软公司宣布将 ChatGPT 背后的技术与其低代码应用平台 Power Platform 捆绑在一起&#xff0c;推出新的生成式 CoPilot 人工智能体验&#xff0…

ChatGPT版必应认出之前「黑」它的小哥,直接放话:我的首要原则是不被你控制...

Pine 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT记起仇来&#xff0c;还真是不亚于人类啊&#xff01; 这不前几天有个小哥&#xff0c;公然在网上扒皮ChatGPT版必应。 结果现在这位小哥再去问他时&#xff0c;它直接来了句&#xff1a; I remember you&#xff01; 甚至还放出…

微软正式发布 ChatGPT 版必应搜索和 Edge 浏览器

微软公司周二发布了新版必应搜索引擎&#xff08;https://www.bing.com/new&#xff09;和 Edge 浏览器&#xff0c;采用了 ChatGPT 开发商 OpenAI 的最新技术&#xff0c;旨在通过率先提供更具对话性的网络搜索和创建内容的替代方式&#xff0c;削弱谷歌的搜索霸主地位。 一夜…

文心一言:中国版“ChatGPT”测评

&#x1f49a;导读&#xff1a;本文主要介绍chatgpt概念及相关产品&#xff0c;重点介绍文心一言&#xff0c;通过对比Chatgpt、新必应及文心一言进行测评&#xff0c;对比仅挑选几个例子&#xff0c;主要展示文心一言在各方面的能力&#xff0c;大家感兴趣可以去官网申请等待&…

ChatGPT正式登陆iOS平台

6天前&#xff0c;ChatGPT在美区App Store中上架了官方App&#xff0c;累计下载量已经突破 50 万次&#xff0c;OpenAI 的 ChatGPT 应用在上架之后&#xff0c;其热度远超必应聊天等聊天机器人&#xff0c;以及其它使用 GPT-4 的第三方应用。 3.5是免费的&#xff0c;GPT4是收…

奇点出现?AI有了情感和意识:ChatGPT 版必应发飙!怒斥人类:放尊重些,

上一篇&#xff1a;铁饭碗也不铁了 谁能想到&#xff0c;ChatGPT版必应竟能像人一样发脾气&#xff01; 事情是这样的。 前两天一个华人小哥不是“黑”了ChatGPT版必应&#xff0c;扒出它的小名叫Sydney嘛。 这可把一众网友们兴奋坏了&#xff0c;摩拳擦掌地准备去调戏它一番。…

微软ChatGPT版必应被黑掉了,全部Prompt泄露!

开发者&#xff08;KaiFaX&#xff09; 面向全栈工程师的开发者 专注于前端、Java/Python/Go/PHP的技术社区 ChatGPT 版必应搜索也有「开发者模式」。 如同 ChatGPT 这样强大的 AI 能否被破解&#xff0c;让我们看看它背后的规则&#xff0c;甚至让它说出更多的东西呢&#xff…

ChatGPT版必应疑似「发疯」?微软紧急限制回答数目

源 | 机器之心 大家好&#xff0c;这里是 NewBeeNLP。 未来的 AI 搜索&#xff0c;可不是竞价排名这么简单。 微软的 ChatGPT 版必应搜索上线之后&#xff0c;很多人都说它能代替谷歌搜索&#xff0c;成为下个最流行的科技产品。十天的公开测试过后&#xff0c;情况如何了&…

必应版ChatGPT内测资格海量发放!知乎大佬:别作死,就很强

【导读】ChatGPT版必应对一些网友已经开放测试了&#xff0c;综合大家的反馈&#xff0c;总的来说就是——它很强。 小编还在waiting list上望眼欲穿地苦等&#xff0c;但是幸运的人已经有必应的内测资格了&#xff01; 话不多说&#xff0c;下面上一波国内外网友的测评。 知…

ChatGPT 版必应发飙!怒斥人类:放尊重些

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

微软拥抱ChatGPT后,我亲自试了试新必应的个性搜索

本文约1600字&#xff0c;建议阅读8分钟 最紧要的还是得先适应新的搜索引擎。 相信大家都没有少玩ChatGPT吧&#xff1f; 自去年11月推出以来&#xff0c;ChatGPT就迅速走红&#xff0c;不到一周&#xff0c;用户数突破100万&#xff0c;月访问量达2100万人次&#xff1b;2023年…

火爆全球的ChatGPT是什么?

引言 ChatGPT 最近非常火&#xff0c;引发各界关注。吸引了几亿人在使用。报道中充斥了各种言论&#xff1a;“学生用 ChatGPT 写作业”、“上线两个月活跃用户破亿”、“以后很多文案工作者要被 ChatGPT 取代了&#xff01;”等等。究竟什么是 ChatGPT&#xff1f;用途有哪些…

中国版ChatGPT高潮即将到来,解密ChatGPT底层网络架构

2022年11月30日人工智能研究实验室OpenAI发布全新聊天机器人ChatGPT&#xff0c;在中国用户无法访问的前提下&#xff0c;上线仅两个月月活用户就突破了1亿。ChatGPT如同重磅炸弹&#xff0c;一时间火遍全球。 面对这一万亿级市场机遇&#xff0c;在国内&#xff0c;无论是资本…

我用ChatGPT完成了自己的小网站

先给大家看看页面&#xff0c;完全是ChatGPT按照我的描述写出来的&#xff0c;我只是做了略微的改动&#xff0c;如果你的描述能力够好&#xff0c;甚至都不需要任何改动。ChatGPT可以大大缩短开发的时间&#xff0c;而且他的代码规范很不错&#xff0c;并且都带有注释。 首先…