Wir haben kürzlich Meta-Prompt veröffentlicht, eine einzelne Textdatei, die alle unsere API-Spezifikationen enthält. Man kann es sich als Dokumentation für LLMs vorstellen und damit automatisch Integrationen unserer APIs einschließlich Reader, Embeddings, Reranker und mehr generieren.
Es ist so einfach wie das Kopieren und Einfügen unseres Prompts in ChatGPT/Claude oder das Einleiten als System-Prompt in den llm
Befehl, gefolgt von Ihrem eigenen Prompt, der spezifiziert, was Sie erstellen möchten (wie wir es unten zeigen). Es ist großartig, wenn Sie LLMs nutzen möchten, um schnell Apps zu erstellen, die das Web durchsuchen, mit Embeddings arbeiten oder sogar vollständige RAG-Systeme entwickeln. Und das alles mit minimalen Halluzinationen.
tagWozu brauche ich überhaupt einen Meta-Prompt?
Nehmen wir an, Sie möchten ein LLM verwenden, um Code zu generieren, der Jinas APIs nutzt. Lassen Sie uns GPT-4 genau darum bitten:
Sieht gut aus, oder? Es hat das from jina import Client
und alles.
Ein kleines Problem: Das Jina-Paket befindet sich im Wartungsmodus und ist nicht der Weg, auf unsere APIs zuzugreifen. Selbst wenn Sie das Jina-Paket installieren, wird das generierte Programm abstürzen, wenn Sie versuchen, es auszuführen:
Selbst wenn ChatGPT dies durch Suchen richtig machen könnte, unterstützen viele andere LLMs (wie Claude) derzeit keine Websuche, was Ihre Optionen stark einschränkt.
Hier glänzt Meta-Prompt. Mit Meta-Prompt können Sie den gesamten Kontext und die Spezifikationen von Jinas APIs in das LLM laden. Das bedeutet, dass das LLM Code generieren kann, der Jinas APIs direkt nutzt, ohne Halluzinationen oder unnötige Workarounds, und Ihnen Code liefert, der beim ersten Mal funktioniert.
tagExperimente mit Meta-Prompt
Um Meta-Prompt auf die Probe zu stellen, führten wir einige Experimente durch und bewerteten die Ergebnisse. Sofern nicht anders angegeben, verwendeten wir Claude-3.5-Sonnet als LLM.
Für alle Experimente haben wir relevante API-Schlüssel (wie JINA_API_KEY
und ANTHROPIC_API_KEY
) vor der Ausführung des generierten Codes als Umgebungsvariablen festgelegt.
tagExperiment 1: Überprüfen von Aussagen mit Meta-Prompt in ChatGPT
Wir schreiben dies kurz nach den US-Wahlen, wo mehr Desinformation als je zuvor im Umlauf war. Wie können wir in unseren Feeds das Signal vom Rauschen trennen und nur die guten Inhalte ohne Lügen bekommen?
Nehmen wir an, wir möchten überprüfen, ob ein neues britisches Gesetz auf BBC.com korrekt berichtet wird, speziell die Behauptung:
"Die britische Regierung hat ein neues Gesetz angekündigt, das von Social-Media-Unternehmen verlangt, das Alter ihrer Nutzer zu verifizieren."
Wir können den Meta-Prompt in ChatGPT kopieren und dann unseren eigenen Prompt eingeben, um den Code dafür zu generieren, etwa so:
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."
Wir können das dann ausführen mit
node grounding.js
(nach der Installation aller erforderlichen Pakete wie axios). Wir erhalten eine Ausgabe wie diese, die zeigt, dass die Behauptung wahr ist, zusammen mit den Quellen:tagExperiment 2: Visualisierung von Hacker News über die CLI
Wenn Sie eher ein Kommandozeilen-Enthusiast sind, können Sie Meta-Prompt über die CLI mittels cURL verwenden. Zuerst müssen Sie das llm
Python-Paket installieren:
pip install llm
Und dann das Claude-3 Plugin:
llm install llm-claude-3
Für den letzten Schritt der Einrichtung geben Sie Ihren Anthropic API-Schlüssel an:
export ANTHROPIC_API_KEY=<your key>
Jetzt schreiben wir einen Prompt, um jeden Satz von der Hacker News Startseite zu visualisieren:
grab every sentence from hackernews frontpage and
visualize them in a 2d umap using matplotlib
Wir können dies mit dem llm
-Befehl pipen:
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
Puh! Das ist eine Menge Output. Aber (wie beim Hacker News Beispiel) ist es mühsam, den Code aus diesem großen Textblock zu extrahieren und auszuführen. Natürlich gibt es kein Problem, das nicht durch noch mehr LLM-Einsatz gelöst werden kann, richtig? Also fügen wir einen weiteren Prompt hinzu, um den ursprünglichen Output zu "entblobben":
leave just the code in this file, remove all surrounding explanatory text.
do not wrap code in backticks, just return "pure code"
Jetzt fügen wir das zu unserer Befehlspipeline hinzu und führen sie aus:
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
> app.py
verwenden, um die gesamte Ausgabe in eine Datei umzuleiten, gibt es im Video nichts zu zeigen.Wir können die App dann mit python app.py
ausführen und erhalten unser RAG-Programm. Wie Sie sehen können, kann es Fragen beantworten und ein Arbeitsgedächtnis aufrechterhalten:
tagExperiment 4: Eine App-Fabrik mit Meta-Prompt erstellen
Da wir jetzt Skripte und Apps nicht-interaktiv generieren können, können wir leicht eine "App-Fabrik" automatisieren - ein Skript, das Prompts durchläuft und Python-Skripte als Output erzeugt. Sie können das App-Fabrik-Skript vorerst in einem GitHub Gist finden:

