nano所有文档的整合版 喂给AI或者自己看都可以
LanguageModel 与 Prompt API 开发指南目录概述LanguageModel 基础2.1 检查模型可用性2.2 创建会话2.3 模型参数2.4 模型提前准备优化冷启动Prompt API 使用3.1 基本 Prompt3.2 流式输出安全渲染3.3 多模态输入3.4 结构化输出会话管理4.1 初始提示4.2 上下文窗口4.3 克隆会话4.4 销毁会话性能优化5.1 结果缓存机制用户体验技巧6.1 动画过渡6.2 人工延迟6.3 导航历史与撤销硬件要求1. 概述Prompt API是 Chrome 内置 AI 的核心接口允许开发者向Gemini Nano模型发送自然语言请求。LanguageModel是 Prompt API 的具体实现提供会话管理和提示交互能力。核心优势特性说明隐私保护数据本地处理不上传云端低延迟本地推理响应迅速离线可用模型下载后无需网络多模态支持文本、图像、音频输入2. LanguageModel 基础2.1 检查模型可用性constavailabilityawaitLanguageModel.availability({expectedInputs:[{type:text,languages:[en]}],expectedOutputs:[{type:text,languages:[en]}],})// 返回: available | downloading | unavailable2.2 创建会话constsessionawaitLanguageModel.create({monitor(m){m.addEventListener(downloadprogress,(e){console.log(下载进度:${e.loaded*100}%)})},})2.3 模型参数扩展程序专用constparamsawaitLanguageModel.params()// { defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2 }constsessionawaitLanguageModel.create({temperature:params.defaultTemperature*1.2,topK:params.defaultTopK,})2.4 模型提前准备优化冷启动原理在用户触发 AI 功能前提前初始化会话避免冷启动延迟。最佳实践// ✅ 推荐页面加载时或用户首次交互时初始化letaiSessionnull// 页面加载完成后立即准备模型document.addEventListener(DOMContentLoaded,async(){// 等待用户交互必需consthandleFirstInteractionasync(){if(!aiSession){aiSessionawaitLanguageModel.create({initialPrompts:[{role:system,content:You are a helpful assistant.}],})}document.removeEventListener(click,handleFirstInteraction)}// 监听用户首次点击document.addEventListener(click,handleFirstInteraction,{once:true})})// 后续使用时会话已就绪asyncfunctiongetAIResponse(prompt){if(!aiSession){aiSessionawaitLanguageModel.create()}returnaiSession.prompt(prompt)}注意对于 Prompt API应在准备好initialPrompts后再调用create()因为初始提示只能在会话创建时设置。3. Prompt API 使用3.1 基本 PromptconstsessionawaitLanguageModel.create()constresultawaitsession.prompt(Write a poem about the sea)console.log(result)3.2 流式输出安全渲染安全注意所有 LLM 输出都应视为不可信内容需要进行清理。import*assmdfromstreaming-markdown// 设置 Sanitizer APIconstsanitizernewSanitizer({allowElements:[p,br,strong,em,a],allowAttributes:{href:[a]},})// 创建离屏缓冲区避免闪烁constbuffernewDocumentFragment()constparsersmd.parser_new(buffer)// 流式处理conststreamsession.promptStreaming(Write a detailed article)letchunksforawait(constchunkofstream){chunkschunk smd.parser_write(parser,chunk)// 使用 Sanitizer API 安全渲染constcleanFragmentsanitizer.sanitize(buffer)outputContainer.replaceChildren(cleanFragment)}关键要点使用 Sanitizer API 清理输出使用流式 Markdown 解析器如 streaming-markdown在离屏缓冲区构建 DOM避免闪烁不要直接设置innerHTML存在注入风险3.3 多模态输入支持文本、图像、音频输入constsessionawaitLanguageModel.create({expectedInputs:[{type:text,languages:[en]},{type:image},{type:audio}],expectedOutputs:[{type:text,languages:[en]}],})// 图像输入constresponseawaitsession.prompt([{role:user,content:[{type:text,value:Describe this image:},{type:image,value:imageBlob},],},])3.4 结构化输出使用 JSON Schema 约束响应格式constschema{type:object,properties:{rating:{type:number,minimum:0,maximum:5},summary:{type:string},},required:[rating,summary],}constresultawaitsession.prompt(Rate this product and summarize it,{responseConstraint:schema,})constparsedJSON.parse(result)4. 会话管理4.1 初始提示constsessionawaitLanguageModel.create({initialPrompts:[{role:system,content:You are a helpful assistant.},{role:user,content:What is the capital of France?},{role:assistant,content:Paris},],})4.2 上下文窗口console.log(已使用:${session.contextUsage}/${session.contextWindow})session.addEventListener(contextoverflow,(){console.log(上下文窗口溢出历史记录将被删除)})4.3 克隆会话// 创建基准会话constbaseSessionawaitLanguageModel.create({initialPrompts:[{role:system,content:You are a technical editor.}],})// 克隆用于并行任务consttask1awaitbaseSession.clone()consttask2awaitbaseSession.clone()// 并行执行const[result1,result2]awaitPromise.all([task1.prompt(Review this code...),task2.prompt(Summarize this article...),])// 完成后销毁克隆会话task1.destroy()task2.destroy()4.4 销毁会话session.destroy()5. 性能优化5.1 结果缓存机制核心思想将重复查询的结果存储起来避免重复推理。classAICache{constructor(){this.TTL_MS3600000// 1小时有效期this.CACHE_PREFIXai_cache_}asyncgetResponse(prompt,forceRefreshfalse){// 标准化输入constqueryprompt.trim().toLowerCase()constcacheKey${this.CACHE_PREFIX}${this._hash(query)}// 检查缓存if(!forceRefresh){constcachedthis._getFromCache(cacheKey)if(cached)return{result:cached,source:cache}}// 运行推理constsessionawaitLanguageModel.create()constresultawaitsession.prompt(prompt)session.destroy()// 存储到缓存this._saveToCache(cacheKey,result)return{result,source:fresh}}_hash(str){lethash0for(leti0;istr.length;i){hash(hash5)-hashstr.charCodeAt(i)hashhashhash}returnMath.abs(hash)}_getFromCache(key){try{constdatalocalStorage.getItem(key)if(!data)returnnullconst{value,expiry}JSON.parse(data)if(Date.now()expiry){localStorage.removeItem(key)returnnull}returnvalue}catch{returnnull}}_saveToCache(key,value){try{// 检查存储空间if(!this._hasEnoughSpace()){this._cleanupOldest()}localStorage.setItem(key,JSON.stringify({value,expiry:Date.now()this.TTL_MS,}),)}catch{// 存储失败时静默处理}}_hasEnoughSpace(){constusednewBlob(Object.values(localStorage)).sizereturnused4*1024*1024// 4MB 限制}_cleanupOldest(){letoldestKeynullletoldestExpiryInfinityfor(leti0;ilocalStorage.length;i){constkeylocalStorage.key(i)if(key.startsWith(this.CACHE_PREFIX)){constdatalocalStorage.getItem(key)try{const{expiry}JSON.parse(data)if(expiryoldestExpiry){oldestExpiryexpiry oldestKeykey}}catch{}}}if(oldestKey)localStorage.removeItem(oldestKey)}}// 使用示例constcachenewAICache()constresultawaitcache.getResponse(Write a poem)console.log(来源:${result.source})6. 用户体验技巧6.1 动画过渡为 AI 生成的内容添加平滑过渡效果/* CSS */.ai-result{opacity:0;transform:translateY(10px);animation:fadeIn 0.3s ease-out forwards;}keyframesfadeIn{to{opacity:1;transform:translateY(0);}}// 流式输出时的渐进动画constcontainerdocument.querySelector(.ai-result)conststreamsession.promptStreaming(Write an essay)forawait(constchunkofstream){container.textContentchunk}6.2 人工延迟对于快速响应的任务添加短暂延迟让用户感知处理过程asyncfunctiongetAIResponse(prompt){conststartTimeDate.now()constresultawaitsession.prompt(prompt)// 确保至少显示 1 秒的加载状态constelapsedDate.now()-startTimeif(elapsed1000){awaitnewPromise((resolve)setTimeout(resolve,1000-elapsed))}returnresult}6.3 导航历史与撤销classAIHistoryManager{constructor(){this.history[]this.currentIndex-1}addEntry(prompt,response){// 清除当前位置之后的历史this.historythis.history.slice(0,this.currentIndex1)this.history.push({prompt,response,timestamp:Date.now()})this.currentIndex}undo(){if(this.currentIndex0){this.currentIndex--returnthis.history[this.currentIndex]}returnnull}redo(){if(this.currentIndexthis.history.length-1){this.currentIndexreturnthis.history[this.currentIndex]}returnnull}getCurrent(){returnthis.history[this.currentIndex]||null}}// 使用示例consthistorynewAIHistoryManager()// 保存结果history.addEntry(Write a poem,poemResult)// 撤销/重做constprevioushistory.undo()constnexthistory.redo()7. 硬件要求要求说明操作系统Windows 10/11、macOS 13、Linux、Chromebook Plus存储空间至少 22GB 可用空间GPU4GB VRAMCPU≥16GB RAM≥4核网络仅用于初始模型下载参考链接Prompt API 官方文档TypeScript 类型定义会话管理最佳实践文档版本2025年9月

