В этой лаборатории кода показано, как использовать Genkit для реализации приложения, позволяющего общаться с PDF-файлом.
Предварительные условия
В этой лабораторной работе предполагается, что вы знакомы с созданием приложений с помощью Node.js. Чтобы завершить эту лабораторную работу, убедитесь, что ваша среда разработки соответствует следующим требованиям:
- Node.js v20+
- НПМ
Создать новый проект
Создайте новую пустую папку.
mkdir chat-with-a-pdf cd chat-with-a-pdf
Инициализируйте новый проект TypeScript.
npm init -y
Установить Генкит
Установите следующие зависимости Genkit, чтобы использовать Genkit в своем проекте:
-
genkit
предоставляет основные возможности Genkit. -
@genkit-ai/googleai
предоставляет доступ к моделям Google AI Gemini.
npm install genkit @genkit-ai/googleai
Настройте ключ API вашей модели
В этом руководстве мы покажем вам, как использовать API Gemini, который предоставляет щедрый бесплатный уровень и не требует кредитной карты для начала работы. Чтобы использовать API Gemini, вам понадобится ключ API. Если у вас его еще нет, создайте ключ в Google AI Studio.
Получите ключ API от Google AI Studio.
После создания ключа API задайте переменную среды GOOGLE_GENAI_API_KEY
для своего ключа с помощью следующей команды:
export GOOGLE_GENAI_API_KEY=<your API key>
Примечание. Хотя в этом руководстве используется API Gemini от AI Studio, Genkit поддерживает широкий спектр поставщиков моделей, в том числе: * Gemini от Vertex AI * Модели Anthropic Claude 3 и Llama 3.1 через Vertex AI Model Garden * Модели с открытым исходным кодом через Ollama * Поставщики, поддерживаемые сообществом, такие как OpenAI и Cohere.
Импортируйте и инициализируйте Genkit.
Создайте новую папку
src
и внутри нее новый файлindex.ts
. Добавьте следующие строки, чтобы импортировать Genkit и плагин Google AI.import {gemini15Flash, googleAI} from '@genkit-ai/googleai'; import {genkit} from 'genkit';
Добавьте следующие строки, чтобы настроить Genkit и установить Gemini 1.5 Flash в качестве модели по умолчанию.
const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, });
Добавьте основную часть вашего приложения.
(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!
Загрузка и анализ PDF-файла
На этом этапе вы напишете код для загрузки и анализа PDF-файла.
Установите
pdf-parse
.npm i pdf-parse
Импортируйте библиотеку PDF в свое приложение.
import pdf from 'pdf-parse'; import fs from 'fs';
Прочитайте имя PDF-файла, переданное из командной строки.
// 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); }
Загрузите содержимое PDF-файла.
// 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
Настройте подсказку
Выполните следующие действия, чтобы настроить подсказку.
Разрешить пользователю предоставлять собственное приглашение через командную строку. Если они не предоставляют подсказку, используйте значение по умолчанию.
const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
Вставьте префикс приглашения и полный текст PDF-файла в приглашение для модели.
const prompt = ` ${prefix} Context: ${data.text} `
Реализуйте цикл чата
Запустите чат с моделью, вызвав метод
chat
и передав приглашение (которое включает полный текст PDF-файла).const chat = ai.chat({ system: prompt })
Импортировать
createInterface
; это позволит вам создать текстовый пользовательский интерфейс.import {createInterface} from "node:readline/promises";
Создайте экземпляр ввода текста, а затем отобразите сообщение пользователю.
const readline = createInterface(process.stdin, process.stdout); console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
Прочитайте ввод пользователя, а затем отправьте его в модель с помощью
chat.send
. Эта часть приложения будет выполняться циклично, пока пользователь не нажмет CTRL + C.while (true) { const userInput = await readline.question("> "); const {text} = await chat.send(userInput); console.log(text); }
Запустите приложение
Теперь вы можете запустить приложение со своего терминала. Откройте терминал в корневой папке вашего проекта, затем выполните следующую команду:
npx tsx src/index.ts path/to/some.pdf
Затем вы можете начать общение с PDF-файлом.