Electron LanguageModelMessageContent 对象详解:Prompt API 多模态输入的内容载体

发布时间:2026/10/28 14:16:32

Electron LanguageModelMessageContent 对象详解:Prompt API 多模态输入的内容载体 Electron LanguageModelMessageContent 对象详解Prompt API 多模态输入的内容载体【免费下载链接】electron:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS项目地址: https://gitcode.com/GitHub_Trending/el/electronElectron 的实验性 Prompt API 让 Web 内容可以像调用 Chromium 标准LanguageModel接口一样把请求路由到开发者自己实现的本地 AI 处理器而LanguageModelMessageContent对象正是这套机制中每一条消息的内容单元用于承载text、image、audio三类多模态输入。读完本文你将掌握该对象两个字段的完整定义与取值组合规则、它与LanguageModelMessage的嵌套关系、从渲染进程LanguageModelAPI 到 utility 进程处理器的底层数据转换链路以及在实际代码中构造合法内容对象的实操方式。对象结构type 与 value 两个字段LanguageModelMessageContent对象结构文档只有两个字段字段类型说明typestring内容类型取值为text、image、audio之一valueArrayBuffer \| string内容的实际数据从 utility 进程的 gin 转换器源码 可以确认两种字段的配合关系type: textvalue为string直接携带文本内容。源码中对应dict.Set(type, text); dict.Set(value, val-get_text())type: imagevalue为ArrayBuffer承载位图的原始像素数据。源码先将 Chromium 内部的SkBitmap转换为 N32 预乘premultipliedRGBA 格式再写入ArrayBuffer若像素读取失败会抛出TypeError: Invalid bitmap content in prompttype: audiovalue为ArrayBuffer承载float32音频采样序列源码中按sizeof(float) * raw_data.size()计算缓冲区大小并拷贝原始std::vectorfloat数据。需要注意虽然类型签名写作ArrayBuffer | string但按type与value的组合约束实际应为text 用 string、image/audio 用 ArrayBuffer。转换器源码中还留有 TODO 注释说明图像像素与音频采样的具体数据布局形状、采样率等目前没有正式承诺自定义处理器在解析二进制数据时应以防御式处理为前提。该对象是LanguageModelMessage结构文档的组成部分每条消息由rolesystem/user/assistant、contentLanguageModelMessageContent[]数组以及可选的prefix布尔字段构成。prompt()等 API 允许传入多个内容项因此一条消息中可以混排文本、图像与音频这是多模态输入能力的直接来源。渲染进程侧LanguageModel API 如何消费该对象LanguageModelMessageContent面向的是 Web 内容一侧。要启用这套 API渲染进程需要打开 Blink 实验特性官方教程 local-ai-handler 给出了标准配置const win new BrowserWindow({ webPreferences: { enableBlinkFeatures: AIPromptAPI,AIPromptAPIMultimodalInput } });其中AIPromptAPI启用LanguageModel全局接口AIPromptAPIMultimodalInput启用图像/音频等多模态输入支持。窗口启用后页面内即可使用标准 API// 文本消息会被规范化为 { role: user, content: [{ type: text, value: ... }] } const model await LanguageModel.create(); const reply await model.prompt(hello world);一个值得注意的规范化行为当prompt()接收字符串简写输入时Electron 会把它转换为标准的消息数组。测试用例 明确验证了处理器最终收到的输入形态// spec/api-local-ai-handler-spec.ts 中的断言 expect(message.input).to.deep.equal([ { role: user, content: [{ type: text, value: hello world }], prefix: false } ]);同时该测试文件验证了直接传LanguageModelMessage[]的用法——content数组中每项就是本文主角LanguageModelMessageContent对象const input [ { role: user, content: [{ type: text, value: hello }] }, { role: assistant, content: [{ type: text, value: hi }] } ]; // model.prompt(input) // 测试断言每条消息的 prefix 都会被补为 false此外LanguageModel.create()的initialPrompts选项也接受同样的消息结构测试中有{ role: system, content: [{ type: text, value: You are Electron AI }] }的实例因此LanguageModelMessageContent同样适用于系统提示词的定义。底层链路mojo 结构如何转换成 JS 对象从源码结构看整个 Prompt API 的调用链是渲染进程页面调用LanguageModel接口 → Blink 通过 mojo 把AILanguageModelPrompt结构发到浏览器进程 → ProxyingAIManager 将请求代理转发到通过session.registerLocalAIHandler()注册的 utility 进程 → utility 进程的转换器 把 mojo 结构转成 JS 字典交给开发者代码。其中Converterblink::mojom::AILanguageModelPromptContentPtr就是LanguageModelMessageContent的生成点mojo 侧的 oneof 结构text / bitmap / audio被逐一映射为{ type, value }字典外层Converterblink::mojom::AILanguageModelPromptPtr再组装出role、content、prefix三个字段。也就是说你在 utility 进程处理器里拿到的每个 content 对象其字段名和取值text/image/audio都由这层转换器固定下来。浏览器进程侧还有一个可用性兜底ProxyingAIManager::CanCreateLanguageModel使用WrapCallbackWithDefaultInvokeIfNotRun把未响应的检查默认置为不可用。对应的测试行为是utility 进程崩溃或未注册处理器时LanguageModel.availability()一律返回unavailable页面侧不会挂起。utility 进程侧LanguageModelUtility 中的使用在主进程侧LanguageModelUtility 类是本地 AI 模型的 JS 实现载体它的三个接受消息数组的方法都以LanguageModelMessage[]为输入即间接消费LanguageModelMessageContentlanguageModelUtility.prompt(input, options) // Promisestring | PromiseReadableStreamstring languageModelUtility.append(input, options) // Promiseundefined languageModelUtility.measureContextUsage(input, options) // Promisenumberprompt(input, options)对模型发起提示并获取响应append(input, options)仅追加消息到上下文不产生响应measureContextUsage(input, options)计算输入将占用的 token 数。因此在 utility 进程的处理器脚本中你可以按item.type分支处理不同内容项——text直接读取字符串image/audio则通过item.valueArrayBuffer拿到原始字节交由自建的本地模型推理引擎消费。适用前提与注意事项实验特性LanguageModelUtility的全部方法与渲染进程LanguageModelAPI 均标注为 Experimental见 LanguageModelUtility 文档接口仍可能调整双端启用完整链路需要渲染进程开启AIPromptAPI等 Blink 特性、utility 进程实现并注册 handlersession.registerLocalAIHandler(aiHandler)缺一不可二进制格式未定型image 与 audio 的ArrayBuffer数据布局目前以源码实现为准N32 预乘像素 / float32 采样源码中的 TODO 表明官方尚未承诺稳定格式跨版本使用二进制内容时建议做兼容性校验默认值行为消息的prefix字段在从 API 传入后被统一补为false测试断言可验证处理器实现无需自己补全该字段。相关资源LanguageModelMessageContent 结构定义LanguageModelMessage 结构定义LanguageModelUtility API 文档local-ai-handler 教程utility 进程消息转换器实现浏览器进程请求代理实现Prompt API 行为测试【免费下载链接】electron:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS项目地址: https://gitcode.com/GitHub_Trending/el/electron创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/23 17:09:34

