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

article/2024/11/15 0:32:34

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://chatgpt.dhexx.cn/article/Hx8sRDEU.shtml

相关文章

chatgpt赋能python:Python编写股票软件-从入门到实战

Python编写股票软件-从入门到实战 股票是金融市场中重要的交易品种&#xff0c;每个交易者都希望通过各种工具和分析方法更好地掌握股价动态、分析趋势并做出交易决策。Python作为一种强大的开发语言&#xff0c;具有简单易学、高效、稳定的特点&#xff0c;并且在数据分析和科…

ChatGPT为什么可以取代那么多职位?

最近的ChatGPT段子满天飞&#xff0c;以至于&#xff0c;不聊ChatGPT咱都不好意思在社交媒体上发言了。 这种力度的出圈&#xff0c;各种长期离线好友&#xff0c;甚至我妈都来问我&#xff0c;这是啥玩意啊&#xff1f; “十年老友&#xff0c;不请自来”&#xff1f;这架势&…

ChatGPT Plus 插件最全解读

前言&#xff1a; OpenAI放出大招&#xff0c;向所有ChatGPT Plus用户开放联网功能和众多插件&#xff0c;允许ChatGPT访问互联网并使用70个第三方插件。 本批第三方插件能够全方位覆盖衣食住行、社交、工作以及学习等日常所需&#xff0c;基本上能够扮演24小时私人助理的角色…

突发!谷歌版“ChatGPT”开放测试,直面硬刚微软Bing

谷歌在 2 月份发布了其 Bard 对话式 AI 后&#xff0c;一直在努力改进聊天机器人的回答&#xff0c;因为它在 Twitter 上首次亮相时就传播了错误信息。最近该公司将生成式 AI 功能添加到几乎所有服务中&#xff0c;而对 Bard 聊天机器人的访问仍然是少数人的专属。 3月21日深夜…

聚观早报 |微软正式将ChatGPT引入必应;百度将于3月上线ChatGPT

今日要闻&#xff1a;微软正式将ChatGPT引入必应&#xff1b;抖音否认3月全国上线外卖服务&#xff1b;百度将于3月上线ChatGPT产品&#xff1b;印尼跃升成全球第二大钴生产国&#xff1b;特斯拉在德国喜获“开年红” 微软正式将ChatGPT引入必应 2 月 8 日&#xff0c;据 CNE…

不写代码就能开发应用,微软借助 ChatGPT,正在打造一个全新的商业软件帝国!...

整理 | 苏宓 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; “再也不能愉快地‘摸鱼’了&#xff0c;因为继续下去&#xff0c;无论是销售&#xff0c;还是程序员&#xff0c;周报、月报里的内容和目标达成率可能都是 ChatGPT 干的&#xff0c;不过这也似乎让大家…

微软开源“傻瓜式”类ChatGPT模型训练工具,成本大大降低,速度提升15倍

当地时间 4 月 12 日&#xff0c;微软宣布开源 DeepSpeed-Chat&#xff0c;帮助用户轻松训练类 ChatGPT 等大语言模型。 据悉&#xff0c;Deep Speed Chat 是基于微软 Deep Speed 深度学习优化库开发而成&#xff0c;具备训练、强化推理等功能&#xff0c;还使用了 RLHF&#x…

颠覆历史!ChatGPT官方app正式登录美国苹果商店

人工智能研究公司OpenAI在官网宣布&#xff0c;其在美国推出了聊天机器人ChatGPT的iPhone应用&#xff0c;并承诺未来也将为安卓手机提供相同的服务。 官网还附带了该应用在苹果App Store上的链接。页面显示&#xff0c;这款名为“OpenAI ChatGPT”的应用仅适用于苹果手机iPhon…

苹果微软等科技巨头紧急叫停,chatgpt翻车了?(文末附联名信)

一、千名大佬集体叫停GPT研发 3月29日&#xff0c;一封联名信刷爆了各大媒体热榜&#xff0c;上面有一千多位大佬签名&#xff0c;其中包括埃隆马斯克、约书亚本吉奥&#xff08;Yoshua Bengio&#xff0c;2018年图灵奖获得者&#xff09;和史蒂夫沃兹尼亚克&#xff08;Steve…

