Prompt API

Xuất bản: Ngày 11 tháng 11 năm 2024, Cập nhật lần gần đây nhất: Ngày 20 tháng 5 năm 2025

Video giải thích Web Phần mở rộng Trạng thái của Chrome Intent
GitHub Bản dùng thử theo nguyên gốc Trong Bản dùng thử theo nguyên gốc 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 Tiện ích Chrome. Ví dụ:

  • Sự kiện tức thì trên lịch. Phát triển một Tiện ích Chrome tự động trích xuất thông tin chi tiết về sự kiện từ các trang web, nhờ đó người dùng có thể tạo các mục trên lịch chỉ trong vài bước.
  • Trích xuất thông tin liên hệ một cách liền mạch. Xây dựng một tiện ích trích xuất thông tin liên hệ từ các trang web, giúp người dùng dễ dàng liên hệ với một doanh nghiệp hoặc thêm thông tin chi tiết vào danh sách người liên hệ của họ.
  • Lọc nội dung động. Tạo một Tiện ích Chrome phân tích các bài viết tin tức và tự động làm mờ hoặc ẩn nội dung dựa trên các chủ đề do người dùng xác định.

Đây chỉ là một vài khả năng, và chúng tôi rất háo hức chờ đón những sáng tạo của bạn.

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

Các API Trình phát hiện ngôn ngữ và Trình 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. Các API của chúng tôi dựa trên Gemini Nano chưa hỗ trợ Chrome dành cho Android, iOS và ChromeOS.
  • Bộ nhớ: Ít nhất 22 GB trên ổ đĩa chứa hồ sơ Chrome của bạn.
  • GPU: VRAM phải lớn hơn 4 GB.
  • Mạng: Gói dữ liệu không giới hạn hoặc kết nối không đo lượng dữ liệu.

Bạn và người dùng làm việc với các tính năng mà bạn tạo đều phải đáp ứng những yêu cầu này trong quá trình phát triển.

Sử dụng Prompt API trong Tiện ích

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

Có hai hàm mở rộng mà bạn có thể sử dụng trong không gian tên LanguageModel:

  • availability() để kiểm tra khả năng của mô hình và xem 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 vào Chrome, nhưng mô hình này sẽ được tải xuống riêng vào lần đầu tiên một tiện ích 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 không đồng bộ LanguageModel.availability(). Thao tác này sẽ trả về một trong các phản hồi sau:

  • "unavailable" có nghĩa là quá trình triển khai không hỗ trợ các lựa chọn được yêu cầu hoặc hoàn toàn không hỗ trợ việc nhắc mô hình ngôn ngữ.
  • "downloadable" có nghĩa là quá trình triển khai hỗ trợ các lựa chọn được yêu cầu, nhưng sẽ phải tải một nội dung nào đó xuống (ví dụ: chính mô hình ngôn ngữ hoặc một quy trình tinh chỉnh) trước khi có thể tạo một phiên bằng các lựa chọn đó.
  • "downloading" có nghĩa là quá trình triển khai hỗ trợ các lựa chọn được yêu cầu, nhưng sẽ cần 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 lựa chọn đó.
  • "available" có nghĩa là quá trình triển khai hỗ trợ các lựa chọn được yêu cầu mà không cần tải xuống bất kỳ nội dung mới nào.

Để 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.availability() không đồng bộ. Nếu phản hồi cho availability()'downloadable', thì 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}%`);
    });
  },
});

Các chức 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ị top-K mặc định (mặc định: 3).
  • maxTopK: Giá trị tối đa K hàng đầu (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 một đối tượng lựa chọn không bắt buộc. Các giá trị mặc định cho những 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 một trường signal, cho phép bạn truyền một 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 câu lệnh 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 đó, ví dụ: cho phép người dùng tiếp tục một phiên đã lưu trữ 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 sử dụng 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}`);

Tính liên tục của phiên

Mỗi phiên sẽ theo dõi bối 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

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

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

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

Đưa ra câu lệnh 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 phải là luồng

Nếu muốn có kết quả ngắn gọn, bạn có thể dùng hàm prompt(). Hàm này sẽ trả về phản hồi ngay 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 nhận được phản hồi dài hơn, bạn nên sử dụng hàm promptStreaming(). Hàm này cho phép bạn hiển thị kết quả một phần khi kết quả đế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 câu lệnh

Cả prompt()promptStreaming() đều chấp nhận tham số thứ hai không bắt buộc có 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 mộ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ỷ, phiên đó sẽ không dùng được nữa và mọi hoạt động thực thi đang diễn ra sẽ bị huỷ. Bạn nên giữ phiên nếu dự định thường xuyên nhắc mô hình vì việc tạo phiên có thể mất một khoảng 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."
);

Bản minh hoạ

Để kiểm thử Prompt API trong Tiện ích của Chrome, hãy cài đặt tiện ích minh hoạ. Bạn có thể xem mã nguồn của tiện ích trên GitHub.

Giao diện minh hoạ cho Prompt API

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

Ý kiến của bạn có thể ảnh hưở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 và tất cả các API AI tích hợp.