Esquema de manifesto de plug-in da API 2.1 para Microsoft 365 Copilot
Os plug-ins de API permitem que Microsoft 365 Copilot interajam com as APIs REST descritas por uma descrição de OpenAPI. A descrição de OpenAPI num plug-in de API descreve as APIs REST com as quais o Copilot pode interagir. Além disso, um plug-in de API inclui um ficheiro de manifesto de plug-in que fornece metadados sobre o plug-in, como o nome, descrição e versão do plug-in. O manifesto de plug-in também inclui informações sobre as capacidades do plug-in, tais como as APIs que suporta e as operações que pode realizar.
O artigo seguinte descreve o esquema 2.1 utilizado pelos ficheiros de manifesto do plug-in da API. Para obter mais informações sobre plug-ins de API, veja Plug-ins de API para Microsoft 365 Copilot.
Importante
A versão mais recente do esquema de manifesto do plug-in da API é a versão 2.2. Recomendamos que os novos plug-ins utilizem a versão de esquema mais recente.
Esquema JSON
O esquema descrito neste documento pode ser encontrado no formato de Esquema JSONaqui.
Convenções
Referências relativas em URLs
Salvo especificação em contrário, todas as propriedades que são URLs poderão ser referências relativas. As referências relativas no documento de manifesto são relativas à localização do documento de manifesto.
Comprimento da cadeia
Salvo especificação em contrário, todas as propriedades de cadeia devem estar limitadas a 4K carateres. Este comprimento de cadeia não confere qualquer tamanho aceitável para todo o documento. Implementações livres para impor os seus próprios limites práticos ao comprimento do manifesto.
Propriedades não reconhecidas
Os objetos JSON definidos neste documento suportam apenas as propriedades descritas. As propriedades não reconhecidas em qualquer objeto JSON DEVEM tornar todo o documento inválido.
Localização de cadeias
As cadeias localizáveis podem utilizar uma chave de localização em vez de um valor literal. A sintaxe é [[key_name]]
, em key_name
que é o nome da chave na localizationKeys
propriedade nos ficheiros de localização. Para obter detalhes sobre a localização, veja Localizar o agente.
Exemplo de cadeia localizada
{
"schema_version": "v2.1",
"name_for_human": "[[plugin_name]]",
"description_for_human": "[[plugin_description]]"
}
Objeto de manifesto de plug-in
A raiz do documento de manifesto de plug-in é um objeto JSON que contém propriedades que descrevem o plug-in.
O objeto de manifesto de plug-in contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
schema_version |
Cadeia de caracteres | Obrigatório. A versão do esquema. As versões anteriores são v1 e v2 . Deve ser definida como v2.1 . |
name_for_human |
Cadeia de caracteres | Obrigatório. Um nome curto e legível por humanos para o plug-in. Tem de conter, pelo menos, um caráter não branco. Os carateres para além de 20 PODEM ser ignorados. Esta propriedade é localizável. |
namespace |
Cadeia de caracteres | Depreciado. Opcional. |
description_for_model |
String | Opcional. A descrição do plug-in fornecido ao modelo. Esta descrição deve descrever para que serve o plug-in e em que circunstâncias as suas funções são relevantes. Os carateres para além de 2048 PODEM ser ignorados. Esta propriedade é localizável. |
description_for_human |
Cadeia de caracteres | Obrigatório. Uma descrição legível por humanos do plug-in. Os carateres para além de 100 PODEM ser ignorados. Esta propriedade é localizável. |
logo_url |
String | Opcional. Um URL utilizado para obter um logótipo que pode ser utilizado pelo orquestrador. As implementações PODEM fornecer métodos alternativos para fornecer logótipos que cumpram os seus requisitos visuais. Esta propriedade é localizável. |
contact_email |
String | Opcional. Um endereço de e-mail de um contacto para segurança/moderação, suporte e desativação. |
legal_info_url |
String | Opcional. Um URL absoluto que localiza um documento que contém os termos de serviço do plug-in. Esta propriedade é localizável. |
privacy_policy_url |
String | Opcional. Um URL absoluto que localiza um documento que contém a política de privacidade do plug-in. Esta propriedade é localizável. |
functions |
Matriz do objeto Função | Opcional. Um conjunto de objetos de função que descreve as funções disponíveis para o plug-in. Cada nome de objeto de função TEM de ser exclusivo dentro da matriz. A ordem da matriz não é significativa. Se a functions propriedade não estiver presente e existir um runtime OpenAPI, as funções são inferidas a partir das operações OpenAPI. |
runtimes |
Matriz do objeto de runtime OpenAPI | Opcional. Um conjunto de objetos de runtime que descrevem os runtimes utilizados pelo plug-in. |
capabilities |
Objeto de capacidades de plug-in | Opcional. Descreve as capacidades do plug-in. |
Objeto de função
Informações relacionadas com a forma como o modelo deve interagir com uma função.
O objeto de função contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
id |
String | Opcional. |
name |
Cadeia de caracteres | Obrigatório. Uma cadeia que identifica exclusivamente esta função. Os objetos de runtime PODEM referenciar este identificador para vincular o runtime à função. Quando a função está vinculada a um runtime OpenAPI, o valor tem de corresponder a um operationId valor na descrição openAPI. O valor tem de corresponder à ^[A-Za-z0-9_]+$ expressão regular. |
description |
String | Opcional. Uma descrição melhor adaptada ao modelo, como considerações de comprimento do contexto de token ou palavra-chave utilização para pedidos de plug-in melhorados. |
parameters |
Objeto parâmetros de função | Opcional. Um objeto que contém propriedades que descrevem os parâmetros de uma função de uma forma agnóstica de runtime. Espelha a forma de json-schema , mas suporta apenas um pequeno subconjunto das capacidades de esquema JSON. Se a parameters propriedade não estiver presente, as funções descritas por um objeto de runtime do tipo OpenApi utilizam a descrição OpenAPI para determinar os parâmetros. Cada membro no objeto JSON é um objeto de parâmetro de função que descreve a semântica do parâmetro. |
returns |
Devolver objeto OU Objeto de devolução avançada | Opcional. Descreve a semântica do valor devolvido pela função. |
states |
Objeto estados da função | Opcional. Define objetos de estado para estados do orquestrador. |
capabilities |
Objeto de capacidades de função | Opcional. Contém uma coleção de dados utilizados para configurar capacidades opcionais do orquestrador ao invocar a função. |
Exemplo de objeto de função
{
"functions": [
{
"name": "add_todo",
"description": "Adds a new Todo",
"parameters": {
"type": "object",
"properties": {
"description": {
"type": "string"
}
},
"required": [
"description"
]
},
"returns": {
"type": "string"
}
}
]
}
Objeto parâmetros de função
Um objeto que é utilizado para identificar o conjunto de parâmetros que podem ser transmitidos para a função. Este objeto está estruturado para espelho a forma de um objeto de Esquema JSON, mas só suporta um subconjunto de palavras-chave de Esquema JSON.
O objeto parâmetros da função contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
type |
String | Opcional. O tipo de Esquema JSON. Tem que ser definida como object . |
properties |
Objeto de propriedades de parâmetros de função | Obrigatório. Um objeto que mapeia nomes de parâmetros para as respetivas definições. |
required |
Matriz de cadeias de caracteres | Opcional. Os nomes das propriedades que são parâmetros necessários. Ao contrário do esquema JSON, os valores nesta matriz TÊM de corresponder aos nomes listados na properties propriedade . |
Exemplo de objeto de parâmetros de função
{
"type": "object",
"properties": {
"param1": {
"type": "string"
},
"param2": {
"type": "number"
}
},
"required": [
"param1"
]
}
Objeto de propriedades de parâmetros de função
Um objeto que mapeia nomes de parâmetros para as respetivas definições.
O objeto de propriedades dos parâmetros da função contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
Correspondência de nomes ^[A-Za-z0-9_]+$ |
Objeto de parâmetro de função | Opcional. A definição do parâmetro que corresponde ao parâmetro que corresponde ao nome da propriedade. |
Objeto de parâmetro de função
Um objeto que descreve a semântica de um parâmetro de função.
O objeto do parâmetro de função contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
type |
Cadeia de caracteres | Obrigatório. Especifica o tipo do parâmetro. Os valores possíveis são: string , array , boolean , integer , number . |
items |
Objeto de parâmetro de função | Opcional. Um objeto de parâmetro de função que descreve um único elemento numa matriz. SÓ tem de estar presente quando type for array . |
enum |
Matriz de cadeias de caracteres | Opcional. Uma matriz de valores válidos para este parâmetro. SÓ tem de estar presente quando type for string . |
description |
String | Opcional. Uma descrição do parâmetro. |
default |
Matriz, Booleano, Cadeia, Número, Número Inteiro | Opcional. Um valor do tipo especificado pela type propriedade que indica o valor que a API utiliza quando não é fornecido um valor para um parâmetro opcional. |
Exemplo de parâmetro de função
{
"type": "string",
"description": "The color of the item",
"enum": [
"green",
"blue",
"orange"
]
}
Devolver objeto
Contém a semântica do valor devolvido pela função .
O objeto de retorno contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
type |
Cadeia de caracteres | Obrigatório. Especifica o tipo do valor devolvido pela API. Os valores possíveis são: string . |
description |
String | Opcional. Uma descrição do valor devolvido pela API. |
Objeto rich return
Indica que a função devolve uma resposta compatível com o protocolo Rich Responses.
O objeto rich return contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
$ref |
Cadeia de caracteres | Obrigatório. Tem que ser definida como https://copilot.microsoft.com/schemas/rich-response-v1.0.json . |
Objeto estados da função
Define objetos de estado para estados do orquestrador.
O objeto estados da função contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
reasoning |
Objeto de estado | Opcional. O estado no qual o modelo pode chamar funções e realizar cálculos. |
responding |
Objeto de estado | Opcional. O estado em que o modelo pode gerar texto que é mostrado ao utilizador. O modelo não consegue invocar funções no estado de resposta. |
disengaging |
Objeto de estado | Opcional. |
Objeto de estado
Contém instruções específicas para quando uma função é invocada num estado de orquestrador específico.
O objeto de estado contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
description |
String | Opcional. Descreve o objetivo de uma função quando utilizada num estado de orquestrador específico. |
instructions |
Matriz, Cadeia | Opcional. Uma cadeia ou uma matriz de cadeias que são utilizadas para fornecer instruções ao orquestrador sobre como utilizar esta função enquanto está num estado de orquestrador específico. Fornecer uma única cadeia indica a intenção de fornecer um conjunto completo de instruções que substituiriam quaisquer pedidos de função incorporados. Fornecer uma matriz de cadeias indica a intenção de aumentar o mecanismo de solicitação da função incorporada. |
examples |
Matriz, Cadeia | Opcional. Uma cadeia ou uma matriz de cadeias que são utilizadas para fornecer exemplos ao orquestrador sobre como esta função pode ser invocada. |
Exemplo de objeto de estado
{
"functions": [
{
"name": "searchEmails",
"description": "search for Emails from using 3S search Service",
"states": {
"reasoning": {
"description": "\n# `searchEmails(**params) -> str` returns the emails from user's inbox based on search query.",
"instructions": [
"Examine the output of `searchEmails(**params) -> str`.",
"Do not include any information that is not present in the JSON results.",
"Exclude any irrelevant data from the JSON results",
"Determine if the response contains an error field.",
"If an error is present, provide the error code and error message extracted from the response JSON.",
"If there is no error, extract and include as much relevant information as possible from the JSON result to meet the user's needs."
],
"examples": []
}
}
}
]
}
Objeto de capacidades de função
Contém uma coleção de dados utilizados para configurar capacidades opcionais do orquestrador ao invocar a função.
O objeto de capacidades de função contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
confirmation |
Objeto de confirmação | Opcional. Descreve uma caixa de diálogo de confirmação que DEVE ser apresentada ao utilizador antes de invocar a função. |
response_semantics |
Objeto semântica de resposta | Opcional. Descreve como o orquestrador pode interpretar o payload de resposta e fornecer uma composição visual. |
Objeto de confirmação
Descreve como o orquestrador pede ao utilizador para confirmar antes de chamar uma função.
O objeto de confirmação contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
type |
String | Opcional. Especifica o tipo de confirmação. Os valores possíveis são: None e AdaptiveCard . |
title |
String | Opcional. O título da caixa de diálogo de confirmação. Esta propriedade é localizável. |
body |
String | Opcional. O texto da caixa de diálogo de confirmação. Esta propriedade é localizável. |
Objeto semântica de resposta
Contém informações para identificar a semântica do payload de resposta e permitir a composição dessa informação numa experiência visual avançada com cartões adaptáveis.
O objeto semântica de resposta contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
data_path |
Cadeia de caracteres | Obrigatório. Uma consulta JSONPath RFC9535 que identifica um conjunto de elementos da resposta da função a serem compostos com o modelo especificado em cada item. |
properties |
Objeto de propriedades da semântica de resposta | Opcional. Permite o mapeamento de consultas JSONPath para elementos de dados conhecidos. Cada consulta JSONPath é relativa a um valor de resultado. |
static_template |
Objeto | Opcional. Um objeto JSON em conformidade com o Esquema de Cartão Ajustável e a linguagem templating. Esta instância do Cartão Ajustável é utilizada para compor um resultado da resposta do plug-in. Este valor é utilizado se o template_selector não estiver presente ou não conseguir resolve a uma card adaptável. |
oauth_card_path |
String | Opcional. |
Exemplo de modelo estático
{
"functions": {
"capabilities": {
"response_semantics": {
"data_path": "$.resources",
"properties": {
"title": "$.name",
"subtitle": "$.location",
"url": "$.href",
"information_protection_label": "$.ipLabel"
},
"static_template": {
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.5",
"body": [
{
"type": "TextBlock",
"text": "${name}",
"weight": "Bolder"
},
{
"type": "TextBlock",
"text": "${description}"
}
],
"action": [
{
"type": "Action.OpenUrl",
"title": "View",
"text": "${href}"
}
]
}
}
}
}
}
Exemplo de modelo dinâmico
{
"functions": {
"capabilities": {
"response_semantics": {
"data_path": "$.attachments",
"properties": {
"title": "$.title",
"subtitle": "$.subtitle",
"url": "$.url",
"thumbnail_url": "$.thumbnailUrl",
"template_selector": "$.template"
}
}
}
}
}
Objeto de propriedades da semântica de resposta
Permite o mapeamento de consultas JSONPath para elementos de dados conhecidos. Cada consulta JSONPath é relativa a um valor de resultado.
O objeto de propriedades da semântica de resposta contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
title |
String | Opcional. Título de uma citação para o resultado. |
subtitle |
String | Opcional. Subtítulo de uma citação para o resultado. |
url |
String | Opcional. URL de uma citação para o resultado. |
thumbnail_url |
String | Opcional. URL de uma imagem em miniatura para o resultado. |
information_protection_label |
String | Opcional. Indicador de confidencialidade dos dados dos conteúdos dos resultados. |
template_selector |
String | Opcional. Uma expressão JSONPath para uma instância de Cartão Ajustável a ser utilizada para compor o resultado. |
Objeto de runtime OpenAPI
Descreve como o plug-in invoca funções OpenAPI.
O objeto runtime OpenAPI contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
type |
Cadeia de caracteres | Obrigatório. Identifica este runtime como um runtime OpenAPI. Tem que ser definida como OpenApi . |
auth |
Objeto de autenticação de runtime | Obrigatório. Informações de autenticação necessárias para invocar o runtime. |
run_for_functions |
Matriz de cadeias de caracteres | Opcional. Os nomes das funções que estão disponíveis neste runtime. Se esta propriedade for omitida, todas as funções descritas pelo runtime estão disponíveis. Os valores de cadeia fornecidos podem conter carateres universais. Mais do que um runtime NÃO DEVE declarar suporte para a mesma função implicitamente ou explicitamente. |
spec |
Objeto de especificação OpenAPI | Obrigatório. Contém as informações de OpenAPI necessárias para invocar o runtime. |
Objeto de especificação OpenAPI
Contém as informações de OpenAPI necessárias para invocar o runtime.
O objeto de especificação OpenAPI contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
url |
String | Opcional. O URL para obter a especificação OpenAPI, chamada com um pedido GET. Este membro é necessário, a menos que api_description esteja presente. |
api_description |
String | Opcional. Uma cadeia que contém uma descrição openAPI. Se este membro estiver presente, url não será necessário e será ignorado se estiver presente. |
progress_style |
String | Opcional. O estilo de progresso que é utilizado para apresentar o progresso da função. Os valores possíveis são: None , ShowUsage , ShowUsageWithInput , ShowUsageWithInputAndOutput . |
Exemplo de objeto de especificação OpenAPI
{
"runtimes":
[
{
"type": "OpenApi",
"auth": {
"type": "None"
},
"spec": {
"url": "https://example.org/api/openapi.yaml",
}
}
]
}
Objeto de autenticação de runtime
Contém informações utilizadas pelo plug-in para autenticar no runtime.
O objeto de autenticação de runtime contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
type |
String | Opcional. Especifica o tipo de autenticação necessário para invocar uma função. Os valores possíveis são: None , OAuthPluginVault , ApiKeyPluginVault . |
reference_id |
String | Opcional. Um valor utilizado quando type é OAuthPluginVault ou ApiKeyPluginVault . O reference_id valor é adquirido de forma independente ao fornecer os valores de configuração de autenticação necessários. Este mecanismo existe para evitar a necessidade de armazenar valores secretos no manifesto do plug-in. |
Exemplo de objeto de autenticação de runtime
{
"type": "OAuthPluginVault",
"reference_id": "0123456-abcdef"
}
Objeto de capacidades de plug-in
Descreve as capacidades do plug-in.
O objeto de capacidades de plug-in contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
conversation_starters |
Matriz do objeto inicial de Conversação | Opcional. Iniciadores de conversação que podem ser apresentados ao utilizador para obter sugestões sobre como invocar o plug-in. |
Objeto de iniciação de conversação
Um exemplo de uma pergunta à qual o plug-in pode responder.
O objeto inicial da conversação contém as seguintes propriedades.
Propriedade | Tipo | Descrição |
---|---|---|
text |
Cadeia de caracteres | Obrigatório. O texto do iniciador da conversação. Esta propriedade é localizável. |
title |
String | Opcional. O título do iniciador de conversação. Esta propriedade é localizável. |
Exemplo de objeto de iniciação de conversação
{
"conversation_starters": [
{
"title": "Developer tasks",
"text": "What issues are assigned to me?"
}
]
}
Exemplo de manifesto
Eis um exemplo de um ficheiro de manifesto de plug-in que utiliza a maioria das propriedades do manifesto e propriedades do objeto descritas no artigo:
{
"schema_version": "v2.1",
"name_for_human": "Contoso Real Estate",
"description_for_human": "Find up-to-date, detailed real estate properties for sale on the market",
"description_for_model": "Plugin for finding properties for sale. Use it whenever a user asks about real estate properties for sale on the market. This plugin can be used to search for properties in a particular city, and with a given number of bedrooms, bathrooms, and amenities.",
"capabilities": {
"conversation_starters": [
{
"title": "Available listings",
"text": "What listings are available in my area?"
}
]
},
"functions": [
{
"name": "getListings",
"description": "Get a list of properties matching the specified criteria",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city to search properties in"
},
"bedrooms": {
"type": "number",
"description": "The number of bedrooms the property should have"
},
"bathrooms": {
"type": "number",
"description": "The number of bathrooms the property should have"
},
"amenities": {
"type": "array",
"description": "The list of amenities the property should have",
"items": {
"type": "string",
"description": "One amenity the property should have",
"enum": [
"air conditioning",
"balcony",
"dishwasher",
"elevator",
"fireplace",
"furniture",
"garden",
"gym",
"heating",
"jacuzzi",
"laundry room",
"microwave",
"no furniture",
"parking",
"patio",
"sauna",
"swimming pool",
"terrace",
"wi-fi"
]
}
}
}
},
"returns": {
"type": "string",
"description": "A list of properties"
},
"states": {
"reasoning": {
"description": "`getListings` returns a list of real estate properties for sale based on the specified criteria.",
"instructions": [
"If the user mentions a city in their question, only search in that city by using the city parameter.",
"If the user asks for properties with things like parking space, heating, jacuzzi, or similar amenities, use the amenities parameter to filter the results.",
"Only use the list of amenities provided in the amenities parameter enum. If the user asked for an amenity that is not in the list, find the closest match from the list, or ignore it if no match can be found.",
"Determine if the response contains an error field.",
"If an error is present, provide the error code and error message from the JSON response to the user.",
"If there is no error, extract and include as much relevant information as possible from the JSON response to meet the users needs."
]
}
}
},
{
"name": "saveSearch",
"description": "Save a search for properties for sale",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city to search in"
},
"bedrooms": {
"type": "number",
"description": "The number of bedrooms"
}
},
"required": [
"city"
]
},
"returns": {
"type": "string",
"description": "The unique ID for the saved search"
},
"states": {
"responding": {
"description": "`saveSearch` returns a unique ID that identifies the newly saved search.",
"instructions": [
"Examine the output of the `saveSearch` function.",
"Extract the unique ID integer from the output and include it in your response to the user."
]
}
}
},
{
"name": "deleteSavedSearch",
"description": "Delete a previously saved search",
"parameters": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"description": "The unique ID of the saved search"
}
},
"required": [
"id"
]
},
"returns": {
"type": "string",
"description": "True if the saved search was deleted, false otherwise"
}
}
],
"runtimes": [
{
"type": "OpenApi",
"auth": {
"type": "none"
},
"run_for_functions": [
"getListings",
"saveSearch",
"deleteSavedSearch"
],
"spec": {
"url": "http://contoso.com/openapi.yaml"
}
}
],
"logo_url": "http://contoso.com/logo.png",
"contact_email": "contact@contoso.com",
"legal_info_url": "https://contoso.com/legal/"
}