深度探索 | 新版 Chrome 内置 AI 模型 Gemini Nano 使用指南

公众号:kate人不错

Gemini Nano 简介

Gemini Nano 是 Gemini 模型系列中的最小版本,专门为在设备端运行而优化。它内置于 Chrome 浏览器中,可以在大多数现代台式机和笔记本电脑上本地运行。可用于执行摘要、翻译、写作等任务。完全支持本地运行和离线使用,无需额外费用。

Gemini Nano默认的上下文窗口设置为1024个令牌。对于Gemini Nano,理论上的最大值是32k,但上下文大小和性能之间存在权衡。

在设备上运行的好处

  • 对敏感数据的本地处理
  • 离线 AI 使用

安装和配置

系统要求

需要128.0.6545.0 版本或更高版本的Chrome Canary或Chrome Dev。

Chrome在 127 和 128 版本之间出现了一个回退问题,所以建议使用这个版本或更高版本。

此外,Chrome 下载和运行 Gemini Nano 还需要满足以下条件。

方面 Windows MacOS Linux
操作系统 10, 11 ≥ 13 (Ventura) 未指定
存储器 包含您的 Chrome 配置文件的卷上至少有 22 GB 空间。请注意,模型实际所需存储空间要少得多,这只是为了有充足的存储余量。
GPU 集成 GPU,或独立 GPU(如显卡)。
显存 4 GB(最低)
网络连接 非计量连接

尚不支持: Chrome for Android、Chrome for iOS、Chrome for ChromeOS

安装步骤

启用 Gemini Nano 和 Prompt API

  1. 在 Chrome 中打开一个新标签页,访问 chrome://flags/#optimization-guide-on-device-model

  2. 选择"启用 BypassPerfRequirement"

  3. 这将绕过性能检查,这些检查可能会妨碍 Gemini Nano 下载到您的设备上。

  4. 访问 chrome://flags/#prompt-api-for-gemini-nano

  5. 选择"启用"

  6. 重新启动 Chrome。

确认 Gemini Nano 的可用性

  1. 打开开发者工具,在控制台中输入 await window.ai.canCreateTextSession();。如果返回 "readily",则表示一切就绪。
    • 否则,强制 Chrome 识别您想使用此 API。为此,打开开发者工具,在控制台中输入await window.ai.createTextSession();
  2. 重新启动 Chrome ,打开一个新标签页,访问 chrome://components
  3. 确认 Gemini Nano 是否可用或正在下载
    • 您需要看到 Optimization Guide On Device Model 的版本号大于或等于 2024.5.21.1031

    • 如果没有列出版本号,点击"检查更新"以强制下载。

故障排除方法

部分用户在组件里找不到"Optimization Guide On Device Model ",有些用户反馈,以下步骤可以使它显示出来:

  • 尝试将chrome//flags/#optimization-guide-on-device-model设置为"启用"而不是"启用并绕过性能要求",然后重新尝试设置步骤。

我在实际设置中,下载了最新的Chrome Dev和Chrome Canary,在完成启用 Gemini Nano 和 Prompt API后,重启Chrome后在components都无法找到Optimization Guide On Device Model,重复了2次也不行,后来将test third party cookie phaseout设置为enabled后等了几分钟,在Chrome Canary里看到了Optimization Guide On Device Model。

模型下载延迟

浏览器可能不会立即开始下载模型。如果您的计算机满足所有要求,但在调用window.ai.createTextSession()后在chrome://components上没有看到模型下载开始,并且优化指南设备内模型显示版本0.0.0.0 ,请保持浏览器打开几分钟,等待调度程序开始下载。

我的体验

下图是我写的几个脚本,和gemini对话。

在写脚本过程中,我多次测试,调整提示词,topK 和 temperature,发现Gemini Nano回复不稳定,Nano这个模型还是太小了。

折腾了很久,后来看到同类产品也有这样的问题。

我也找到几个插件,推荐下面的插件:

chromewebstore.google.com/detail/gemi...

这个插件也不完美,但是目前对比了4、5个产品后较稳定的。

aichrome.net/

这个网站可以检测你的浏览器是否支持Chrome内置AI。

使用指南

基本使用示例

javascript 复制代码
// 首先检查是否可以创建会话,这取决于模型的可用性和设备的特征。
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);
}

