Adaptateur pour connecter AI LLM aux sources et données de mise à la terre en temps réel
Liste des améliorations majeures
Libérer | Date | Principales fonctionnalités |
---|---|---|
2.0.5 | 01 avril 2024 | Mise à jour majeure : Supporte ClaudeAI en plus d'OpenAI et GoogleAI. |
2.0.0 | 05 janvier 2024 | Mise à jour majeure : prend en charge GoogleAI en plus d'OpenAI. |
1.3.0 | 16 décembre 2023 | Invites améliorées pour utiliser les données pertinentes et générer des réponses pertinentes. Les réponses pour toutes les méthodes fournissent désormais des informations d'exécution. |
1.2.9 | 03 novembre 2023 | (1) La configuration de l'agent peut spécifier une clé de langue (facultatif). Lorsque cette option est définie, LLM pense et répond toujours dans la langue spécifiée (indépendamment de la langue d'entrée). Remarque : La qualité de la traduction peut ne pas être optimale dans certains cas, c'est pourquoi des tests approfondis sont fortement conseillés. (2) La réponse de la méthode tout-en-un inclut les données de mise à la terre utilisées par LLM pour générer une réponse. Cela devrait améliorer la fiabilité. |
1.2.8 | 26 octobre 2023 | Technique d'invite approfondie intégrée pour améliorer la qualité de la réponse. |
1.2.2 | 18 octobre 2023 | Invites LLM et logique améliorées pour la détermination de l'API. |
1.1.1 | 09 octobre 2023 | LLM introduit des invites à incorporer une saveur d'IA constitutionnelle pour garantir que la contribution de l'utilisateur est juste, responsable, respectueuse et humaine. |
1.1.0 | 08 octobre 2023 | Capacité introduite à créer un contexte/une mémoire pour les questions de suivi. |
1.0.0 | 08 octobre 2023 | Lancement initial. |
En tant que modèles d'intelligence artificielle multimodaux, les LLM ont une large applicabilité pour générer du contenu avec un minimum d'instructions. Les techniques d'invite telles que le tir nul ou le tir réduit sont populaires parmi les utilisateurs quotidiens d'applications de chat construites sur de tels LLM. Cela dit, même si la qualité de la réponse est excellente, dans quelle mesure peut-on lui faire confiance ? Comment savons-nous que le modèle n'est pas en train de "s'inventer" (c'est-à-dire d'halluciner) à la volée ?
Par conséquent, il est très important de fonder les LLM en fournissant des données contextuelles en combinaison avec des techniques d'incitation appropriées. Utiliser des invites avec des informations fondées comme contexte pour aider LLM à générer une meilleure réponse est une pratique largement suivie.
L'une de ces approches est la génération augmentée par récupération (RAG), qui repose sur le stockage et la recherche d'incorporations de texte fournies à LLM avec l'invite. Cependant, RAG s'appuie sur des informations statiques converties en intégrations de texte et les stocke dans des bases de données graphiques (alias bases de données vectorielles) afin que les informations pertinentes puissent en être extraites et augmentées via la mise à la terre pour générer du texte/réponse.
Le modèle RAG pourrait soulever la question de savoir si les données en temps réel peuvent être utilisées avec les LLM pour générer des réponses efficaces et fiables. La réponse simple est : « Bien sûr, oui ! » . Mais cela signifie beaucoup plus de responsabilités sur les épaules des développeurs d'applications. Le développeur doit appeler l'API pour envelopper la réponse dans une invite afin que LLM génère une réponse pertinente. Mais est-ce que le fait d’appeler la même API encore et encore pour chaque question fonctionnera ? - Probablement pas ! Comment pouvons-nous déterminer dynamiquement quelle API doit être appelée et quels paramètres doivent être transmis en fonction de la question ? Cela ressemble également à une capacité pour LLM.
C'est là que AI-Dapter (lire comme AI Adapter ) entre en jeu. AI-Dapter accélère le processus de développement d'applications basé sur LLM pour les développeurs, leur permettant de se concentrer uniquement sur les applications tout en déchargeant le fardeau des activités suivantes sur LLM.
identifier les bons points de terminaison d'API à partir d'un référentiel d'API prédéfini,
acquérir des données en temps réel à partir des points de terminaison de l'API identifiés,
générer une réponse en utilisant le modèle LLM de votre choix.
L'expérience du développeur est considérablement améliorée en insérant le framework AI-Dapter dans le code de l'application et en l'utilisant de manière transparente comme une boîte noire pour fournir des réponses basées sur LLM aux questions des utilisateurs. Notez que ces questions des utilisateurs elles-mêmes peuvent être proches d’une invite de zéro !
Le travail réel derrière cette boîte noire comprend :
la possibilité d'intégrer un modèle LLM de votre choix avec vos informations d'identification (Remarque : actuellement, seuls les modèles OpenAI GPT sont pris en charge),
un moteur intégré qui exploite les entrées de l'utilisateur pour effectuer l'identification de -
Sources de données basées sur API,
acquisition de données en temps réel à partir de ces API, et
génération de réponses fondées sur des données en temps réel à l’aide de LLM.
Veuillez soumettre vos commentaires ou vos demandes de nouvelles fonctionnalités via les discussions GitHub.
Veuillez soumettre vos problèmes via GitHub Issues.
Exécutez ce qui suit sur la ligne de commande pour installer AI-Dapter pour votre projet NodeJS. Assurez-vous que vous êtes dans le répertoire racine de votre projet.
npm installer ai-dapter --save
En supposant que vous ayez configuré un projet NodeJS dactylographié, importez la classe AIDapter comme suit.
importer AIDapter depuis "ai-adapter" ;
Pour initialiser AI-Dapter, vous devez transmettre certains paramètres obligatoires et facultatifs pour terminer la configuration. Un exemple est présenté ci-dessous, suivi de la documentation des paramètres pris en charge.
const ai = nouveau AIDapter ({ "app_name": "<>" "fournisseur": "OpenAI", "model_name": "gpt-3.5-turbo-16k", "endpoint": "https://api.openai.com/v1/chat/completions", "authentication": {"api_key": "< >","org_id": "< >" }, "température": "< >"});
Liste des paramètres pris en charge pour initialiser la configuration.
Paramètre | Obligatoire(M) / Facultatif(O) | But | Valeurs possibles |
---|---|---|---|
app_name | M. | Nom court de l'application. | - |
provider | M. | Le fournisseur du modèle LLM. Remarque : Actuellement, seuls les modèles fournis directement par OpenAI sont pris en charge. | "OpenAI" |
model_name | Ô | Vous permet de sélectionner n’importe quel modèle publié par le fournisseur. Nous vous recommandons d'utiliser des modèles autorisant de grandes tailles de jetons, tels que gpt-3.5-turbo-16k ou gemini-pro ou claude-3-haiku-20240307 . | - |
endpoint | Ô | Point de terminaison à partir duquel le fournisseur sert le modèle LLM. Vous devrez peut-être vous référer à la documentation spécifique au fournisseur. Par exemple, le modèle de complétion de chat OpenAI est servi à partir du point de terminaison https://api.openai.com/v1/chat/completions , le modèle GoogleAI est servi à partir de https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent Le modèle https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent et ClaudeAI est servi à partir de https://api.anthropic.com/v1/messages . | - |
authentication | M. | Fournissez les détails d'authentification tels que spécifiés par votre fournisseur. Par exemple, étant donné qu'OpenAI nécessite une clé API et un ID d'organisation, ceux-ci sont fournis sous les champs api_key et org_id , comme indiqué dans l'exemple d'initialisation ci-dessus. | - |
telemetry | Ô | Collecte de données de télémétrie. La valeur par défaut est vraie. | vrai/faux |
AI-Dapter vous permet de personnaliser des configurations d'agent spécifiques, telles que l'ajout de rôles, de personnalités, etc. Dans le même esprit, vous pouvez personnaliser des configurations de données particulières, telles que le contrôle du nombre d'enregistrements à partir des réponses API en temps réel, la transmission d'un contexte supplémentaire ou informations de mise à la terre pour simuler des suivis, etc.
Les options d'agent et de configuration sont transmises sous la forme d'un seul objet comme suit. Reportez-vous aux sections appropriées ci-dessous pour rechercher et ajuster ces valeurs de configuration.
options de let : AIDapterOptions = { "agentConfig": { "role": "assistant personnel" }, "dataConfig": { "max_records": 7 }} ;
Vous trouverez ci-dessous les paramètres de configuration d'agent actuellement pris en charge. Ajoutez ces champs sous l'objet agentConfig
.
Paramètre | Obligatoire(M) / Facultatif(O) | But | Valeurs possibles |
---|---|---|---|
role | M. | Aide à guider l’approche de LLM face aux questions des utilisateurs. Par exemple, dans le rôle d'un sergent de l'armée, LLM peut répondre à une question sur l'heure actuelle par quelque chose comme : "L'heure actuelle est 08h01 HAE.", tandis qu'un comédien qui raconte toujours une blague à propos de ma question peut répondre quelque chose comme : « Il est temps pour vous d'acheter une montre ! Je plaisante, il est actuellement 8 h 01 le 7 octobre 2023 dans le fuseau horaire de l'heure avancée de l'Est (EDT). ». | - |
personality | Ô | Donne une personnalité au ton de la réponse de LLM. | - |
language | Ô | Langue dans laquelle vous souhaitez que l'agent réponde, quelle que soit la langue dans laquelle la question de l'utilisateur est posée. Par défaut = anglais. | - |
expert_at | Ô | Si LLM doit supposer qu'ils sont experts dans un domaine spécifique, tel que les soins de santé ou les moteurs automobiles, etc. | - |
max_words | Ô | Contrôlez la durée ou la durée de la réponse de LLM. La valeur par défaut est inférieure à 200 mots. | N'importe quel nombre entre 1 et 200 |
Vous trouverez ci-dessous les paramètres de configuration des données actuellement pris en charge. Ajoutez ces champs sous l'objet dataConfig
.
Paramètre | Obligatoire(M) / Facultatif(O) | But | Valeurs possibles |
---|---|---|---|
max_records | M. | Contrôle le nombre d'enregistrements principaux d'un ensemble de résultats obtenus à partir d'un appel d'API en temps réel qui doivent être vendus au détail. Ce paramètre est essentiel pour contrôler la taille du jeton d'entrée, car les résultats de l'appel d'API sont utilisés pour la mise à la terre. Remarque : étant donné que seules les lignes X supérieures sont conservées, il est préférable de fournir des points de terminaison d'API qui incluraient des données triées par ordre décroissant. Par défaut = 10 | N'importe quel nombre entre 1 et 10 |
additional_context | Ô | Un contexte supplémentaire peut être fourni lorsque des capacités de type suivi sont attendues. (voir les exemples de 6.3. Génération de réponse LLM avec mise à la terre de données en temps réel). | Doit être un tableau avec la structure suivante : [{ "question": "", "response_summary": "", "entities": { ... } }, { ... }] |
max_contexts | Ô | Conserve les derniers contextes X. AI-Dapter conservera les deux derniers éléments du tableau additional_context , en supposant que le dernier contexte soit toujours ajouté à la fin de ce tableau. | 1 ou 2 |
AI-Dapter fournit trois fonctionnalités comme suit et, par conséquent, trois méthodes pour accéder à ces fonctionnalités.
Recommandation : Pour une expérience de développement optimale, voir 6.3. Génération de réponse LLM avec des données de mise à la terre en temps réel
AIDapter.getRealtimeSources(entrée : chaîne, apiRepository : Types.APIRepository[]) : Promise
Utilisez cette méthode si votre objectif est d'obtenir des points de terminaison d'API pertinents en fonction des questions des utilisateurs.
Paramètre | Obligatoire(M) / Facultatif(O) | But | Type de données |
---|---|---|---|
input | M. | Question de l'utilisateur | Texte |
apiRepository[] | M. | Fournissez un référentiel d'API complet qui contiendrait des détails sur le point de terminaison de l'API (méthode, URL, en-têtes et données), les espaces réservés utilisés dans le point de terminaison de l'API ainsi que les instructions de validation que LLM utilisera. | Voir 7. Référentiel API |
Champ | But |
---|---|
api_endpoints[] | tableau de tous les points de terminaison d’API identifiés. |
provider | Indique quel fournisseur LLM a été utilisé. |
runtime | Pour suivre le temps de réponse global. Notez que cela dépendra du temps de réponse de l'API de LLM. |
// Importer et initialiser AI-Dapterimport AIDapter depuis "ai-adapter" ; const ai = new AIDapter ({ "provider": "GoogleAI", "authentication": {"api_key": "<>" }});// Définissez le référentiel d'API à partir duquel une API appropriée sera identifiée, mise à jour et renvoyée.// Notez que cet exemple ne fournit qu'un seul exemple de point de terminaison d'API, mais comme il s'agit d'un tableau, vous devez vous attendre à fournir plusieurs une telle API endpoints.const apiRepository = [ {"api_info": { "title": "Heure actuelle", "description": "Identifiez la zone de fuseau horaire et l'emplacement appropriés pour un emplacement donné et obtenez l'heure à cet endroit."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "Un exemple de zone_location est : Amérique/New_York ou Europe/Londres. En fonction de l'emplacement valide fourni, déterminez la zone_location appropriée.","default": "Amérique/ New_York" }] }];// Ceci est l'entrée du questionlet de l'utilisateur = "quelle heure est-il à Mumbai ?"// Appelez maintenant la méthode getRealtimeSources() pour obtenir des points de terminaison d'API validesai.getRealtimeSources(input, apiRepository) .then((resp) => {console.log(resp);/* { "api_endpoints": [ { "api": { "method": "GET", "url": "https://worldtimeapi.org /api/timezone/Asia/Kolkata", "headers": { "Content-Type": "application/json" } }, "placeholders": [ { "placeholder": "[area_location]", "determined": true } ], "status": "OK" } ], "provider": "GoogleAI", "runtime": "2 seconds" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Notez qu'en fonction de la ville fournie par l'utilisateur, Mumbai , LLM a déterminé la valeur appropriée pour l'espace réservé area_location et a renvoyé un point de terminaison d'API mis à jour.
AIDapter.getDataFromRealtimeSource(entrée : chaîne, apiRepository : Types.APIRepository[], dataConfig? : Types.DataConfig | non défini) : Promise
Utilisez cette méthode si votre objectif est d'obtenir des données à partir de points de terminaison d'API pertinents en fonction des questions des utilisateurs.
Paramètre | Obligatoire(M) / Facultatif(O) | But | Type de données |
---|---|---|---|
input | M. | Question de l'utilisateur | Texte |
apiRepository[] | M. | Tableau d'informations sur l'API, de points de terminaison (méthode, URL, en-têtes et données) et d'espaces réservés. | Voir 7. Référentiel API |
dataConfig | Ô | Paramètres de configuration pour contrôler les données obtenues à partir des appels API. | Voir 5.2. Configuration des données |
Champ | But |
---|---|
api_results[] | Tableau de réponses de tous les appels d'API. |
provider | Indique quel fournisseur LLM a été utilisé. |
runtime | Pour suivre le temps de réponse global. Notez que cela dépendra du temps de réponse de l'API de LLM. |
// Importer et initialiser AI-Dapterimport AIDapter depuis "ai-adapter" ; const ai = new AIDapter ({ "provider": "GoogleAI", "authentication": {"api_key": "<>" }});// Définissez le référentiel d'API à partir duquel une API appropriée sera identifiée, mise à jour et renvoyée.// Notez que cet exemple ne fournit qu'un seul exemple de point de terminaison d'API, mais comme il s'agit d'un tableau, vous devez vous attendre à fournir plusieurs une telle API endpoints.const apiRepository = [ {"api_info": { "title": "Heure actuelle", "description": "Identifiez la zone de fuseau horaire et l'emplacement appropriés pour un emplacement donné et obtenez l'heure à cet endroit."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "Un exemple de zone_location est : Amérique/New_York ou Europe/Londres. En fonction de l'emplacement valide fourni, déterminez la zone_location appropriée.","default": "Amérique/ New_York" }] }];// Ceci est l'entrée du questionlet de l'utilisateur = "quelle heure est-il à Mumbai ?"// Configuration des données dataConfig = { "max_records": 3 }// Appelez maintenant la méthode getDataFromRealtimeSource() pour obtenir des données en appelant tous les éléments pertinents Points de terminaison de l'API basés sur la question de l'utilisateurai.getDataFromRealtimeSource(question, apiRepository, dataConfig) .then((resp) => {console.log(resp);/* { "api_results": [ { "api_sources": "worldtimeapi.org", "data": { "abbreviation": "IST", "client_ip " : "50.126.214.61", "dateheure" : "2024-01-05T22:48:30.316887+05:30", "day_of_week": 5, "day_of_year": 5, "dst": false, "dst_from": null, "dst_offset": 0, "dst_until": null, "raw_offset": 19800, "timezone": "Asie/Calcutta", "unixtime": 1704475110, "utc_datetime": "2024-01-05T17:18:30.316887+00:00", "utc_offset": "+05:30", "week_number": 1 } } ], "provider": "GoogleAI", "runtime": "4 secondes" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Réponse de l'appel API. Ces données peuvent être utilisées pour la mise à la terre du LLM.
AIDapter.getLLMResponseFromRealtimeSources(entrée : chaîne, apiRepository : Types.APIRepository[], options ? : AIDapterOptions | non défini) : Promise
Utilisez cette méthode si votre objectif est d'obtenir des réponses LLM basées sur les questions des utilisateurs. Cela inclut l'identification des points de terminaison d'API pertinents, l'appel des API identifiées et leur utilisation dans l'invite LLM pour recevoir la réponse de LLM.
Recommandation : utilisez cette méthode pour obtenir une accélération maximale de votre processus de développement d'applications.
Paramètre | Obligatoire(M) / Facultatif(O) | But | Type de données |
---|---|---|---|
input | M. | Question de l'utilisateur | Texte |
apiRepository[] | M. | Tableau d'informations sur l'API, de points de terminaison (méthode, URL, en-têtes et données) et d'espaces réservés. | Voir 7. Référentiel API |
options | Ô | Configuration des agents et des données | Voir 5. Options de configuration des agents et des données |
Champ | But |
---|---|
ai_response | Réponse générée par LLM. |
ai_status | Aide à déterminer si la réponse était basée sur la disponibilité de tous les éléments de données requis pour effectuer des appels d'API réussis. Valeurs possibles : OK, SUIVI ou INCOMPLET |
ai_context | Celui-ci contient un bref résumé de la réponse et une liste d’entités. L'idée derrière ce champ concerne les cas d'utilisation impliquant des conversations de suivi. L'objet entier peut être transmis en tant que additional_content dans les options dataConfig lorsque des questions de suivi doivent être soumises. |
provider | Indique quel fournisseur LLM a été utilisé. |
runtime | Pour suivre le temps de réponse global. Notez que cela dépendra du temps de réponse de l'API de LLM. |
// Importer et initialiser AI-Dapterimport AIDapter depuis "ai-adapter" ; const ai = new AIDapter ({ "provider": "GoogleAI", "authentication": {"api_key": "<>" }});// Définissez le référentiel d'API à partir duquel une API appropriée sera identifiée, mise à jour et renvoyée.// Notez que cet exemple ne fournit qu'un seul exemple de point de terminaison d'API, mais comme il s'agit d'un tableau, vous devez vous attendre à fournir plusieurs une telle API endpoints.const apiRepository = [ {"api_info": { "title": "Heure actuelle", "description": "Identifiez la zone de fuseau horaire et l'emplacement appropriés pour un emplacement donné et obtenez l'heure à cet endroit."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "Un exemple de zone_location est : Amérique/New_York ou Europe/Londres. En fonction de l'emplacement valide fourni, déterminez la zone_location appropriée.","default": "Amérique/ New_York" }] }];// Il s'agit du questionnaire de l'utilisateur = "quelle heure est-il à Mumbai ?"// Options AI-Dapter qui fournissent des options combinées de configuration de l'agent et de configuration des données : AIDapterOptions = { "agentConfig": { "role": "un comédien qui raconte toujours une blague sur ma question" }, "dataConfig": { "max_records": 7 }};// Appelez maintenant la méthode getLLMResponseFromRealtimeSources() pour obtenir une réponse LLM à la question de l'utilisateur.// La réponse LLM est basée sur une invite qui utilise des données en temps réel pour la mise à la terre. ai.getLLMResponseFromRealtimeSources (question, apiRepository, options) .then((resp) => {console.log(resp);/* { "ai_response": "Dans la ville animée de Mumbai, où les rêves de Bollywood prennent leur envol et où l'arôme de la cuisine de rue emplit l'air, il est actuellement 22 : 50 en ce fabuleux vendredi 5 janvier 2024. Alors, que vous sirotiez du chai à la Porte de l'Inde ou que vous dansiez sur les rythmes d'une discothèque locale, n'oubliez pas qu'il est temps n'attend personne, pas même les plus grandes stars de Bollywood !", "ai_status": "OK", "ai_context": { "questions": "quelle heure est-il à Mumbai ? Quelle est la date actuelle à Mumbai ?", "entities": [], "data": [ { "abbreviation": "IST", "client_ip": "50.126.214.61", "datetime": "2024-01-05T22:50:51.261990+05:30", "day_of_week": 5, "day_of_year": 5, "dst": false, "dst_from": null, "dst_offset": 0, "dst_until": null, "raw_offset": 19800, "timezone": "Asie/Calcutta", "unixtime": 1704475251, "utc_datetime": "2024-01-05T17:20:51.261990+00:00", "utc_offset": "+05:30", "week_number": 1 } ], "sources": [ "worldtimeapi.org" ] }, "provider": "GoogleAI", "runtime": "6 secondes" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Notez que la question de l'utilisateur est utilisée en premier pour identifier l'API pertinente à partir du référentiel d'API fourni. Cette méthode appelle également les API identifiées, collecte leurs réponses pour ancrer l'invite LLM finale et renvoie la réponse générée.
Notez également que la réponse contient le contenu généré par LLM dans le champ ai_response
et le contexte dans le champ ai_context
. L'ensemble du contexte peut être transmis sous la forme dataConfig.additional_context
avec des questions de suivi.
Un exemple montre comment le contexte peut être transmis pour permettre des conversations de suivi.
// Comme le montre l'exemple précédent, ai_context contient les informations suivantes:// --------------------------------- --------------------------------------------// resp.ai_context : {// "questions": "quelle heure est-il à Mumbai ? Quelle est la date actuelle à Mumbai ?",// "entities": [],// "data": [// {// "abbreviation": "IST",// "client_ip": "50.126.214.61",// "datetime": "2024-01-05T22:50:51.261990+05:30",// "day_of_week": 5,// "day_of_year": 5,// "dst": false,// "dst_from": null,// "dst_offset": 0,// "dst_until": null,// "raw_offset": 19800,// "timezone": "Asie/Calcutta",// "unixtime": 1704475251,// "utc_datetime": "2024-01-05T17:20:51.261990+00:00",// "utc_offset": "+05: 30",// "numéro_semaine": 1// }// ],// "sources": [// "worldtimeapi.org"// ]// }// ---------------------------------- ------------------------------------------------// Ajouter le contexte ci-dessus dans dataConfig.additional_context ...if(options.dataConfig[additional_context]){