Créez une application GitHub ChatGPT sans serveur en cinq minutes

Depuis qu'OpenAI a publié l'API et le système de plug-in officiels de ChatGPT en mars 2023 , de nombreux développeurs et entrepreneurs ont hâte de trouver des moyens de l'intégrer à leur entreprise.

Les fonctions sans serveur décrites dans cet article sont équivalentes au plug-in ChatGPT . Déclenchés par des événements Web, ils peuvent récupérer des informations en temps réel pour alimenter ChatGPT, interroger ChatGPT à l'aide d'invites dynamiques, puis effectuer des actions réelles via des appels de service Web sortants.

Cependant, il est encore difficile d'intégrer ChatGPT :

  • OpenAI fournit une API simple et sans état pour ChatGPT . Les développeurs doivent suivre l'historique et le contexte de chaque conversation dans un cache ou une base de données gérée par l'application. Les développeurs doivent également gérer et protéger les clés API. Il y a beaucoup de code passe-partout ici qui n'a rien à voir avec la logique métier de l'application.
  • L'interface utilisateur "naturelle" pour les applications API ChatGPT est le fil de discussion. Mais créer une "interface de chat" dans un cadre Web ou applicatif traditionnel est très difficile. En fait, les interfaces de chat les plus couramment utilisées existent déjà dans des applications de messagerie comme Slack, Discord et même des forums tels que GitHub Discussions. Nous avions besoin d'un moyen simple de connecter les réponses de l'API de ChatGPT à un service de messagerie existant.
  • Le plugin ChatGPT est complexe à programmer et coûteux à déployer dans des machines virtuelles lourdes.

Cet article vous montrera comment créer une application ChatGPT complète avec des fonctions sans serveur. C'est un robot GitHub. Comme le plugin ChatGPT, ce bot permet à ChatGPT de lire et d'écrire sur Internet en temps réel.

Avec ce bot, les utilisateurs de GitHub peuvent discuter avec ChatGPT dans GitHub Issues. Vous pouvez discuter avec ChatGPT en soulevant un nouveau problème ou en commentant un problème existant . En d'autres termes, ce projet utilise l'interface utilisateur de message de thread de GitHub Issues comme interface de chat.

Figure 1. Apprentissage de la programmation Rust avec ChatGPT.

Voir exemple : https://github.com/second-state/chat-with-chatgpt/issues/31

Le bot est une fonction sans serveur écrite en Rust. Créez simplement le modèle d'exemple, déployez votre fork sur flows.network et configurez votre référentiel GitHub et vos clés OpenAI. En seulement 5 minutes, vous pouvez avoir un bot GitHub entièrement fonctionnel. Pas besoin de configurer un serveur Web, de configurer un webhook pour l'API GitHub ou de configurer un serveur de cache/base de données.

Dépôt de modèle de fourchette

Tout d'abord, bifurquez le dépôt de modèles de GitHub .

src/lib.rsLe fichier contient l'application bot (également connue sous le nom de fonction de flux). run()La fonction est appelée au démarrage. owner/repoIl écoute issue_commentles événements du dépôt GitHub issues. Ces événements se produisent lorsque de nouveaux problèmes ou de nouveaux commentaires de problèmes sont créés dans le référentiel.

#[no_mangle]
#[tokio::main(flavor = "current_thread")]
pub async fn run() {
    // Setup variables for
    //   login: GitHub account for the bot (typically just your personal account)
    //   owner: GitHub org (or user) to install the bot
    //   repo:  GitHub repo to install the bot
    //   openai_key_name: Name for your OpenAI API key
    // All the values can be set in the source code or as env vars
    
    listen_to_event(&login, &owner, &repo, vec!["issue_comment", "issues"], |payload| {
        handler(&login, &owner, &repo, &openai_key_name, payload)
    })
    .await;
}

handler()La fonction listen_to_event()gère l'événement reçu. Si l'événement est un nouveau commentaire dans le problème, le bot appelle l'API ChatGPT d'OpenAI pour ajouter le texte du commentaire à la conversation existante issue.numberidentifiée . Il reçoit la réponse de ChatGPT et l'ajoute au commentaire du problème.

La fonction de flux gère ici automatiquement et de manière transparente l'historique des conversations avec l'API ChatGPT dans le stockage local. Les clés d'API OpenAI sont également stockées dans le stockage local, de sorte que les clés peuvent être identifiées par leurs noms de chaîne openai_key_namedans , plutôt que de les avoir dans le code source.

EventPayload::IssueCommentEvent(e) => {
    if e.comment.user.r#type != "Bot" {
        if let Some(b) = e.comment.body {
            if let Some(r) = chat_completion (
                    openai_key_name,
                    &format!("issue#{}", e.issue.number),
                    &b,
                    &ChatOptions::default(),
            ) {
                if let Err(e) = issues.create_comment(e.issue.number, r.choice).await {
                    write_error_log!(e.to_string());
                }
            }
        }
    }
}

Si l'événement est un nouveau problème, la fonction de flux crée une nouvelle conversation, issue.numberidentifiée , et demande une réponse à ChatGPT.

