Skip to content

Chrome 浏览器内置 AI 开发版开启攻略

配置要求

目前仅有桌面端

官方原文链接(英文)为准,本篇2024/6/18日更新

Windows

  • 操作系统版本: 10, 11

MacOS

  • 操作系统版本: ≥ 13 (Ventura)

Linux

  • 操作系统版本: 未指定

通用要求

  • 存储空间: 在包含Chrome配置文件的卷上至少有22 GB的存储空间。
  • GPU: 集成GPU或独立GPU(例如显卡)。
  • 显存: 4 GB(最小值)

存储空间不一定要22GB

模型实际上需要的存储空间少得多,这只是为了确保有充足的存储余量。 目前(2024/6/8),模型大小大概为2GB。

配置

前提条件

  1. 确认已阅读 Google 的生成式 AI 禁止使用政策
  2. 下载 Chrome 开发者频道(或 金丝雀频道),并确认您的版本等于或高于 127.0.6512.0。
  3. 检查您的设备是否符合要求
    • 不要跳过此步骤,特别是确保您有至少20GB的可用存储空间
  4. 确保您的操作系统语言设置为英语(美国)

启用 Gemini Nano 和 Prompt API

按照以下步骤启用 Gemini Nano 和 Prompt API 标志以进行本地实验:

  1. 在 Chrome 中打开一个新标签页,转到 chrome://flags/#optimization-guide-on-device-model
  2. 选择“Enabled BypassPerfRequirement”
    • 这将绕过可能阻碍您设备下载 Gemini Nano 的性能检查。
  3. 转到 chrome://flags/#prompt-api-for-gemini-nano
  4. 选择“Enabled”
  5. 重新启动 Chrome。

确认 Gemini Nano 的可用性

  1. 打开开发者工具,在控制台中发送 await window.ai.canCreateTextSession(); 。如果返回“readily”,那么您就准备好了。
    • 否则,重新启动 Chrome 并继续以下步骤。
  2. 在 Chrome 中打开一个新标签页,转到 chrome://components
  3. 确认 Gemini Nano 是否可用或正在下载
    • 您需要看到 Optimization Guide On Device Model 显示的版本大于或等于 2024.5.21.1031
    • 如果没有列出版本,请点击“Check for update”以强制下载。
  4. 一旦模型下载并达到上述版本以上,打开开发者工具,在控制台中发送 await window.ai.canCreateTextSession(); 。如果返回“readily”,那么您就准备好了。
    • 否则,重新启动,等待一段时间,然后从步骤 1 重新开始。
    • 如果仍然失败,请参阅故障排除部分

开发者工具控制台调用大模型相关API

js
const canCreate = await window.ai.canCreateTextSession();
// canCreate 的值将是以下之一:
// * "readily": 模型可在设备上使用,因此创建会很快完成
// * "after-download": 模型在设备上不可用,但设备有能力,
//   因此创建会话将启动下载过程(可能需要一段时间)。
// * "no": 该设备不可用该模型。

if (canCreate !== "no") {
  const session = await window.ai.createTextSession();

  // 提示模型并等待整个结果返回。
  const result = await session.prompt("给我写一首诗");
  console.log(result);

  // 提示模型并流式传输结果:
  const stream = session.promptStreaming("给我写一首超长的诗");
  for await (const chunk of stream) {
    console.log(chunk);
  }
}

在线演示

⚠️

需要你完成前面步骤、开启API

Chrome本地大模型在线演示

API 总览

示例代码可以参考开发者工具控制台调用大模型相关API

会话选项

每个会话可以通过 topK 和 temperature 进行定制。这些参数的默认值可以通过 window.ai.defaultTextSessionOptions() 返回。

终止会话

如果您不再需要会话,请调用 destroy() 以释放资源。当会话被销毁后,它将无法再使用,任何正在进行的执行将被中止。

js
await session.prompt(`
  您是一位专门从事服装选择的友好且乐于助人的助手。
`);

session.destroy();

// 该 promise 将被拒绝,并解释会话已被销毁。
await session.prompt(`
  今天我该穿什么?天气晴朗,我在 T 恤和 Polo 衫之间犹豫不决。
`);

控制序列

字符序列 <ctrl23> 是 Gemini Nano 的控制序列。它帮助模型理解模拟交互的回合以及何时应该响应。该序列应直接在提示中使用(有关详细信息,请参阅 Prompt 101 部分)。

目前,控制序列 <ctrl23> 由 Prompt API 自动添加提示的末尾

然而,对于one shot[1]或few shots[2],最好在每个例子末尾添加控制序列<ctrl23>。请参阅这些示例

异常

Prompt API 可能会从 AI 运行时收到错误。请参阅本部分以了解可能的错误及其如何映射到 DOMExceptions。

注意事项

canCreateTextSession() 的“after-download”状态

after-download”状态和行为不受支持。API 不会触发模型下载。相反,Chrome 会触发下载,要么作为 chrome://flags 状态变化的一部分,要么因为其他设备上的 AI 功能。

流式传输

目前,promptStreaming() 返回的 ReadableStream 的块会逐步构建。

例如,以下代码记录的序列是 "Hello," "Hello world," "Hello world I am," "Hello world I am an AI."

js
for await (const chunk of stream) {
  console.log(chunk);
}

这不是预期的行为。我们打算与平台上的其他流式 API 对齐,其中块是单个长流的连续部分。这意味着输出将是 "Hello", " world", " I am", " an AI" 的序列。

目前,为了实现预期行为,您可以实现以下代码:

js
let result = '';
let previousLength = 0;
for await (const chunk of stream) {
  const newContent = chunk.slice(previousLength);
  console.log(newContent);
  previousLength = chunk.length;  
  result += newContent;
}
console.log(result);

会话持久性和克隆

尽管有一个名为 AITextSession 的对象,但尚未实现持久性。发送到模型的任何信息都不会保留,这意味着每次必须重新发送整个对话。换句话说,每次调用 prompt()promptStreaming() 是独立的。

一旦实现了持久性,我们打算允许会话克隆。这意味着可以设置一个具有基本上下文的会话,并提示模型,而无需重复。

无痕模式和访客模式

Prompt API 的实现目前不支持无痕模式访客模式。这是由于 AI 运行时层的依赖关系,并不打算作为永久限制。

企业

如果设置了 GenAILocalFoundationalModelSettings 为“不要下载模型”,则此 API 将不起作用。

Workers

最初,Prompt API 仅在专用 Workers中可用。以后可能会添加对 Shared Workers 和 Service Workers 的支持。


  1. One shot,向模型提供单个示例以期模型学习并生成响应的提示。 ↩︎

  2. Few shots,向模型提供几个示例(通常为两到五个)以帮助其生成更准确的响应。 ↩︎