1. 소개
Prompt API는 웹 페이지가 브라우저에서 제공하는 언어 모델에 직접 프롬프트를 입력할 수 있도록 합니다. 이 API는 기반 모델의 구체적인 세부 사항(예: 템플릿 처리 또는 토큰화)을 추상화하는 일관된 JavaScript API를 제공합니다. 내장 언어 모델을 활용함으로써 민감한 데이터의 로컬 처리, 오프라인 사용, 모델 공유, 그리고 클라우드 기반 또는 자체 모델 사용 방식과 비교한 비용 절감 등의 이점을 제공합니다.
2. 의존성
이 명세는 Infra Standard에 의존합니다. [INFRA]
웹 플랫폼의 다른 부분과 마찬가지로, 이러한 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"이면 이 메서드들은 TypeError를 던집니다.params 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 계층이 아닌 별도의 범위 초과 처리 동작을 갖습니다. // 오류 없이 +Infinity를 허용하기 위해 unrestricted double 타입을 사용합니다. // **사용 중단**: 이 옵션은 제거될 예정입니다. 대신 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) 메서드의 단계는 다음과 같습니다.
-
options, "
language-model", 언어 모델 옵션을 검증하고 정규화하기, 언어 모델 옵션 가용성 계산하기, 언어 모델 다운로드하기, 언어 모델 초기화하기, 언어 모델 객체 생성하기 및 false가 주어진 AI 모델 객체 생성하기의 결과를 반환합니다.
LanguageModelCreateCoreOptions
options에 대해 다음 단계를 수행합니다. 이 단계는 options를 제자리에서 변경하여 언어 태그를 정규화하고
중복을 제거하며, 유효하지 않은 태그가 있으면 예외를 던집니다.
-
options["
expectedInputs"]가 존재하면, 각각의 expected를 options["expectedInputs"]에서 순회합니다:-
expected["
languages"]가 존재하면, 검증하고 정규화합니다: 언어 태그. 이때 expected와 "languages"를 전달합니다.
-
-
hasToolCallInExpectedOutputs를 false로 둡니다.
-
options["
expectedOutputs"]가 존재하면, 각각의 expected를 options["expectedOutputs"]에서 순회합니다: -
options["
tools"]가 다음 상태가 아니라면: 비어 있음, 다음을 수행합니다:-
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["
tools"]가 다음 상태가 아니라면: 비어 있음, options["tools"]를 모델의 컨텍스트 창에 로드합니다.
-
-
options를 로드하는 과정에서 모델의 컨텍스트 창을 모두 사용하여 초기화가 실패했다면, 다음을 수행합니다:
-
requested를 다음 값을 인코딩하는 데 필요한 컨텍스트 창의 양으로 둡니다: options. options를 입력으로 인코딩하는 방식은 구현 정의입니다.
-
maximum을 사용자 에이전트가 지원하는 최대 컨텍스트 창 크기로 둡니다.
-
단언: requested가 다음 값보다 큽니다: maximum. (이 조건 때문에 이 오류 분기에 도달했습니다.)
-
다음 할당량 초과 오류 정보를 반환합니다: 해당 요청량은 requested이고 할당량은 maximum입니다.
-
-
다른 이유로 초기화가 실패했다면, 다음 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
- 상위 K
-
options["
topK"] 이 값이 존재하고 options["samplingMode"]가 다음 상태가 아닌 경우: 존재함. 그렇지 않으면 구현 정의 값 - 온도
-
options["
temperature"] 이 값이 존재하고 options["samplingMode"]가 다음 상태가 아닌 경우: 존재함. 그렇지 않으면 구현 정의 값 - 샘플링 모드
-
options["
samplingMode"] 이 값이 존재하는 경우. 그렇지 않으면 options["topK"]가 존재하거나 options["temperature"]가 존재하면 null. 그렇지 않으면 "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"]에서 순회합니다:-
inputTypeAvailability를 언어 모델 콘텐츠 타입의 가용성에 expected["
type"]과 true를 전달한 결과로 둡니다. -
추가할 inputTypeAvailability를 availabilities에 넣습니다.
-
options["
expectedOutputs"]가 존재하면, 각각의 expected를 options["expectedOutputs"]에서 순회합니다:-
outputTypeAvailability를 언어 모델 콘텐츠 타입의 가용성에 expected["
type"]과 false를 전달한 결과로 둡니다. -
추가할 outputTypeAvailability를 availabilities에 넣습니다.
-
다음 최소 가용성을 반환합니다. 이때 availabilities를 전달합니다.
Availability
값 또는 null을 반환합니다.
-
사용자 에이전트가 언어 모델에 프롬프트를 전달하는 기능을 지원할 수 있는지 확인하는 중 오류가 발생하고, 사용자 에이전트가 그 오류를 일시적인 것으로 판단하면(다시 질의하면 해당 오류가 발생하지 않을 수 있는 경우), null을 반환합니다.
-
사용자 에이전트가 현재 지원하는 기능에 언어 모델에 프롬프트를 전달하는 기능이 있으면 "
available"을 반환합니다. -
사용자 에이전트가 향후 지원할 수 있다고 판단하는 언어 모델 프롬프트 처리가, 이미 진행 중인 다운로드를 완료해야만 가능한 경우 "
downloading"을 반환합니다. -
사용자 에이전트가 향후 지원할 수 있다고 판단하는 언어 모델 프롬프트 처리가, 현재 진행 중이지 않은 다운로드를 수행해야만 가능한 경우 "
downloadable"을 반환합니다. -
그렇지 않으면 "
unavailable"을 반환합니다.
LanguageModelMessageType
type과 불리언 isInput에 대해 다음 단계로 결정됩니다. 이 단계는 Availability
값을 반환합니다.
-
사용자 에이전트가 현재 지원하는 type이 isInput이 true이면 입력이고, isInput이 false이면 출력인 경우, 다음 값을 반환합니다: "
available". -
사용자 에이전트가 지원할 수 있다고 판단하는 type의 위와 같은 사용이, 이미 진행 중인 다운로드를 완료해야만 가능한 경우 "
downloading"을 반환합니다. -
사용자 에이전트가 지원할 수 있다고 판단하는 type의 위와 같은 사용이, 현재 진행 중이지 않은 다운로드를 수행해야만 가능한 경우 "
downloadable"을 반환합니다. -
그렇지 않으면 "
unavailable"을 반환합니다.
3.3. LanguageModel
클래스
모든 LanguageModel에는
생성 시 설정되는 LanguageModelMessage의
목록인 초기 메시지가 있습니다.
모든 LanguageModel에는
생성 시 설정되는 unsigned long인 top K가 있습니다.
모든 LanguageModel에는
생성 시 설정되는 float인 temperature가 있습니다.
모든 LanguageModel에는
생성 시 설정되는 LanguageModelSamplingMode
또는 null인 샘플링 모드가 있습니다.
모든 LanguageModel에는
생성 시 설정되는 LanguageModelExpected의
목록인 예상 입력이 있습니다.
모든 LanguageModel에는
생성 시 설정되는 LanguageModelExpected의
목록인 예상 출력이 있습니다.
모든 LanguageModel에는
생성 시 설정되는 LanguageModelToolDeclaration의
목록인 도구가 있습니다.
모든 LanguageModel에는
생성 시 설정되는 unrestricted double인 컨텍스트 창 크기가 있습니다.
모든 LanguageModel에는
처음에 0인 double인 현재 컨텍스트 사용량이 있습니다.
contextUsage getter의 단계는 this의 현재 컨텍스트
사용량을 반환하는 것입니다.
inputUsage getter의 단계는 this의 현재 컨텍스트
사용량을 반환하는 것입니다.
contextWindow getter의 단계는 this의 컨텍스트 창 크기를 반환하는 것입니다.
inputQuota getter의 단계는 this의 컨텍스트 창 크기를
반환하는 것입니다.
topK getter의 단계는 this의 top K를 반환하는 것입니다.
temperature getter의 단계는 this의 temperature를 반환하는 것입니다.
samplingMode getter의 단계는 this의 샘플링 모드를 반환하는 것입니다.
다음은 모든 LanguageModel
객체가 이벤트 핸들러 IDL 속성으로 지원해야 하는 이벤트 핸들러와 이에 대응하는 이벤트 핸들러 이벤트 타입입니다:
| 이벤트 핸들러 | 이벤트 핸들러 이벤트 타입 |
|---|---|
oncontextoverflow
| contextoverflow
|
onquotaoverflow
| quotaoverflow
|
prompt(input, options) 메서드의
단계는 다음과 같습니다:
-
responseConstraint를 options["
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를 반환합니다.
-
contents를 반환하는 이행 핸들러로 promise에 반응한 결과를 반환합니다.
promptStreaming(input, options)
메서드의 단계는 다음과 같습니다:
-
responseConstraint를 options["
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을 발생시킵니다. -
expectedInputTypes를 this의 예상 입력이 주어진 예상 콘텐츠 타입 가져오기의 결과로 둡니다.
-
messages를 input, expectedInputTypes 및 false가 주어진 프롬프트를 검증하고 정규화하기의 결과로 둡니다.
-
options["
responseConstraint"]가 존재하고 null이 아니며 options["omitResponseConstraintInput"]이 false이면 구현은 모델의 동작을 유도하기 위해 구현 정의LanguageModelMessage를 messages에 삽입할 수 있습니다. -
measureUsage를 stopMeasuring 인수를 받아 messages 및 stopMeasuring이 주어진 언어 모델 컨텍스트 사용량 측정하기의 결과를 반환하는 알고리즘 단계로 둡니다.
-
this, options 및 measureUsage가 주어진 AI 모델 입력 사용량 측정하기의 결과를 반환합니다.
measureInputUsage(input, options)
메서드의 단계는 다음과 같습니다:
-
input 및 options이 주어진
measureContextUsage()메서드 단계를 실행한 결과를 반환합니다.
clone(options) 메서드의 단계는 다음과 같습니다:
-
this 및 options이 주어진 언어 모델 복제하기의 결과를 반환합니다.
3.3.1. 사전 채우기 및 생성하기
-
LanguageModelmodel, -
LanguageModelPromptinput, -
불리언 omitResponseConstraintInput,
-
객체 또는 null인 responseConstraint,
-
오류 정보를 받아 아무것도 반환하지 않는 알고리즘 또는 null인 error, 그리고
-
인수를 받지 않고 불리언을 반환하는 알고리즘 또는 null인 stopPrefilling,
다음 단계를 수행합니다:
-
expectedInputTypes를 model의 예상 입력이 주어진 예상 콘텐츠 타입 가져오기의 결과로 둡니다.
-
messages를 input, expectedInputTypes 및 model의 현재 컨텍스트 사용량이 0보다 크면 true, 그렇지 않으면 false가 주어진 프롬프트를 검증하고 정규화하기의 결과로 둡니다.
이 과정에서 예외 e가 발생하면:
-
error가 null이 아니면, DOMException 오류 정보를 주어 error를 수행합니다. 여기서 name은 e의 name이고 details에는 적절한 세부 정보가 포함됩니다.
-
false를 반환합니다.
-
-
responseConstraint가 null이 아니고 omitResponseConstraintInput이 false이면 구현은 모델의 동작을 유도하기 위해 구현 정의
LanguageModelMessage를 messages에 삽입할 수 있습니다. -
requested를 messages 및 stopPrefilling이 주어진 언어 모델 컨텍스트 사용량 측정하기의 결과로 둡니다.
-
requested가 null이면 false를 반환합니다.
-
requested가 오류 정보이면:
-
error가 null이 아니면 requested를 주어 error를 수행합니다.
-
false를 반환합니다.
-
-
Assert: requested는 숫자입니다.
-
model의 현재 컨텍스트 사용량 + requested가 model의 컨텍스트 창 크기보다 크면:
-
error가 null이 아니면:
-
errorInfo를 할당량 초과 오류 정보로 둡니다. 이 정보의 requested는 model의 현재 컨텍스트 사용량 + requested이고 quota는 model의 컨텍스트 창 크기입니다.
-
errorInfo를 주어 error를 수행합니다.
-
-
false를 반환합니다.
-
-
구현 정의 방식으로 messages가 포함되도록 기반 모델의 내부 상태를 업데이트합니다.
이 프로세스는 상태 업데이트 방식을 유도하기 위해 model의 초기 메시지, model의 샘플링 모드, model의 top K, model의 temperature, model의 예상 입력, model의 예상 출력 및 model의 도구를 사용해야 합니다.
이 프로세스는 § 4 개인정보 보호 고려 사항 및 § 5 보안 고려 사항의 지침을 준수해야 합니다.
이 프로세스 도중 stopPrefilling이 true를 반환하면 false를 반환합니다.
사전 채우기 중 오류가 발생했다면:
-
§ 3.3.4 오류의 지침에 따라 오류를 오류 정보 errorInfo로 나타냅니다.
-
error가 null이 아니면 errorInfo를 주어 error를 수행합니다.
-
false를 반환합니다.
-
-
model의 현재 컨텍스트 사용량을 model의 현재 컨텍스트 사용량 + requested로 설정합니다.
-
true를 반환합니다.
-
LanguageModelmodel, -
객체 또는 null인 responseConstraint,
-
문자열 또는
LanguageModelMessageContent를 받아 아무것도 반환하지 않는 알고리즘 또는 null인 chunkProduced, -
인수를 받지 않고 아무것도 반환하지 않는 알고리즘 또는 null인 done,
-
오류 정보를 받아 아무것도 반환하지 않는 알고리즘 또는 null인 error, 그리고
-
인수를 받지 않고 불리언을 반환하는 알고리즘 또는 null인 stopProducing,
다음 단계를 수행합니다:
-
구현 정의 방식으로, 다음 지침에 따라 현재 내부 상태를 기반으로 언어 모델에서 응답을 생성하는 프로세스를 시작합니다.
이 프로세스는 모델의 동작을 유도하기 위해 model의 초기 메시지, model의 샘플링 모드, model의 top K, model의 temperature, model의 예상 입력, model의 예상 출력, model의 도구 및 responseConstraint를 사용해야 합니다.
프롬프트 프로세스는 § 4 개인정보 보호 고려 사항 및 § 5 보안 고려 사항의 지침을 준수해야 합니다.
model의 도구가 비어 있지 않으면, 모델은 model의 도구에 선언된 도구를 기반으로 하나 이상의 도구 호출을 생성할 수 있으며, 이는 텍스트에 추가되거나 텍스트 대신 생성될 수 있습니다.
-
true인 동안:
-
다음 응답 데이터 청크(텍스트 또는 도구 호출)가 생성되거나, 프로세스가 완료되거나, stopProducing 호출 결과가 true가 될 때까지 기다립니다.
-
텍스트 청크가 성공적으로 생성되면:
-
이를 문자열 chunk로 나타냅니다.
-
chunkProduced가 null이 아니면 chunk를 주어 chunkProduced를 수행합니다.
-
-
그렇지 않고 도구 호출이 성공적으로 생성되면:
-
name을 호출되는 도구의 이름을 나타내는 문자열로 둡니다.
-
arguments를 도구 호출의 인수 JSON 객체를 나타내며 model의 관련 realm에서 생성된 Object로 둡니다.
-
toolCall을 model의 관련 realm에서 생성된 새
LanguageModelToolCall로 둡니다. 이 객체의 호출 ID는 callId로, 이름은 name으로, 인수는 arguments로 설정합니다. -
toolCallContent를 «[ "
type" → "tool-call", "value" → toolCall ]»로 초기화된LanguageModelMessageContent로 둡니다. -
chunkProduced가 null이 아니면 toolCallContent를 주어 chunkProduced를 수행합니다.
-
그렇지 않고 프로세스가 완료되었다면:
-
구현 정의 방식으로 생성된 응답(텍스트와 모든 도구 호출 모두)을 포함하도록 기반 모델의 내부 상태와 model의 현재 컨텍스트 사용량을 업데이트합니다.
-
done이 null이 아니면 done을 수행합니다.
-
중단합니다.
-
-
그렇지 않고 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의 데이터 양에 대략 비례해야 합니다.
이는 언어 모델 토큰화 체계에서 입력을 표현하는 데 필요한 토큰 수일 수도 있고, 데이터의 바이트 크기와 관련될 수도 있습니다.
이 프로세스 도중 stopMeasuring이 true를 반환하기 시작하면 대신 null을 반환합니다.
이 프로세스 도중 오류가 발생하면 대신 § 3.3.4 오류의 지침에 따라 적절한 DOMException 오류 정보를 반환합니다.
3.3.3. 옵션
LanguageModelExpected의
목록
expectedContents가 주어졌을 때 예상
콘텐츠 타입을 가져오려면:
-
expectedTypes를
LanguageModelMessageType의 빈 목록으로 둡니다. -
expectedContents의 각 expected에 대해 각각:
-
expectedTypes에 expected["
type"]이 포함되어 있지 않으면 expected["type"]을 expectedTypes에 추가합니다.
-
-
expectedTypes에 "
text"가 포함되어 있지 않으면, "text"를 expectedTypes에 추가합니다. -
expectedTypes를 반환합니다.
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"]에서 순회합니다:-
content["
type"]가 다음 값이면: "text":-
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. 오류
프롬프트 처리가 실패하면 다음과 같은 가능한 이유가 웹 개발자에게 노출될 수 있습니다. 이 표에는
가능한 DOMException
이름과 구현에서 이를 사용해야 하는 경우를 나열합니다:
DOMException
이름
| 시나리오 |
|---|---|
"NotAllowedError"
|
사용자의 선택 또는 사용자 에이전트 정책으로 인해 프롬프트 처리가 비활성화되어 있습니다. |
"NotReadableError"
|
예를 들어 유해하거나, 부정확하거나, 무의미한 것으로 감지되어 모델 출력이 사용자 에이전트에 의해 필터링되었습니다. |
"NotSupportedError"
|
처리할 입력이 사용자 에이전트가 지원하지 않는 언어이거나, 모델 출력이 사용자 에이전트가 지원하지 않는 언어가 되었습니다(예를 들어, 사용자 에이전트가 해당 출력 언어에 대해 충분한 품질 관리 테스트를 수행하지 않았기 때문입니다). |
"UnknownError"
|
사용자 에이전트가 모델에 프롬프트를 제공하면서 동시에 § 4 개인정보 보호 고려 사항 또는 § 5 보안 고려 사항에 제시된 요구 사항을 충족할 수 없다고 판단하는 경우를 포함한 그 밖의 모든 시나리오입니다. 또는 사용자 에이전트가 실패 이유를 공개하지 않으려는 경우입니다. |
이 표는 prompt API에서 노출될 수 있는 예외의 전체 목록을 제공하지 않습니다. 일부 구현 정의 단계에서 발생할 수 있는 예외만 포함합니다.
LanguageModel
model과 LanguageModelCloneOptions
options이 주어졌을 때 언어
모델을 복제하려면:
-
global을 model의 관련 전역 객체로 둡니다.
-
global의 연결된 Document가 완전히 활성 상태가 아니면 "
InvalidStateError"DOMException으로 거부된 promise를 반환합니다. -
signals를 « model의 파기 중단 컨트롤러의 signal »로 둡니다.
-
compositeSignal을 signals에
AbortSignal및 model의 관련 realm을 사용하여 종속 중단 신호 생성하기를 수행한 결과로 둡니다. -
compositeSignal이 중단되었다면 compositeSignal의 중단 이유로 거부된 promise를 반환합니다.
-
abortedDuringOperation을 false로 둡니다.
-
compositeSignal에 다음 중단 단계를 추가합니다:
-
병렬로:
-
다음 단계를 수행하도록 AI 작업 소스에 전역 작업을 큐에 추가합니다:
-
abortedDuringOperation이 true이면 반환합니다.
-
clonedModel을 다음 값을 갖는 새
LanguageModel객체로 둡니다:-
temperature를 model의 temperature로 설정합니다.
-
현재 컨텍스트 사용량을 model의 현재 컨텍스트 사용량으로 설정합니다.
-
구현 정의 방식으로 model의 다른 모든 상태를 clonedModel로 복사합니다.
-
복사 작업이 실패하면:
-
"
OperationError"DOMException으로 promise를 거부합니다. -
반환합니다.
-
-
clonedModel로 promise를 이행합니다.
-
-
-
promise를 반환합니다.
3.4.
LanguageModelToolCall
클래스
모든 LanguageModelToolCall에는
생성 시 설정되는 문자열인 호출 ID가 있습니다.
모든 LanguageModelToolCall에는
생성 시 설정되는 문자열인 이름이 있습니다.
모든 LanguageModelToolCall에는
생성 시 설정되는 Object 또는 null인
인수가 있습니다.
new LanguageModelToolCall(init)
생성자의 단계는 다음과 같습니다:
callId getter의 단계는
this의 호출 ID를 반환하는 것입니다.
name getter의 단계는 this의 이름을 반환하는 것입니다.
arguments getter의 단계는
this의 인수를 반환하는 것입니다.
3.5.
LanguageModelToolSuccess
클래스
모든 LanguageModelToolSuccess에는
생성 시 설정되는 문자열인 호출 ID가 있습니다.
모든 LanguageModelToolSuccess에는
생성 시 설정되는 문자열인 이름이 있습니다.
모든 LanguageModelToolSuccess에는
생성 시 설정되는
인
결과가 있습니다.
FrozenArray<LanguageModelToolResultContent>
new LanguageModelToolSuccess(init)
생성자의 단계는 다음과 같습니다:
callId getter의 단계는
this의 호출 ID를 반환하는 것입니다.
name getter의 단계는 this의 이름을 반환하는 것입니다.
result getter의 단계는
this의 결과를 반환하는 것입니다.
3.6.
LanguageModelToolError
클래스
모든 LanguageModelToolError에는
생성 시 설정되는 문자열인 호출 ID가 있습니다.
모든 LanguageModelToolError에는
생성 시 설정되는 문자열인 이름이 있습니다.
모든 LanguageModelToolError에는
생성 시 설정되는 문자열인 오류 메시지가 있습니다.
new LanguageModelToolError(init)
생성자의 단계는 다음과 같습니다:
callId getter의 단계는
this의 호출 ID를 반환하는 것입니다.
name getter의 단계는 this의 이름을 반환하는 것입니다.
errorMessage getter의 단계는
this의 오류 메시지를 반환하는 것입니다.
3.7. 권한 정책 통합
prompt API에 대한 접근은 정책 제어 기능 "language-model"의 적용을 받으며, 이 기능의
기본 허용 목록은
'self'입니다.
4. 개인정보 보호 고려 사항
prompt API의 개인정보 보호 고려 사항에 대한 논의는 Writing Assistance APIs § 6 개인정보 보호 고려 사항을 참조하십시오. 이 텍스트는 § 2 의존성에서 언급한 것처럼 동일한 인프라를 공유하는 모든 API에 적용되도록 작성되었습니다.
5. 보안 고려 사항
prompt API의 보안 고려 사항에 대한 논의는 Writing Assistance APIs § 7 보안 고려 사항을 참조하십시오. 이 텍스트는 § 2 의존성에서 언급한 것처럼 동일한 인프라를 공유하는 모든 API에 적용되도록 작성되었습니다.