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

发布时间:2025 年 1 月 13 日

这是关于 LLM 聊天机器人的三篇系列文章的最后一篇。之前的文章讨论了客户端 LLM 的强大功能,并引导您完成向待办事项列表应用程序添加WebLLM 驱动的聊天机器人

一些较新的设备搭载了大型语言模型和其他 AI 模型。Chrome 已经提议将内置 AI API 集成到浏览器中,并在不同的开发阶段提供多个 API。其中许多 API 正在经历标准化流程,以便网站可以使用相同的实现和模型来实现最大的推理性能。

Prompt API 就是这样一种 AI API。要使用它,我们鼓励开发者注册Early Preview Program。一旦被接受,您将收到关于如何在浏览器中启用 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 应用程序更智能。