Este codelab mostra como usar o Genkit para implementar um app que permite conversar com um arquivo PDF.
Pré-requisitos
Este codelab pressupõe que você já sabe criar aplicativos com Node.js. Para concluir este codelab, verifique se o ambiente de desenvolvimento atende aos seguintes requisitos:
- Node.js v20+
- npm
Crie um novo projeto,
Crie uma nova pasta vazia.
mkdir chat-with-a-pdf cd chat-with-a-pdf
Inicie um novo projeto do TypeScript.
npm init -y
Instalar o Genkit
Para usar o Genkit no seu projeto, instale as seguintes dependências:
genkit
oferece os recursos principais do Genkit.@genkit-ai/googleai
dá acesso aos modelos do Gemini da IA do Google.
npm install genkit @genkit-ai/googleai
Configure a chave de API do modelo
Neste guia, vamos mostrar como usar a API Gemini, que oferece um nível sem custo financeiro generoso e não exige um cartão de crédito para começar. Para usar a API Gemini, você precisa de uma chave de API. Se você ainda não tiver, crie uma no Google AI Studio.
Gerar uma chave de API do Google AI Studio
Depois de criar uma chave de API, defina a variável de ambiente GOOGLE_GENAI_API_KEY
para sua chave com o seguinte comando:
export GOOGLE_GENAI_API_KEY=<your API key>
Observação:embora este tutorial use a API Gemini do AI Studio, o Genkit oferece suporte a uma grande variedade de provedores de modelos, incluindo: * Gemini da Vertex AI * Modelos Claude 3 da Anthropic e Llama 3.1 pelo Model Garden da Vertex AI * Modelos de código aberto pelo Ollama * Provedores com suporte da comunidade, como OpenAI e Cohere.
Importar e inicializar o Genkit
Crie uma nova pasta
src
e, dentro dela, um novo arquivoindex.ts
. Adicione as linhas a seguir para importar o Genkit e o plug-in de IA do Google.import {gemini15Flash, googleAI} from '@genkit-ai/googleai'; import {genkit} from 'genkit';
Adicione as linhas abaixo para configurar o Genkit e definir o Gemini 1.5 Flash como o modelo padrão.
const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, });
Adicione o corpo principal do 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!
Carregar e analisar um arquivo PDF
Nesta etapa, você vai escrever um código para carregar e analisar um arquivo PDF.
Instale
pdf-parse
.npm i pdf-parse
Importe a biblioteca de PDF para o app.
import pdf from 'pdf-parse'; import fs from 'fs';
Leia o nome do arquivo PDF transmitido pela linha de comando.
// 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); }
Carregue o conteúdo do arquivo PDF.
// 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
Configurar o comando
Siga estas etapas para configurar o comando.
Permitir que o usuário forneça uma solicitação personalizada pela linha de comando. Se eles não oferecerem uma solicitação, use um padrão.
const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
Injete o prefixo do comando e o texto completo do arquivo PDF no comando do modelo.
const prompt = ` ${prefix} Context: ${data.text} `
Implementar o loop de chat
Para iniciar o chat com o modelo, chame o método
chat
e transmita o comando (que inclui o texto completo do arquivo PDF).const chat = ai.chat({ system: prompt })
Importe
createInterface
para criar uma interface baseada em texto.import {createInterface} from "node:readline/promises";
Instância uma entrada de texto e mostra uma mensagem para o usuário.
const readline = createInterface(process.stdin, process.stdout); console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
Leia a entrada do usuário e envie-a para o modelo usando
chat.send
. Essa parte do app vai ser repetida até que o usuário pressione CTRL + C.while (true) { const userInput = await readline.question("> "); const {text} = await chat.send(userInput); console.log(text); }
Execute o aplicativo
Agora você pode executar o app no terminal. Abra o terminal na pasta raiz do projeto e execute o seguinte comando:
npx tsx src/index.ts path/to/some.pdf
Em seguida, você pode começar a conversar com o arquivo PDF.