Was es kurz gesagt macht:
- Durchläuft das Verzeichnis
prompts
, das (Sie haben es erraten) Prompt-Dateien enthält. - Übergibt den Meta-Prompt und jeden Prompt-Text an Claude-3.5-Sonnet (über
llm
). - Nimmt die Ausgabe und übergibt sie ERNEUT an Claude, diesmal mit dem Prompt, nur den Code zu belassen.
- Schreibt das in eine Datei im Verzeichnis
apps
.
Wir würden eine Demo zeigen, aber es gibt nicht viel zu sehen. Es protokolliert lediglich, an welchem Prompt-Dateinamen es gerade arbeitet, und arbeitet ansonsten still ohne interessante Bildschirmausgabe.
Um die App-Fabrik auf die nächste Stufe zu heben, könnten Sie komplett Factorio gehen und ein weiteres Skript schreiben, das App-Ideen generiert und daraus Prompts erstellt, die in die Fabrik eingespeist werden. Das haben wir noch nicht gemacht, aber wir überlassen es Ihnen als Übung.
tagExperimente mit Meta-Prompt: Was haben wir herausgefunden?
Wir haben durch die Verwendung von Meta-Prompt viel gelernt, sowohl darüber, was wir in unsere eigenen Prompts aufnehmen sollten, als auch darüber, wie verschiedene LLMs unterschiedliche Ausgaben generieren.
tagAllgemeine Beobachtungen
- API-Spezialisierung: Die Verwendung aufgabenspezifischer APIs (z.B. Google Books für buchbezogene Abfragen) gewährleistet konsistentere Ergebnisse als universelle Such-APIs, was den Token-Verbrauch reduzieren und die Zuverlässigkeit verbessern kann.
- Benutzerdefinierte Prompts für Wiederverwendbarkeit: Bei nicht-interaktiven Setups ermöglicht das Speichern von Prompts als
.txt
-Dateien und deren Weiterleitung in die CLI eine effiziente Ausgabe von reinem Code ohne störenden erklärenden Text. - Strukturierte Ausgabe: Das Speichern von Ausgaben (normalerweise im JSON-Format) und das Neuladen nach Bedarf spart Token und rationalisiert Aufgaben wie die Generierung von Embeddings, bei denen der Token-Verbrauch kostspielig sein kann.
tagErkenntnisse aus der Nutzung verschiedener LLMs
GPT
- Probleme mit der Prompt-Speicherung: GPT-4o verliert manchmal Details bei langen Anweisungen, was zu Problemen führt, wenn es wichtige Elemente während der Diskussion "vergisst". Dies führt zu viel Frustration, wenn man es an einfache Dinge erinnern muss.
- Herausforderungen bei der API-Integration: In Fällen wie der Integration von Milvus Lite mit jina-embeddings-v3 scheitert GPT-4o vollständig und wiederholt, selbst wenn wir die Milvus Lite API-Anweisungen bereitstellen, und generiert Code, der Datenbanken erstellt, denen die gerade erzeugten Embeddings fehlen, wodurch semantische Suchanwendungen unmöglich werden.
Claude
- Code-Ausgabe-Einschränkungen: Claude-3.5 produziert oft Skripte, die vollständig erscheinen, aber verborgene Probleme enthalten, wie fehlende Fehlerbehandlung oder die Nichtberücksichtigung fehlender API-Schlüssel. Außerdem greift es manchmal auf vordefinierte Beispiele zurück, anstatt maßgeschneiderte Antworten auf spezifische Anweisungen zu generieren.
- Stille Ausgabe: Bei LLM-generiertem Code ist es wirklich hilfreich, ein Logging der Hintergrundprozesse zu haben, wenn man das Programm ausführt, nur um sicherzustellen, dass das Modell nichts vermasselt hat. Wenn nicht ausdrücklich angegeben, laufen mit Claude erstellte Apps oft still, ohne dass Sie eine Ahnung haben, was passiert.
- Interaktion mit CLI: Sie müssen klar spezifizieren, dass CLI-Befehle CLI-Befehle sind. Wenn Sie Claude sagen, es kann den
llm
-Befehl verwenden, versucht es oft, eine Python-llm()
-Funktion aufzurufen, die nicht existiert. - Claude 3.5-Sonnet ist der richtige Weg: Claude-3.5-Haiku schien in ersten Tests auch okay zu funktionieren, aber Opus und Sonnet-3 fassen nur die Jina API-Anweisungen zusammen, ohne den Benutzer-Prompt zu berücksichtigen.
tagFazit
Die Verwendung von Meta-Prompt bietet neue Möglichkeiten, Jinas APIs mit LLMs zu integrieren, sodass Sie Experimente durchführen und Apps erstellen können, die beim ersten Versuch funktionieren. Keine Abstürze, verpasste API-Verbindungen oder halluzinierte Funktionen mehr – Meta-Prompt stellt sicher, dass der generierte Code von Anfang an präzise und funktional ist. Ob Sie nun Aussagen überprüfen, Embeddings generieren, ein leichtgewichtiges RAG-System aufbauen oder die App-Erstellung automatisieren – Meta-Prompt verwandelt natürlichsprachliche Anweisungen in ausführbaren, korrekten Code und umgeht den typischen Hin-und-her-Dialog mit einem LLM, um funktionierende Lösungen zu erhalten.
Ob Sie Meta-Prompt in ChatGPT kopieren oder es mit einem benutzerdefinierten LLM-Befehl verwenden, es bietet einen unkomplizierten, zuverlässigen Weg, Jinas Fähigkeiten zu nutzen. Unsere Experimente und Erkenntnisse zeigen Meta-Prompt als solides Werkzeug für eine robuste Integration in Ihre Projekte.
Wenn Sie bereit sind zu erkunden, was Meta-Prompt leisten kann, besuchen Sie docs.jina.ai für die neueste Dokumentation und Ressourcen.