Nouvelles
Modèles
Des produits
keyboard_arrow_down
Recherche profonde
Recherchez, lisez et raisonnez jusqu'à trouver la meilleure réponse.
Lecteur
Lisez les URL et effectuez des recherches sur le Web pour de meilleurs LLM de base.
Intégrations
Intégrations multimodales et multilingues de classe mondiale.
Reclasseur
Récupérateur neuronal de classe mondiale pour maximiser la pertinence de la recherche.
Plus
keyboard_arrow_down
Classificateur
Classification à zéro plan et à quelques plans pour l'image et le texte.
Segmenteur
Coupez un long texte en morceaux et effectuez la tokenisation.

Documentation de l'API
Génération automatique de code pour votre IDE ou LLM copilote
open_in_new


Entreprise
keyboard_arrow_down
À propos de nous
Contacter le service commercial
Programme de stage
Rejoignez-nous
open_in_new
Télécharger le logo
open_in_new
termes et conditions


Se connecter
login
Pourquoi aurais-je même besoin d'un Meta-Prompt ?
Expériences avec Meta-Prompt
Jouer avec Meta-Prompt : Qu'avons-nous découvert ?
Conclusion
Blog technique
novembre 19, 2024

Meta-Prompt pour une meilleure intégration de l'API Jina et CodeGen

Le Meta-Prompt est-il la nouvelle norme pour les spécifications d'API ? Alimentez-le aux LLMs et générez du code d'intégration qui intègre de manière fiable les APIs de Jina, vous épargnant ainsi le processus habituel d'essais et d'erreurs.
Alex C-G
Alex C-G • 9 minutes lues

Nous avons récemment publié Meta-Prompt, un fichier texte unique qui décrit toutes nos spécifications d'API. Vous pouvez le considérer comme de la documentation pour les LLM, et l'utiliser pour générer automatiquement des intégrations de nos API, notamment Reader, Embeddings, Reranker, et plus encore.

0:00
/1:44

C'est aussi simple que de copier et coller notre prompt dans ChatGPT/Claude, ou de le transmettre à la commande llm comme prompt système, puis d'ajouter votre propre prompt pour spécifier ce que vous voulez construire (ce que nous faisons ci-dessous). C'est parfait si vous voulez utiliser les LLM pour construire rapidement des applications qui extraient des données du web, travaillent avec des embeddings, ou même des systèmes RAG complets. Tout cela avec des hallucinations minimales.

tagPourquoi aurais-je même besoin d'un Meta-Prompt ?

Imaginons que vous vouliez utiliser un LLM pour générer du code qui utilise les API de Jina. Demandons à GPT-4 de faire exactement cela :

0:00
/0:27

Ça a l'air bien, non ? Il y a le from jina import Client et tout.

Un petit problème : Le package Jina est en mode maintenance, et ce n'est pas la façon d'accéder à nos API. Même si vous installez effectivement le package Jina, le programme généré plantera lorsque vous essaierez de l'exécuter :

0:00
/0:21

Alors quoi ? On peut simplement demander à GPT de rechercher les APIs de Jina sur le web, n'est-ce pas ? Voici ce que nous obtenons :

0:00
/1:14

Cependant, si vous regardez le code, il n'utilise pas toutes les APIs Jina pertinentes. Il n'a manifestement pas découvert que Reader existe, nous obligeant plutôt à installer BeautifulSoup pour faire le scraping. Et même lorsqu'il pouvait (soi-disant) faire le scraping avec BeautifulSoup, il n'a pas correctement analysé le format de réponse pour Jina Embeddings, ce qui a conduit à un crash :

0:00
/0:16

Pourtant, même si ChatGPT pouvait le faire correctement en effectuant des recherches, de nombreux autres LLM (comme Claude) ne prennent actuellement pas en charge la recherche web, ce qui limite sérieusement vos options.

C'est là que Meta-Prompt excelle. Avec Meta-Prompt, vous pouvez charger tout le contexte et les spécifications des API de Jina dans le LLM. Cela signifie que le LLM peut générer du code qui exploite directement les API de Jina, sans hallucinations ni contournements inutiles, vous donnant du code qui fonctionne du premier coup.

💡
D'accord, généralement du premier coup. Les LLM peuvent être imprévisibles, mais comme vous pouvez le voir ci-dessous, les choses se sont bien passées dans nos expériences.

tagExpériences avec Meta-Prompt