这段代码展示了如何使用 Gemini Nano API 创建文本会话并生成内容。它首先检查是否可以创建会话,然后根据结果决定是否继续。如果可以创建会话,它会发送一个提示(在这个例子中是"给我写一首诗"),并等待模型生成完整的响应。最后,它将结果打印到控制台。

流式传输示例

javascript 复制代码
const canCreate = await window.ai.canCreateTextSession();

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

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

这段代码展示了如何使用 Gemini Nano API 的流式传输功能。以下是代码的主要步骤:

  1. 首先检查是否可以创建文本会话。
  2. 如果可以创建会话(即 canCreate 不等于 "no"),则创建一个文本会话。
  3. 使用 promptStreaming 方法向模型发送提示,这里要求模型写一首特别长的诗。
  4. 使用 for await...of 循环来逐块接收和处理模型生成的内容。
  5. 每收到一个数据块(chunk),就将其打印到控制台。

会话选项和管理

每个会话都可以通过 topK 和 temperature 进行自定义。这些参数的默认值可以通过 window.ai.defaultTextSessionOptions() 获取。

ini 复制代码
const defaults = await window.ai.defaultTextSessionOptions();
const session = await window.ai.createGenericSession(
    {
      temperature: 0.6, 
      topK: defaults.topK
    }
);

终止会话

如果不再需要某个会话,可以调用 destroy() 来释放资源。当会话被销毁后,它将不能再被使用,任何正在进行的执行也会被中止。如果您打算经常向模型提问,可能会希望保留会话,因为创建会话可能需要一些时间。

javascript 复制代码
await session.prompt(`
  你是一个友好、乐于助人的助手,专门提供服装选择建议。
`);

session.destroy();

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

流式传输

目前,promptStreaming() 返回一个 ReadableStream,其中的数据块是逐步构建的。

例如,以下代码会记录一个序列,如 "Hello,"、"Hello world,"、"Hello world I am,"、"Hello world I am an AI."

arduino 复制代码
for await (const chunk of stream) {
  console.log(chunk);
}

这不是预期的行为。谷歌打算与平台上的其他流式 API 保持一致,即数据块是单个长流的连续部分。这意味着输出应该是类似 "Hello"、" world"、" I am"、" an AI" 的序列。

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

ini 复制代码
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);

从 Chrome 128.0.6606.0 开始,在会话期间发送给模型的信息现在会被保留。您不再需要每次都重新发送整个对话。换句话说,每次调用 prompt() 或 promptStreaming() 都是连续交互的一部分。请注意,上下文窗口会随着每次提示不断填充,最终会开始淘汰最旧的标记。如果您想重新开始,可能需要调用 destroy() 或创建一个新的会话。

提示建议

应该做的 不应该做的
在提示中包含示例。 示例可以为模型提供清晰的方向,帮助其生成更符合预期的输出。即使是一个简短的示例也能显著提升结果质量。 避免有对错之分的用例。 由于模型的局限性,它可能无法准确回答某些知识性问题。因此,设计功能时应考虑到这些局限性,避免依赖完美答案。
添加规则。 明确的规则能提升输出的质量和一致性。例如,规定语调或分类标准。 避免绕过用户的用例。 模型不一定总能给出令人满意的答案,因此应将其作为支持工具,而非替代方案。
添加角色。 指定角色可以使输出更符合场景需求,如要求模型模拟某种身份。 避免自定义参数。 除非有明确需求,否则应保持默认参数设置,因为更改参数可能导致不可预见的输出。
指定输出语言。 如果希望模型以非英语语言回答,应明确指出。这有助于获得更符合预期的多语言输出。

如何使用控制序列

控制序列用于帮助模型理解对话回合及其何时应回应。以下是如何使用它的示例:

单次提示示例

css 复制代码
"[示例文章的全文]
这篇文章的改写摘要是:[示例摘要]<ctrl23>

[要summarize的文章全文]
这篇文章的改写摘要是:"

少量示例提示

