Implementação simples de um plug-in ChatGPT

O OpenAI abriu a permissão de plug-in para usuários do ChatGPT Plus. Embora existam muitos bugs na experiência inicial, o efeito é muito bom e é um recurso relativamente maduro. Pessoalmente, acho que a experiência do ChatGPT Plugin é muito melhor do que a do New Bing (bing vai continuar a trabalhar arduamente..)

Desenvolva um plug-in ChatGPT do zero hoje para testar o potencial do plug-in.

Como funciona o plug-in ChatGPT?

O plug-in ChatGPT acessa a API externa para:

  • Obtenha informações em tempo real: como o clima do dia, preços de ações; informações de recrutamento recentes, etc.

  • Realize operações em tempo real: como reservar hotéis e restaurantes; até mesmo operar diretamente Gmail, Google docs, etc.

Especificamente, o ChatGPT requer os dois arquivos a seguir:

  1. .well-known/ai-plugin.json: semelhante ao manifest.json no desenvolvimento da extensão Chrome. Este arquivo registra alguns metadados do plugin. Essas informações serão usadas para exibir o plug-in na loja de plug-ins e informar ao ChatGPT o que o plug-in faz.

  2. openapi.yaml: É um documento padronizado que explica as funções fornecidas pela API para ChatGPT. Também explica como chamar a função e o formato específico das respostas da função.

Em seguida, desenvolveremos um plug-in ChatGPT para realizar funções como consultar as próximas conferências de IA nos próximos meses, gerenciar prazos de envio de conferências, marcar conferências e formular listas de tarefas.

.well-known/ai-plugin.json

Primeiro declaramos as informações básicas do Plugin neste arquivo, incluindo o nome, número da versão, introdução (há uma introdução para humanos e uma descrição para GPT), logotipo, informações de contato e assim por diante. A realização de qualquer função específica não está envolvida aqui.

 
 
{
   
       "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": "[email protected]",    "legal_info_url": "http://example.com/AIConf"  }

Se o plug-in precisar de autenticação (como um plug-in para reservar um hotel etc.), você poderá usar o OAuth aqui, mas não precisamos de autenticação aqui.

Implemente nosso servidor localmente

Aqui usamos o Flask para executar um servidor local para realizar as funções específicas do plug-in.

 
 
from flask import Flask, send_from_directoryfrom 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:        result = {}        result['title'] = conf['title']        result['year'] = conf['year']        result['link'] = conf['link']        result['place'] = conf['place']        result['sub'] = conf['sub']        result['deadline'] = conf['deadline']        results.append(result)    responses = json.dumps(results)    return responses
if __name__ == '__main__':    app.run(debug=True, host='0.0.0.0', port=5023)

Obtemos os dados mais recentes da reunião em def update_db().

O endpoint da API é determinado em @app.get("/all"). Acessar esse terminal, ou seja, http://localhost:5023/all, retornará uma lista de informações da conferência.

Outras coisas a serem observadas são:

  1. Precisamos do CORS para permitir que http://chat.openai.com acesse nosso servidor.

  2. @app.get("/logo.png") : renderiza um arquivo de logotipo.

  3. @app.get("/.well-known/ai-plugin.json"): manifesto de renderização.

  4. @app.get("/openapi.yaml"): arquivo de descrição da API de renderização.

Aqui selecionamos cuidadosamente um logotipo ascético para nosso plugin, assim como eu quando estava escrevendo uma tese:

openapi.yaml

Este arquivo é um documento no formato OpenAPI padrão. O objetivo é informar à GPT quais funções nosso plug-in fornece, como chamar essas funções e qual é a forma de saída da função.

Separadamente falando: o primeiro é o endereço url do plug-in informações básicas do plug-in.

openapi: 3.0.1info:  title: AI Conferences  description: Plugin to get information about upcoming AI conferences.  version: 'v1'servers:  - url: http://localhost:5023

Endpoint: /all, ou seja, o método e o resultado do acesso a http://localhost:5023/all. Aqui estamos dizendo ao GPT para usar get para se comunicar com o servidor. sumário informa ao GPT para que serve esta função.

paths:  /all:    get:      operationId: getAllUpcomingConf      summary: Get information about all the upcoming conferences      responses:        "200":          description: OK          content:            application/json:              schema:                $ref: '#/components/schemas/getAllUpcomingConfResponses'

Formato de resposta: informa ao GPT como interpretar os resultados retornados.

