1. 简介
Prompt API 使网页能够直接提示浏览器提供的语言模型。它提供 统一的 JavaScript API,用于抽象底层模型的具体细节(例如模板处理或 分词)。通过利用内置语言模型,它提供了诸如本地处理 敏感数据、离线使用、模型共享,以及与基于云或 自带模型方法相比降低成本等优势。
2. 依赖项
本规范依赖于 Infra 标准。[INFRA]
与 Web 平台的其他部分一样,这些 API 中的人类语言由 BCP 47 语言标签标识,
例如 "ja"、"en-US"、"sr-Cyrl" 或
"de-CH-1901-x-phonebk-extended"。用于验证、规范化
和语言标签匹配的具体算法来自 ECMAScript 国际化 API 规范,
而后者又将部分处理委托给 Unicode 区域设置数据标记语言(LDML)。[BCP47] [ECMA-402] [UTS35]。
这些 API 是一组预计由机器学习模型提供支持的 API 的一部分,它们共享通用的 API 表面惯用形式和规范模式。目前,这些共享部分的规范文本 位于 Writing Assistance APIs § 5 共享基础设施,而通用的隐私和安全 注意事项在 Writing Assistance APIs § 6 隐私注意事项和 Writing Assistance APIs § 7 安全注意事项中讨论。实现这些 API 需要实现该 共享基础设施,并遵守这些隐私和安全注意事项。但这并不要求 实现或暴露实际的写作辅助 API。[WRITING-ASSISTANCE-APIS]
3. API
// prompt() 方法及其他类似方法的返回类型。typedef (DOMString or sequence <LanguageModelMessageContent >); [LanguageModelPromptResult Exposed =Window ,SecureContext ]interface :LanguageModel EventTarget {static Promise <LanguageModel >create (optional LanguageModelCreateOptions = {});options static Promise <Availability >availability (optional LanguageModelCreateCoreOptions = {}); // **已弃用**:此方法将被移除;请改用 samplingMode。仅在扩展上下文中可用。options static Promise <LanguageModelParams ?>(); // 如果 role = "system",这些方法将抛出 TypeErrorparams Promise <LanguageModelPromptResult >prompt (LanguageModelPrompt ,input optional LanguageModelPromptOptions = {} );options ReadableStream promptStreaming (LanguageModelPrompt ,input optional LanguageModelPromptOptions = {} );options Promise <undefined >append (LanguageModelPrompt ,input optional LanguageModelAppendOptions = {} );options Promise <double >measureContextUsage (LanguageModelPrompt ,input optional LanguageModelPromptOptions = {} );options readonly attribute double contextUsage ;readonly attribute unrestricted double contextWindow ;attribute EventHandler oncontextoverflow ; // **已弃用**:此方法仅在扩展上下文中可用。Promise <double >measureInputUsage (LanguageModelPrompt ,input optional LanguageModelPromptOptions = {} ); // **已弃用**:此属性仅在扩展上下文中可用。options readonly attribute double inputUsage ; // **已弃用**:此属性仅在扩展上下文中可用。readonly attribute unrestricted double inputQuota ; // **已弃用**:此属性仅在扩展上下文中可用。attribute EventHandler onquotaoverflow ; // **已弃用**:此属性将被移除;请改用 samplingMode。仅在扩展上下文中可用。readonly attribute unsigned long topK ; // **已弃用**:此属性将被移除;请改用 samplingMode。仅在扩展上下文中可用。readonly attribute float temperature ;readonly attribute LanguageModelSamplingMode ?samplingMode ;Promise <LanguageModel >clone (optional LanguageModelCloneOptions = {}); };options LanguageModel includes DestroyableModel ; // **已弃用**:此接口将被移除;请改用 samplingMode。仅在扩展上下文中可用。 [Exposed =Window ,SecureContext ]interface {LanguageModelParams readonly attribute unsigned long ;defaultTopK readonly attribute unsigned long ;maxTopK readonly attribute float ;defaultTemperature readonly attribute float ; }; // 语言模型可以调用的工具调用的描述。 // 注:在考虑更改此字典时,作者应确保 // 与 WebMCP 中的 ModelContextTool 总体保持一致 // (https://webmachinelearning.github.io/webmcp/#model-context-tool)。maxTemperature dictionary {LanguageModelToolDeclaration required DOMString ;name required DOMString ; // 输入参数的 JSON 模式。description required object ; };inputSchema dictionary { // 注:这两项具有自定义的越界处理行为,并非在 IDL 层处理。 // 它们的类型为 unrestricted double,以允许 +Infinity 而不报错。 // **已弃用**:此选项将被移除;请改用 samplingMode。仅在扩展上下文中可用。LanguageModelCreateCoreOptions unrestricted double ; // **已弃用**:此选项将被移除;请改用 samplingMode。仅在扩展上下文中可用。topK unrestricted double ;temperature LanguageModelSamplingMode ; // 会话预期的类型和语言。samplingMode sequence <LanguageModelExpected >;expectedInputs sequence <LanguageModelExpected >; // 语言模型可以使用的工具。 // **实验性**:仅在实验性上下文中可用。expectedOutputs sequence <LanguageModelToolDeclaration >= []; };tools dictionary :LanguageModelCreateOptions LanguageModelCreateCoreOptions {AbortSignal ;signal CreateMonitorCallback ;monitor sequence <LanguageModelMessage >= []; };initialPrompts dictionary {LanguageModelPromptOptions object ;responseConstraint boolean =omitResponseConstraintInput false ;AbortSignal ; };signal dictionary {LanguageModelAppendOptions AbortSignal ; };signal dictionary {LanguageModelCloneOptions AbortSignal ; };signal dictionary {LanguageModelExpected required LanguageModelMessageType ;type sequence <DOMString >; }; // prompt() 方法及其他类似方法的参数languages typedef (sequence <LanguageModelMessage > // `[{ role: "user", content: [{ type: "text", value: providedValue }] }]` 的简写or DOMString );LanguageModelPrompt dictionary {LanguageModelMessage required LanguageModelMessageRole ; // DOMString 分支是 `[{ type: "text", value: providedValue }]` 的简写role required (DOMString or sequence <LanguageModelMessageContent >);content boolean =prefix false ; };dictionary {LanguageModelMessageContent required LanguageModelMessageType ;type required LanguageModelMessageValue ; };value enum {LanguageModelSamplingMode ,"most-predictable" ,"predictable" ,"slightly-predictable" ,"balanced" ,"slightly-creative" ,"creative" };"most-creative" enum {LanguageModelMessageRole ,"system" ,"user" };"assistant" enum {LanguageModelMessageType ,"text" ,"image" ,"audio" ,"tool-call" };"tool-response" typedef (ImageBitmapSource or AudioBuffer or BufferSource or DOMString or LanguageModelToolCall or LanguageModelToolResponse ); // `LanguageModelToolCall` 和 `LanguageModelToolResponse` 值的定义LanguageModelMessageValue enum {LanguageModelToolResultType ,"text" ,"image" ,"audio" };"object" dictionary {LanguageModelToolResultContent required LanguageModelToolResultType ;type required any ; }; // 表示语言模型请求的工具调用。 [value Exposed =Window ,SecureContext ]interface {LanguageModelToolCall constructor (LanguageModelToolCallInit );init readonly attribute DOMString callId ;readonly attribute DOMString name ;readonly attribute object ?arguments ; };dictionary {LanguageModelToolCallInit required DOMString ;callId required DOMString ;name object ; }; [arguments Exposed =Window ,SecureContext ]interface {LanguageModelToolSuccess constructor (LanguageModelToolSuccessInit );init readonly attribute DOMString callId ;readonly attribute DOMString name ;readonly attribute FrozenArray <LanguageModelToolResultContent >result ; };dictionary {LanguageModelToolSuccessInit required DOMString ;callId required DOMString ;name required sequence <LanguageModelToolResultContent >; }; [result Exposed =Window ,SecureContext ]interface {LanguageModelToolError constructor (LanguageModelToolErrorInit );init readonly attribute DOMString callId ;readonly attribute DOMString name ;readonly attribute DOMString errorMessage ; };dictionary {LanguageModelToolErrorInit required DOMString ;callId required DOMString ;name required DOMString ; }; // 执行工具调用后的响应 - 成功或错误。errorMessage typedef (LanguageModelToolSuccess or LanguageModelToolError );LanguageModelToolResponse
3.1. 创建
create(options) 方法的步骤如下:
-
返回给定 创建 AI 模型对象的结果, options、"
language-model"、 验证并规范化 语言模型选项、计算语言模型选项 可用性、下载语言模型、初始化语言模型、创建语言模型对象以及 false。
LanguageModelCreateCoreOptions
options,执行以下步骤。这些步骤就地修改 options,以规范化并
去除重复的语言标签,若有任何无效标签,则抛出异常。
-
如果 options["
expectedInputs"] 存在,则 对于每个 expected,其来自 options["expectedInputs"]:-
如果 expected["
languages"] 存在,则 验证并规范化 语言标签,给定 expected 和 "languages"。
-
-
令 hasToolCallInExpectedOutputs 为 false。
-
如果 options["
expectedOutputs"] 存在,则 对于每个 expected,其来自 options["expectedOutputs"]: -
-
如果 hasToolCallInExpectedOutputs 为 false,则抛出一个
TypeError。 -
对于每个 tool,其来自 options["
tools"]:-
如果 tool["
description"] 为空的 字符串,则抛出一个TypeError。 -
令 schema 为 tool["
inputSchema"]。 -
令 typeValue 为 ? Get(schema, "type")。
-
如果 typeValue 不是 "
object",则抛出一个TypeError。 -
令 propertiesValue 为 ? Get(schema, "properties")。
-
如果 propertiesValue 不是 undefined 且 propertiesValue 不是一个 Object,则抛出一个
TypeError。 -
令 requiredValue 为 ? Get(schema, "required")。
-
如果 requiredValue 不是 undefined 且 ? IsArray(requiredValue) 为 false, 则抛出一个
TypeError。 -
执行 ? 将一个 JavaScript 值序列化为 JSON 字符串,给定 schema。
-
-
如果 options["
initialPrompts"] 存在且不为 空, 则:-
令 expectedInputs 为 options["
expectedInputs"] 如果其 存在;否则为一个空的 列表。 -
令 expectedInputTypes 为以下操作的结果:获取预期内容类型,给定 expectedInputs。
-
执行 验证并规范化 提示,给定 options["
initialPrompts"]、 expectedInputTypes 和 false。
-
LanguageModelCreateCoreOptions
options:
LanguageModelCreateOptions
options:
-
令 availability 为以下操作的结果:计算语言模型选项 可用性,给定 options。
-
如果 availability 为 null 或
unavailable, 则返回一个 DOMException 错误信息,其 名称为 "NotSupportedError" 且其 详细信息包含适当的 详情。
-
-
为 AI 模型执行任何必要的初始化操作,该模型支撑用户代理的 提示处理能力。
这可能包括加载适当的模型以及支持以下选项所需的任何微调 options 到内存中。
-
如果 options["
initialPrompts"] 不为 空,则:-
令 expectedInputs 为 options["
expectedInputs"] 如果其 存在;否则为一个空的 列表。 -
令 expectedInputTypes 为以下操作的结果:获取预期内容 类型,给定 expectedInputs。
-
令 initialMessages 为以下操作的结果:验证并 规范化提示,给定 options["
initialPrompts"]、 expectedInputTypes 和 false。 -
将 initialMessages 加载到模型的上下文窗口中。
-
-
-
如果初始化失败是因为加载 options 的过程耗尽了 模型的整个上下文窗口,则:
-
如果初始化因任何其他原因失败,则返回一个 DOMException 错误信息,其 名称为 "
OperationError" 且其 详细信息包含适当的详情。 -
返回 null。
LanguageModelCreateOptions
options:
-
令 contextWindowSize 为上下文窗口的容量,该窗口可供用户 代理用于此模型。(此值由 实现定义,并且可以为 +∞,如果不存在 例如用户内存或 JavaScript 字符串限制之外的特定限制。)
-
令 initialMessages 为一个空的 列表,其元素为
LanguageModelMessage。 -
令 tools 为 options["
tools"]。 -
令 initialContextUsage 为 0。
-
如果 options["
initialPrompts"] 存在且不为 空, 则:-
令 expectedInputs 为 options["
expectedInputs"] 如果其 存在;否则为一个空的 列表。 -
令 expectedInputTypes 为以下操作的结果:获取预期内容类型 ,给定 expectedInputs。
-
将 initialMessages 设为以下操作的结果:验证并规范化 提示,给定 options["
initialPrompts"]、 expectedInputTypes 和 false。
-
-
如果 initialMessages 不为 空或 tools 不为 空, 则:
-
将 initialContextUsage 设为编码所使用的上下文窗口用量,编码对象为 initialMessages 和 tools。
-
-
返回一个新的
LanguageModel对象,在 realm 中创建,具有- 初始消息
-
initialMessages
- top K
-
options["
topK"] 如果其 存在且 options["samplingMode"] 不 存在;否则为一个由 实现定义的值 - 温度
-
options["
temperature"] 如果其 存在且 options["samplingMode"] 不 存在;否则为一个由 实现定义的值 - 采样模式
-
options["
samplingMode"] 如果其 存在;否则为 null,如果 options["topK"] 存在或 options["temperature"] 存在;否则为 "balanced" - 预期输入
-
options["
expectedInputs"] 如果其 存在;否则为一个空的 列表 - 预期输出
-
options["
expectedOutputs"] 如果其 存在;否则为一个空的 列表 - 工具
-
tools
- 上下文窗口大小
-
contextWindowSize
- 当前上下文用量
-
initialContextUsage
3.2. 可用性
availability(options) 方法的步骤
如下:
-
返回以下操作的结果:计算 AI 模型可用性,给定 options、"
language-model"、 验证并规范化 语言模型选项 和 计算语言模型选项 可用性。
LanguageModelCreateCoreOptions
options,执行以下步骤。这些步骤返回一个 Availability
值或 null,并且就地修改 options,将语言标签更新为其最佳
匹配项。
-
令 availability 为 语言模型与选项无关的 可用性。
-
如果 availability 为 null,则返回 null。
-
令 availabilities 为一个 列表,包含 availability。
-
令 inputPartition 为以下操作的结果:获取语言可用性 分区,给定的用途为使用该语言的文本向语言模型提供提示。
-
令 outputPartition 为以下操作的结果:获取语言可用性 分区,给定的用途为以该语言生成语言模型输出。
-
如果 options["
expectedInputs"] 存在,则 对于每个 expected,其来自 options["expectedInputs"]: -
如果 options["
expectedOutputs"] 存在,则 对于每个 expected,其来自 options["expectedOutputs"]: -
返回 最低可用性,给定 availabilities。
Availability
值或 null。
-
如果发生某个错误,当时正尝试确定用户代理是否 能够支持提供提示给语言 模型,且用户代理认为该错误是暂时的(因而重新查询可能不再产生 此类错误),则返回 null。
-
如果用户代理认为其将能够 支持向语言模型提供提示, 但必须先完成已在进行的下载,则返回 "
downloading"。 -
如果用户代理认为其将能够 支持向语言模型提供提示, 但必须先执行当前尚未在进行的下载,则返回 "
downloadable"。 -
否则,返回 "
unavailable"。
LanguageModelMessageType
type 和一个布尔值 isInput,由以下步骤给出。这些步骤返回一个 Availability
值。
-
如果用户代理 当前支持 type 作为输入(若 isInput 为 true),或作为输出(若 isInput 为 false),则 返回 "
available"。 -
如果用户代理认为其将能够 支持 type 用于上述用途,但 必须先完成已在进行的下载,则返回 "
downloading"。 -
如果用户代理认为其将能够 支持 type 用于上述用途,但 必须先执行当前尚未在进行的下载,则返回 "
downloadable"。 -
否则,返回 "
unavailable"。
3.3. LanguageModel
类
每个 LanguageModel
都有一个初始消息,它是一个由 LanguageModelMessage
组成的列表,
在创建期间设置。
每个 LanguageModel
都有一个 top K,它是一个 unsigned long,在创建期间设置。
每个 LanguageModel
都有一个 温度,它是一个 float,在创建期间设置。
每个 LanguageModel
都有一个 采样模式,它是一个 LanguageModelSamplingMode
或 null,在创建期间设置。
每个 LanguageModel
都有一个预期输入,它是一个由 LanguageModelExpected
组成的列表,
在创建期间设置。
每个 LanguageModel
都有一个预期输出,它是一个由 LanguageModelExpected
组成的列表,
在创建期间设置。
每个 LanguageModel
都有一个 工具,它是一个由 LanguageModelToolDeclaration
组成的列表,
在创建期间设置。
每个 LanguageModel
都有一个 上下文窗口大小,它是一个 unrestricted double,在
创建期间设置。
每个 LanguageModel
都有一个 当前上下文使用量,它是一个 double,初始为 0。
contextUsage getter 的步骤是返回 this 的当前上下文使用量。
inputUsage getter 的步骤是返回 this 的当前上下文使用量。
contextWindow getter 的步骤是返回 this 的上下文窗口大小。
inputQuota getter 的步骤是返回 this 的上下文窗口大小。
topK getter 的步骤是返回 this 的 top K。
temperature getter 的步骤是返回 this 的温度。
samplingMode getter 的步骤是返回 this 的采样模式。
以下是所有 LanguageModel
对象必须作为事件处理器 IDL 属性支持的事件处理器(以及它们对应的事件处理器事件类型):
| 事件处理器 | 事件处理器事件类型 |
|---|---|
oncontextoverflow
| contextoverflow
|
onquotaoverflow
| quotaoverflow
|
prompt(input, options) 方法
的步骤如下:
-
如果 options["
responseConstraint"] 存在,则令 responseConstraint 为该值;否则为 null。 -
令 omitResponseConstraintInput 为 options["
omitResponseConstraintInput"]。 -
令 hasNonTextExpectedOutput 为 false。
-
令 contents 为一个由
LanguageModelMessageContent组成的空列表。 -
令 text 为空字符串。
-
令 operation 为一个算法步骤,它接受参数 chunkProduced、 done、error 和 stopProducing,并执行以下 步骤:
-
令 prefillSuccess 为给定 this、 input、omitResponseConstraintInput、responseConstraint、 error 和 stopProducing 预填充的结果。
-
如果 prefillSuccess 为 false,则返回。
-
如果 hasNonTextExpectedOutput 为 false:
-
令 onChunk 为一个算法步骤,它接受参数 chunk 并 执行以下步骤:
-
令 onDone 为一个不接受参数并执行 以下步骤的算法步骤:
-
给定 this、responseConstraint、onChunk、 onDone、error 和 stopProducing,执行生成。
-
-
令 promise 为给定 this、options 和 operation 获取聚合 AI 模型结果 的结果。
-
如果 hasNonTextExpectedOutput 为 false,则返回 promise。
-
返回对 promise 作出反应并使用一个返回 contents 的兑现处理器所得的结果。
promptStreaming(input, options)
方法的步骤如下:
-
如果 options["
responseConstraint"] 存在,则令 responseConstraint 为该值;否则为 null。 -
令 omitResponseConstraintInput 为 options["
omitResponseConstraintInput"]。 -
令 operation 为一个算法步骤,它接受参数 chunkProduced、 done、error 和 stopProducing,并执行以下 步骤:
-
返回给定 this、options 和 operation 获取流式 AI 模型结果的结果。
append(input, options) 方法
的步骤如下:
-
令 operation 为一个算法步骤,它接受参数 chunkProduced、 done、error 和 stopProducing,并执行以下 步骤:
由于预填充算法不会 生成块,因此绝不会调用 chunkProduced。
-
返回给定 this、options 和 operation 获取聚合 AI 模型结果 的结果。
measureContextUsage(input, options)
方法的步骤如下:
-
如果 options["
omitResponseConstraintInput"] 为 true 且 options["responseConstraint"] 不存在,则抛出一个 "TypeError"DOMException。 -
令 messages 为给定 input、expectedInputTypes 和 false 验证并规范化提示 的结果。
-
如果 options["
responseConstraint"] 存在且不为 null,并且 options["omitResponseConstraintInput"] 为 false,则实现可以向 messages 插入一个由实现定义的LanguageModelMessage以引导模型的行为。 -
令 measureUsage 为一个接受参数 stopMeasuring 的算法步骤, 并返回给定 messages 和 stopMeasuring 测量语言模型上下文使用量 的结果。
-
返回给定 this、options 和 measureUsage 测量 AI 模型输入使用量的结果。
measureInputUsage(input, options)
方法的步骤如下:
-
返回给定 input 和 options 运行
measureContextUsage()方法步骤的结果。
3.3.1. 预填充和生成
-
一个
LanguageModelmodel, -
一个
LanguageModelPromptinput, -
一个布尔值 omitResponseConstraintInput,
-
一个对象或 null responseConstraint,
-
一个算法或 null error,它接受错误信息且不返回任何内容,以及
-
一个算法或 null stopPrefilling,它不接受参数并返回一个布尔值,
执行以下步骤:
-
令 messages 为给定 input、expectedInputTypes,以及当 model 的当前上下文使用量大于 0 时为 true、否则为 false,验证并规范化提示 的结果。
如果这抛出异常 e,则:
-
如果 error 不为 null,则给定一个 DOMException 错误信息执行 error, 该信息的名称是 e 的名称,且其详细信息包含适当的 细节。
-
返回 false。
-
-
如果 responseConstraint 不为 null 且 omitResponseConstraintInput 为 false, 则实现可以向 messages 插入一个由实现定义的
LanguageModelMessage以引导模型的行为。 -
令 requested 为给定 messages 和 stopPrefilling 测量语言模型上下文 使用量的结果。
-
如果 requested 为 null,则返回 false。
-
如果 requested 是一个错误信息,则:
-
如果 error 不为 null,则给定 requested 执行 error。
-
返回 false。
-
-
断言:requested 是一个数字。
-
以由实现定义的方式,更新 底层模型的内部状态以包含 messages。
该过程应使用 model 的初始 消息、model 的采样模式、model 的top K、model 的温度、model 的预期输入、model 的预期输出以及 model 的工具 来引导状态如何更新。
该过程必须遵循 § 4 隐私 注意事项和 § 5 安全注意事项中给出的指导。
如果在此过程中 stopPrefilling 返回 true,则返回 false。
如果预填充期间发生错误:
-
根据 § 3.3.4 错误中的指导,将该错误表示为错误信息 errorInfo。
-
如果 error 不为 null,则给定 errorInfo 执行 error。
-
返回 false。
-
-
返回 true。
-
一个
LanguageModelmodel, -
一个对象或 null responseConstraint,
-
一个算法或 null chunkProduced,它接受一个字符串或一个
LanguageModelMessageContent且不返回任何内容, -
一个算法或 null done,它不接受参数且不返回任何内容,
-
一个算法或 null error,它接受错误信息且不返回任何内容,以及
-
一个算法或 null stopProducing,它不接受参数并返回一个布尔值,
执行以下步骤:
-
以由实现定义的方式,在遵循 以下指导的前提下,根据语言模型 当前的内部状态开始生成响应。
该过程应使用 model 的初始 消息、model 的采样模式、model 的top K、model 的温度、model 的预期输入、model 的预期输出、model 的工具以及 responseConstraint 来引导 模型的行为。
提示过程必须遵循 § 4 隐私 注意事项和 § 5 安全注意事项中给出的指导。
如果 model 的工具不为空, 除文本之外或代替文本,模型可以根据 model 的 工具中声明的工具生成一个或多个工具调用。
-
当 true 时:
-
等待生成下一个响应数据块(文本或工具调用)、等待 过程完成,或者等待调用 stopProducing 的结果变为 true。
-
如果成功生成一个文本块:
-
令其表示为一个字符串 chunk。
-
如果 chunkProduced 不为 null,则给定 chunk 执行 chunkProduced。
-
-
否则,如果成功生成一个工具调用:
-
令 name 为一个字符串,表示正在 调用的工具名称。
-
令 toolCall 为一个在 model 的相关领域中创建的新
LanguageModelToolCall, 其调用 ID设置为 callId,名称设置为 name,并且 参数设置为 arguments。 -
令 toolCallContent 为一个
LanguageModelMessageContent, 使用 «[ "type" → "tool-call", "value" → toolCall ]» 初始化。 -
如果 chunkProduced 不为 null,则给定 toolCallContent 执行 chunkProduced。
-
否则,如果过程已经完成:
-
否则,如果 stopProducing 返回 true,则中断。
-
否则,如果提示期间发生错误:
-
根据 § 3.3.4 错误中的指导,将该错误表示为错误信息 errorInfo。
-
如果 error 不为 null,则给定 errorInfo 执行 error。
-
中断。
-
-
3.3.2. 用量
-
一个由
LanguageModelMessage组成的列表 messages, -
一个算法 stopMeasuring,它不接受参数并返回一个布尔值,
执行以下步骤:
-
令 inputToModel 为为了给定 messages 预填充而将发送给 底层模型的由实现定义的输入。
这通常由所有输入的编码组成, 可能还带有提示工程或其他由实现定义的包装。
如果在此过程中 stopMeasuring 开始返回 true,则返回 null。
如果在此过程中发生错误,则根据 § 3.3.4 错误中的指导返回适当的DOMException 错误信息。
-
返回将 inputToModel 提供给 底层模型时表示它所需的上下文使用量。确切计算过程是由实现定义的,但须遵守以下 约束。
返回的上下文使用量必须为非负且有限。它应大致与 inputToModel 中的数据量成比例。
这可能是使用某种语言模型分词方案表示输入所需的 token 数量,也可能与数据的字节大小有关。
如果在此过程中 stopMeasuring 开始返回 true,则改为返回 null。
如果在此过程中发生错误,则改为根据 § 3.3.4 错误中的指导返回适当的DOMException 错误信息。
3.3.3. 选项
LanguageModelExpected
组成的列表
expectedContents,要获取
预期内容类型:
LanguageModelPrompt
input、一个 列表,其元素为 LanguageModelMessageType项
expectedTypes 和一个布尔值 hasAppendedInput,执行以下步骤。返回
值将是一个非空的 列表,其元素为
LanguageModelMessage项
采用其“完整”形式。
-
如果 input 是一个 字符串,则返回 « «[ "
role" → "user", "content" → « «[ "type" → "text", "value" → input ]» », "prefix" → false ]» »。 -
断言:input 是一个 列表,其元素为
LanguageModelMessage项。 -
如果 input 是一个空的 列表,则返回 « «[ "
role" → "user", "content" → « «[ "type" → "text", "value" → "" ]» », "prefix" → false ]» »。 -
令 messages 为一个空的 列表,其元素为
LanguageModelMessage项。 -
对于每个 message,其来自 input:
-
如果 message["
content"] 是一个 字符串,则将 message 设为 «[ "role" → message["role"], "content" → « «[ "type" → "text", "value" → message["content"] ]» », "prefix" → message["prefix"] ]»。 -
如果 message["
prefix"] 为 true,则:-
如果 message["
role"] 不是 "assistant", 则抛出一个 "SyntaxError"DOMException。 -
如果 message 不是 input 中的最后一项,则抛出一个 "
SyntaxError"DOMException。
-
-
如果 message["
role"] 为 "system", 则:-
如果 hasAppendedInput 为 true,则抛出一个
TypeError。
-
-
对于每个 content,其来自 message["
content"]:-
如果 content["
type"] 为 "tool-call" 且 message["role"] 不是 "assistant", 则抛出一个TypeError。 -
如果 content["
type"] 为 "tool-response" 且 message["role"] 不是 "user", 则抛出一个TypeError。 -
如果 message["
role"] 为 "assistant" 且 content["type"] 为 "image" 或 "audio", 则抛出一个 "NotSupportedError"DOMException。 -
如果 content["
type"] 为 "text" 且 content["value"] 不是一个 字符串,则抛出一个TypeError。 -
如果 content["
type"] 为 "image", 则:-
如果 expectedTypes 不 包含 "
image", 则抛出一个 "NotSupportedError"DOMException。 -
如果 content["
value"] 不是一个ImageBitmapSource或BufferSource, 则抛出一个TypeError。
-
-
如果 content["
type"] 为 "audio", 则:-
如果 expectedTypes 不 包含 "
audio", 则抛出一个 "NotSupportedError"DOMException。 -
如果 content["
value"] 不是一个AudioBuffer、BufferSource, 或Blob, 则抛出一个TypeError。
-
-
如果 content["
type"] 为 "tool-call", 则:-
如果 expectedTypes 不 包含 "
tool-call", 则抛出一个 "NotSupportedError"DOMException。 -
如果 content["
value"] 不是一个LanguageModelToolCall, 则抛出一个TypeError。 -
如果 arguments 不是 null,则:
-
如果 ? IsArray(arguments) 为 true,或 arguments 是一个 平台对象,或 arguments 无法序列化为 JSON 对象(例如 ,由于循环引用或无法序列化为 JSON 的 值,例如函数或 BigInts),则抛出一个 "
DataError"DOMException。
-
-
-
如果 content["
type"] 为 "tool-response", 则:-
如果 expectedTypes 不 包含 "
tool-response", 则抛出一个 "NotSupportedError"DOMException。 -
如果 content["
value"] 不是一个LanguageModelToolResponse, 则抛出一个TypeError。 -
如果 content["
value"] 是一个LanguageModelToolSuccess, 则 对于每个 resultItem,其来自 content["value"]的 result:-
如果 resultItem["
type"] 为 "image" 或 "audio" 且用户代理不支持多模态工具结果 内容,则抛出一个 "NotSupportedError"DOMException。 -
如果 resultItem["
type"] 为 "text" 且 resultItem["value"] 不是一个 字符串,则抛出一个TypeError。 -
如果 resultItem["
type"] 为 "image" 且 resultItem["value"] 不是一个ImageBitmapSource或BufferSource, 则抛出一个TypeError。 -
如果 resultItem["
type"] 为 "audio" 且 resultItem["value"] 不是一个AudioBuffer、BufferSource, 或Blob, 则抛出一个TypeError。
-
-
-
-
令 contentWithContiguousTextCollapsed 为一个空的 列表,其元素为
LanguageModelMessageContent项。 -
令 lastTextContent 为 null。
-
对于每个 content,其来自 message["
content"]:-
-
如果 lastTextContent 为 null:
-
追加 content 到 contentWithContiguousTextCollapsed。
-
将 lastTextContent 设为 content。
-
-
否则,将 lastTextContent["
value"] 设为以下内容的拼接:lastTextContent["value"] 和 content["value"]。不添加空格或其他字符。因此,« «[ "
type" → "text", "foo" ]», «[ "type" → "text", "bar" ]» » 被规范化为 « «[ "type" → "text", "foobar" ]»。
-
-
否则:
-
追加 content 到 contentWithContiguousTextCollapsed。
-
将 lastTextContent 设为 null。
-
-
将 message["
content"] 设为 contentWithContiguousTextCollapsed。
-
-
追加 message 到 messages。
-
将 hasAppendedInput 设为 true。
-
-
如果 messages 为 空,则抛出一个 "
SyntaxError"DOMException。 -
返回 messages。
3.3.4. 错误
当提示失败时,以下可能的原因可以暴露给 Web 开发者。此表列出了
可能的 DOMException
名称以及实现应使用它们的情况:
DOMException
名称
| 场景 |
|---|---|
"NotAllowedError"
|
提示已被用户选择或用户代理策略禁用。 |
"NotReadableError"
|
模型输出被用户代理过滤,例如,因为检测到它有害、 不准确或无意义。 |
"NotSupportedError"
|
待处理的输入使用了用户代理不支持的语言,或者在调用 模型输出最终使用了用户代理不支持的语言(例如, 因为用户代理尚未对该输出 语言执行足够的质量控制测试)。 |
"UnknownError"
|
所有其他场景,包括用户代理认为无法提示模型并同时 满足 § 4 隐私注意事项或 § 5 安全注意事项中给出的要求。或者,如果用户代理不希望 披露失败原因。 |
此表并未给出 Prompt API 可能暴露的异常的完整列表。 它仅包含那些可能来自某些由实现定义的步骤的异常。
LanguageModel
model 和一个 LanguageModelCloneOptions
options,要克隆语言
模型:
-
令 global 为 model 的相关全局对象。
-
如果 global 的关联 Document不是完全活动的,则返回以一个 "
InvalidStateError"DOMException拒绝的 promise。 -
令 compositeSignal 为给定 signals、使用
AbortSignal以及 model 的相关领域 创建依赖中止信号的结果。 -
如果 compositeSignal 已中止,则返回以 compositeSignal 的中止原因拒绝的 promise。
-
令 abortedDuringOperation 为 false。
-
将以下中止步骤添加到 compositeSignal:
-
并行:
-
-
如果 abortedDuringOperation 为 true,则返回。
-
令 clonedModel 为一个新的
LanguageModel对象,具有: -
以由实现定义的方式, 将 model 的任何其他状态复制到 clonedModel。
-
如果复制操作失败:
-
以一个 "
OperationError"DOMException拒绝 promise。 -
返回。
-
-
以 clonedModel 兑现 promise。
-
-
-
返回 promise。
3.4.
LanguageModelToolCall
类
每个 LanguageModelToolCall
都有一个 调用 ID,它是一个字符串,在创建期间设置。
每个 LanguageModelToolCall
都有一个名称,它是一个字符串,在创建期间设置。
每个 LanguageModelToolCall
都有一个参数,它是一个对象或 null,
在创建期间设置。
new LanguageModelToolCall(init)
构造函数的步骤如下:
callId getter 的步骤是返回
this 的调用 ID。
arguments getter 的步骤是
返回 this 的参数。
3.5.
LanguageModelToolSuccess
类
每个 LanguageModelToolSuccess
都有一个 调用 ID,它是一个字符串,在创建期间设置。
每个 LanguageModelToolSuccess
都有一个名称,它是一个字符串,在创建期间设置。
每个 LanguageModelToolSuccess
都有一个 结果,它是一个
,
在创建期间设置。
FrozenArray<LanguageModelToolResultContent>
new LanguageModelToolSuccess(init)
构造函数的步骤如下:
callId getter 的步骤是
返回 this 的调用 ID。
result getter 的步骤是
返回 this 的结果。
3.6.
LanguageModelToolError
类
每个 LanguageModelToolError
都有一个 调用 ID,它是一个字符串,在创建期间设置。
每个 LanguageModelToolError
都有一个名称,它是一个字符串,在创建期间设置。
每个 LanguageModelToolError
都有一个错误消息,它是一个字符串,在创建期间设置。
new LanguageModelToolError(init)
构造函数的步骤如下:
callId getter 的步骤是返回
this 的调用 ID。
errorMessage getter 的步骤
是返回 this 的错误消息。
3.7. 权限策略集成
对 Prompt API 的访问受策略控制特性 "language-model" 限制,该特性的默认允许列表为
'self'。
4. 隐私注意事项
有关 Prompt API 的隐私注意事项讨论,请参阅 Writing Assistance APIs § 6 隐私注意事项。该文本旨在适用于所有共享相同基础设施的 API,如 § 2 依赖项中所述。
5. 安全注意事项
有关 Prompt API 的安全注意事项讨论,请参阅 Writing Assistance APIs § 7 安全注意事项。该文本旨在适用于所有共享相同基础设施的 API,如 § 2 依赖项中所述。