相关新闻

Day-2 Linux 从入门到精通:命令行基础与文件管理实操笔记

Day-2 Linux 从入门到精通:命令行基础与文件管理实操笔记

前言Linux 是服务器运维、后端开发与云计算领域的核心操作系统,凭借高效的命令行交互、稳定的系统架构和轻量化的资源占用,成为企业级服务部署的首选平台。本篇为课堂学习整理笔记,完整复现 Linux 基础命令、目录文件管理、文本处理、编辑器使…

2026/6/27 9:45:02阅读更多 →
企业知识底座 vs 知识库:别再傻傻分不清,装了文档系统不等于AI就能用

企业知识底座 vs 知识库:别再傻傻分不清,装了文档系统不等于AI就能用

一、一个普遍的误解很多企业以为,上了个知识库系统或文档管理系统,就等于建好了知识底座。这两个概念经常被混为一谈,但它们的本质完全不同。如果你只是把文件从个人电脑搬到了一个公司级的文件夹里,那你还远没有准备好迎接AI时代…

2026/6/27 9:40:02阅读更多 →
ETS2LA完整指南:5步打造你的《欧洲卡车模拟2》自动驾驶体验

ETS2LA完整指南:5步打造你的《欧洲卡车模拟2》自动驾驶体验

ETS2LA完整指南:5步打造你的《欧洲卡车模拟2》自动驾驶体验 【免费下载链接】Euro-Truck-Simulator-2-Lane-Assist Plugin based interface program for ETS2/ATS. 项目地址: https://gitcode.com/gh_mirrors/eur/Euro-Truck-Simulator-2-Lane-Assist ETS2LA…