前苹果工程师吐槽:“Siri” 代码过时且复杂,不可能变得像 ChatGPT 一样强大...

【CSDN 编者按】在将生成式人工智能引入 Siri 上&#xff0c;苹果的前工程师约翰伯基并不看好&#xff0c;他认为 Siri 不可能像 ChatGPT 一样强大。 原文链接&#xff1a;How Siri, Alexa and Google Assistant Lost the AI Race - The New York Times (nytimes.com) 未经授权…

苹果限制员工使用ChatGPT等外部AI工具,只因担心泄密!

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 众所周知&#xff0c;今天 OpenAI 官方推出了 iOS 平台的 ChatGPT 应用程序。 然而&#xff0c;在路透社和华尔街日报的报道中&#xff0c;却提及了另外一则与之相关消息——苹果已经通…

微软支持的ChatGPT激增,但不要低估苹果和谷歌

微软和 OpenAI 可能在 AI 聊天机器人爆炸式增长的市场中具有先发优势&#xff0c;但不要排除其他一些可以访问大量 AI 训练数据的科技巨头&#xff0c;例如 Apple 和 Google。 通过其对 ChatGPT 开发商 OpenAI 的早期和持续支持&#xff0c;微软在AI 军备竞赛中目前处于领先地…

来自 ChatGPT 的威胁?谷歌、百度纷纷入局,苹果被迫“开卷”

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 近年来&#xff0c;AIGC 应用可谓是多处开花&#xff0c;成为了科技巨头的“必争之地”。 随着 ChatGPT 在互联网上“高热不下”&#xff0c;除了拍案叫绝的聊天能力以及惊人的准确率备…

“我把 ChatGPT 和苹果的 Siri 组了个队,发现无敌了!”

【CSDN 编者按】ChatGPT 的问世&#xff0c;带来了前所未有的智能应用新方式。如果“AIAI”&#xff0c;会碰撞出什么样的火花&#xff1f;近日&#xff0c;国外一名 Web 高级工程师 Mate Marschalko 将 ChatGPT 和 Siri 人工智能语言助手进行了结合&#xff0c;万万没想到&…

ChatGPT正式登陆iOS平台

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

聚观早报 | 苹果2024年放弃高通;腾讯回应进军类 ChatGPT

今日要闻&#xff1a;苹果2024年放弃高通&#xff1b;腾讯回应进军类 ChatGPT&#xff1b;小米发布无线AR眼镜探索版&#xff1b;50%的美国企业已在使用ChatGPT&#xff1b;Snap推出ChatGPT驱动的聊天机器人 苹果2024年放弃高通 高通公司 CEO 兼总裁克里斯蒂亚诺・安蒙&#…

聚观早报 | ChatGPT登顶美区iOS免费榜;库克不满苹果首款MR设备

今日要闻&#xff1a;ChatGPT登顶美区iOS免费榜&#xff1b;库克不满苹果首款MR设备&#xff1b;索尼正开发小尺寸折叠屏手机&#xff1b;万达辟谣大规模裁员&#xff1b;智能仿生手让截肢者重获手心的温度 ChatGPT登顶美区iOS免费榜 ChatGPT 在 iOS 美区免费 App 排行榜上位列…

手把手带你利用苹果手机使用美区礼品卡升级ChatGPT Plus,轻松搞定!

大家好&#xff0c;我是五竹。 昨天用苹果手机尝试了一下&#xff0c;借助App Store&#xff08;苹果应用商店&#xff09;升级 Plus&#xff0c;成功了&#xff01;一共升级了三个号&#xff01;有两个一气呵成&#xff0c;轻松搞定。最后一个可能触发风控了&#xff0c;但第…

文心一言App在苹果AppStore上架;首款搭载ChatGPT的自行车问世;QQ Windows全新上架|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

ChatGPT飙升苹果商店榜首,每周订阅需7.99美元,结果是个假的???

衡宇 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT出App版了&#xff0c;苹果商店下载就能使用&#xff1f;&#xff1f; 打开美国Apple Store搜索&#xff0c;下载后软件内每周付费7.99美元&#xff0c;即可享受与它无次数限制畅聊。 不过别忙着付费&#xff01; 这个ChatGPT C…