对 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_directory
from flask_cors import CORS
app = 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').text
confs = yaml_load(confs_yaml_file, Loader=Loader)
global up_coming_conferences
up_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 deadline
for conf in up_coming_conferences:
- 昆仑万维“勇闯”百模大战:一个“无懈可击”的商业故事话本?
- 盘点那些“中国之最”,最后的一个必须点赞 中国之最最高
- 山东旅游最值得去的十大景点,你去过几个?最后一个没办法反驳。 山东世界之最景点图片
- 崇左社区
- 品客美食
- 山东特色菜
- 岳阳美容
- 泉州游乐园
- 实战:向人工智能看齐用Docker部署一个ChatGPT
- 什么是人工智能?简单的人工智能发展史