玩玩浏览器内置 LLM 的 API

1,440 阅读3分钟

欢迎来到 Jax 的专栏「Web AI 进化录」,快来了解 Web 端侧智能的方方面面!

转载请联系作者 Jax。

上一篇文章介绍了开启 Chrome 内置 AI 的方法,这次让我们来看看内置 AI 都能做什么。我们将以新增的全局对象为切入点,一探 Chrome AI API 之究竟。

你可以先按照上面的教程配置好运行环境,跟随本文思路,边读边调试代码,这样效果更佳。

当前阶段,这些 API 仅可用于做一些粗糙原型,不一定会以正式版发布。

官方希望借助这些 API 探索更多应用范式,以形成针对特定任务的 API(如翻译 API)。

全局对象

window 对象上新增了 aimodel 两个成员,但二者实际上是等价的。

const isEqual = window.ai === window.model
console.log(isEqual) // true

ai 对象中,具有以下六个方法

  • canCreateGenericSession
  • canCreateTextSession
  • createGenericSession
  • createTextSession
  • defaultGenericSessionOptions
  • defaultTextSessionOptions

官方称之为 Prompt API,下面我们将逐一了解它们。

可用性:canCreate

canCreateGenericSessioncanCreateTextSession 都是用来检测设备和模型的可用性的,它们在 Promise 中返回一个字符串,其值可能是:

  • readily:模型已加载,且硬件够用
  • after-download:模型未加载,但设备够用
  • no:设备不符合条件
const canCreate = await ai.canCreateGenericSession()
console.log(canCreate) // 'readily'

session

执行 createTextSession()createGenericSession() 都会生成一个 AITextSession 实例,具有下列方法:

  • prompt:接收提示词,同步返回结果
  • promptStreaming:接收提示词,流式返回结果,生成一个 ReadableStream
  • destroy
  • execute:与 prompt 作用相同

promptStreaming 为例,我们来看看如何通过 API 与内置 LLM 交互:

const session = await ai.createTextSession()
const steam = await session.promptStreaming('Write a joke')
const reader = steam.getReader()
while (true) {
  const { done, value } = await reader.read()
  if (done) break
  console.log('Chunk:', value)
}
session.destroy()

img_v3_02br_ed30a051-9a8d-469e-a0a9-0ffb54bda7dg.jpg

可以看到,在流式模式下,返回结果是逐步生成的,并以若干片段的形式组成一串流式数据。但奇怪的是,Chrome 并没有真的把每个片段单独写到流里,而是进行了增量拼接。

参数 sessionOptions

执行 defaultTextSessionOptions()defaultGenericSessionOptions(),会返回相同的默认参数:

const params = await ai.defaultTextSessionOptions()
// params:
// {
//   temperature: 0.800000011920929,
//   topK: 3
// }

在创建 session 时,可以通过设置 topKtemperature 来调控生成结果的质量和风格。

temperature 的一般取值范围是 0~1,值越小,生成内容越严谨,反之则越放飞。

topK 是一个正整数,代表生成时的 token 可选数量。

const session = await ai.createTextSession({
  temperature: 1,
  topK: 100
})

OK,以上就是目前 Chrome 开放出来的 API,虽然还很简陋,但非常适合我们用来试玩 LLM、调试 prompt 技巧。

如果你觉得在 Chrome 控制台执行 prompt 太难受了,我写了个对话 GUI 你可以试试:rejax.fun/chrome-ai/p…

我是 Jax,在畅游 Web 技术领域的第 7 年,我仍然是坚定不移的 JavaScript 迷弟,Web 开发带给我太多乐趣。如果你也喜欢 Web 技术,或者想讨论本文内容,欢迎来聊!你可以通过下列方式找到我:

掘金:juejin.cn/user/113435…

GitHub:github.com/JaxNext

微信:JaxNext