Início rápido do A2A do IQ de Trabalho

Pré-requisitos

Registar a aplicação no Microsoft Entra

Registe uma aplicação com permissões para aceder ao IQ do Trabalho. Quando regista a aplicação, obtém dois valores: APP_ID e TENANT_ID. Utilize estes valores com o exemplo de A2A para testar a configuração do inquilino.

Dica

Criar um agente do lado do servidor (aplicação Web)? Este início rápido utiliza um registo de cliente público (móvel/ambiente de trabalho) para o caminho mais simples para um exemplo de trabalho. Se a sua aplicação for um serviço do lado do servidor que chama o IQ de Trabalho em nome de um utilizador final (por exemplo, um agente Web que inicia sessão do utilizador e, em seguida, reencaminha a respetiva identidade para o IQ do Trabalho), utilize um registo de cliente confidencial com um segredo ou certificado de cliente. Troque o token do utilizador com o fluxo On-Behalf-Of (OBO). A superfície da API de QI de Trabalho e a permissão delegada WorkIQAgent.Ask são as mesmas em ambos os fluxos.

  1. Aceda ao centro de administração do Microsoft Entra. No painel de navegação esquerdo, selecione Entra ID e, em seguida, selecione Registros de aplicativo.
  2. Selecione Novo registro.
  3. Adicione um nome descritivo, defina Tipos de conta suportados como Contas apenas neste diretório organizacional e selecione Registar.
  4. Copie o ID da Aplicação (cliente). Este valor é o seu APP_ID.
  5. Selecione Autenticação. Selecione Adicionar uma plataforma (ou Adicionar URI de Redirecionamento). Na caixa de diálogo, selecione Aplicações móveis e de ambiente de trabalho.
    • Selecione o URI sugerido: https://login.microsoftonline.com/common/oauth2/nativeclient.
    • Em URIs de redirecionamento personalizados, adicione os seguintes dois URIs um de cada vez (cada um na sua própria linha):
      • http://localhost
      • ms-appx-web://microsoft.aad.brokerplugin/<APP_ID> (onde <APP_ID> está o seu APP_ID)
    • Em Definições avançadas, defina Permitir fluxos de cliente público comoSim.
    • Selecione Salvar.
  6. Selecione Permissões de API, Adicionar uma permissão e, em seguida, APIs que a minha organização utiliza. Work IQProcure e, em seguida, selecione Permissões delegadas. Selecione WorkIQAgent.Ask e, em seguida, selecione Adicionar permissões.
  7. Selecione Conceder consentimento do administrador para [o seu inquilino]. Reveja a caixa de diálogo de confirmação e selecione Sim.
  8. Copie o ID do Diretório (inquilino) da página de descrição geral do Microsoft Entra ID.

A permissão WorkIQAgent.Ask permite que a aplicação, em nome do utilizador com sessão iniciada, consulte as respetivas informações de trabalho do Microsoft 365 (correio, ficheiros, reuniões, conversas) através do IQ do Trabalho.

Início Rápido: protocolo A2A

O protocolo Agente a Agente (A2A) é um padrão aberto para a comunicação do agente. O QI de Trabalho suporta A2A v1.0 (este início rápido) e v0.3. O A2A-Version cabeçalho do pedido controla a distribuição da versão.

  • A2A-Version: 1.0 - formato de fio v1.0 (este início rápido)
  • A2A-Version: 0.3 (ou cabeçalho omitido) – formato de fio v0.3 (mantido como a predefinição sem cabeçalho para retrocompatibilidade com clientes v0.3 existentes)

Obter o código de exemplo

Clone o repositório de exemplo com o seguinte comando.

git clone https://github.com/microsoft/work-iq-samples.git
cd work-iq-samples

Executar o exemplo (com o SDK A2A)

O dotnet/a2a exemplo utiliza o SDK .NET A2A.

cd dotnet/a2a
dotnet run -- --token WAM --appid <APP_ID> --tenant <TENANT_ID>

Executar o exemplo (HTTP não processado, sem SDK)

O dotnet/a2a-raw exemplo mostra o protocolo de transmissão sem abstração do SDK. Utilizar este exemplo é útil para migrar para non-.NET idiomas.

cd dotnet/a2a-raw
dotnet run -- --token WAM --appid <APP_ID> --tenant <TENANT_ID>

O que acontece

Quando executa o exemplo, é apresentado um pedido de início de sessão (caixa de diálogo WAM no Windows, browser do sistema no macOS/Linux). Depois de iniciar sessão, escreva uma mensagem na You > linha de comandos e prima Enter. A resposta do agente é apresentada abaixo. Escreva quit para sair.

── READY — Work IQ Gateway — Sync — https://workiq.svc.cloud.microsoft/a2a/ ──
Type a message. 'quit' to exit.

You > Summarize my recent emails from Alice.
Agent > You've exchanged 8 emails with Alice this week. Key threads:
  - ...
  (2145 ms)

You > quit

Como funciona

O IQ de Trabalho aceita A2A v1.0 em JSON-RPC em https://workiq.svc.cloud.microsoft/a2a/. (A2A v1.0 também define um enlace REST em /v1/message:send; O QI de Trabalho pode expor este enlace REST numa atualização futura.)

Gateway de IQ de Trabalho

  • Ponto final: https://workiq.svc.cloud.microsoft/a2a/
  • Público-alvo do token: api://workiq.svc.cloud.microsoft
  • Escopo: WorkIQAgent.Ask

Síncrono SendMessage

POST https://workiq.svc.cloud.microsoft/a2a/
Authorization: Bearer <token>
Content-Type: application/json
A2A-Version: 1.0

{
  "jsonrpc": "2.0",
  "id": "<request-guid>",
  "method": "SendMessage",
  "params": {
    "message": {
      "role": "ROLE_USER",
      "messageId": "<message-guid>",
      "parts": [
        {
          "text": "What meetings do I have today?"
        }
      ],
      "metadata": {
        "Location": {
          "timeZoneOffset": -480,
          "timeZone": "America/Los_Angeles"
        }
      }
    }
  }
}

O A2A-Version: 1.0 cabeçalho do pedido ativa os nomes dos métodos v1.0 (SendMessage) no gateway. Sem este, o servidor é predefinido como v0.3 e devolve um JSON-RPC -32601 "Method not found" para nomes de métodos v1.0.

A resposta é um envelope JSON-RPC que result.task contém a tarefa do agente e um contextId para várias voltas:

{
  "jsonrpc": "2.0",
  "id": "<request-guid>",
  "result": {
    "task": {
      "id": "<task-id>",
      "contextId": "ctx-1",
      "status": {
        "state": "TASK_STATE_COMPLETED"
      },
      "artifacts": [
        {
          "artifactId": "<artifact-id>",
          "name": "Answer",
          "parts": [
            {
              "text": "Today you have: 9 AM standup, 11 AM review with Dana, 2 PM customer call."
            }
          ]
        }
      ]
    }
  }
}

O QI de Trabalho requer que os Location metadados moam consultas sensíveis ao tempo ("hoje" ou "esta semana") na hora local do utilizador.

Conversações multiturno

Para manter o estado da conversação, transmita o contextId da resposta anterior na mensagem seguinte.

{
  "jsonrpc": "2.0",
  "id": "<request-guid-2>",
  "method": "SendMessage",
  "params": {
    "message": {
      "role": "ROLE_USER",
      "messageId": "<message-guid-2>",
      "contextId": "ctx-1",
      "parts": [
        {
          "text": "Tell me more about the 2 PM customer call."
        }
      ]
    }
  }
}

Detalhes do protocolo chave (A2A v1.0)

  • Envelope JSON-RPC obrigatório: todos os pedidos têm de incluir jsonrpc, id, method, . params
  • POST para URL de base: o método (SendMessage) está dentro do corpo JSON-RPC, não do caminho do URL.
  • Partes de presença de campo: as partes são objetos planos com um de text, url, rawou data definido; sem kind discriminação.
  • SCREAMING_SNAKE_CASE enumerações: as funções utilizam ROLE_USER / ROLE_AGENT; os estados utilizam / TASK_STATE_WORKING / TASK_STATE_COMPLETEDTASK_STATE_FAILED/etc.
  • Wrapper de resultados: as respostas das tarefas são apresentadas em result.task.
  • Distribuição de versões:A2A-Version: 1.0 seleciona v1.0; omitir o cabeçalho (ou enviar A2A-Version: 0.3) seleciona v0.3, a predefinição sem cabeçalho.

Deteção de agente

Para invocar um agente específico, transmita o respetivo ID de agente através de .--agent-id Pode encontrar o ID de um agente de duas formas.

A CLI do WorkIQ inclui um comando experimental list-agents que lista os agentes disponíveis para o utilizador com sessão iniciada.

workiq config set experimental=true
workiq list-agents

Cada linha mostra o nome a apresentar, o fornecedor e o ID do agente do agente (a segunda linha de cada entrada). Utilize esse ID ao --agent-id executar o exemplo.

Alternativa: copiar do URL do Microsoft 365 Copilot

  1. Aceda ao site do Microsoft 365 Copilot Chat: https://m365.cloud.microsoft/chat/.
  2. Selecione o agente no painel de navegação esquerdo.
  3. O ID do agente aparece na barra de endereço do browser depois de /chat/agent/:
https://m365.cloud.microsoft/chat/agent/P_c0fd1ab0-cbf3-7eb9-1a7d-2d823549ef31.8ad61c39-5b6e-447c-b26a-a64eee436502
                                       └──────────────────────────── agent ID ─────────────────────────────────────┘

O formato é <LETTER>_<opaqueValue1>.<opaqueValue2>.

Transmitir o ID do agente para o exemplo

Importante

Trate todo o ID do agente como uma cadeia opaca. Não desconstrua nem analise os respetivos componentes. Transmita-o tal como está para a API.

Transmitir o ID do agente como um argumento para o exemplo

dotnet run -- --token WAM --agent-id <AGENT_ID> --appid <APP_ID> --tenant <TENANT_ID>

Observação

Alguns agentes do Microsoft 365 (nomeadamente Word, Excel e agentes do PowerPoint na IU do Copilot Chat) foram concebidos para serem executados no contexto desses produtos do Office e não produzem respostas úteis quando invocados sem cabeça através de A2A.

capacidades de A2A

Recursos Status
SendMessage (sincronizar) ✅ Disponível
Várias curvas (contextId) ✅ Disponível
Partes de texto ✅ Disponível
Citações ✅ Disponível (a forma de entrega está a ser modernizada; veja as notas de versão)

Autenticação

Método Plataforma Uso
WAM (Gestor de Conta do Windows) Windows --token WAM --appid <APP_ID> --tenant <TENANT_ID>
Browser interativo macOS, Linux Mesmo comando — o Cliente de Identidade da Microsoft reverte para um início de sessão no browser do sistema.
JWT pré-obtido Qualquer --token <JWT>(o token tem de ser emitido para a sua aplicação registada, não para um cliente arbitrário como o CLI do Azure)

Solução de problemas

Sintoma Correção
401 Unauthorized O token aud não corresponde api://workiq.svc.cloud.microsofta . Verifique a afirmação da audiência.
403 Forbidden (sem erro de âmbito) O utilizador não é membro de um plano de faturação baseado na utilização. Atribua e aguarde entre 15 e 30 minutos.
403 Forbidden com Required scopes = [...] Administração consentimento WorkIQAgent.Ask para não foi concedido. Execute novamente o consentimento do administrador (configuração do administrador, passo 6/Azure passo 3 da CLI).
WAM IncorrectConfiguration (3399614466) Falta o URI de redirecionamento do mediador no registo de aplicações. Lido ms-appx-web://microsoft.aad.brokerplugin/<APP_ID> e tente novamente.
O WAM continua a falhar depois de o URI de redirecionamento estar definido Aplicação de inquilino único + /common erro de correspondência de autoridade. Passe --tenant <TENANT_ID> para que o Cliente de Identidade da Microsoft utilize a autoridade específica do inquilino.
AADSTS65001: consent required Administração consentimento não foi concedido. Execute az ad app permission admin-consent --id <APP_ID>.
Vazio 200/ sem texto do agente Se a licença copilot do utilizador tiver sido atribuída recentemente, o índice pode demorar entre 15 e 30 minutos a criar. Se invocou um agente do Word/Excel/PowerPoint, esses agentes são executados no produto do Office e não produzem respostas A2A sem cabeça.