Prompt API

Thomas Steiner
Thomas Steiner
Alexandra Klepper
Alexandra Klepper

Ngày phát hành: 20/5/2025

Video giải thích Web Phần mở rộng Trạng thái của Chrome Intent
GitHub Thử nghiệm Trong EPP Chrome 138 Xem Ý định thử nghiệm

Với Prompt API, bạn có thể gửi các yêu cầu bằng ngôn ngữ tự nhiên đến Gemini Nano trong trình duyệt.

Bạn có thể sử dụng Prompt API theo nhiều cách. Trong một ứng dụng web hoặc trang web, bạn có thể tạo:

  • Tìm kiếm bằng AI: Trả lời câu hỏi dựa trên nội dung của một trang web.
  • Nguồn cấp dữ liệu tin tức được cá nhân hoá: Tạo nguồn cấp dữ liệu tự động phân loại các bài viết bằng danh mục và cho phép người dùng lọc nội dung đó.

Đây chỉ là một vài ví dụ và chúng tôi rất mong được xem những nội dung sáng tạo của bạn.

Xem xét các yêu cầu về phần cứng

API Trình phát hiện ngôn ngữ và API Dịch chỉ hoạt động trên máy tính trong Chrome.

Prompt API, Summarizer API, Writer API và Rewriter API hoạt động trong Chrome khi đáp ứng các điều kiện sau:

  • Hệ điều hành: Windows 10 hoặc 11; macOS 13 trở lên (Ventura trở lên); hoặc Linux. Chrome dành cho Android, iOS và ChromeOS chưa được các API của chúng tôi hỗ trợ Gemini Nano.
  • Dung lượng lưu trữ: Ít nhất 22 GB trên phương tiện lưu trữ chứa hồ sơ Chrome của bạn.
  • GPU: VRAM phải lớn hơn 4 GB.
  • Mạng: Dữ liệu không giới hạn hoặc kết nối không đo lượng dữ liệu.

Các yêu cầu này dành cho bạn trong quá trình phát triển và dành cho người dùng sử dụng các tính năng mà bạn xây dựng.

Sử dụng Prompt API

Trước khi sử dụng API này, hãy xác nhận rằng bạn đã đọc Chính sách về các hành vi bị cấm khi sử dụng AI tạo sinh của Google.

Bạn có thể sử dụng hai hàm trong không gian tên LanguageModel:

  • availability() để kiểm tra xem mô hình có thể làm được gì và liệu mô hình có sẵn hay không.
  • create() để bắt đầu một phiên mô hình ngôn ngữ.

Tải mô hình xuống

Prompt API sử dụng mô hình Gemini Nano trong Chrome. Mặc dù API được tích hợp sẵn vào Chrome, nhưng mô hình sẽ được tải xuống riêng biệt trong lần đầu tiên một nguồn gốc sử dụng API.

Để xác định xem mô hình đã sẵn sàng để sử dụng hay chưa, hãy gọi hàm LanguageModel.availability() không đồng bộ. Thao tác này sẽ trả về một trong các phản hồi sau:

  • "unavailable" có nghĩa là phương thức triển khai không hỗ trợ các tuỳ chọn được yêu cầu hoặc không hỗ trợ việc nhắc một mô hình ngôn ngữ.
  • "downloadable" có nghĩa là quá trình triển khai hỗ trợ các tuỳ chọn được yêu cầu, nhưng sẽ phải tải một số nội dung xuống (ví dụ: chính mô hình ngôn ngữ hoặc một bản tinh chỉnh) trước khi có thể tạo phiên bằng các tuỳ chọn đó.
  • "downloading" có nghĩa là quá trình triển khai hỗ trợ các tuỳ chọn được yêu cầu, nhưng cần phải hoàn tất một thao tác tải xuống đang diễn ra trước khi có thể tạo một phiên bằng các tuỳ chọn đó.
  • "available" có nghĩa là quá trình triển khai hỗ trợ các tuỳ chọn được yêu cầu mà không yêu cầu tải xuống nội dung mới.

Để kích hoạt quá trình tải mô hình xuống và tạo phiên mô hình ngôn ngữ, hãy gọi hàm LanguageModel.create() không đồng bộ. Nếu phản hồi cho availability()'downloadable', thì tốt nhất bạn nên theo dõi tiến trình tải xuống. Bằng cách này, bạn có thể thông báo cho người dùng trong trường hợp quá trình tải xuống mất nhiều thời gian.