css 复制代码
"[示例文章#1的全文]
这篇文章的改写摘要是:[示例摘要#1]<ctrl23>

[示例文章#2的全文]
这篇文章的改写摘要是:[示例摘要#2]<ctrl23>

[示例文章#3的全文]
这篇文章的改写摘要是:[示例摘要#3]<ctrl23>

[要summarize的文章全文]
这篇文章的改写摘要是:"

异常处理和故障排除

方法 DOM异常 错误消息 注释
All methods InvalidStateError 执行上下文无效。 JS上下文无效(例如,已分离的iframe)。解决方法:确保从有效的JS上下文调用API。
createTextSession, defaultTextSessionOptions OperationError 模型执行服务不可用。 解决方法:重试,可能需要重启Chrome。
When streaming a response UnknownError 发生未知错误:<错误代码> 解决方法:重试,可能需要重启Chrome。
NotSupportedError 请求无效。
UnknownError 发生了其他一般性故障。
NotReadableError 响应被禁用。
AbortError 请求被取消。
prompt, promptStreaming InvalidStateError 模型执行会话已被销毁。 这发生在会话被销毁后调用prompt或promptStreaming时。解决方法:创建一个新会话。
createTextSession NotSupportedError 初始化新会话时必须同时指定topK和temperature,或者两者都不指定。 这发生在调用createTextSession时部分指定可选参数。解决方法:调用createTextSession时需要同时指定topK和temperature参数,或者都不指定。如果您只想更改一个参数的值,请使用defaultTextSessionOptions中的值。
InvalidStateError 无法创建会话。 如果canCreateTextSession返回"readily",则不应发生这种情况。解决方法:重试,可能需要重启Chrome。

更多内容,请查看 prompt API

github.com/explainers-...

未来应用场景

以下是未来 Chrome 内置 AI 模型能力提升后的一些潜在应用场景:

  1. 智能翻译插件:
    • 场景:浏览外语网页时,可以一键将整个页面翻译成用户的母语。
    • 优势:相比传统翻译,AI模型可以更好地理解上下文,提供更自然、更准确的翻译。
  2. 内容摘要生成器:
    • 场景:阅读长文章时,自动生成文章的关键点摘要。
    • 优势:帮助用户快速把握文章主旨,提高阅读效率。
  3. 智能搜索助手:
    • 场景:用户输入搜索词时,自动扩展和优化搜索查询。
    • 优势:帮助用户找到更相关的搜索结果,节省搜索时间。
  4. 代码解释器:
    • 场景:浏览技术博客或代码仓库时,自动解释复杂的代码段。
    • 优势:帮助开发者更快理解陌生的代码,提高学习和工作效率。
  5. 智能表单填充:
    • 场景:填写在线表单时,根据字段名称和类型自动推荐填写内容。
    • 优势:简化用户填写表单的过程,提高准确性和效率。
  6. 个性化内容推荐:
    • 场景:基于用户的浏览历史和当前页面内容,推荐相关的文章或产品。
    • 优势:提供更精准的个性化体验,提高用户粘性。
  7. 实时写作助手:
    • 场景:在浏览器中写作时,提供实时的写作建议和纠错。
    • 优势:提高写作质量,帮助用户更好地表达想法。
  8. 隐私保护助手:
  9. 场景:在用户填写敏感信息时,提醒可能的隐私风险并提供保护建议。
相关推荐
lanyancloud_JX22 分钟前
公路工程项目管理软件选型指南
人工智能
柠檬味拥抱23 分钟前
基于Rokid CXR-M和CXR-S SDK构建简易翻译助手
人工智能
用户51914958484524 分钟前
在VS Code IDE中通过LocalStack集成加速无服务器测试
人工智能·aigc
FreeCode31 分钟前
智能体化系统(Agentic System)开发面临的挑战及应对
人工智能·agent
leafff1231 小时前
Stable Diffusion在进行AI 创作时对算力的要求
人工智能·stable diffusion
Juchecar1 小时前
AI大模型商业模式分析
人工智能
leafff1231 小时前
Stable Diffusion进行AIGC创作时的算力优化方案
人工智能·stable diffusion·aigc
FIN66681 小时前
昂瑞微:以射频“芯”火 点亮科技强国之路
前端·人工智能·科技·前端框架·智能
Python智慧行囊1 小时前
图像处理(三)--开运算与闭运算,梯度运算,礼帽与黑帽
人工智能·算法·计算机视觉
亚马逊云开发者1 小时前
Amazon Generative AI Use Cases:“开箱即用的企业级生成式AI应用平台”
人工智能