Pour mettre Meta-Prompt à l'épreuve, nous avons réalisé quelques expériences et évalué les résultats. Sauf indication contraire, nous avons utilisé Claude-3.5-Sonnet comme LLM.

Pour toutes les expériences, nous avons spécifié les clés API pertinentes (comme JINA_API_KEY et ANTHROPIC_API_KEY) comme variables d'environnement avant d'exécuter le code généré.

tagExpérience 1 : Vérification des déclarations avec Meta-Prompt dans ChatGPT

Nous écrivons ceci juste après les élections américaines, où la désinformation était plus présente que jamais. Comment pouvons-nous séparer le signal du bruit dans nos flux et obtenir uniquement les bonnes informations sans les mensonges ?

Disons que nous voulons vérifier si une nouvelle loi britannique est rapportée avec exactitude sur BBC.com, en particulier l'affirmation :

« Le gouvernement britannique a annoncé une nouvelle loi qui obligera les entreprises de médias sociaux à vérifier l'âge de leurs utilisateurs. »

Nous pouvons copier-coller le Meta-Prompt dans ChatGPT, puis taper notre propre prompt pour générer le code nécessaire, comme :

Write the JavaScript code to check the validity
of the following statement on bbc.com: 

"The UK government has announced a new law 
that will require social media companies to 
verify the age of their users."
0:00
/0:35

Nous pouvons ensuite exécuter cela avecnode grounding.js (après avoir installé les paquets prérequis comme axios). Nous obtenons une sortie comme celle-ci, montrant que l'affirmation est vraie, avec les sources :

0:00
/0:04

tagExpérience 2 : Visualiser Hacker News depuis le CLI

Si vous êtes plutôt du genre à utiliser la ligne de commande, vous pouvez utiliser Meta-Prompt depuis le CLI via cURL. D'abord, vous devrez installer le paquet Python llm :

pip install llm

Puis le plugin Claude-3 :

llm install llm-claude-3

Pour la dernière étape de configuration, spécifiez votre clé API Anthropic :

export ANTHROPIC_API_KEY=<votre clé>

Maintenant, écrivons un prompt pour visualiser chaque phrase de la page d'accueil de Hacker News :

grab every sentence from hackernews frontpage and 
visualize them in a 2d umap using matplotlib

Nous pouvons rediriger cela vers la commande llm avec :

curl docs.jina.ai | llm -s "grab every sentence from hackernews frontpage and visualize them in a 2d umap using matplotlib" -m claude-3.5-sonnet
0:00
/0:24

Si nous extrayons et exécutons le code généré, nous obtenons quelque chose comme ceci :

0:00
/0:38
💡
Une limitation actuelle (bien que je sois sûr qu'avec un peu de programmation supplémentaire de la part de l'utilisateur, il y a moyen de la contourner) est que vous devrez installer les dépendances manuellement. Aucun requirements.txt n'est généré. Dans ce cas, nous avions besoin de UMAP et Matplotlib, mais cela peut varier selon vos besoins.

tagExpérience 3 : Construction d'un système RAG simple avec stockage JSON

Pour pousser les choses encore plus loin, créons un système RAG simple. Dans mon temps libre, j'apprends SolidPython, nous utiliserons donc le dépôt et le wiki comme base de connaissances. Pour garder les choses simples, nous n'utiliserons pas de base de données, mais nous stockerons plutôt les données dans un fichier JSON.

Voici le prompt, stocké dans le fichier prompt.txt :

Create a simple RAG system using pages from these sources:

- repo: <https://github.com/jeff-dh/SolidPython>
- wiki: <https://github.com/jeff-dh/SolidPython/wiki> (and all the subpages)

Scrape no other pages.

Instead of using vector database, use JSON file

You can access an LLM with the CLI command: llm 'your prompt' -m claude-3.5-sonnet

After segmenting and indexing all the pages, present a prompt for the user to ask a
question. To answer the question, find the top three segments and pass them to the LLM
with the prompt:

--- prompt start ---
Based on these segments:

- {segment 1}
- {segment 2}
- {segment 3}

Answer the question: {question}
--- prompt end ---

Comme vous pouvez le voir, nous pouvons donner au LLM des outils supplémentaires en les spécifiant dans le prompt. Sans cela, Claude hallucine souvent une façon moins optimale (ou même défectueuse) d'ajouter le LLM au système RAG.

Puisqu'il s'agit d'un très long prompt (avec beaucoup de ponctuation qui pourrait casser n'importe quel pipe que nous utilisons), nous utiliserons le texte $(cat prompt.txt) plutôt que le prompt lui-même lorsque nous exécuterons notre commande :

