Noticias
Modelos
Productos
keyboard_arrow_down
Búsqueda profunda
Busca, lee y razona hasta encontrar la mejor respuesta.
Lector
Lea las URL y busque en la web para obtener una base más sólida para su LLM.
Incrustaciones
Integraciones multilingües y multimodales de clase mundial.
reclasificador
Recuperador neuronal de clase mundial para maximizar la relevancia de la búsqueda.
Más
keyboard_arrow_down
Clasificador
Clasificación de cero disparos y pocos disparos para imágenes y texto.
Segmentador
Corta el texto largo en fragmentos y haz tokenización.

Documentación de la API
Generación automática de código para su IDE o LLM de Copilot
open_in_new


Compañía
keyboard_arrow_down
Sobre nosotros
Contactar con ventas
Programa de prácticas
Únete a nosotros
open_in_new
Descargar logotipo
open_in_new
Términos y condiciones


Acceso
login
¿Por Qué Necesitaría un Meta-Prompt?
Experimentos con Meta-Prompt
Experimentando con Meta-Prompt: ¿Qué Descubrimos?
Conclusión
Blog de tecnología
noviembre 19, 2024

Meta-Prompt para una mejor integración de la API de Jina y CodeGen

¿Es Meta-Prompt la nueva norma para las especificaciones de API? Aliméntalo a los LLMs y genera código de integración que integre de manera confiable las APIs de Jina, ahorrándote el proceso habitual de prueba y error.
Alex C-G
Alex C-G • 9 minutos de lectura

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.

0:00
/1:44

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:

0:00
/0:27

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:

0:00
/0:21

¿Y qué? Podemos simplemente pedirle a GPT que busque en la web las APIs de Jina, ¿verdad? Esto es lo que obtenemos:

0:00
/1:14

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:

0:00
/0:16

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.

💡
Bueno, usualmente a la primera. Los LLM pueden ser impredecibles, pero como puedes ver a continuación, las cosas funcionaron bien en nuestros experimentos.

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."
0:00
/0:35

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:

0:00
/0:04

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
0:00
/0:24

Si extraemos y ejecutamos el código generado, obtenemos algo como esto:

0:00
/0:38
💡
Una limitación actual (aunque estoy seguro de que con algo de código adicional por parte del usuario hay una manera de evitarla) es que necesitarás instalar los requisitos manualmente. No se genera un archivo 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
0:00
/0:34

¡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
💡
Como estamos usando > 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:

0:00
/0:34
💡
La primera ejecución tardó un poco más, ya que tuvo que segmentar y codificar todos los datos. Para las ejecuciones posteriores, los cargó desde un archivo JSON para ahorrar tiempo y costos.

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:

Fábrica de Aplicaciones con Meta-Prompt de Jina AI
Fábrica de Aplicaciones con Meta-Prompt de Jina AI. GitHub Gist: comparte instantáneamente código, notas y fragmentos.
Gist262588213843476

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.

💡
Probar las aplicaciones que genera es otro asunto, uno que no puedo resolver de inmediato. En nuestra experiencia, a menudo especificamos los datos que queremos usar en nuestros prompts, generalmente pasando una URL externa para descargar con Reader. Sin embargo, a veces el LLM alucina datos ficticios, y el script se ejecuta sin problemas evidentes — simplemente "miente" sobre lo que está haciendo.

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 Python llm() 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.

Categorías:
Blog de tecnología
rss_feed
Oficinas
location_on
Sunnyvale, California
710 Lakeway Dr, Ste 200, Sunnyvale, CA 94085, EE. UU.
location_on
Berlín, Alemania (sede central)
Prinzessinnenstraße 19-20, 10969 Berlín, Alemania
location_on
Beijing, China
Piso 5, Edificio 6, No.48 Haidian West St. Pekín, China
location_on
Shenzhen, China
Piso 402, Edificio de Tecnología Fu'an, Shenzhen, China
Fundación de búsqueda
Búsqueda profunda
Lector
Incrustaciones
reclasificador
Clasificador
Segmentador
Documentación API
Obtener la clave API de Jina
Límite de velocidad
Estado de la API
Compañía
Sobre nosotros
Contactar con ventas
Sala de prensa
Programa de prácticas
Únete a nosotros
open_in_new
Descargar logotipo
open_in_new
Términos
Seguridad
Términos y condiciones
Privacidad
Administrar cookies
email
Jina AI © 2020-2025.