2026/6/27 9:40:02阅读更多 →
热部署总失败?你缺的不是插件,而是JVM字节码重定义权限校验清单(附IDEA 2023.3+官方兼容性矩阵表)

热部署总失败?你缺的不是插件,而是JVM字节码重定义权限校验清单(附IDEA 2023.3+官方兼容性矩阵表)

更多请点击: https://kaifayun.com 第一章:热部署失败的本质:JVM字节码重定义权限校验机制解析 热部署失败并非源于工具链缺陷,而是 JVM 在运行时对 Instrumentation.redefineClasses() 的严格权限约束所致。Java 虚拟机规范明确…

2026/6/27 12:55:27阅读更多 →
嵌入式开发实战:在Renesas QCS平台集成GitHub实现版本控制

嵌入式开发实战:在Renesas QCS平台集成GitHub实现版本控制

1. 项目概述:为什么嵌入式开发也需要版本控制? 如果你是一位嵌入式开发者,尤其是专注于物联网(IoT)应用,那么对瑞萨电子(Renesas)的QuickConnect Studio(QCS&#xff09…

2026/6/27 12:55:27阅读更多 →
IPS2550电感式位置传感器I2C配置与寄存器编程实战指南

IPS2550电感式位置传感器I2C配置与寄存器编程实战指南

1. 项目概述IPS2550是一款高速电感式位置传感器,它通过检测线圈电感的变化来精确测量角度或线性位移。这种非接触式的传感方案,在需要高可靠性、长寿命和抗恶劣环境的应用中,比如汽车转向角度检测、工业机器人关节位置反馈或者医疗设备的精密…

2026/6/27 12:55:27阅读更多 →
为什么92%的IDEA插件开发者卡在Plugin Descriptor配置?——JetBrains官方文档未明说的7个致命陷阱

为什么92%的IDEA插件开发者卡在Plugin Descriptor配置?——JetBrains官方文档未明说的7个致命陷阱

更多请点击: https://codechina.net 第一章:为什么92%的IDEA插件开发者卡在Plugin Descriptor配置?——JetBrains官方文档未明说的7个致命陷阱 Plugin Descriptor( plugin.xml)是IntelliJ Platform插件的“心脏”&…

2026/6/27 12:55:27阅读更多 →
告别卡顿与白屏!IDEA背景图插件配置黄金法则,92%开发者忽略的3个-Didea.* JVM启动参数

告别卡顿与白屏!IDEA背景图插件配置黄金法则,92%开发者忽略的3个-Didea.* JVM启动参数

更多请点击: https://codechina.net 第一章:IDEA背景图插件的核心价值与典型痛点 JetBrains IntelliJ IDEA 作为主流 Java 集成开发环境,其高度可定制的 UI 系统为开发者提供了丰富的扩展能力。背景图插件(如 Background Image P…

2026/6/27 12:55:27阅读更多 →
插件太多拖慢IDEA?2024最新性能基准测试曝光:这7个“伪刚需插件”必须卸载,否则白费32GB内存

插件太多拖慢IDEA?2024最新性能基准测试曝光:这7个“伪刚需插件”必须卸载,否则白费32GB内存

更多请点击: https://intelliparadigm.com 第一章:IDEA性能瓶颈的底层根源剖析 IntelliJ IDEA 作为一款功能强大的 JVM-based IDE,其性能表现高度依赖于 JVM 运行时环境、索引机制与插件生态的协同效率。当出现卡顿、高 CPU 占用或内存持续增…

2026/6/27 12:50:26阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/27 11:20:40阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/27 5:46:02阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/27 11:20:39阅读更多 →
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声&#xff1a;Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider&#xff1a;3分钟AI智能分层&#xff0c;彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述&#xff1a;为什么X-Frame-Options是Web安全的“防盗门”&#xff1f;最近在排查一个老项目的安全审计报告时&#xff0c;又被提到了“点击劫持”风险&#xff0c;矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了&#xff0c;很多开发团队&#xff0c;尤…

2026/6/27 0:04:03阅读更多 →