En este codelab, se muestra cómo usar Genkit para implementar una app que te permite chatear con un archivo PDF.
Requisitos previos
En este codelab, se supone que conoces la compilación de aplicaciones con Node.js. Para completar este codelab, asegúrate de que tu entorno de desarrollo cumpla con los siguientes requisitos:
- Node.js v20 o versiones posteriores
- npm
Crea un nuevo proyecto
Crea una carpeta nueva y vacía.
mkdir chat-with-a-pdf cd chat-with-a-pdf
Inicializa un nuevo proyecto de TypeScript.
npm init -y
Instala Genkit
Instala las siguientes dependencias de Genkit para usar Genkit en tu proyecto:
genkit
proporciona las funciones principales de Genkit.@genkit-ai/googleai
proporciona acceso a los modelos de Gemini de la IA de Google.
npm install genkit @genkit-ai/googleai
Configura la clave de API de tu modelo
En esta guía, te mostraremos cómo usar la API de Gemini, que ofrece una cuota generosa sin cargo y no requiere una tarjeta de crédito para comenzar. Para usar la API de Gemini, necesitarás una clave de API. Si aún no tienes una, crea una clave en Google AI Studio.
Obtén una clave de API en Google AI Studio
Después de crear una clave de API, establece tu clave para la variable de entorno
GOOGLE_GENAI_API_KEY
con el siguiente comando:
export GOOGLE_GENAI_API_KEY=<your API key>
Nota: Si bien este instructivo usa la API de Gemini de AI Studio, Genkit admite una amplia variedad de proveedores de modelos, incluidos los siguientes: * Gemini de Vertex AI * Los modelos Claude 3 y Llama 3.1 de Anthropic a través de Vertex AI Model Garden * Modelos de código abierto a través de Ollama * Proveedores compatibles con la comunidad, como OpenAI y Cohere.
Importa e inicializa Genkit
Crea una carpeta nueva
src
y, dentro de ella, un archivo nuevoindex.ts
. Agrega las siguientes líneas para importar Genkit y el complemento de Google AI.import {gemini15Flash, googleAI} from '@genkit-ai/googleai'; import {genkit} from 'genkit';
Agrega las siguientes líneas para configurar Genkit y establecer Gemini 1.5 Flash como el modelo predeterminado.
const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, });
Agrega el cuerpo principal de tu app.
(async () => { try { // 1: get command line arguments // 2: load PDF file // 3: construct prompt // 4: start chat // 5: chat loop } catch (error) { console.error("Error parsing PDF or interacting with Genkit:", error); } })(); // <-- don't forget the trailing parentheses to call the function!
Carga y analiza un archivo PDF
En este paso, escribirás código para cargar y analizar un archivo PDF.
Instala
pdf-parse
.npm i pdf-parse
Importa la biblioteca de PDF a tu app.
import pdf from 'pdf-parse'; import fs from 'fs';
Lee el nombre del archivo PDF que se pasó desde la línea de comandos.
// 1: get command line arguments const filename = process.argv[2]; if (!filename) { console.error("Please provide a filename as a command line argument."); process.exit(1); }
Carga el contenido del archivo PDF.
// 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
Configura la instrucción
Sigue estos pasos para configurar la instrucción.
Permite que el usuario proporcione un mensaje personalizado a través de la línea de comandos. Si no proporcionan una instrucción, usa una predeterminada.
const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
Inserta el prefijo de la instrucción y el texto completo del archivo PDF en la instrucción del modelo.
const prompt = ` ${prefix} Context: ${data.text} `
Implementa el bucle de chat
Para iniciar el chat con el modelo, llama al método
chat
y pasa la instrucción (que incluye el texto completo del archivo PDF).const chat = ai.chat({ system: prompt })
Importa
createInterface
, lo que te permitirá compilar una IU basada en texto.import {createInterface} from "node:readline/promises";
Crea una instancia de una entrada de texto y, luego, muéstrale un mensaje al usuario.
const readline = createInterface(process.stdin, process.stdout); console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
Lee la entrada del usuario y, luego, envíala al modelo con
chat.send
. Esta parte de la app se repetirá hasta que el usuario presione CTRL + C.while (true) { const userInput = await readline.question("> "); const {text} = await chat.send(userInput); console.log(text); }
Ejecuta la app
Ahora puedes ejecutar la app desde la terminal. Abre la terminal en la carpeta raíz de tu proyecto y, luego, ejecuta el siguiente comando:
npx tsx src/index.ts path/to/some.pdf
Luego, puedes comenzar a chatear con el archivo PDF.