Puedes usar Genkit para compilar una app que le permita al usuario chatear con un archivo PDF. Para ello, sigue estos pasos:
- Configura tu proyecto
- Importa las dependencias requeridas
- Configura Genkit y el modelo predeterminado
- Carga y analiza el archivo PDF
- Configura la instrucción
- Implementa la IU
- Implementa el bucle de chat
- Ejecuta la app
En esta guía, se explica cómo realizar cada una de estas tareas.
Dependencias
Antes de comenzar a trabajar, debes configurar estas dependencias:
Tasks
Después de configurar tus dependencias, puedes compilar el proyecto en sí.
1. Configura tu proyecto
Crea una estructura de directorio y un archivo para almacenar tu código fuente.
$ mkdir -p chat-with-a-pdf/src && \ cd chat-with-a-pdf/src && \ touch index.ts
Inicializa un nuevo proyecto de TypeScript.
$ npm init -y
Instala el módulo pdf-parse:
$ npm i pdf-parse
Instala las siguientes dependencias de Genkit para usar Genkit en tu proyecto:
$ npm install genkit @genkit-ai/googleai
genkit
proporciona las funciones principales de Genkit.@genkit-ai/googleai
proporciona acceso a los modelos de Gemini de la IA de Google.
5. Obtén y configura la clave de API de tu modelo
-
Para usar la API de Gemini, que usa este codelab, primero debes
configurar una clave de API. Si aún no tienes una,
crea una
clave en Google AI Studio.
La API de Gemini ofrece un nivel generoso sin costo y no requiere una tarjeta de crédito para comenzar.
Después de crear tu clave de API, establece la variable de entorno
GOOGLE_GENAI_API_KEY`
en tu clave con el siguiente comando:
$ export GOOGLE_GENAI_API_KEY=<your API key>
Nota: Si bien en este instructivo se 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 del Vertex AI Model Garden, así como los complementos de la comunidad
- Modelos de código abierto a través de Ollama
- Proveedores con asistencia de la comunidad, como OpenAI y Cohere.
2. Importa las dependencias requeridas
En el archivo index.ts
que creaste, agrega las siguientes líneas para importar las dependencias necesarias para este proyecto:
import { gemini15Flash, googleAI } from '@genkit-ai/googleai';
import { genkit } from 'genkit';
import pdf from 'pdf-parse';
import fs from 'fs';
import { createInterface } from "node:readline/promises";
- Las dos primeras líneas importan Genkit y el complemento de Google AI.
- Las dos líneas siguientes son para el analizador de PDF.
- La quinta línea es para implementar tu IU.
3. Configura Genkit y el modelo predeterminado
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,
});
Luego, puedes agregar un esqueleto para el código y el manejo de errores.
(async () => {
try {
// Step 1: get command line arguments
// Step 2: load PDF file
// Step 3: construct prompt
// Step 4: start chat
Step 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!
4. Carga y analiza el PDF
En el paso 1, agrega código para leer el nombre del archivo PDF que se pasó desde la línea de comandos.
const filename = process.argv[2]; if (!filename) { console.error("Please provide a filename as a command line argument."); process.exit(1); }
En el paso 2, agrega código para cargar el contenido del archivo PDF.
let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
5. Configura la instrucción
En el paso 3, agrega código para configurar la instrucción:
const prefix = process.argv[3] || "Sample prompt: Answer the user's questions about the contents of this PDF file.";
const prompt = `
${prefix}
Context:
${text}
`
- La primera declaración
const
define un mensaje predeterminado si el usuario no pasa uno de los suyos desde la línea de comandos. - La segunda declaración
const
interpola el prefijo de la instrucción y el texto completo del archivo PDF en la instrucción del modelo.
6. Implementa la IU
En el paso 4, agrega el siguiente código para iniciar el chat y implementar la IU:
const chat = ai.chat({ system: prompt })
const readline = createInterface(process.stdin, process.stdout);
console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
La primera declaración de const
inicia el chat con el modelo llamando al método chat
y pasando la instrucción (que incluye el texto completo del archivo PDF). El resto del código crea una instancia de una entrada de texto y, luego, muestra un mensaje al usuario.
7. Implementa el bucle de chat
En el paso 5, agrega código para recibir la entrada del usuario y enviarla al modelo con chat.send
. Esta parte de la app se repite hasta que el usuario presiona CTRL + C.
while (true) {
const userInput = await readline.question("> ");
const {text} = await chat.send(userInput);
console.log(text);
}
8. Ejecuta la app
Ejecuta 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.