选课系统课设全指南:从数据库设计到并发控制与答辩避坑

简介:这是一套面向高校学生网上选课场景的Java毕业设计项目,采用Spring Boot与Vue的前后端分离架构,覆盖教室管理、老师管理、课程管理、教学计划管理、选课管理、成绩管理、学生管理等功能模块,可有效解决传统人工选课信息维护困…

2026/10/28 17:08:02

AI论文平台评测:提升学术写作效率的8大工具

1. 项目概述:AI论文平台如何改变学术写作生态作为一名经历过论文煎熬期的过来人,我深刻理解学生们面对毕业论文时的焦虑。去年指导表弟写本科论文时,偶然发现现在AI论文工具已经发展到可以真正提升学术写作效率的阶段。经过半年时间实测8个主…

2026/10/28 17:08:02

二叉树算法解析:从基础遍历到LeetCode Hot100实战

1. 二叉树基础与Hot100算法概述二叉树作为数据结构领域的核心基础,在算法面试和实际工程中占据着不可替代的地位。最近在整理LeetCode Hot100题目时,我发现二叉树相关题目出现频率极高,几乎每10道经典题中就包含2-3道二叉树问题。这促使我系统…

2026/10/28 17:08:02

Windows注册表修改:查找系统设置对应项的方法

1. 为什么需要查找系统设置对应的注册表项作为一名Windows系统管理员,我经常遇到需要批量修改系统配置的场景。图形界面设置虽然直观,但在以下三种情况下直接操作注册表会更高效:需要批量部署相同配置到多台电脑时某些隐藏的高级设置没有提供…

2026/10/28 17:08:02

二叉树算法精解:Hot100高频题与工程实践

1. 二叉树基础与Hot100算法题解析二叉树作为数据结构领域的常青树,在算法面试中出现的频率高达75%以上。最近在整理LeetCode Hot100榜单时,我发现前50题中有18道直接考察二叉树操作,这个比例在各类数据结构中遥遥领先。本文将结合高频考题&am…

2026/10/28 17:03:01

蓝桥杯Python组备考:真题刷题顺序与高频题型避坑指南

简介:面向Python方向蓝桥杯备赛的完整资料合集,涵盖历年真题及解析、模拟题题库、知识点思维导图等,适合备战蓝桥杯及NOC等竞赛的考生和指导教师。包内共2000个文件,包含in/out测试数据、Python与C源码、Word/PDF文档、PPT课件及压…

2026/10/28 14:42:12

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/28 15:28:56

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/28 3:32:29

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/28 0:02:13

Python股票自动交易系统源码解析:从行情获取到风控的完整链路

简介:这份资源是面向高校计算机、金融相关专业毕业设计场景的完整项目源码包,主题为基于Python的股票自动交易系统,适合需要完成毕设选题、课程设计或自学金融量化交易开发的学生与开发者参考。压缩包共收录687个文件,整体约14.93…

2026/10/28 0:02:13

视酷酷信IM源码部署指南:Java 17+MySQL 8.0.33实战配置

简介:这是一套2024年亲测可部署的视酷酷信IM即时通讯系统源码,面向具备Java、OC、C#及Vue开发能力的技术人员,解决私有化即时通讯平台快速搭建与二次定制需求,尤其适用于需集成商城、保障数据主权的中小型企业或独立开发者。资源共…

2026/10/28 0:02:13

Python爬取百度迁徙数据:接口解析、批量采集与避坑指南

简介:这份资源是一个用Python爬取百度迁徙数据的脚本压缩包,面向具备Python基础、希望入门网络爬虫与数据解析的开发者,解决按日期获取全国热门城市人口迁徙数据的问题。包内共1个文件,为单个py脚本,压缩包约1KB&#…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