简单实现一个ChatGPT Plugin

对 Plus用户开放了的权限 。初步体验下来虽然bug不少,不过效果很不错,是一个较为成熟的 。个人认为,的体验要远优于New Bing(bing还要继续努力..)
今天从零开始开发一个,试水一下的潜力 。
如何工作?
通过访问外部API来:
具体来讲,需要以下两个文件:
.well-known/ai-.json:类似于 开发中的.json 。该文件记录的一些 。这些信息将用来在插件商店展示该插件,并用来告诉这个插件是干啥的 。
.yaml:是一个标准化文档,向解释了API所提供的 。并说明了如何调用和 的的具体格式等 。
接下来我们开发一个,实现查询未来几个月即将举办的AI会议,管理会议投稿,收藏会议并制定To-do list等功能 。
.well-known/ai-.json
我们首先在这个文件中声明的基础信息,包括名字,版本号,介绍(有给人类看的介绍,也有给GPT看的描述),logo,联系方式等等 。这里不涉及任何具体功能的实现 。
【简单实现一个ChatGPT Plugin】
{"schema_version": "v1","name_for_human": "AI Conferences","name_for_model": "AIConf","description_for_human": "Plugin to get information about upcoming AI conferences.","description_for_model": "Plugin to get information about upcoming AI conferences.","auth": {"type": "none"},"api": {"type": "openapi","url": "http://localhost:5023/openapi.yaml","is_user_authenticated": false},"logo_url": "http://localhost:5023/logo.png","contact_email": "yuchengli@example.com","legal_info_url": "http://example.com/AIConf"}
如果需要进行身份验证(比如预定酒店等),可以在auth 这里使用OAuth,不过这里我们不需要身份验证 。
在本地实现我们的
这里我们用Flask跑一个本地的来实现的具体功能 。

from flask import Flask, send_from_directoryfrom flask_cors import CORSapp = Flask(__name__)CORS(app,origins='https://chat.openai.com/')@app.get("/logo.png")def logo():return send_from_directory(app.root_path, "logo.png")@app.get("/.well-known/ai-plugin.json")def plugin_manifest():with open(".well-known/ai-plugin.json") as f:return f.read()@app.get("/openapi.yaml")def openapi():with open("openapi.yaml") as f:return f.read()# 从Github搞来最近的AI会议数据def update_db():confs_yaml_file = requests.get('https://raw.githubusercontent.com/paperswithcode/ai-deadlines/gh-pages/_data/conferences.yml').textconfs = yaml_load(confs_yaml_file, Loader=Loader)global up_coming_conferencesup_coming_conferences = []for conf in confs:if 'abstract_deadline' in conf:deadline = conf['abstract_deadline']elif 'deadline' in conf:deadline = conf['deadline']try:deadline = datetime.strptime(deadline, "%Y-%m-%d %H:%M:%S")except:deadline = datetime.strptime(deadline, "%Y-%m-%d %H:%M")if deadline > datetime.now():up_coming_conferences.append(conf)# 当GPT访问http://localhost:5023/all时,返回list of conference 。每个conference包含了title,year,link,place,sub,deadline等信息 。@app.get("/all")def all():update_db()results = []# we only need title, year, link, place, sub, and deadlinefor conf in up_coming_conferences: