Esquema de manifesto de plug-in 2.1 para Microsoft 365 Copilot

Os plug-ins de API permitem que o Microsoft 365 Copilot interaja com APIs REST descritas por uma descrição de OpenAPI. A descrição do OpenAPI em um 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 arquivo de manifesto de plug-in que fornece metadados sobre o plug-in, como nome, descrição e versão do plug-in. O manifesto do plug-in também inclui informações sobre os recursos do plug-in, como as APIs que ele suporta e as operações que ele pode executar.

O artigo a seguir descreve o esquema 2.1 usado pelos arquivos de manifesto do plug-in de API. Para obter mais informações sobre plug-ins de API, consulte Plug-ins do Microsoft 365 Copilot.

Importante

A versão mais recente do esquema de manifesto do plug-in é a versão 2.4. Recomendamos que novos plug-ins usem a versão mais recente do esquema.

Esquema JSON

O esquema descrito neste documento pode ser encontrado no formato JSON Schemaaqui.

Convenções

Referências relativas em URLs

A menos que especificado de outra forma, todas as propriedades que são URLs PODEM ser referências relativas. As referências relativas no documento de manifesto são relativas ao local do documento de manifesto.

Comprimento da cadeia de caracteres

A menos que especificado de outra forma, todas as propriedades da cadeia de caracteres DEVEM ser limitadas a caracteres 4K. Esse comprimento de cadeia de caracteres não confere nenhum tamanho aceitável para todo o documento. As implementações são livres para impor seus próprios limites práticos sobre o comprimento do manifesto.

Propriedades não reconhecidas

Os objetos JSON definidos neste documento dão suporte apenas às propriedades descritas. Propriedades não reconhecidas em qualquer objeto JSON DEVEM tornar todo o documento inválido.

Localização de cadeia de caracteres

Cadeias de caracteres localizáveis podem usar uma chave de localização em vez de um valor literal. A sintaxe é [[key_name]], onde key_name está o nome da localizationKeys chave na propriedade em seus arquivos de localização. Para obter detalhes sobre localização, consulte Localizar seu agente.

Exemplo de cadeia de caracteres localizada

{
    "schema_version": "v2.1",
    "name_for_human": "[[plugin_name]]",
    "description_for_human": "[[plugin_description]]"
}

Objeto de manifesto do plug-in

A raiz do documento de manifesto do plug-in é um objeto JSON que contém propriedades que descrevem o plug-in.

O objeto de manifesto do plug-in contém as propriedades a seguir.

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 para o plug-in. Ele DEVE conter pelo menos um caractere que não seja espaço em branco. Caracteres além de 20 PODEM ser ignorados. Esta propriedade é localizável.
namespace Cadeia de caracteres Obrigatório. Contém um identificador usado para evitar conflitos de nome entre nomes de função de diferentes plug-ins. O valor DEVE corresponder ao regex ^[A-Za-z0-9]+.
description_for_model String Opcional. A descrição do plug-in fornecido ao modelo. Essa descrição deve descrever para que serve o plug-in e em quais circunstâncias suas funções são relevantes. Caracteres além de 2048 PODEM ser ignorados. Esta propriedade é localizável.
description_for_human Cadeia de caracteres Obrigatório. Uma descrição legível do plug-in. Caracteres acima de 100 PODEM ser ignorados. Esta propriedade é localizável.
logo_url String Opcional. Uma URL usada para buscar um logotipo que PODE ser usado pelo orquestrador. As implementações PODEM fornecer métodos alternativos para fornecer logotipos que atendam aos seus requisitos visuais. Esta propriedade é localizável.
contact_email String Opcional. Um endereço de email de um contato para segurança/moderação, suporte e desativação.
legal_info_url String Opcional. Uma URL absoluta que localiza um documento contendo os termos de serviço do plug-in. Esta propriedade é localizável.
privacy_policy_url String Opcional. Uma URL absoluta que localiza um documento que contém a política de privacidade do plug-in. Esta propriedade é localizável.
functions Matriz de objeto de função Opcional. Um conjunto de objetos de função que descrevem as funções disponíveis para o plug-in. Cada nome de objeto de função DEVE ser exclusivo dentro da matriz. A ordem da matriz não é significativa. Se a functions propriedade não estiver presente e houver um runtime de OpenAPI, as funções serão inferidas das operações de OpenAPI.
runtimes Matriz de objeto de tempo de execução OpenAPI Opcional. Um conjunto de objetos de tempo de execução que descrevem os tempos de execução usados pelo plug-in.
capabilities Objeto de recursos do plug-in Opcional. Descreve os recursos do plug-in.

Objeto de função

Informações relacionadas a como o modelo deve interagir com uma função.

O objeto de função contém as propriedades a seguir.

Propriedade Tipo Descrição
id String Opcional.
name Cadeia de caracteres Obrigatório. Uma cadeia de caracteres que identifica exclusivamente esta função. Os objetos de tempo de execução PODEM fazer referência a esse identificador para associar o tempo de execução à função. Quando a função é associada a um runtime OpenAPI, o valor deve corresponder a um operationId valor na descrição OpenAPI. O valor deve corresponder à ^[A-Za-z0-9_]+$ expressão regular.
description String Opcional. Uma descrição mais adaptada ao modelo, como considerações de comprimento de contexto de token ou uso de palavra-chave para prompting de plug-in aprimorado.
parameters Objeto de parâmetros de função Opcional. Um objeto que contém propriedades que descrevem os parâmetros de uma função de maneira independente do tempo de execução. Ele espelha a forma do json-schema , mas suporta apenas um pequeno subconjunto dos recursos do esquema JSON. Se a propriedade não estiver presente, as parameters funções descritas por um objeto de tempo de execução do tipo OpenApi usarão a descrição do 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 Objeto de retorno OU Objeto de retorno avançado Opcional. Descreve a semântica do valor retornado da função.
states Objeto de estados de função Opcional. Define objetos de estado para estados do orquestrador.
capabilities Objeto de recursos da função Opcional. Contém uma coleção de dados usados para configurar recursos 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 de parâmetros de função

Um objeto usado para identificar o conjunto de parâmetros que podem ser passados para a função. Esse objeto é estruturado para espelho a forma de um objeto de esquema JSON, mas suporta apenas um subconjunto de palavras-chave de esquema JSON.

O objeto parâmetros de função contém as propriedades a seguir.

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 suas definições.
required Matriz de cadeias de caracteres Opcional. Os nomes das propriedades que são parâmetros obrigatórios. Ao contrário do esquema JSON, os valores nesta matriz DEVEM 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 suas definições.

O objeto de propriedades de parâmetros de função contém as propriedades a seguir.

Propriedade Tipo Descrição
Correspondência de nomes ^[A-Za-z0-9_]+$ Objeto de parâmetro de função Opcional. A definição de 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 de parâmetro de função contém as propriedades a seguir.

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 em uma matriz. DEVE estar presente apenas quando type estiver array.
enum Matriz de cadeias de caracteres Opcional. Uma matriz de valores válidos para esse parâmetro. DEVE estar presente apenas quando type estiver string.
description String Opcional. Uma descrição do parâmetro.
default Matriz, Booleano, Cadeia de caracteres, Número, Inteiro Opcional. Um valor do tipo especificado pela type propriedade que indica o valor que a API usa quando um valor para um parâmetro opcional não é fornecido.
Exemplo de parâmetro de função
{
  "type": "string",
  "description": "The color of the item",
  "enum": [
    "green",
    "blue",
    "orange"
  ]
}

Objeto de retorno

Contém a semântica do valor retornado da função.

O objeto de retorno contém as propriedades a seguir.

Propriedade Tipo Descrição
type Cadeia de caracteres Obrigatório. Especifica o tipo do valor retornado pela API. Os valores possíveis são: string.
description String Opcional. Uma descrição do valor retornado pela API.

Objeto de retorno avançado

Indica que a função retorna uma resposta compatível com o protocolo de Rich Responses.

O objeto de retorno avançado contém as propriedades a seguir.

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 de estados de função

Define objetos de estado para estados do orquestrador.

O objeto de estados de função contém as propriedades a seguir.

Propriedade Tipo Descrição
reasoning Objeto de estado Opcional. O estado no qual o modelo pode chamar funções e fazer cálculos.
responding Objeto de estado Opcional. O estado no qual o modelo pode gerar texto que é mostrado para o usuário. O modelo não pode 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 em um estado de orquestrador específico.

O objeto state contém as propriedades a seguir.

Propriedade Tipo Descrição
description String Opcional. Descreve a finalidade de uma função quando usada em um estado de orquestrador específico.
instructions Matriz, Cadeia de Caracteres Opcional. Uma cadeia de caracteres ou uma matriz de cadeias de caracteres que são usadas para fornecer instruções ao orquestrador sobre como usar esta função enquanto estiver em um estado específico do orquestrador. Fornecer uma única cadeia de caracteres indica a intenção de fornecer um conjunto completo de instruções que substituiria quaisquer prompts de função internos. Fornecer uma matriz de cadeias de caracteres indica a intenção de aumentar o mecanismo interno de solicitação de função.
examples Matriz, Cadeia de Caracteres Opcional. Uma cadeia de caracteres ou uma matriz de cadeias de caracteres que são usadas para fornecer exemplos ao orquestrador sobre como essa 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 recursos da função