const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  },
});

Khả năng của mô hình

Hàm params() cho bạn biết các tham số của mô hình ngôn ngữ. Đối tượng này có các trường sau:

  • defaultTopK: Giá trị mặc định của top-K (mặc định: 3).
  • maxTopK: Giá trị tối đa trong K (8).
  • defaultTemperature: Nhiệt độ mặc định (1.0). Giá trị nhiệt độ phải nằm trong khoảng từ 0.0 đến 2.0.
  • maxTemperature: Nhiệt độ tối đa.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}

Tạo phiên

Sau khi Prompt API có thể chạy, bạn sẽ tạo một phiên bằng hàm create(). Bạn có thể nhắc mô hình bằng hàm prompt() hoặc promptStreaming().

Tuỳ chỉnh phiên

Bạn có thể tuỳ chỉnh từng phiên bằng topKtemperature bằng cách sử dụng đối tượng tuỳ chọn không bắt buộc. Giá trị mặc định cho các tham số này được trả về từ LanguageModel.params().

const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
  temperature: Math.max(params.defaultTemperature * 1.2, 2.0),
  topK: params.defaultTopK,
});

Đối tượng tuỳ chọn không bắt buộc của hàm create() cũng lấy trường signal, cho phép bạn truyền AbortSignal để huỷ phiên.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const session = await LanguageModel.create({
  signal: controller.signal,
})

Câu lệnh ban đầu

Với lời nhắc ban đầu, bạn có thể cung cấp cho mô hình ngôn ngữ ngữ cảnh về các lượt tương tác trước đó, chẳng hạn như để cho phép người dùng tiếp tục một phiên đã lưu sau khi khởi động lại trình duyệt.

const session = await LanguageModel.create({
  initialPrompts: [
    { role: 'system', content: 'You are a helpful and friendly assistant.' },
    { role: 'user', content: 'What is the capital of Italy?' },
    { role: 'assistant', content: 'The capital of Italy is Rome.'},
    { role: 'user', content: 'What language is spoken there?' },
    { role: 'assistant', content: 'The official language of Italy is Italian. [...]' }
  ]
});

Giới hạn phiên

Một phiên hoạt động của mô hình ngôn ngữ nhất định có số lượng mã thông báo tối đa mà mô hình đó có thể xử lý. Bạn có thể kiểm tra mức sử dụng và tiến trình đạt đến giới hạn đó bằng cách sử dụng các thuộc tính sau trên đối tượng phiên:

console.log(`${session.inputUsage}/${session.inputQuota}`);

Phiên hoạt động ổn định

Mỗi phiên theo dõi ngữ cảnh của cuộc trò chuyện. Các lượt tương tác trước đó sẽ được tính đến cho các lượt tương tác trong tương lai cho đến khi cửa sổ ngữ cảnh của phiên đầy.

const session = await LanguageModel.create({
  initialPrompts: [{
    role: "system",
    content: "You are a friendly, helpful assistant specialized in clothing choices."
  }]
});

const result1 = await session.prompt(
  "What should I wear today? It is sunny. I am unsure between a t-shirt and a polo."
);
console.log(result1);

const result2 = await session.prompt(
  "That sounds great, but oh no, it is actually going to rain! New advice?"
);
console.log(result2);

Sao chép một phiên

Để bảo tồn tài nguyên, bạn có thể nhân bản một phiên hiện có bằng hàm clone(). Ngữ cảnh cuộc trò chuyện được đặt lại, nhưng lời nhắc ban đầu vẫn nguyên vẹn. Hàm clone() nhận một đối tượng tuỳ chọn với trường signal, cho phép bạn truyền AbortSignal để huỷ phiên được sao chép.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const clonedSession = await session.clone({
  signal: controller.signal,
});

Gợi ý cho mô hình

Bạn có thể nhắc mô hình bằng hàm prompt() hoặc promptStreaming().

Đầu ra không truyền trực tuyến

Nếu muốn có kết quả ngắn, bạn có thể sử dụng hàm prompt() để trả về phản hồi khi có.

// Start by checking if it's possible to create a session based on the
// availability of the model, and the characteristics of the device.
const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();

