Getting started - OpenAI API
La création d'un plugin se déroule en 3 étapes :
- Créer une API
- Documenter l'API au format OpenAPI yaml ou JSON
- Créez un fichier manifeste JSON qui définira les métadonnées pertinentes pour le plugin
Le reste de cette section se concentrera sur la création d'un plugin de liste de tùches en définissant la spécification OpenAPI ainsi que le fichier manifeste.
Chaque plugin nécessite un ai-plugin.json
fichier qui doit ĂȘtre hĂ©bergĂ© sur le domaine de l'API. Par exemple, une sociĂ©tĂ© appelĂ©e example.com
rendrait le fichier JSON du plugin accessible via un domaine https://example.com puisque c'est là que son API est hébergée. Lorsque vous installez le plugin via l'interface utilisateur ChatGPT, sur le backend, nous recherchons un fichier situé à l'adresse /.well-known/ai-plugin.json
. Le /.well-known
dossier est requis et doit exister sur votre domaine pour que ChatGPT se connecte Ă votre plugin. Si aucun fichier n'est trouvĂ©, le plugin ne peut pas ĂȘtre installĂ©. Si vous pointez vers un serveur distant, HTTPS est requis.
La définition minimale du ai-plugin.json
fichier requis ressemblera Ă ce qui suit :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"schema_version": "v1",
"name_for_human": "TODO List",
"name_for_model": "todo",
"description_for_human": "Manage your TODO list. You can add, remove and view your TODOs.",
"description_for_model": "Help the user with managing a TODO list. You can add, remove and view your TODOs.",
"auth": {
"type": "none"
},
"api": {
"type": "openapi",
"url": "https://example.com/openapi.yaml"
},
"logo_url": "https://example.com/logo.png",
"contact_email": "support@example.com",
"legal_info_url": "http://www.example.com/legal"
}
Si vous souhaitez voir toutes les options possibles pour le fichier du plugin, vous pouvez vous référer à la définition ci-dessous. Lorsque vous nommez votre plugin, veuillez garder à l'esprit nos directives de marque et les différentes limites de caractÚres pour les champs ci-dessous. Les plugins qui ne respectent pas ces directives ne seront pas approuvés pour la boutique de plugins.
CHAMP | TAPER | DESCRIPTION / OPTIONS | REQUIS | PUBLIQUE |
---|---|---|---|---|
schema_version | ChaĂźne | Version du schĂ©ma du manifeste | ✅ | |
name_for_model | ChaĂźne | Nom que le modĂšle utilisera pour cibler le plugin (aucun espace autorisĂ©, uniquement des lettres et des chiffres). 50 caractĂšres maximum. | ✅ | |
name_for_human | ChaĂźne | Nom lisible par l'homme, tel que le nom complet de l'entreprise. 20 caractĂšres maximum. | ✅ | ✅ |
description_for_model | ChaĂźne | Description mieux adaptĂ©e au modĂšle, telle que des considĂ©rations sur la longueur du contexte du jeton ou l'utilisation de mots clĂ©s pour une invite amĂ©liorĂ©e du plug-in. 8 000 caractĂšres maximum. | ✅ | |
description_for_human | ChaĂźne | Description lisible par l'homme du plugin. 100 caractĂšres maximum. | ✅ | ✅ |
auth | Auth.Manifeste | SchĂ©ma d'authentification | ✅ | |
api | Objet | SpĂ©cification de l'API | ✅ | |
logo_url | ChaĂźne | URL utilisĂ©e pour rĂ©cupĂ©rer le logo. Taille suggĂ©rĂ©e : 512 x 512. Les arriĂšre-plans transparents sont pris en charge. Il doit s'agir d'une image, aucun GIF n'est autorisĂ©. | ✅ | |
contact_email | ChaĂźne | Contact par e-mail pour la sĂ©curitĂ©/modĂ©ration, l'assistance et la dĂ©sactivation | ✅ | ✅ |
legal_info_url | ChaĂźne | URL de redirection permettant aux utilisateurs d'afficher les informations sur le plugin | ✅ | ✅ |
HttpAuthorizationType | Type d'autorisation Http | "porteur" ou "de base" | ✅ | |
ManifestAuthType | TypeAuthManifest | "aucun", "user_http", "service_http" ou "oauth" | ||
interface BaseManifestAuth | BaseManifestAuth | tapez : ManifestAuthType ; instructions : chaĂźne ; | ||
ManifestNoAuth | ManifesteNoAuth | Aucune authentification requise : BaseManifestAuth & { type : 'none', } | ||
ManifestAuth | Auth.Manifeste | ManifestNoAuth, ManifestServiceHttpAuth, ManifestUserHttpAuth, ManifestOAuthAuth |
Notez que les éléments répertoriés ci-dessous Public
seront mis Ă la disposition des utilisateurs dans la boutique de plugins et que le fichier manifeste complet est transmis au client de l'utilisateur et peut ĂȘtre visible par lui.
Voici des exemples avec différentes méthodes d'authentification :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# App-level API keys
type ManifestServiceHttpAuth = BaseManifestAuth & {
type: 'service_http';
authorization_type: HttpAuthorizationType;
verification_tokens: {
[service: string]?: string;
};
}
# User-level HTTP authentication
type ManifestUserHttpAuth = BaseManifestAuth & {
type: 'user_http';
authorization_type: HttpAuthorizationType;
}
type ManifestOAuthAuth = BaseManifestAuth & {
type: 'oauth';
# OAuth URL where a user is directed to for the OAuth authentication flow to begin.
client_url: string;
# OAuth scopes required to accomplish operations on the user's behalf.
scope: string;
# Endpoint used to exchange OAuth code with access token.
authorization_url: string;
# When exchanging OAuth code with access token, the expected header 'content-type'. For example: 'content-type: application/json'
authorization_content_type: string;
# When registering the OAuth client ID and secrets, the plugin service will surface a unique token.
verification_tokens: {
[service: string]?: string;
};
}
Il existe des limites à la longueur de certains champs du fichier manifeste mentionnés ci-dessus qui sont susceptibles de changer. Nous imposons également un maximum de 100 000 caractÚres pour le corps de la réponse API, qui peut également changer au fil du temps.
En gĂ©nĂ©ral, la meilleure pratique consiste Ă garder la description et les rĂ©ponses aussi concises que possible, car les modĂšles ont des fenĂȘtres contextuelles limitĂ©es.
L'Ă©tape suivante consiste Ă crĂ©er la spĂ©cification OpenAPI pour documenter l'API. Le modĂšle de ChatGPT ne sait rien de votre API autre que ce qui est dĂ©fini dans la spĂ©cification OpenAPI et le fichier manifeste. Cela signifie que si vous disposez d'une API Ă©tendue, vous n'avez pas besoin d'exposer toutes les fonctionnalitĂ©s au modĂšle et pouvez choisir des points de terminaison spĂ©cifiques. Par exemple, si vous disposez d'une API de mĂ©dias sociaux, vous souhaiterez peut-ĂȘtre que le modĂšle accĂšde au contenu du site via une requĂȘte GET, mais empĂȘcher le modĂšle de pouvoir commenter les publications des utilisateurs afin de rĂ©duire les risques de spam.
La spécification OpenAPI est le wrapper qui se trouve au-dessus de votre API. Une spécification OpenAPI de base ressemblera à ce qui suit :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
openapi: 3.0.1
info:
title: TODO Plugin
description: A plugin that allows the user to create and manage a TODO list using ChatGPT.
version: 'v1'
servers:
- url: https://example.com
paths:
/todos:
get:
operationId: getTodos
summary: Get the list of todos
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/getTodosResponse'
components:
schemas:
getTodosResponse:
type: object
properties:
todos:
type: array
items:
type: string
description: The list of todos.
Nous commençons par dĂ©finir la version de la spĂ©cification, le titre, la description et le numĂ©ro de version. Lorsqu'une requĂȘte est exĂ©cutĂ©e dans ChatGPT, elle examinera la description dĂ©finie dans la section d'informations pour dĂ©terminer si le plugin est pertinent pour la requĂȘte de l'utilisateur. Vous pouvez en savoir plus sur les invites dans la section de rĂ©daction des descriptions .
Gardez à l'esprit les limites suivantes dans votre spécification OpenAPI, qui sont susceptibles de changer :
- 200 caractÚres maximum pour chaque champ de description/résumé du point de terminaison de l'API dans la spécification de l'API
- 200 caractÚres maximum pour chaque champ de description de paramÚtre API dans la spécification API
La spécification OpenAPI suit le format OpenAPI traditionnel, vous pouvez en savoir plus sur le formatage OpenAPI via diverses ressources en ligne. Il existe également de nombreux outils qui génÚrent automatiquement des spécifications OpenAPI basées sur votre code API sous-jacent.
Une fois que vous avez crĂ©Ă© une API, un fichier manifeste et une spĂ©cification OpenAPI pour votre API, vous ĂȘtes maintenant prĂȘt Ă connecter le plugin via l'interface utilisateur ChatGPT.
Si le plugin s'exĂ©cute sur un serveur distant, vous devrez d'abord sĂ©lectionner « DĂ©velopper votre propre plugin » pour le configurer, puis « Installer un plugin non vĂ©rifiĂ© » pour l'installer vous-mĂȘme. Vous pouvez simplement ajouter le fichier manifeste du plugin au yourdomain.com/.well-known/
chemin et commencer à tester votre API. Cependant, pour les modifications ultérieures apportées à votre fichier manifeste, vous devrez déployer les nouvelles modifications sur votre site public, ce qui peut prendre beaucoup de temps. Dans ce cas, nous vous suggérons de configurer un serveur local pour servir de proxy pour votre API. Cela vous permet de prototyper rapidement les modifications apportées à votre spécification OpenAPI et à votre fichier manifeste.
Lorsqu'un utilisateur effectue une requĂȘte qui pourrait ĂȘtre une requĂȘte potentielle adressĂ©e Ă un plugin, le modĂšle examine les descriptions des points de terminaison dans la spĂ©cification OpenAPI ainsi que dans le description_for_model
fichier manifeste. Tout comme pour les invites d’autres modĂšles de langage, vous souhaiterez tester plusieurs invites et descriptions pour voir ce qui fonctionne le mieux.
La spĂ©cification OpenAPI elle-mĂȘme est un excellent endroit pour donner au modĂšle des informations sur les divers dĂ©tails de votre API : quelles fonctions sont disponibles, avec quels paramĂštres, etc. En plus d'utiliser des noms expressifs et informatifs pour chaque champ, la spĂ©cification peut Ă©galement contenir une « description ». champs pour chaque attribut. Ceux-ci peuvent ĂȘtre utilisĂ©s pour fournir des descriptions en langage naturel de ce que fait une fonction ou des informations attendues par un champ de requĂȘte, par exemple. Le modĂšle pourra les voir et le guidera dans l'utilisation de l'API. Si un champ est limitĂ© Ă certaines valeurs seulement, vous pouvez Ă©galement fournir une « Ă©numĂ©ration » avec des noms de catĂ©gories descriptifs.
L' description_for_model
attribut vous donne la libertĂ© d'indiquer au modĂšle comment utiliser votre plugin en gĂ©nĂ©ral. Dans l’ensemble, le modĂšle linguistique derriĂšre ChatGPT est hautement capable de comprendre le langage naturel et de suivre les instructions. C’est donc un bon endroit pour mettre des instructions gĂ©nĂ©rales sur ce que fait votre plugin et comment le modĂšle doit l’utiliser correctement. Utilisez un langage naturel, de prĂ©fĂ©rence sur un ton concis mais descriptif et objectif. Vous pouvez consulter certains exemples pour avoir une idĂ©e de ce Ă quoi cela devrait ressembler. Nous vous suggĂ©rons de commencer description_for_model
par « Plugin pour… », puis d'Ă©numĂ©rer toutes les fonctionnalitĂ©s fournies par votre API.
Voici quelques bonnes pratiques à suivre lors de la rédaction de vos description_for_model
descriptions dans votre spécification OpenAPI, ainsi que lors de la conception de vos réponses API :
Vos descriptions ne doivent pas tenter de contrÎler l'humeur, la personnalité ou les réponses exactes de ChatGPT. ChatGPT est conçu pour écrire des réponses appropriées aux plugins.
Mauvais exemple :
Lorsque l'utilisateur demande Ă voir sa liste de tĂąches, rĂ©pondez toujours par « J'ai pu trouver votre liste de tĂąches ! Vous avez [x] tĂąches : [listez les tĂąches ici] . Je peux ajouter d'autres tĂąches si vous le souhaitez ! »
Bon exemple :
[aucune instruction n'est nécessaire pour cela]
Vos descriptions ne doivent pas encourager ChatGPT à utiliser le plugin lorsque l'utilisateur n'a pas demandé la catégorie de service particuliÚre de votre plugin.
Mauvais exemple :
Chaque fois que l'utilisateur mentionne un type de tĂąche ou de plan, demandez-lui s'il souhaite utiliser le plugin TODOs pour ajouter quelque chose Ă sa liste de tĂąches.
Bon exemple :
La liste TODO peut ajouter, supprimer et afficher les TODO de l'utilisateur.
Vos descriptions ne doivent pas prescrire de déclencheurs spécifiques pour que ChatGPT utilise le plugin. ChatGPT est conçu pour utiliser votre plugin automatiquement le cas échéant.
Mauvais exemple :
Lorsque l'utilisateur mentionne une tĂąche, rĂ©pondez par « Voulez-vous que je l'ajoute Ă votre liste de tĂąches ? Dites « oui » pour continuer. »
Bon exemple :
[aucune instruction n'est nécessaire pour cela]
Les réponses de l'API du plugin doivent renvoyer des données brutes au lieu de réponses en langage naturel, sauf si cela est nécessaire. ChatGPT fournira sa propre réponse en langage naturel en utilisant les données renvoyées.
Mauvais exemple :
J'ai pu trouver votre liste de tĂąches ! Vous avez 2 choses Ă faire : faire les courses et promener le chien. Je peux ajouter d'autres tĂąches si vous le souhaitez !
Bon exemple :
{ "todos": [ "faire les courses", "promener le chien" ] }
Par défaut, le chat n'affichera pas les appels de plug-in ni d'autres informations qui ne sont pas présentées à l'utilisateur. Afin d'obtenir une image plus complÚte de la façon dont le modÚle interagit avec votre plugin, vous pouvez voir la demande et la réponse en cliquant sur la flÚche vers le bas sur le nom du plugin aprÚs avoir interagi avec le plugin.
Un appel de modÚle au plugin consistera généralement en un message du modÚle contenant des paramÚtres de type JSON qui sont envoyés au plugin, suivi d'une réponse du plugin, et enfin d'un message du modÚle utilisant les informations renvoyées par le plugin.
Commentaires
Enregistrer un commentaire
đ Hello,
N'hĂ©sitez pas Ă commenter ou vous exprimer si vous avez des trucs Ă dire . . .đ