EventPayload::IssuesEvent(e) => {
if e.action == IssuesEventAction::Closed {
return;
}
let title = e.issue.title;
let body = e.issue.body.unwrap_or("".to_string());
let q = title + "\n" + &body;
if let Some(r) = chat_completion (
            openai_key_name,
&format!("issue#{}", e.issue.number),
&q,
&ChatOptions::default(),
) {
if let Err(e) = issues.create_comment(e.issue.number, r.choice).await {
write_error_log!(e.to_string());
}
}
}

Comment déployer les fonctions de flux sans serveur

Comme vous pouvez le voir, le code de la fonction de flux appelle l'API SDK pour effectuer des opérations complexes. Par exemple

  • listen_to_event()La fonction enregistre une URL de webhook avec l'API GitHub afin que handler()la fonction soit appelée lorsque certains événements se produisent sur GitHub.
  • La chat_completion()fonction appelle l'API ChatGPT avec la clé API nommée et l'historique (contexte) de la conversation spécifiée. Les clés API et l'historique des conversations sont stockés dans un cache Redis.

Le serveur webhook et le cache Redis sont des services externes dont dépend le SDK. Cela signifie que les fonctions de flux doivent s'exécuter dans un environnement hôte géré qui fournit de tels services externes. Flows.network est l'hébergeur PaaS (Platform as a Service) du SDK de la fonction de flux.

Pour déployer une fonction de flux sur flows.network, il suffit d'importer son code source dans le PaaS.

Tout d'abord, connectez-vous à flows.network depuis votre compte GitHub. Importez le référentiel GitHub que vous venez de créer et qui contient le code source de la fonction de flux, puis sélectionnez "Avancé".

Veuillez noter qu'il ne s'agit pas du dépôt GitHub où vous souhaitez déployer le robot ; c'est le dépôt où vous avez forké le code source de la fonction de flux chatgpt-github-app.

Cliquez sur Avancé pour voir plus de paramètres.

Définissez des variables d'environnement pour faire pointer la fonction de flux vers le nom de clé de l'API OpenAI ( openai_name_key) et le dépôt GitHub ( login, owneret repo).

ownerLe GitHub et repoles variables ici pointent vers le référentiel GitHub où vous souhaitez déployer le robot, et non vers le référentiel où se trouve le code source de la fonction de flux. La variable de connexion est le compte GitHub du bot. Il s'agit généralement de votre compte GitHub personnel. Le compte de connexion doit avoir accès au propriétaire/dépôt ci-dessus.

Figure 3. Définition des variables d'environnement pour le référentiel GitHub où le bot sera déployé et le nom de la clé d'API OpenAI.

Flows.network récupérera le code source et utilisera une cargochaîne d'outils pour créer le code source Rust dans le bytecode Wasm. Exécutez ensuite la fonction de flux Wasm dans WasmEdge Runtime .

Comment connecter les fonctions Flow à GitHub et OpenAI

Alors que les fonctions de flux nécessitent une connexion aux API OpenAI et GitHub, le code source n'a pas de clés d'API codées en dur, de jetons d'accès ou de logique OAUTH. Le SDK de la fonction de flux permet aux développeurs d'interagir facilement et en toute sécurité avec des services d'API SaaS externes.

Flows.network a découvert que les fonctions de flux nécessitent des connexions aux API OpenAI et GitHub. La plate-forme de flux fournit aux développeurs des workflows d'interface utilisateur, permettant aux développeurs de :

  • Connectez-vous à GitHub, autorisez l'accès aux événements et enregistrez la fonction de flux en tant que webhook pour recevoir ces événements.
  • openai_key_nameAssociez une clé API OpenAI au nom .

Figure 4. Services externes requis par la fonction de flux

Une fois l'API SaaS externe correctement connectée et autorisée, le "Connecté" violet sur le tableau de bord de la fonction de flux devient gris. La fonction de flux recevra désormais les événements listen_to_event()de . Il obtiendra également un accès transparent à Redis pour les clés API OpenAI spécifiées et les contextes de dialogue mis en cache, activant chat_completion()les fonctions SDK.

L'étape suivante

flows.network prend en charge la connexion de différents bots pour divers SaaS, le bot GitHub n'en est qu'un. Ajoutez ChatGPT à votre discussion de groupe en connectant la fonction de flux à un canal Slack. Vous trouverez ci-dessous un exemple de bot ChatGPT basé sur Slack. Vous pouvez participer au fichier readme dans le code Repo et déployer vous-même cette fonction.

Lien de code : https://github.com/flows-network/collaborative-chat

Figure 5. Bot Slack ChatGPT

Un autre exemple consiste à demander à ChatGPT de répondre à des questions juridiques dans un canal Slack. L'invite peut être spécifiée dans la fonction de flux - indiquant que ChatGPT doit agir en tant que consultant juridique pour répondre aux conseils juridiques. Vous pouvez participer au fichier readme dans le code Repo et déployer vous-même cette fonction.

Lien de code : https://github.com/flows-network/robo-lawyer

Figure 6. Robot avocat Slack basé sur ChatGPT

Outre GitHub et Slack, de nombreux produits SaaS peuvent être intégrés à flows.network via son API. En plus de la prise en charge de Rust, la prise en charge de JavaScript est en cours.

{{o.name}}
{{m.name}}

Je suppose que tu aimes

Origine my.oschina.net/u/4532842/blog/8594013
conseillé
Classement