Maison > interface Web > js tutoriel > Simplifier l'extraction de données avec le mode OpenAI JSON et les schémas JSON

Simplifier l'extraction de données avec le mode OpenAI JSON et les schémas JSON

Patricia Arquette
Libérer: 2025-01-04 12:59:43
original
751 Les gens l'ont consulté

Simplifying Data Extraction with OpenAI JSON Mode and JSON Schemas

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"
    }
  ]
}
Copier après la connexion
Copier après la connexion

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) {}
}
Copier après la connexion
Copier après la connexion

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);
Copier après la connexion

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"
    }
  ]
}
Copier après la connexion
Copier après la connexion

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) {}
}
Copier après la connexion
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal