Chrome内置AI工具:Prompt API详解与实战指南
引言:浏览器里的AI助手,你用过吗?
当我们谈论AI应用时,总会想到需要强大服务器支持的云端模型,或是需要复杂配置的本地部署工具。但现在,Chrome浏览器正在悄悄改变这一点——通过Prompt API,你可以直接在浏览器中调用Gemini Nano模型,处理文本、图像和音频输入,生成智能响应。
这项实验性功能(目前在Chrome 138及以上版本的Origin Trial中)让Web开发者无需依赖外部AI服务,就能为网页添加智能化功能。无论是让网站根据内容回答用户问题,还是自动分类新闻文章,甚至分析用户上传的图片,都能在本地完成。
接下来,我们就详细聊聊Prompt API是什么、如何使用,以及它能为你的Web应用带来哪些可能性。
一、什么是Prompt API?
简单来说,Prompt API是Chrome浏览器内置的一项AI功能,它让开发者可以通过JavaScript API调用Gemini Nano模型,在用户的本地设备上处理自然语言、图像和音频输入,并生成文本输出。
和传统的云端AI服务相比,它的核心特点在于“本地运行”——所有的AI计算都在用户的浏览器中完成,不需要将数据上传到云端。这不仅能减少网络延迟,还能更好地保护用户隐私。
Prompt API能做什么?
根据官方文档,它的应用场景非常广泛:
-
AI驱动的搜索:让网站能根据自身内容回答用户的问题(比如电商网站自动解答“这款产品的保修期是多久”)。 -
个性化内容:动态分类新闻、文章或商品,帮助用户快速筛选感兴趣的内容。 -
多模态处理:结合文本、图像和音频输入,完成描述生成、转录或分类(比如让用户上传身份证照片,自动识别关键信息)。
二、使用Prompt API前,你的设备需要满足这些条件
虽然Prompt API已经内置在Chrome中,但它对设备硬件有一定要求。如果你是开发者,在测试或部署相关功能时,需要确保自己和用户的设备符合以下标准:
要求类型 | 具体标准 |
---|---|
操作系统 | Windows 10/11、macOS 13+(Ventura及以上)、Linux(暂不支持Android、iOS、ChromeOS) |
存储空间 | 至少22GB空闲空间(模型大小可能随更新变化,不足10GB时会自动删除) |
GPU | 显存严格大于4GB |
网络 | 无流量限制的连接(Wi-Fi或以太网) |
如果你想查看当前模型的具体大小,可以在Chrome浏览器中访问chrome://on-device-internals
,进入“模型状态”查看详细信息。
三、从零开始使用Prompt API:步骤详解
使用Prompt API的过程可以分为“检查可用性”“创建会话”“与模型交互”三个核心步骤。下面我们一步步展开说明。
1. 第一步:检查模型是否可用
在调用任何功能前,首先需要确认当前设备是否支持Prompt API,以及模型是否已经准备就绪。这一步可以通过LanguageModel.availability()
方法完成。
// 检查模型可用性
const availability = await LanguageModel.availability();
console.log(availability); // 可能返回"unavailable"、"downloadable"、"downloading"或"available"
这个方法会返回四种状态:
-
"unavailable"
:设备不支持,或浏览器版本太低。 -
"downloadable"
:支持该功能,但需要先下载模型。 -
"downloading"
:模型正在下载中。 -
"available"
:模型已准备好,可以直接使用。
只有当状态为"available"
时,才能正常创建会话并使用模型。
2. 第二步:创建会话,触发模型下载(如果需要)
如果模型可用或可下载,下一步就是通过LanguageModel.create()
方法创建会话。这个方法会自动触发模型下载(如果尚未下载),并返回一个会话对象,后续的交互都通过这个对象完成。
基础用法:创建默认会话
// 创建一个默认配置的会话
const session = await LanguageModel.create();
进阶用法:监听下载进度
如果模型需要下载(状态为"downloadable"
),可以通过monitor
参数监听下载进度,提升用户体验:
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
// 显示下载进度(e.loaded为0-1之间的小数)
console.log(`模型下载中:${Math.round(e.loaded * 100)}%`);
});
},
});
自定义会话参数
你还可以通过参数自定义模型的输出风格,主要涉及两个核心参数:
-
topK
:控制模型选择候选答案的范围(默认3,最大8)。数值越小,答案越集中;数值越大,可能的结果越多样。 -
temperature
:控制输出的随机性(默认1.0,范围0.0-2.0)。0.0接近确定性输出,2.0则更具创造性。
// 获取模型默认参数
const params = await LanguageModel.params();
// 创建一个随机性稍高的会话
const customSession = await LanguageModel.create({
temperature: Math.min(params.defaultTemperature * 1.5, 2.0), // 不超过最大值2.0
topK: params.defaultTopK
});
中止会话创建
如果需要在会话创建过程中取消(比如用户关闭了页面),可以使用AbortController
:
const controller = new AbortController();
// 绑定一个按钮,点击时中止会话创建
stopButton.onclick = () => controller.abort();
// 创建会话时传入signal
const session = await LanguageModel.create({
signal: controller.signal
});
3. 第三步:与模型交互——发送提示并获取结果
创建会话后,就可以通过prompt()
或promptStreaming()
方法与模型交互了。两者的区别在于:prompt()
会等待完整结果返回,适合短文本;promptStreaming()
会流式返回结果,适合长文本(如文章生成)。
发送简单文本提示
// 非流式输出:适合短回答
const result = await session.prompt("用三句话介绍一下Prompt API");
console.log(result);
// 流式输出:适合长内容,逐步显示结果
const stream = session.promptStreaming("写一篇关于本地AI的短文章");
for await (const chunk of stream) {
// 逐段显示内容(比如添加到网页的<div>中)
document.getElementById("output").textContent += chunk;
}
给模型提供上下文:初始提示
如果需要让模型“记住”之前的对话或系统指令,可以在创建会话时通过initialPrompts
参数提供上下文:
const session = await LanguageModel.create({
initialPrompts: [
{ role: "system", content: "你是一个专注于美食推荐的助手,只说中文" },
{ role: "user", content: "我喜欢辣的食物" },
{ role: "assistant", content: "那你可能会喜欢川菜或湘菜" }
]
});
// 后续提问会基于上述上下文
const result = await session.prompt("有什么具体的菜推荐吗?");
console.log(result); // 模型会推荐辣的川菜/湘菜菜品
控制模型输出格式:传递JSON schema
如果需要模型返回结构化数据(比如JSON),可以通过responseConstraint
参数指定JSON schema,确保输出格式符合要求:
// 定义一个评分 schema(0-5的数字)
const schema = {
"type": "object",
"properties": {
"rating": { "type": "number", "minimum": 0, "maximum": 5 }
},
"required": ["rating"]
};
// 让模型根据评论生成评分
const review = "这家店的披萨很美味,服务也很好,但等待时间有点长";
const result = await session.prompt(
`根据这条评论,给出0-5的评分:${review}`,
{ responseConstraint: schema }
);
// 解析结果
const { rating } = JSON.parse(result);
console.log(`评分:${rating}`);
4. 会话管理:高效使用模型资源
每个会话都会占用一定的设备资源,且能处理的令牌数量有限。合理管理会话可以提升性能,避免资源浪费。
查看会话使用情况
// 查看输入令牌的使用量和上限
console.log(`已使用输入令牌:${session.inputUsage}/${session.inputQuota}`);
克隆会话
如果需要基于现有会话的初始提示创建新会话(重置对话上下文但保留系统指令),可以使用clone()
方法:
// 克隆现有会话,保留initialPrompts但清空对话历史
const clonedSession = await session.clone();
终止会话
不再使用会话时,调用destroy()
释放资源:
// 销毁会话,释放内存
await session.destroy();
四、多模态功能:不止处理文本,还能看懂图片、听懂声音
从Chrome 138 Canary版本开始,Prompt API支持图像和音频输入,让应用能处理更丰富的内容。
1. 处理图像输入
你可以让模型分析图片内容,生成描述、分类结果或对比分析。示例如下:
// 创建支持图像输入的会话
const session = await LanguageModel.create({
expectedInputs: [{ type: "image" }]
});
// 获取图片(可以是本地文件或网络图片)
const referenceImage = await (await fetch("/sample.jpg")).blob();
const userImage = document.querySelector("input[type='file']").files[0];
// 让模型对比两张图片
const result = await session.prompt([
{
role: "user",
content: [
{ type: "text", value: "对比这两张图片,说明它们的异同" },
{ type: "image", value: referenceImage },
{ type: "image", value: userImage }
]
}
]);
console.log(result);
2. 处理音频输入
模型可以转录音频内容,或将音频中的信息转化为文本。比如处理用户的语音输入:
// 创建支持音频输入的会话
const session = await LanguageModel.create({
expectedInputs: [{ type: "audio" }]
});
// 假设通过麦克风录制了10秒音频,得到audioBlob
const audioBlob = await recordMicrophone(10);
// 让模型转录音频内容
const result = await session.prompt([
{
role: "user",
content: [
{ type: "text", value: "将这段音频转写成文字" },
{ type: "audio", value: audioBlob }
]
}
]);
console.log("转录结果:", result);
五、Prompt API的应用场景:这些功能可以直接落地
结合文本、图像和音频处理能力,Prompt API能实现很多实用功能。以下是几个典型场景:
1. 文本处理场景
-
内容总结:自动总结用户上传的文档、酒店评论或新闻文章。 -
结构化提取:从产品描述中提取价格、规格等信息,生成表格。 -
智能分类:根据内容给文章打标签(如“科技”“娱乐”),方便用户筛选。
2. 图像处理场景
-
图片描述生成:为盲人群体生成图片的文字描述,提升网站可访问性。 -
物品识别:让用户上传身份证照片,自动识别姓名、身份证号等信息。 -
风格对比:对比用户上传的设计图与参考图,找出差异点。
3. 音频处理场景
-
语音转文字:在聊天应用中,自动转录用户发送的语音消息。 -
内容过滤:分析音频文件,识别是否为现场录音或音乐。 -
指令识别:让用户通过语音下达指令(如“搜索最近的咖啡店”),模型转写后触发相应功能。
六、使用注意事项:避免这些“坑”
虽然Prompt API功能强大,但在使用时需要注意以下几点,避免出现问题:
-
权限限制:默认情况下,只有顶层窗口和同源iframe能使用该API。如果需要在跨域iframe中使用,需添加权限设置:
allow="language-model"
。 -
Web Workers不支持:目前Prompt API只能在主文档或iframe中运行,不能在Web Workers中使用,因此密集型操作可能会影响页面流畅度。
-
隐私与合规:必须遵守Google的AI使用政策,确保用户数据(尤其是图像、音频等敏感内容)的安全,避免滥用。
-
性能优化:频繁创建会话会消耗大量资源,建议复用会话;如果不需要保留上下文,可使用
clone()
方法重置会话,而非重新创建。 -
存储空间管理:当设备空闲空间不足10GB时,模型会自动删除。需要提示用户保持足够的存储空间,避免反复下载。
七、FAQ:你可能关心的问题
1. Prompt API需要联网吗?
模型下载时需要联网(无流量限制的网络),但下载完成后,所有计算都在本地进行,无需联网即可使用。
2. 哪些浏览器支持Prompt API?
目前只有Chrome浏览器(138及以上版本,处于Origin Trial阶段)支持,其他浏览器暂不支持。
3. 模型下载需要多久?
取决于网络速度,模型大小约22GB,建议在Wi-Fi环境下下载。可以通过downloadprogress
事件实时显示进度。
4. 移动设备能使用吗?
暂时不能。目前仅支持Windows、macOS和Linux桌面系统,Android、iOS和ChromeOS暂不支持。
5. 如何查看模型是否已下载?
在Chrome中访问chrome://on-device-internals
,进入“模型状态”即可查看模型是否已下载及当前大小。
6. 会话的上下文能保存多久?
每个会话会保留对话上下文,直到上下文窗口满(受令牌数量限制)或会话被销毁。如果需要长期保存对话,需手动将历史记录存储在本地(如localStorage),并在新会话中通过initialPrompts
恢复。
结语:本地AI,为Web应用打开新可能
Prompt API的出现,让Web应用无需依赖云端AI服务,就能在用户本地设备上实现智能化功能。这不仅降低了开发成本(无需搭建服务器),还提升了响应速度和隐私安全性。
虽然目前它还处于实验阶段,对设备硬件有一定要求,但随着浏览器和AI模型的不断优化,未来我们可能会看到更多基于本地AI的创新应用——从智能客服到内容分析,从多模态交互到个性化推荐,本地AI将成为Web开发的重要工具。
如果你是Web开发者,不妨在符合条件的设备上测试一下Prompt API,探索它能为你的应用带来哪些新功能。如果在使用中遇到问题,可以通过Chrome的bug报告系统或GitHub代码库反馈,帮助完善这项技术。