components:  schemas:    getAllUpcomingConfResponses:      type: array      items:        type: object        properties:          link:            type: string            description: The link to the conference website.          place:            type: string            description: The place where the conference will be held.          sub:            type: string            description: The subfield of AI that the conference is about.          deadline:            type: string            description: The deadline for submitting papers.

Juntando tudo tem:

openapi: 3.0.1info:  title: AI Conferences  description: Plugin to get information about upcoming AI conferences.  version: 'v1'servers:  - url: http://localhost:5023paths:  /all:    get:      operationId: getAllUpcomingConf      summary: Get information about all the upcoming conferences      responses:        "200":          description: OK          content:            application/json:              schema:                $ref: '#/components/schemas/getAllUpcomingConfResponses'components:  schemas:    getAllUpcomingConfResponses:      type: array      items:        type: object        properties:          link:            type: string            description: The link to the conference website.          place:            type: string            description: The place where the conference will be held.          sub:            type: string            description: The subfield of AI that the conference is about.          deadline:            type: string            description: The deadline for submitting papers.

Registre o Plugin na página do ChatGPT

Depois de terminar o acima, você precisa ir para a loja ChatGPT para registrar nosso plugin.

Abra a loja de plugins.

• desenvolva seu próprio plugin.

Digite o endereço do nosso servidor

Clique em instalar aqui para instalar nosso novo e ascético plugin

Instalado, escolha aqui e comece a conversa!

Experiência

Primeiro, vamos perguntar quais conferências estão disponíveis para submissões recentemente:

Incrível! Parece muito confiável, clique no botão expandir na parte superior, podemos ver o conteúdo real retornado pelo nosso servidor ao GPT:

Pode-se ver que o ChatGPT traduz o conteúdo obtido em linguagem natural.

adicionar novos recursos

OK, vamos implementar outra nova função, para que o ChatGPT possa salvar a reunião de destino para planejamento futuro.

starred_conferences = []@app.get("/star/<conf_name>")def star(conf_name):    update_db()    for conf in up_coming_conferences:        if conf['title'] == conf_name:            starred_conferences.append(conf)            return "OK"    return "Not Found"

Conforme mostrado no código, adicionamos uma nova função que permite ao GPT marcar uma reunião específica por meio de uma solicitação GET.

Atualize openapi.yaml de acordo com esta função (para alterações específicas, consulte o repositório do Github no final do artigo para obter detalhes).

Feito! Só a coleta não é suficiente, sempre temos que verificar o que coletamos após a coleta. Portanto, precisamos implementar um método para visualizar as reuniões favoritas. Adicione um novo endpoint /starred para consultar o conteúdo favorito

@app.get("/starred")def starred():    results = []    for conf in starred_conferences:        result = {}        result['title'] = conf['title']        result['year'] = conf['year']        result['link'] = conf['link']        result['place'] = conf['place']        result['sub'] = conf['sub']        result['deadline'] = conf['deadline']        results.append(result)    responses = json.dumps(results)    return responses

Ao mesmo tempo, atualize o openapi.yaml (alterações específicas foram omitidas, consulte o repositório do Github no final do artigo para obter detalhes).

Teste os novos recursos:

Aqui coletamos conferências EMNLP com sucesso e, em seguida, consultamos algumas informações sobre as conferências coletadas.

Como o OpenAI ensina o GPT a usar o plug-in?

Estou curioso para saber como o OpenAI ajusta o GPT para usar o plug-in. De acordo com a documentação do OpenAI no Plugin, é basicamente certo que o arquivo de manifesto e o openapi.yaml são mostrados diretamente para o GPT. Mas não tenho certeza se algum prompt mágico é usado aqui.

Basta perguntar ao GPT para verificar se há algum vazamento.

Não há vazamentos, então não podemos saber quais instruções o OpenAI usa para guiar o GPT por enquanto.

referência

Veja o repositório github para a implementação completa:

https://github.com/liyucheng09/aiconf_plugin

Descrição do plug-in da OpenAI:

https://platform.openai.com/docs/plugins/introduction?utm_medium=email&_hsmi=258126318&_hsenc=p2ANqtz-8Xi_Zr1TCX6GUPwJd40qklxEEiSsqvmzN6153ZkAjpO6POh0N_q3F0LBdWi7DEfPQddcbiIslA2 WNndFySMM-1Gu3rcQ&utm_content=258126318&utm_source=hs_email

https://platform.openai.com/docs/plugins/review?utm_medium=email&_hsmi=25812631

Acho que você gosta

Origin blog.csdn.net/qq_41771998/article/details/131215348
Recomendado
Clasificación