if (available !== 'unavailable') {
  const session = await LanguageModel.create();

  // Prompt the model and wait for the whole result to come back.
  const result = await session.prompt("Write me a poem!");
  console.log(result);
}

Đầu ra truyền trực tuyến

Nếu muốn có phản hồi lâu hơn, bạn nên sử dụng hàm promptStreaming() để hiển thị một phần kết quả khi chúng đến từ mô hình. Hàm promptStreaming() trả về ReadableStream.

const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();
if (available !== 'unavailable') {
  const session = await LanguageModel.create();

  // Prompt the model and stream the result:
  const stream = session.promptStreaming('Write me an extra-long poem!');
  for await (const chunk of stream) {
    console.log(chunk);
  }
}

Dừng chạy lời nhắc

Cả prompt()promptStreaming() đều chấp nhận tham số thứ hai không bắt buộc với trường signal, cho phép bạn dừng chạy lời nhắc.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const result = await session.prompt(
  'Write me a poem!',
  { signal: controller.signal }
);

Chấm dứt phiên

Gọi destroy() để giải phóng tài nguyên nếu bạn không cần phiên nữa. Khi một phiên bị huỷ, bạn sẽ không thể sử dụng phiên đó nữa và mọi quá trình thực thi đang diễn ra sẽ bị huỷ. Bạn nên giữ phiên hoạt động nếu dự định thường xuyên nhắc mô hình, vì việc tạo phiên hoạt động có thể mất chút thời gian.

await session.prompt(
  "You are a friendly, helpful assistant specialized in clothing choices."
);

session.destroy();

// The promise is rejected with an error explaining that
// the session is destroyed.
await session.prompt(
  "What should I wear today? It is sunny, and I am unsure between a
  t-shirt and a polo."
);

Khả năng đa phương thức

Prompt API hỗ trợ đầu vào âm thanh và hình ảnh từ Chrome 138 Canary, để thử nghiệm cục bộ. API này trả về kết quả dạng văn bản.

Với các tính năng này, bạn có thể:

  • Cho phép người dùng chép lời tin nhắn âm thanh được gửi trong ứng dụng trò chuyện.
  • Mô tả hình ảnh được tải lên trang web của bạn để sử dụng trong chú thích hoặc văn bản thay thế.
const session = await LanguageModel.create({
  // { type: "text" } is not necessary to include explicitly, unless
  // you also want to include expected input languages for text.
  expectedInputs: [
    { type: "audio" },
    { type: "image" }
  ]
});

const referenceImage = await (await fetch("/reference-image.jpeg")).blob();
const userDrawnImage = document.querySelector("canvas");

const response1 = await session.prompt([{
  role: "user",
  content: [
    { type: "text", value: "Give a helpful artistic critique of how well the second image matches the first:" },
    { type: "image", value: referenceImage },
    { type: "image", value: userDrawnImage }
  ]
}]);

console.log(response1);

const audioBlob = await captureMicrophoneInput({ seconds: 10 });

const response2 = await session.prompt([{
  role: "user",
  content: [
    { type: "text", value: "My response to your critique:" },
    { type: "audio", value: audioBlob }
  ]
}]);

Bản minh hoạ đa phương thức

Xem bản minh hoạ Câu lệnh âm thanh Mediarecorder để sử dụng Prompt API với dữ liệu đầu vào âm thanh và bản minh hoạ Câu lệnh hình ảnh Canvas để sử dụng Prompt API với dữ liệu đầu vào hình ảnh.

Chiến lược hiệu suất

Prompt API cho web vẫn đang được phát triển. Trong khi chúng tôi xây dựng API này, hãy tham khảo các phương pháp hay nhất của chúng tôi về quản lý phiên để đạt được hiệu suất tối ưu.

Phản hồi

Ý kiến phản hồi của bạn sẽ giúp chúng tôi định hướng cho tương lai của API này và các điểm cải tiến cho Gemini Nano. Điều này thậm chí có thể dẫn đến các API tác vụ chuyên dụng (chẳng hạn như API để chép lời âm thanh hoặc mô tả hình ảnh), nhờ đó chúng tôi có thể đáp ứng nhu cầu của bạn và nhu cầu của người dùng.

Tham gia và chia sẻ ý kiến phản hồi

Ý kiến của bạn có thể tác động trực tiếp đến cách chúng tôi xây dựng và triển khai các phiên bản trong tương lai của API này cũng như tất cả các API AI tích hợp.