Contém uma coleção de dados usados para configurar recursos opcionais do orquestrador ao invocar a função.

O objeto de recursos da função contém as propriedades a seguir.

Propriedade Tipo Descrição
confirmation Objeto de confirmação Opcional. Descreve uma caixa de diálogo de confirmação que DEVE ser apresentada ao usuário antes de invocar a função.
response_semantics Objeto de semântica de resposta Opcional. Descreve como o orquestrador pode interpretar o conteúdo de resposta e fornecer uma renderização visual.

Objeto de confirmação

Descreve como o orchestrator solicita que o usuário confirme antes de chamar uma função.

O objeto de confirmação contém as propriedades a seguir.

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 de semântica de resposta

Contém informações para identificar a semântica do conteúdo de resposta e habilitar a renderização dessas informações em uma experiência visual avançada usando Cartões Adaptáveis.

O objeto de semântica de resposta contém as propriedades a seguir.

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 ser renderizada usando o modelo especificado em cada item.
properties Objeto de propriedades de 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 que está em conformidade com o esquema do Cartão Adaptável e a linguagem de modelos. Essa instância do Cartão Adaptável é usada para renderizar um resultado da resposta do plug-in. Esse valor será usado se o template_selector não estiver presente ou não for resolvido para um adaptive card.
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 de 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 de semântica de resposta contém as propriedades a seguir.

Propriedade Tipo Descrição
title String Opcional. Título de uma citação para o resultado.
subtitle String Opcional. Legenda 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 de dados do conteúdo do resultado.
template_selector String Opcional. Uma expressão JSONPath para uma instância de Cartão Adaptável a ser usada para renderizar o resultado.

Objeto de tempo de execução de OpenAPI

Descreve como o plug-in invoca funções OpenAPI.

O objeto de tempo de execução OpenAPI contém as propriedades a seguir.

Propriedade Tipo Descrição
type Cadeia de caracteres Obrigatório. Identifica esse tempo de execução como um tempo de execução 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 tempo de execução.
run_for_functions Matriz de cadeias de caracteres Opcional. Os nomes das funções que estão disponíveis neste tempo de execução. Se essa propriedade for omitida, todas as funções descritas pelo runtime estarão disponíveis. Os valores de cadeia de caracteres fornecidos podem conter curingas. Mais de um runtime NÃO DEVE declarar suporte para a mesma função implícita ou explicitamente.
spec Objeto de especificação de OpenAPI Obrigatório. Contém as informações de OpenAPI necessárias para invocar o tempo de execução.

Objeto de especificação de OpenAPI

Contém as informações de OpenAPI necessárias para invocar o tempo de execução.

O objeto de especificação OpenAPI contém as propriedades a seguir.

Propriedade Tipo Descrição
url String Opcional. A URL para buscar a especificação OpenAPI, chamada com uma solicitação GET. Este membro é necessário, a menos que api_description esteja presente.
api_description String Opcional. Uma cadeia de caracteres que contém uma descrição de OpenAPI. Se esse membro estiver presente, url não é necessário e será ignorado se estiver presente.
progress_style String Opcional. O estilo de progresso usado para exibir o progresso da função. Os valores possíveis são: None, ShowUsage, ShowUsageWithInput, ShowUsageWithInputAndOutput.
Exemplo de objeto de especificação de 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 usadas pelo plug-in para autenticar o tempo de execução.

O objeto de autenticação de tempo de execução contém as propriedades a seguir.

Propriedade Tipo Descrição
type Cadeia de caracteres Obrigatório. 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 usado quando type é OAuthPluginVault ou ApiKeyPluginVault. O reference_id valor é adquirido independentemente ao fornecer os valores de configuração de autenticação necessários. Esse 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 recursos do plug-in

Descreve os recursos do plug-in.

O objeto de recursos do plug-in contém as propriedades a seguir.

Propriedade Tipo Descrição
conversation_starters Matriz de objeto inicial de conversa Opcional. Iniciadores de conversa que podem ser exibidos ao usuário para sugestões sobre como invocar o plug-in.

Objeto de início de conversa

Um exemplo de uma pergunta que o plug-in pode responder.

O objeto inicial de conversa contém as seguintes propriedades.

Propriedade Tipo Descrição
text Cadeia de caracteres Obrigatório. O texto do início da conversa. Esta propriedade é localizável.
title String Opcional. O título do iniciador de conversa. Esta propriedade é localizável.
Exemplo de objeto inicial de conversa
{
  "conversation_starters": [
    {
      "title": "Developer tasks",
      "text": "What issues are assigned to me?"
    }
  ]
}

Exemplo de manifesto

Aqui está um exemplo de um arquivo de manifesto de plug-in que usa a maioria das propriedades de manifesto e de 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/"
}