Recientemente publicamos Meta-Prompt, un único archivo de texto que describe todas nuestras especificaciones de API. Puedes considerarlo como documentación para LLMs, y usarlo para generar automáticamente integraciones de nuestras APIs incluyendo Reader, Embeddings, Reranker y más.
Es tan simple como copiar y pegar nuestro prompt en ChatGPT/Claude, o canalizarlo al comando llm
como un prompt de sistema, y luego agregar tu propio prompt para especificar lo que quieres construir (como hacemos a continuación). Es excelente si quieres usar LLMs para construir rápidamente aplicaciones que rastreen la web, trabajen con embeddings, o incluso sistemas RAG completos. Todo esto con alucinaciones mínimas.
tag¿Por Qué Necesitaría un Meta-Prompt?
Supongamos que quieres usar un LLM para generar código que use las APIs de Jina. Pidamos a GPT-4 que haga exactamente eso:
Se ve bien, ¿verdad? Tiene el from jina import Client
y todo.
Un pequeño problema: El paquete Jina está en modo de mantenimiento, y no es la forma de acceder a nuestras APIs. Incluso si sí instalas el paquete Jina, el programa generado se bloqueará cuando intentes ejecutarlo:
¿Y qué? Podemos simplemente pedirle a GPT que busque en la web las APIs de Jina, ¿verdad? Esto es lo que obtenemos:
Sin embargo, si miras el código, no usa todas las APIs relevantes de Jina. Claramente no descubrió que Reader existe, en su lugar nos hace instalar BeautifulSoup para hacer el scraping. Y, incluso cuando (supuestamente) podía hacer el scraping con BeautifulSoup, no analizó con precisión el formato de respuesta de Jina Embeddings, lo que llevó a un error:
Sin embargo, incluso si ChatGPT pudiera hacerlo correctamente mediante búsquedas, muchos otros LLM (como Claude) actualmente no admiten búsquedas web, lo que limita severamente tus opciones.
Aquí es donde Meta-Prompt brilla. Con Meta-Prompt, puedes cargar todo el contexto y las especificaciones de las APIs de Jina en el LLM. Esto significa que el LLM puede generar código que aprovecha las APIs de Jina directamente, sin alucinaciones ni soluciones innecesarias, proporcionándote código que funciona a la primera.
tagExperimentos con Meta-Prompt
Para poner a prueba Meta-Prompt, realizamos algunos experimentos y evaluamos los resultados. A menos que se especifique lo contrario, utilizamos Claude-3.5-Sonnet como LLM.
Para todos los experimentos, especificamos las claves API relevantes (como JINA_API_KEY
y ANTHROPIC_API_KEY
) como variables de entorno antes de ejecutar el código generado.
tagExperimento 1: Verificación de Declaraciones Usando Meta-Prompt en ChatGPT
Estamos escribiendo esto justo después de las elecciones de EE. UU., donde circulaba más desinformación que nunca. ¿Cómo podemos separar la señal del ruido en nuestros feeds y obtener solo lo bueno sin las mentiras?
Digamos que queremos verificar si una nueva ley del Reino Unido está reportada con precisión en BBC.com, específicamente la afirmación:
"El gobierno del Reino Unido ha anunciado una nueva ley que requerirá que las compañías de redes sociales verifiquen la edad de sus usuarios."
Podemos copiar y pegar el Meta-Prompt en ChatGPT, luego escribir nuestro propio prompt para generar el código para hacer eso, así:
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."
Podemos entonces ejecutar eso connode grounding.js
(después de instalar los paquetes requeridos como axios). Obtenemos una salida como esta, que muestra que la afirmación es verdadera, junto con las fuentes:
tagExperimento 2: Visualización de Hacker News desde la CLI
Si eres más un guerrero de la línea de comandos, puedes usar Meta-Prompt desde la CLI a través de cURL. Primero, necesitarás instalar el paquete llm
de Python:
pip install llm
Y luego el plugin de Claude-3:
llm install llm-claude-3
Para la última etapa de configuración, especifica tu clave API de Anthropic:
export ANTHROPIC_API_KEY=<your key>
Ahora, escribamos un prompt para visualizar cada oración de la página principal de Hacker News:
grab every sentence from hackernews frontpage and
visualize them in a 2d umap using matplotlib
Podemos enviar por tubería esto al comando llm
con:
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
Si extraemos y ejecutamos el código generado, obtenemos algo como esto:
requirements.txt
. En este caso necesitamos UMAP y Matplotlib, aunque tu experiencia puede variar.tagExperimento 3: Construyendo un Sistema RAG Simple con Almacenamiento JSON
Para llevar las cosas aún más lejos, vamos a crear un sistema RAG simple. En mi tiempo libre estoy aprendiendo SolidPython así que usaremos el repositorio y la wiki como base de conocimientos. Para mantener las cosas simples, no usaremos una base de datos, sino que simplemente almacenaremos los datos en un archivo JSON.
Aquí está el prompt, almacenado en el archivo 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 ---
Como puedes ver, podemos darle al LLM herramientas adicionales especificándolas en el prompt. Sin esto, Claude a menudo alucina una forma menos óptima (o incluso defectuosa) de añadir el LLM al sistema RAG.
Dado que este es un prompt muy largo (con bastante puntuación que puede romper cualquier tubería por la que lo ejecutemos), usaremos el texto $(cat prompt.txt)
en lugar del prompt en sí cuando ejecutemos nuestro comando:
curl docs.jina.ai/v4 | llm -s "$(cat prompt.txt)" -m claude-3.5-sonnet
¡Uf! Es mucha salida. Pero (como en el ejemplo de Hacker News) es un dolor de cabeza extraer y ejecutar el código de ese gran bloque de texto. Por supuesto, no hay problema que no se pueda resolver simplemente agregando más LLM, ¿verdad? Así que agreguemos otro prompt para "des-blobear" la salida original:
leave just the code in this file, remove all surrounding explanatory text.
do not wrap code in backticks, just return "pure code"
Ahora lo agregamos a nuestra cadena de comandos y lo ejecutamos:
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
al final de nuestro comando para dirigir toda la salida a un archivo, no hay nada que mostrar en un video.Luego podemos ejecutar esa aplicación con python app.py
y obtenemos nuestro programa RAG. Como puedes ver, puede responder preguntas y mantener una memoria de trabajo:
tagExperimento 4: Construyendo una Fábrica de Aplicaciones con Meta-Prompt
Ahora que podemos generar scripts y aplicaciones de forma no interactiva, podemos automatizar fácilmente una "fábrica de aplicaciones" - un script que itera sobre prompts y produce scripts de Python como salida. Puedes obtener el script de la fábrica de aplicaciones en un GitHub gist por ahora:

Lo que hace, en resumen, es:
- Iterar a través del directorio
prompts
que contiene (lo adivinaste) archivos de prompt. - Pasar el Meta-Prompt y cada texto de prompt a Claude-3.5-Sonnet (vía
llm
). - Tomar la salida y pasarla a Claude nuevamente, esta vez con el prompt indicándole que solo deje el código.
- Escribir eso en un archivo en el directorio
apps
.
Mostraríamos una demo, pero no hay mucho que ver. Simplemente registra en qué nombre de archivo de prompt está trabajando, y por lo demás opera silenciosamente sin salida interesante en la pantalla.
Para llevar la fábrica de aplicaciones al siguiente nivel, podrías ir al estilo Factorio y escribir otro script para generar ideas de aplicaciones y desde allí generar prompts para alimentar la fábrica. No lo hemos hecho todavía, pero lo dejamos como ejercicio para ti, el lector.
tagExperimentando con Meta-Prompt: ¿Qué Descubrimos?
Aprendimos mucho usando Meta-Prompt, tanto sobre qué incluir en nuestros propios prompts como sobre cómo diferentes LLMs generan diferentes resultados.
tagObservaciones Generales
- Especialización de API: Usar APIs específicas para tareas (por ejemplo, Google Books para consultas relacionadas con libros) asegura resultados más consistentes que las APIs de búsqueda de propósito general, lo que puede reducir el uso de tokens y mejorar la fiabilidad.
- Prompts Personalizados para Reusabilidad: Para configuraciones no interactivas, guardar prompts como archivos
.txt
y canalizarlos en la CLI permite obtener salidas eficientes de solo código sin texto explicativo adicional que lo complique. - Salida Estructurada: Almacenar salidas (generalmente en formato JSON) y recargarlas según sea necesario ahorra tokens y agiliza tareas como la generación de embeddings, donde el uso de tokens puede ser costoso.
tagPerspectivas del Uso de Diferentes LLMs
GPT
- Problemas de Retención de Prompts: GPT-4 a veces pierde detalles con instrucciones extensas, lo que lleva a problemas cuando "olvida" elementos clave durante la discusión. Esto conduce a mucha frustración cuando tienes que recordarle cosas simples.
- Desafíos de Integración de API: En casos como la integración de Milvus Lite con jina-embeddings-v3, incluso cuando proporcionamos las instrucciones de la API de Milvus Lite, GPT-4 falla completa y repetidamente, generando código que crea bases de datos que carecen de los embeddings que el código acaba de generar, haciendo imposibles las aplicaciones de búsqueda semántica.
Claude
- Limitaciones en la Salida de Código: Claude-3.5 a menudo produce scripts que parecen completos pero contienen problemas silenciosos, como la falta de manejo de errores o no tener en cuenta las claves de API faltantes. Además, a veces recurre a ejemplos preestablecidos en lugar de generar respuestas adaptadas a instrucciones específicas.
- Salida Silenciosa: Con el código generado por LLM realmente ayuda tener algún registro de lo que está sucediendo entre bastidores cuando ejecutas el programa, solo para asegurarte de que el modelo no haya estropeado las cosas. A menos que lo especifiques directamente, las aplicaciones creadas con Claude a menudo se ejecutarán silenciosamente, dejándote sin pista de lo que está sucediendo.
- Interacción con CLI: Necesitas especificar claramente que los comandos CLI son comandos CLI. Si le dices a Claude que puede usar el comando
llm
, a menudo intentará llamar a una función Pythonllm()
que no existe. - Claude 3.5-Sonnet Es la Mejor Opción: Claude-3.5-Haiku también pareció funcionar bien en las pruebas iniciales, pero Opus y Sonnet-3 simplemente resumen las instrucciones de la API de Jina, sin tener en cuenta el prompt del usuario.
tagConclusión
Usar Meta-Prompt proporciona nuevas formas de integrar las APIs de Jina con LLMs, permitiéndote ejecutar experimentos y construir aplicaciones que funcionen al primer intento. No más fallos, conexiones de API perdidas o funciones alucinadas — Meta-Prompt asegura que el código generado sea preciso y funcional desde el principio. Ya sea que estés verificando declaraciones, generando embeddings, construyendo un sistema RAG ligero o automatizando la creación de aplicaciones, Meta-Prompt transforma las instrucciones en lenguaje natural en código accionable y correcto, evitando el típico ir y venir con un LLM para obtener cosas que realmente funcionen.
Ya sea que estés copiando Meta-Prompt en ChatGPT o usándolo con un comando LLM personalizado, ofrece una manera directa y confiable de aprovechar las capacidades de Jina. Nuestros experimentos y perspectivas muestran a Meta-Prompt como una herramienta sólida para una integración robusta en tus proyectos.
Si estás listo para explorar lo que Meta-Prompt puede hacer, dirígete a docs.jina.ai para la documentación y recursos más recientes.