curl docs.jina.ai/v4 | llm -s "$(cat prompt.txt)" -m claude-3.5-sonnet
0:00
/0:34

Ouf ! Cela fait beaucoup de sortie. Mais (comme avec l'exemple de Hacker News), c'est pénible d'extraire et d'exécuter le code à partir de ce gros bloc de texte. Bien sûr, il n'y a pas de problème qui ne puisse être résolu en ajoutant simplement plus de LLM, n'est-ce pas ? Alors ajoutons une autre invite pour "dé-bloquer" la sortie originale :

leave just the code in this file, remove all surrounding explanatory text. 
do not wrap code in backticks, just return "pure code"

Maintenant, nous ajoutons cela à notre pipeline de commandes et l'exécutons :

curl docs.jina.ai/v4 | llm -s "$(cat prompt.txt)" -m claude-3.5-sonnet | llm -s 'leave just the code in this file, remove all surrounding explanatory text. do not wrap code in backticks, just return "pure code"' -m claude-3.5-sonnet > app.py
💡
Comme nous utilisons > app.py à la fin de notre commande pour diriger toute la sortie dans un fichier, il n'y a rien à montrer dans une vidéo.

Nous pouvons ensuite exécuter cette application avec python app.py et nous obtenons notre programme RAG. Comme vous pouvez le voir, il peut répondre aux questions et maintenir une mémoire de travail :

0:00
/0:34
💡
La première exécution a pris un peu plus de temps, car il a fallu segmenter et encoder toutes les données. Pour les exécutions suivantes, il a chargé ces données depuis un fichier JSON pour gagner du temps et réduire les coûts.

tagExpérience 4 : Construire une usine d'applications avec Meta-Prompt

Maintenant que nous pouvons générer des scripts et des applications de manière non interactive, nous pouvons facilement automatiser une "usine d'applications" - un script qui itère sur les invites et produit des scripts Python en sortie. Vous pouvez obtenir le script de l'usine d'applications dans un gist GitHub pour l'instant :

App Factory with Jina AI Meta-Prompt
App Factory with Jina AI Meta-Prompt. GitHub Gist : partagez instantanément du code, des notes et des extraits.
Gist262588213843476

En bref, voici ce qu'il fait :

  • Parcourir le répertoire prompts qui contient (vous l'avez deviné) des fichiers d'invite.
  • Transmettre le Meta-Prompt et chaque texte d'invite à Claude-3.5-Sonnet (via llm).
  • Prendre la sortie et la repasser à Claude, cette fois avec l'invite lui demandant de ne garder que le code.
  • Écrire cela dans un fichier dans le répertoire apps.

Nous montrerions une démo, mais il n'y a pas grand-chose à voir. Il enregistre simplement le nom du fichier d'invite sur lequel il travaille, et fonctionne silencieusement sans sortie intéressante à l'écran.

💡
Tester les applications qu'il génère est une autre question, que je ne peux pas résoudre d'emblée. D'après notre expérience, nous spécifions souvent les données que nous voulons utiliser dans nos prompts, généralement en passant une URL externe à télécharger avec Reader. Pourtant, parfois le LLM hallucine des données fictives, et le script s'exécute sans problèmes apparents — il "ment" simplement sur ce qu'il fait.

Pour faire passer l'usine d'applications au niveau supérieur, vous pourriez adopter l'approche complète Factorio et écrire un autre script pour générer des idées d'applications et, à partir de là, générer des prompts à envoyer à l'usine. Nous ne l'avons pas encore fait, mais nous vous laissons cet exercice, à vous, le lecteur.

tagJouer avec Meta-Prompt : Qu'avons-nous découvert ?

Nous avons beaucoup appris en utilisant Meta-Prompt, à la fois sur ce qu'il faut mettre dans nos propres prompts et sur la façon dont différents LLMs génèrent différentes sorties.

tagObservations générales

  • Spécialisation API : L'utilisation d'APIs spécifiques à certaines tâches (par exemple, Google Books pour les requêtes liées aux livres) assure des résultats plus cohérents que les APIs de recherche généralistes, ce qui peut réduire l'utilisation des tokens et améliorer la fiabilité.
  • Prompts personnalisés pour la réutilisation : Pour les configurations non interactives, sauvegarder les prompts dans des fichiers .txt et les rediriger vers le CLI permet d'obtenir efficacement des sorties de code uniquement, sans texte explicatif superflu.
  • Sortie structurée : Stocker les sorties (généralement au format JSON) et les recharger selon les besoins permet d'économiser des tokens et de rationaliser les tâches comme la génération d'embeddings, où l'utilisation des tokens peut être coûteuse.

tagObservations sur l'utilisation de différents LLMs

GPT

  • Problèmes de rétention des prompts : GPT-4 oublie parfois des détails avec des instructions longues, ce qui conduit à des problèmes lorsqu'il "oublie" des éléments clés en cours de discussion. Cela conduit à beaucoup de frustration quand vous devez lui rappeler des choses simples.
  • Défis d'intégration API : Dans des cas comme l'intégration de Milvus Lite avec jina-embeddings-v3, même lorsque nous fournissons les instructions de l'API Milvus Lite, GPT-4 échoue complètement et de manière répétée, générant du code qui crée des bases de données dépourvues des embeddings que le code vient de générer, rendant impossibles les applications de recherche sémantique.

Claude

  • Limitations des sorties de code : Claude-3.5 produit souvent des scripts qui semblent complets mais contiennent des problèmes silencieux, comme l'absence de gestion des erreurs ou l'oubli de la prise en compte des clés API manquantes. De plus, il se rabat parfois sur des exemples préétablis plutôt que de générer des réponses adaptées aux instructions spécifiques.
  • Sortie silencieuse : Avec le code généré par LLM, il est vraiment utile d'avoir une trace de ce qui se passe en coulisses lors de l'exécution du programme, juste pour s'assurer que le modèle n'a pas fait d'erreurs. À moins de le spécifier directement, les applications créées avec Claude s'exécutent souvent silencieusement, vous laissant sans indice sur ce qui se passe.
  • Interaction avec le CLI : Vous devez clairement spécifier que les commandes CLI sont des commandes CLI. Si vous dites à Claude qu'il peut utiliser la commande llm, souvent il essaiera d'appeler une fonction Python llm() qui n'existe pas.
  • Claude 3.5-Sonnet est la meilleure option : Claude-3.5-Haiku semblait également bien fonctionner dans les tests initiaux, mais Opus et Sonnet-3 se contentent de résumer les instructions de l'API Jina, sans prendre en compte le prompt de l'utilisateur.

tagConclusion

L'utilisation de Meta-Prompt offre de nouvelles façons d'intégrer les APIs de Jina avec les LLMs, vous permettant d'exécuter des expériences et de construire des applications qui fonctionnent du premier coup. Plus de plantages, de connexions API manquées ou de fonctions hallucinées — Meta-Prompt garantit que le code généré est précis et fonctionnel dès le départ. Que vous vérifiiez des déclarations, génériez des embeddings, construisiez un système RAG léger ou automatisiez la création d'applications, Meta-Prompt transforme les instructions en langage naturel en code actionnable et correct, en évitant les allers-retours typiques avec un LLM pour obtenir des choses qui fonctionnent réellement.

Que vous copiiez Meta-Prompt dans ChatGPT ou que vous l'utilisiez avec une commande LLM personnalisée, il offre un moyen simple et fiable d'exploiter les capacités de Jina. Nos expériences et observations montrent que Meta-Prompt est un outil solide pour une intégration robuste dans vos projets.

Si vous êtes prêt à explorer ce que Meta-Prompt peut faire, rendez-vous sur docs.jina.ai pour la documentation et les ressources les plus récentes.

Catégories:
Blog technique
rss_feed
Des bureaux
location_on
Sunnyvale, Californie
710 Lakeway Dr, Ste 200, Sunnyvale, CA 94085, États-Unis
location_on
Berlin, Allemagne (siège social)
Prinzessinnenstraße 19-20, 10969 Berlin, Allemagne
location_on
Pékin, Chine
Niveau 5, bâtiment 6, n° 48, rue Haidian Ouest, Pékin, Chine
location_on
Shenzhen, en Chine
402 étage 4, bâtiment technologique Fu'an, Shenzhen, Chine
Fondation Recherche
Recherche profonde
Lecteur
Intégrations
Reclasseur
Classificateur
Segmenteur
Documentation de l'API
Obtenir la clé API Jina
Limite de taux
Statut de l'API
Entreprise
À propos de nous
Contacter le service commercial
Rédaction
Programme de stage
Rejoignez-nous
open_in_new
Télécharger le logo
open_in_new
Termes
Sécurité
termes et conditions
Confidentialité
Gérer les cookies
email
Jina AI © 2020-2025.