


Simplifier l'extraction de données avec le mode OpenAI JSON et les schémas JSON
Lorsque j'ai expérimenté ChatGPT-3.5 pour la première fois après sa sortie, j'ai été enthousiasmé par son potentiel pour diverses applications. Cependant, mon enthousiasme s'est rapidement estompé lorsque j'ai rencontré un obstacle majeur : même si les informations précieuses renvoyées étaient exceptionnellement lisibles, elles n'étaient pas sous une forme qui pouvait être ingérée de manière fiable par une application. Ironiquement, les LLM excellent dans l'extraction d'informations à partir d'un texte non structuré, mais ne peuvent les restituer que sous une forme non structurée. Essayer d'extraire par programmation les résultats des LLM, c'était comme être dans un restaurant incroyable qui sert la nourriture la plus délicieuse, mais sans aucun ustensile - vous pouvez le voir et le sentir, mais vous ne pouvez tout simplement pas y accéder.
J'ai essayé toutes les astuces du livre pour l'amadouer et me donner un semblant de données structurées. "S'il vous plaît, séparez simplement chaque élément par une barre ou une nouvelle ligne et sautez le commentaire", je plaiderais. Parfois ça marchait, parfois non. Parfois, il numérotait ou réorganisait « utilement » les éléments, comme un assistant bien intentionné mais légèrement confus. D’autres fois, il s’agissait encore d’un commentaire furtif, rappelant celui d’un collègue bavard. Je lui ai même demandé en termes clairs de renvoyer JSON et rien d'autre, mais il a parfois laissé de côté une virgule - presque comme s'il s'agissait d'un coup passif-agressif. Finalement, j'ai abandonné et suis revenu à contrecœur aux limites moins excitantes mais plus prévisibles des algorithmes traditionnels.
Heureusement, quelques mois plus tard, OpenAI a introduit le mode JSON, une fonctionnalité qui oblige le LLM à renvoyer un JSON valide. J'ai décidé d'essayer cette fonctionnalité et je l'ai trouvée nettement plus efficace pour traiter les résultats dans mes applications. Voici un exemple de sortie avec le mode JSON activé :
PROMPT: Parse the following sentence into words and then return the results as a list of the original word and the translation in English and return the results in JSON. -- sentence -- 早安 RESULTS: { "results": [ { "original": "早安", "translation": "Good morning" } ] }
Cette sortie est certainement une amélioration. Cependant, même si la sortie est un JSON valide, sa structure peut varier en fonction du contenu de l'invite. Une approche plus prévisible consiste à spécifier le format de retour souhaité. Une façon d'y parvenir consiste à fournir un exemple de structure JSON à suivre pour le LLM. Cette méthode consiste à créer un exemple et à écrire du code pour l'analyser. Si la structure change, des modifications doivent être faites aux deux endroits.
Une approche alternative consiste à définir un objet de transfert de données (DTO) pour contenir les résultats et à l'utiliser à la fois pour instruire le LLM et pour analyser les résultats, évitant ainsi les problèmes de synchronisation. Tout d'abord, définissez le DTO, par exemple :
record Entries(List<Entry> entries) { record Entry(String originalWord, String wordInEnglish, String pronunciation) {} }
Maintenant, le DTO peut être utilisé dans les instructions d'invite ainsi que par le code d'analyse :
// Construct the prompt with the output schema. var prompt = MessageFormat.format(""" Parse the following sentence into English and return the results in JSON according to the following JSON schema. 人工智慧將引領未來,以智慧之光照亮人類無限可能的前程。 --- output json schema --- {0} """, jsonSchemaOf(Entries.class)); var result = sendPrompt(prompt, Entries.class);
Voici le code qui utilise le générateur de schéma Jackson JSON :
PROMPT: Parse the following sentence into words and then return the results as a list of the original word and the translation in English and return the results in JSON. -- sentence -- 早安 RESULTS: { "results": [ { "original": "早安", "translation": "Good morning" } ] }
Remarque : par défaut, le schéma généré inclura les champs d'ID utilisés pour les références, ce qui peut gaspiller des jetons. Consultez l'exemple de mode OpenAI JSON du référentiel pour le code qui supprime ces identifiants inutilisés.
Et enfin, voici le code qui envoie l'invite à OpenAI à l'aide du SDK Java Azure OpenAI :
record Entries(List<Entry> entries) { record Entry(String originalWord, String wordInEnglish, String pronunciation) {} }
La solution fonctionne bien la plupart du temps. Le LLM comprend efficacement le schéma JSON mais un mot d'avertissement : j'ai vu des cas où il se trompe parfois. Par exemple, si un champ est une chaîne et que son nom est au pluriel (par exemple « exampleValues »), le LLM insiste parfois pour renvoyer un tableau de chaînes à la place.
Les LLM peuvent générer des résultats remarquables, dépassant parfois les capacités de la personne moyenne. Cependant, il est fascinant de constater que, du moins pour le moment, ils ont du mal à accomplir la tâche la plus banale consistant à formater de manière fiable leur sortie générée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

Les principales utilisations de JavaScript dans le développement Web incluent l'interaction client, la vérification du formulaire et la communication asynchrone. 1) Mise à jour du contenu dynamique et interaction utilisateur via les opérations DOM; 2) La vérification du client est effectuée avant que l'utilisateur ne soumette les données pour améliorer l'expérience utilisateur; 3) La communication de rafraîchissement avec le serveur est réalisée via la technologie AJAX.

L'application de JavaScript dans le monde réel comprend un développement frontal et back-end. 1) Afficher les applications frontales en créant une application de liste TODO, impliquant les opérations DOM et le traitement des événements. 2) Construisez RestulAPI via Node.js et Express pour démontrer les applications back-end.

Comprendre le fonctionnement du moteur JavaScript en interne est important pour les développeurs car il aide à écrire du code plus efficace et à comprendre les goulots d'étranglement des performances et les stratégies d'optimisation. 1) Le flux de travail du moteur comprend trois étapes: analyse, compilation et exécution; 2) Pendant le processus d'exécution, le moteur effectuera une optimisation dynamique, comme le cache en ligne et les classes cachées; 3) Les meilleures pratiques comprennent l'évitement des variables globales, l'optimisation des boucles, l'utilisation de const et de locations et d'éviter une utilisation excessive des fermetures.

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.

C et C jouent un rôle essentiel dans le moteur JavaScript, principalement utilisé pour implémenter des interprètes et des compilateurs JIT. 1) C est utilisé pour analyser le code source JavaScript et générer une arborescence de syntaxe abstraite. 2) C est responsable de la génération et de l'exécution de bytecode. 3) C met en œuvre le compilateur JIT, optimise et compile le code de point chaud à l'exécution et améliore considérablement l'efficacité d'exécution de JavaScript.

JavaScript est largement utilisé dans les sites Web, les applications mobiles, les applications de bureau et la programmation côté serveur. 1) Dans le développement de sites Web, JavaScript exploite DOM avec HTML et CSS pour réaliser des effets dynamiques et prend en charge des cadres tels que JQuery et React. 2) Grâce à la réactnative et ionique, JavaScript est utilisé pour développer des applications mobiles multiplateformes. 3) Le cadre électronique permet à JavaScript de créer des applications de bureau. 4) Node.js permet à JavaScript d'exécuter le côté du serveur et prend en charge les demandes simultanées élevées.
