Skriva ett kunskapsmanifest
GÄLLER FÖR: SDK v4
Ett färdighetsmanifest är en JSON-fil som beskriver de åtgärder som en färdighet kan vidta, dess indata- och utdataparametrar och kunskapens slutpunkter. Manifestet innehåller maskinläsbar information som en utvecklare kan använda för att komma åt kunskapen från en annan robot.
I den här artikeln beskrivs vilka versioner av Bot Framework-schemat för kunskapsmanifest som stöds.
Version: | OBS! |
---|---|
version 2.2 | Vissa URI-egenskaper har uppdaterats för att acceptera URI-referenser. |
version 2.1 | Lägger till möjligheten att beskriva proaktiva aktiviteter som färdigheten kan skicka och de sändningsmodeller som kunskapen använder. |
version 2.0 | Ursprunglig version. |
Scheman för Bot Framework-färdighetsmanifestet använder utkast 7 i JSON-schemaförrådet.
Förutsättningar
- Kunskaper om färdigheter.
- Viss kunskap om JSON-schema och JSON-format.
Kunskapsmanifestet
Kunskapsmanifestet innehåller olika informationskategorier:
- Metadata som beskriver kunskapen på allmän nivå.
- En lista över slutpunkterna som färdigheten tillhandahåller.
- Valfria listor över aktiviteter som färdigheten kan ta emot och skicka proaktivt.
- Ett valfritt definitionsobjekt som innehåller scheman för objekt som refereras av andra delar av dokumentet.
- En valfri lista över de sändningsmodeller som färdigheten stöder.
I följande tabell beskrivs det fullständiga schemat för v2.2 i Bot Framework-kunskapsmanifestet.
Kategori/fält | Typ/format | Obligatoriskt | Beskrivning |
---|---|---|---|
Metadata | |||
$id | String | Obligatoriskt | Identifieraren för kunskapsmanifestet. |
$schema | Sträng/URI | Obligatoriskt | HTTPS-URI:n för en JSON-schemaresurs som beskriver manifestets format. För version 2.2 är https://schemas.botframework.com/schemas/skills/v2.2/skill-manifest.json URI:n . |
Copyright | String | Valfritt | Upphovsrättsmeddelandet för färdigheten. |
beskrivning | String | Valfritt | En människoläsbar beskrivning av skickligheten. |
iconUrl | Sträng/URI-referens | Valfri | URI:n för ikonen som ska visas för färdigheten. |
licens | String | Valfritt | Licensavtalet för färdigheten. |
name | String | Obligatoriskt | Namnet på färdigheten. |
privacyUrl | Sträng/URI-referens | Valfri | URI:n för sekretessbeskrivningen för färdigheten. |
publisherName | String | Obligatoriskt | Namnet på kunskapsutgivaren. |
tags | Strängmatris | Valfri | En uppsättning taggar för kunskapen. Om den finns måste varje tagg vara unik. |
version | Sträng | Obligatoriskt | Den version av färdigheten som manifestet beskriver. |
Slutpunkter | |||
slutpunkter | slutpunktsmatris | Obligatoriskt | Listan över slutpunkter som stöds av färdigheten. Minst en slutpunkt måste definieras. Varje slutpunkt måste vara unik. |
Aktiviteter | |||
activities | Objekt som innehåller namngivna aktivitetsobjekt | Valfri | Den uppsättning inledande aktiviteter som godkänts av färdigheten. |
activitiesSent | Objekt som innehåller namngivna aktivitetsobjekt | Valfri | Beskriver de proaktiva aktiviteter som färdigheten kan skicka. |
Definitioner | |||
Definitioner | Objekt | Valfri | Ett objekt som innehåller underscheman för objekt som används i manifestet. |
Dispatch-modeller | |||
dispatchModels | dispatchModels-objekt | Valfri | Beskriver de språkmodeller och avsikter på toppnivå som stöds av färdigheten. Se Dispatch models for the schema for this object (Skicka modeller för schemat för det här objektet). |
Slutpunkter
Varje slutpunktsobjekt beskriver en slutpunkt som stöds av färdigheten.
I det här exemplet visas två slutpunkter för en färdighet.
"endpoints": [
{
"name": "americas",
"protocol": "BotFrameworkV3",
"description": "Production endpoint for SkillBot in the Americas",
"endpointUrl": "http://myskill.contoso.com/api/messages",
"msAppId": "00000000-0000-0000-0000-000000000000"
},
{
"name": "eu",
"protocol": "BotFrameworkV3",
"description": "Production endpoint for SkillBot in Europe",
"endpointUrl": "http://myskill.contoso.com/api/messages",
"msAppId": "11111111-0000-0000-0000-000000000000"
}
],
slutpunktsobjekt
Beskriver en slutpunkt som stöds av färdigheten.
Fält | Typ/format | Obligatoriskt | Beskrivning |
---|---|---|---|
beskrivning | String | Valfritt | En beskrivning av slutpunkten. |
endpointUrl | Sträng/URI | Obligatoriskt | URI-slutpunkten för färdigheten. |
msAppId | String | Obligatoriskt | Microsoft AppId (GUID) för färdigheten som används för att autentisera begäranden. Måste matcha det reguljära uttrycket: ^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$ . |
name | String | Obligatoriskt | Slutpunktens unika namn. |
Protokollet | String | Valfritt | Bot-protokollet som stöds. Standardvärdet är "BotFrameworkV3", som representerar roboten Anslut eller API version 3. Använd standardvärdet om inte din färdighet specifikt använder ett annat protokoll. |
Aktiviteter
Varje aktivitetsobjekt beskriver en aktivitet som godkänts av färdigheten. Färdigheten påbörjar en åtgärd eller uppgift baserat på den inledande aktiviteten som den tar emot. Namnet som är associerat med aktivitetsobjektet anger den åtgärd eller uppgift som färdigheten ska utföra.
Vissa aktivitetstyper har en värdeegenskap som kan användas för att ge extra indata till färdigheten. När kunskapen slutar (slutför åtgärden) kan den ge ett returvärde i den associerade värdeegenskapen för aktiviteten i slutet av konversationen.
De aktivitetstyper som tillåts är: meddelande, händelse, anropa och andra aktiviteter. En färdighet kan ta emot en anropande aktivitet, men kan inte skicka någon.
Här är en exempelaktivitetsbeskrivning.
"bookFlight": {
"description": "Books a flight",
"type": "event",
"name": "BookFlight",
"value": {
"$ref": "#/definitions/bookingInfo"
},
"resultValue": {
"$ref": "#/definitions/bookingInfo"
}
},
eventActivity-objekt
Beskriver en händelseaktivitet som godkänts eller skickats av färdigheten. Innebörden av en händelseaktivitet definieras av dess namnfält, vilket är meningsfullt inom kompetensens omfång.
Fält | Type | Obligatoriskt | Beskrivning |
---|---|---|---|
beskrivning | String | Valfritt | En beskrivning av åtgärden som händelsen ska initiera. |
name | String | Obligatoriskt | Värdet för händelseaktivitetens namnegenskap. |
resultValue | Objekt | Valfri | En JSON-schemadefinition för den typ av objekt som åtgärden kan returnera. |
type | String | Obligatoriskt | Aktivitetstypen. Måste vara "händelse". |
värde | Objekt | Valfri | En JSON-schemadefinition av den typ av objekt som den här åtgärden förväntar sig som indata. |
invokeActivity-objekt
Beskriver en anropande aktivitet som godkänts av färdigheten. Innebörden av en anropande aktivitet definieras av dess namnfält, vilket är meningsfullt inom kompetensens omfång.
Fält | Type | Obligatoriskt | Beskrivning |
---|---|---|---|
beskrivning | String | Valfritt | En beskrivning av den åtgärd som anropar ska initieras. |
name | String | Obligatoriskt | Värdet för anropa aktivitetens namnegenskap. |
resultValue | Objekt | Valfri | En JSON-schemadefinition av den typ av objekt som den associerade åtgärden kan returnera. |
type | String | Obligatoriskt | Aktivitetstypen. Måste vara "invoke". |
värde | Objekt | Valfri | En JSON-schemadefinition av den typ av objekt som den här åtgärden förväntar sig som indata. |
messageActivity-objekt
Beskriver en meddelandeaktivitet som godkänts eller skickats av färdigheten. Meddelandeaktivitetens textegenskap innehåller användarens eller robotens yttrande.
Fält | Type | Obligatoriskt | Beskrivning |
---|---|---|---|
beskrivning | String | Valfritt | En beskrivning av åtgärden. |
resultValue | Objekt | Valfri | En JSON-schemadefinition av den typ av objekt som den associerade åtgärden kan returnera. |
type | String | Obligatoriskt | Aktivitetstypen. Måste vara "meddelande". |
värde | Objekt | Valfri | En JSON-schemadefinition av den typ av objekt som den här åtgärden förväntar sig som indata. |
otherActivities-objekt
Beskriver alla andra aktivitetstyper som godkänts eller skickats av färdigheten.
Fält | Type | Obligatoriskt | Beskrivning |
---|---|---|---|
type | String | Obligatoriskt | Aktivitetstypen. Måste vara någon av de andra Robot Framework-aktivitetstyperna: "contactRelationUpdate", "conversationUpdate", "deleteUserData", "endOfConversation", "handoff", "installationUpdate", "messageDelete", "messageReaction", "messageUpdate", "suggestion", "trace" eller "typing". |
Objektet otherActivities kan innehålla andra egenskaper, men schemat för färdighetsmanifestet definierar inte deras innebörd.
Definitioner
Varje definition beskriver ett underschema som kan användas av andra delar av dokumentet.
Här är ett exempel på ett underschema för flygbokningsinformation.
"bookingInfo": {
"type": "object",
"required": [
"origin"
],
"properties": {
"origin": {
"type": "string",
"description": "this is the origin city for the flight"
},
"destination": {
"type": "string",
"description": "this is the destination city for the flight"
},
"date": {
"type": "string",
"description": "The date for the flight in YYYY-MM-DD format"
}
}
},
Dispatch-modeller
Sändningsmodellen innehåller en lista över språkmodeller och en lista över avsikter på den översta nivån som stöds av färdigheten. Det är en avancerad funktion som gör det möjligt för utvecklare av en kunskapskonsument att skapa en språkmodell som kombinerar funktionerna i konsumentrobotar och kunskapsrobotar.
Varje språkmodell använder filformatet .lu
eller .qna
. Mer information om dessa format finns i .lu-filformat och .qna-filformat.
Ett språknamn är en kombination av en ISO 639-kod med två bokstäver som är associerad med ett språk och en valfri ISO 3166-kod med två bokstäver som är associerad med ett land eller en region, till exempel "en" eller "en-US".
Fält | Type | Obligatoriskt | Beskrivning |
---|---|---|---|
Avseenden | Strängmatris | Valfri | En lista över de avsikter på den översta nivån som stöds av färdigheten. Varje avsikt måste vara unik. |
språk | Objekt som innehåller namngivna languageModel-matriser | Valfri | En lista över de språkmodeller som stöds av färdigheten. Varje namn är språkmodellernas språkvariant och matrisen innehåller språkmodellerna för språket. En sändningsmodell måste ha stöd för minst ett språk. Varje språkspråk i språkfältet måste vara unikt. |
Här är ett exempel på en sändningsmodell som innehåller två språkmodeller på tre språk. Den beskriver också två avsikter på toppnivå som kunskapen kan känna igen.
"dispatchModels": {
"languages": {
"en": [
{
"name": "SkillBot LU (English)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-en.lu",
"description": "English language model for the skill"
},
{
"name": "SkillBot QnA LU (English)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-en.qna",
"description": "English language model for the skill (QnAMaker)"
}
],
"es-ES": [
{
"name": "SkillBot LU (Spanish-Spain)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-es-ES.lu",
"description": "Spanish (Spain) language model for the skill"
},
{
"name": "SkillBot QnA LU (Spanish-Spain)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-es-ES.qna",
"description": "Spanish (Spain) language model for the skill (QnAMaker)"
}
],
"es-MX": [
{
"name": "SkillBot LU (Spanish-Mexico)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-es-MX.lu",
"description": "Spanish (Mexico) language model for the skill"
},
{
"name": "SkillBot QnA LU (Spanish-Mexico)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-es-MX.qna",
"description": "Spanish (Mexico) language model for the skill (QnAMaker)"
}
]
},
"intents": [
"bookFlight",
"getWeather"
]
},
languageModel-objekt
Beskriver en språkmodell för en viss kultur. Namnet är ett språknamn.
Fält | Typ/format | Obligatoriskt | Beskrivning |
---|---|---|---|
Contenttype | String | Obligatoriskt | Typ av språkmodell. |
beskrivning | String | Valfritt | En beskrivning av språkmodellen. |
name | String | Obligatoriskt | Namn på språkmodellen. |
url | Sträng/URI-referens | Obligatoriskt | URL:en för språkmodellen. |
Exempelmanifest
Här är ett fullständigt exempel på v2.2-manifest för en färdighet som exponerar flera aktiviteter.
{
"$schema": "https://schemas.botframework.com/schemas/skills/v2.2/skill-manifest.json",
"$id": "SkillBot",
"name": "Sample skill definition that can handle multiple types of activities",
"version": "1.0",
"description": "This is a sample skill definition for multiple activity types",
"publisherName": "Microsoft",
"privacyUrl": "https://myskill.contoso.com/privacy.html",
"copyright": "Copyright (c) Microsoft Corporation. All rights reserved.",
"license": "",
"iconUrl": "skillIcon.png",
"tags": [
"sample",
"travel",
"weather"
],
"endpoints": [
{
"name": "americas",
"protocol": "BotFrameworkV3",
"description": "Production endpoint for SkillBot in the Americas",
"endpointUrl": "http://myskill.contoso.com/api/messages",
"msAppId": "00000000-0000-0000-0000-000000000000"
},
{
"name": "eu",
"protocol": "BotFrameworkV3",
"description": "Production endpoint for SkillBot in Europe",
"endpointUrl": "http://myskill.contoso.com/api/messages",
"msAppId": "11111111-0000-0000-0000-000000000000"
}
],
"dispatchModels": {
"languages": {
"en": [
{
"name": "SkillBot LU (English)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-en.lu",
"description": "English language model for the skill"
},
{
"name": "SkillBot QnA LU (English)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-en.qna",
"description": "English language model for the skill (QnAMaker)"
}
],
"es-ES": [
{
"name": "SkillBot LU (Spanish-Spain)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-es-ES.lu",
"description": "Spanish (Spain) language model for the skill"
},
{
"name": "SkillBot QnA LU (Spanish-Spain)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-es-ES.qna",
"description": "Spanish (Spain) language model for the skill (QnAMaker)"
}
],
"es-MX": [
{
"name": "SkillBot LU (Spanish-Mexico)",
"contentType": "application/lu",
"url": "http://sample.com/SkillBot-es-MX.lu",
"description": "Spanish (Mexico) language model for the skill"
},
{
"name": "SkillBot QnA LU (Spanish-Mexico)",
"contentType": "application/qna",
"url": "http://sample.com/SkillBot-QnA-es-MX.qna",
"description": "Spanish (Mexico) language model for the skill (QnAMaker)"
}
]
},
"intents": [
"bookFlight",
"getWeather"
]
},
"activities": {
"bookFlight": {
"description": "Books a flight",
"type": "event",
"name": "BookFlight",
"value": {
"$ref": "#/definitions/bookingInfo"
},
"resultValue": {
"$ref": "#/definitions/bookingInfo"
}
},
"getWeather": {
"description": "Retrieves and returns the weather for the user's location",
"type": "invoke",
"name": "GetWeather",
"value": {
"$ref": "#/definitions/location"
},
"resultValue": {
"$ref": "#/definitions/weatherReport"
}
},
"message": {
"type": "message",
"description": "Receives the user's' utterance and attempts to resolve it using the skill's LU models"
},
"typing": {
"type": "typing"
},
"conversationUpdate": {
"type": "conversationUpdate"
}
},
"definitions": {
"localeValue": {
"type": "object",
"properties": {
"locale": {
"type": "string",
"description": "The current user's locale ISO code"
}
}
},
"bookingInfo": {
"type": "object",
"required": [
"origin"
],
"properties": {
"origin": {
"type": "string",
"description": "this is the origin city for the flight"
},
"destination": {
"type": "string",
"description": "this is the destination city for the flight"
},
"date": {
"type": "string",
"description": "The date for the flight in YYYY-MM-DD format"
}
}
},
"weatherReport": {
"type": "array",
"description": "Array of forecasts for the next week.",
"items": [
{
"type": "string"
}
]
},
"location": {
"type": "object",
"description": "Location metadata",
"properties": {
"latitude": {
"type": "number",
"title": "Latitude"
},
"longitude": {
"type": "number",
"title": "Longitude"
},
"postalCode": {
"type": "string",
"title": "Postal code"
}
}
}
},
"activitiesSent": {
"flightUpdated": {
"type": "event",
"name": "FlightUpdated",
"description": "Event which is sent by the skill when there is an update in flight info",
"value": {
"type": "object",
"description": "Flight update information",
"properties": {
"flightNumber": {
"type": "string"
},
"departureDate": {
"type": "string",
"description": "The departure date for the flight in YYYY-MM-DD format"
},
"departureTime": {
"type": "string",
"description": "The departure time for the flight in HH-MM format"
}
}
}
}
}
}