使用 Prompt API 构建支持本地和离线的聊天机器人

发布时间:2024 年 1 月 13 日

本系列关于 LLM 聊天机器人的三篇文章至此结束。前面的文章介绍了客户端 LLM 的强大功能,并详细介绍了如何将 WebLLM 赋能的聊天机器人添加到待办事项应用

一些较新的设备在出厂时就内置了大型语言模型和其他 AI 模型。Chrome 提议将内置 AI API 集成到浏览器中,目前有多个 API处于不同的开发阶段。其中许多 API 都正在接受标准化流程,以便网站可以使用相同的实现和模型来实现最佳推理性能。

Prompt API 就是其中之一。我们建议开发者注册抢先体验计划,以便使用该功能。接受后,您会收到有关如何在浏览器中启用 Prompt API 的说明。Prompt API 在Chrome 扩展程序源代码试用版中提供,因此您可以面向真实的扩展程序用户测试此 API。

共享模型访问权限

Prompt API 的行为与 WebLLM 类似。不过,这次没有模型选择(您必须使用随浏览器提供的 LLM)。启用内置 AI 后,Chrome 会将 Gemini Nano 下载到浏览器中。然后,此模型可在多个来源中共享,并以最高性能运行。有开发者在 GitHub 问题中请求添加模型选择功能。

设置对话

您可以完全按照相同的方式发起消息对话,但 Prompt API 还提供了一种简写语法来指定系统提示。对 self.ai.languageModel 属性使用 create() 方法启动语言模型会话:

const session = await self.ai.languageModel.create({
  systemPrompt: `You are a helpful assistant. You will answer questions related
  to the user's to-do list. Decline all other requests not related to the user's
  todos. This is the to-do list in JSON: ${JSON.stringify(todos)}`,
});

回答第一个问题

Prompt API 提供两种不同的方法来配置流式传输,而不是提供一个配置对象来配置流式传输:

  • prompt() 会返回完整字符串
  • promptStreaming() 会返回一个异步可迭代对象。与 WebLLM 不同,Prompt API 会返回完整的字符串响应,因此您无需自行组合结果。

如果之前没有其他来源触发过模型下载,那么在 Gemini Nano 下载到您的浏览器时,您的第一个请求可能需要很长时间。如果模型已经可用,则推理会立即开始。

const stream = session.promptStreaming("How many open todos do I have?");
for await (const reply of stream) {
  console.log(reply);
}

演示

摘要

将 LLM 集成到应用中可以显著提升用户体验。虽然云服务可提供更高质量的模型和出色的推理性能,且不受用户设备的影响,但与基于云的替代方案相比,设备端解决方案(例如 WebLLM 和 Chrome 的 Prompt API)支持离线使用、可提升隐私保护水平并节省成本。试用这些新 API,让您的 Web 应用变得更智能。