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

发布时间:2025 年 1 月 13 日

本教程是关于 LLM 聊天机器人的三部分系列教程中的最后一部分。之前的文章讨论了客户端 LLM 的强大功能,并引导您完成了向待办事项列表应用添加由 WebLLM 提供支持的聊天机器人的过程。

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

Prompt API 就是这样一种 AI API。如需使用该功能,建议开发者报名参加早期预览版计划。接受后,您将收到有关如何在浏览器中启用 Prompt API 的说明。Prompt API 已在 Chrome 扩展程序的源试用中提供,因此您可以针对真实的扩展程序用户测试此 API。

共享模型访问权限

Prompt API 的行为与 WebLLM 类似。不过,这次没有模型选择功能(您必须使用浏览器随附的 LLM)。启用内置 AI 后,Chrome 会将 Gemini Nano 下载到浏览器中。然后,该模型可以跨多个来源和运行共享,从而实现最佳性能。有一项 GitHub 问题是开发者请求添加模型选择功能。

设置对话

您可以使用完全相同的方式开始消息对话,但 Prompt API 还提供了一种简写语法来指定系统提示。使用 LanguageModel 接口上的 create() 方法启动语言模型会话:

const session = await LanguageModel.create({
  initialPrompt: [
    {
      type: 'system',
      content: `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 应用更智能。