En este codelab, se muestra cómo compilar una aplicación de conversación que les permita a los usuarios extraer información de documentos PDF con lenguaje natural.
- 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
Requisitos previos
Antes de comenzar a trabajar, debes configurar los siguientes requisitos previos:
Pasos de implementación
Después de configurar las dependencias, puedes compilar el proyecto.
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 && \ touch src/index.ts
Inicializa un nuevo proyecto de TypeScript.
$ npm init -y
Instala el módulo pdf-parse.
$ npm i pdf-parse && npm i -D @types/pdf-parse
Instala las siguientes dependencias de Genkit para usar Genkit en tu proyecto:
$ npm i 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.
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>
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 { gemini20Flash, googleAI } from '@genkit-ai/googleai';
import { genkit } from 'genkit/beta'; // chat is a beta feature
import pdf from 'pdf-parse';
import fs from 'fs';
import { createInterface } from "node:readline/promises";
- La primera línea importa el modelo
gemini20Flash
y el complementogoogleAI
del paquete@genkit-ai/googleai
, lo que permite el acceso a los modelos de Gemini de Google. - Las siguientes dos líneas importan la biblioteca
pdf-parse
para analizar archivos PDF y el módulofs
para las operaciones del sistema de archivos. - La línea final importa la función
createInterface
del módulonode:readline/promises
, que se usa para crear una interfaz de línea de comandos para la interacción del usuario.
3. Configura Genkit y el modelo predeterminado
Agrega las siguientes líneas para configurar Genkit y establecer Gemini 2.0 Flash como el modelo predeterminado.
const ai = genkit({
plugins: [googleAI()],
model: gemini20Flash,
});
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
Agrega código para leer el nombre del archivo PDF que se pasó desde la línea de comandos.
// Step 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); }
Agrega código para cargar el contenido del archivo PDF.
// Step 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
5. Configura la instrucción
Agrega código para configurar la instrucción:
// Step 3: construct prompt
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
Agrega el siguiente código para iniciar el chat y implementar la IU:
// Step 4: start chat
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.
// Step 5: chat loop
while (true) {
const userInput = await readline.question("> ");
const { text } = await chat.send(userInput);
console.log(text);
}
8. Ejecuta la app
Para ejecutar la app, 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.