Tóm tắt video trên YouTube

Hướng dẫn này minh hoạ cách tạo một ứng dụng trò chuyện cho phép người dùng tóm tắt video trên YouTube và trò chuyện về nội dung của video bằng ngôn ngữ tự nhiên.

  1. Thiết lập dự án
  2. Nhập các phần phụ thuộc bắt buộc
  3. Định cấu hình Genkit và mô hình mặc định
  4. Lấy URL của video từ dòng lệnh
  5. Thiết lập lời nhắc
  6. Tạo phản hồi
  7. Chạy ứng dụng

Điều kiện tiên quyết

Trước khi bắt đầu, bạn nên thiết lập các điều kiện tiên quyết sau:

Các bước triển khai

Sau khi thiết lập các phần phụ thuộc, bạn có thể tạo dự án.

1. Thiết lập dự án

  1. Tạo cấu trúc thư mục và tệp để lưu trữ mã nguồn.

    $ mkdir -p summarize-a-video/src && \
    cd summarize-a-video && \
    touch src/index.ts
    
  2. Khởi chạy một dự án TypeScript mới.

    $ npm init -y
    
  3. Cài đặt các phần phụ thuộc Genkit sau đây để sử dụng Genkit trong dự án:

    $ npm i genkit @genkit-ai/googleai
    
    • genkit cung cấp các tính năng cốt lõi của Genkit.
    • @genkit-ai/googleai cung cấp quyền truy cập vào các mô hình Gemini AI của Google.
  4. Lấy và định cấu hình khoá API mô hình

    Để sử dụng API Gemini mà hướng dẫn này sử dụng, trước tiên, bạn phải định cấu hình khoá API. Nếu bạn chưa có, hãy tạo một khoá trong Google AI Studio.

    Gemini API cung cấp một cấp miễn phí hào phóng và không yêu cầu thẻ tín dụng để bắt đầu.

    Sau khi tạo khoá API, hãy đặt biến môi trường GEMINI_API_KEY thành khoá của bạn bằng lệnh sau:

    $ export GEMINI_API_KEY=<your API key>
    

2. Nhập các phần phụ thuộc bắt buộc

Trong tệp index.ts mà bạn đã tạo, hãy thêm các dòng sau để nhập các phần phụ thuộc cần thiết cho dự án này:

import { gemini, googleAI } from '@genkit-ai/googleai';
import { genkit } from 'genkit';
  • Dòng đầu tiên nhập trình bổ trợ googleAI và hàm trình tải mô hình gemini từ gói @genkit-ai/googleai, cho phép truy cập vào các mô hình Gemini của Google.

3. Định cấu hình Genkit và mô hình mặc định

Thêm các dòng sau để định cấu hình Genkit và đặt Gemini 2.0 Flash làm mô hình mặc định.

const ai = genkit({
  plugins: [googleAI()],
  model: gemini('gemini-2.0-flash'),
});

Sau đó, bạn có thể thêm một khung cho mã và xử lý lỗi.

(async () => {
  try {
    // Step 1: get command line arguments

    // Step 2: construct prompt

    // Step 3: process video

  } catch (error) {
    console.error("Error processing video:", error);
  }
})(); // <-- don't forget the trailing parentheses to call the function!

4. Phân tích cú pháp dòng lệnh và lấy URL video

Thêm mã để đọc URL của video được truyền vào từ dòng lệnh.

  // Step 1: get command line arguments
  const videoURL = process.argv[2];
  if (!videoURL) {
    console.error("Please provide a video URL as a command line argument.");
    process.exit(1);
  }

5. Thiết lập lời nhắc

Thêm mã để thiết lập lời nhắc:

  // Step 2: construct prompt
  const prompt = process.argv[3] || "Please summarize the following video:";
  • Nội dung khai báo const này xác định một lời nhắc mặc định nếu người dùng không truyền một lời nhắc của riêng họ qua dòng lệnh.

6. Tạo phản hồi

Thêm mã sau để truyền lời nhắc đa phương thức vào mô hình:

  // Step 3: process video
  const { text } = await ai.generate({
    prompt: [
      { text: prompt },
      { media: { url: videoURL, contentType: "video/mp4" } }
    ],
  });
  console.log(text);

Đoạn mã này gọi phương thức ai.generate để gửi lời nhắc đa phương thức đến mô hình. Lời nhắc này bao gồm hai phần:

  • { text: prompt }: Đây là lời nhắc văn bản mà bạn đã xác định trước đó.
  • { media: { url: videoURL, contentType: "video/mp4" } }: Đây là URL của video mà bạn đã cung cấp dưới dạng đối số dòng lệnh. contentType được đặt thành video/mp4 để cho biết URL trỏ đến tệp video MP4.

Phương thức ai.generate trả về một đối tượng chứa văn bản đã tạo, sau đó được ghi nhật ký vào bảng điều khiển.

7. Chạy ứng dụng

Để chạy ứng dụng, hãy mở thiết bị đầu cuối trong thư mục gốc của dự án, sau đó chạy lệnh sau:

npx tsx src/index.ts https://www.youtube.com/watch\?v\=YUgXJkNqH9Q

Sau một lát, bản tóm tắt về video bạn cung cấp sẽ xuất hiện.

Bạn cũng có thể truyền các câu lệnh khác. Ví dụ:

npx tsx src/index.ts https://www.youtube.com/watch\?v\=YUgXJkNqH9Q "Transcribe this video"