Compartilhar via


Como usar o resumo de conversas

Importante

Nossa região de versão prévia, a Suécia Central, demonstra nossas técnicas de ajuste fino de LLM mais recentes e em constante evolução baseadas em modelos GPT. Você está convidado a experimentá-los com um recurso de idiomas na região da Suécia Central.

O resumo da conversa só está disponível usando:

  • API REST
  • Python
  • C#

Aspectos da sumarização de conversas

  • O título do capítulo e a narrativa (conversa geral) foram criados para resumir uma conversa em títulos de capítulo e um resumo do conteúdo da conversa. Esse tipo de sumarização dá certo em conversas com várias partes.

  • O problema e a resolução (com foco no call center) foram criados para resumir os logs de chat de texto entre clientes e agentes de atendimento ao cliente. Esse recurso pode apresentar os problemas e as resoluções presentes nesses logs, que ocorrem entre as duas partes.

  • A narrativa foi projetada para resumir a narrativa de uma conversa.

  • A recapitulação foi projetada para condensar longas reuniões ou conversas em um resumo conciso de um parágrafo para fornecer uma visão geral rápida.

  • As tarefas de acompanhamento foram projetadas para resumir itens de ação e tarefas que surgem durante uma reunião.

Um diagrama para enviar dados para problemas de sumarização de conversas e funcionalidade de resolução.

Os modelos de IA usados pela API são fornecidos pelo serviço; basta enviar o conteúdo para análise.

Para facilitar a navegação, aqui estão links para as seções correspondentes para cada serviço:

Aspecto Seção
Problema e resolução Problema e resolução
Título do capítulo Título do capítulo
Narrativa Narrativa
Recapitulação e acompanhamento Recapitulação e acompanhamento

Recursos

A API de sumarização de conversas usa técnicas de processamento de linguagem natural para fazer resumos mais breves das conversas por solicitação. A sumarização de conversas pode resumir problemas e resoluções discutidos em uma conversa de duas partes ou resumir uma longa conversa em capítulos e uma breve narrativa para cada capítulo.

Há outro recurso na Linguagem de IA do Azure chamado resumo de texto mais adequado para resumir documentos em resumos concisos. Ao decidir entre resumo de texto e resumo de conversa, considere os seguintes pontos:

  • Formato de entrada: a sumarização de conversas pode operar em transcrições de texto de chat e de fala, que incluem os falantes e seus enunciados. O resumo de texto opera usando texto simples ou formatos do Word, PDF ou PowerPoint.
  • Finalidade da sumarização: por exemplo, a sumarização de problemas e resoluções de conversa retornam um motivo e a resolução de um chat entre um cliente e um agente de atendimento ao cliente.

Enviar dados

Observação

Consulte o artigo do Language Studio para obter mais informações sobre a formatação de texto de conversa para enviar usando o Language Studio.

Os documentos são enviados para a API como cadeias de caracteres de texto. A análise é executada após o recebimento da solicitação. Como a API é assíncrona, pode haver um atraso entre o envio de uma solicitação de API e o recebimento dos resultados. Para obter informações sobre o tamanho e o número de solicitações que você pode enviar por minuto e segundo, confira o artigo de limites de dados abaixo.

Quando você usa esse recurso, os resultados da API ficam disponíveis por 24 horas a partir do momento em que a solicitação foi ingerida e isso é indicado na resposta. Após esse período de tempo, os resultados são limpos e não estão mais disponíveis para recuperação.

Quando você envia dados para o resumo de conversas, é recomendável enviar um log de chat por solicitação, para obter uma latência melhor.

Obter resumos de chats de texto

Você pode usar a sumarização de problemas e resoluções de conversa para obter resumos conforme necessário. Para ver um exemplo do uso de chats de texto, confira o artigo de início rápido.

Obter resumos de transcrições de fala

O resumo do problema e da resolução da conversa também permite que você obtenha resumos das transcrições de fala usando o recurso Conversão de fala em texto do serviço de Fala. O exemplo a seguir mostra uma conversa curta que você pode incluir nas solicitações de API.

"conversations":[
   {
      "id":"abcdefgh-1234-1234-1234-1234abcdefgh",
      "language":"en",
      "modality":"transcript",
      "conversationItems":[
         {
            "modality":"transcript",
            "participantId":"speaker",
            "id":"12345678-abcd-efgh-1234-abcd123456",
            "content":{
               "text":"Hi.",
               "lexical":"hi",
               "itn":"hi",
               "maskedItn":"hi",
               "audioTimings":[
                  {
                     "word":"hi",
                     "offset":4500000,
                     "duration":2800000
                  }
               ]
            }
         }
      ]
   }
]

Obter títulos de capítulo

A sumarização de títulos de capítulo da conversa permite obter os títulos de capítulo das conversas de entrada. Veja um cenário de exemplo guiado fornecido abaixo:

  1. Copie o comando abaixo em um editor de texto. O exemplo de BASH usa o caractere de continuação de linha \. Se o console ou o terminal usar um caractere de continuação de linha diferente, use aquele caractere.
curl -i -X POST https://<your-language-resource-endpoint>/language/analyze-conversations/jobs?api-version=2023-11-15-preview \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: <your-language-resource-key>" \
-d \
' 
{
  "displayName": "Conversation Task Example",
  "analysisInput": {
    "conversations": [
      {
        "conversationItems": [
          {
            "text": "Hello, you’re chatting with Rene. How may I help you?",
            "id": "1",
            "role": "Agent",
            "participantId": "Agent_1"
          },
          {
            "text": "Hi, I tried to set up wifi connection for Smart Brew 300 espresso machine, but it didn’t work.",
            "id": "2",
            "role": "Customer",
            "participantId": "Customer_1"
          },
          {
            "text": "I’m sorry to hear that. Let’s see what we can do to fix this issue. Could you please try the following steps for me? First, could you push the wifi connection button, hold for 3 seconds, then let me know if the power light is slowly blinking on and off every second?",
            "id": "3",
            "role": "Agent",
            "participantId": "Agent_1"
          },
          {
            "text": "Yes, I pushed the wifi connection button, and now the power light is slowly blinking.",
            "id": "4",
            "role": "Customer",
            "participantId": "Customer_1"
          },
          {
            "text": "Great. Thank you! Now, please check in your Contoso Coffee app. Does it prompt to ask you to connect with the machine? ",
            "id": "5",
            "role": "Agent",
            "participantId": "Agent_1"
          },
          {
            "text": "No. Nothing happened.",
            "id": "6",
            "role": "Customer",
            "participantId": "Customer_1"
          },
          {
            "text": "I’m very sorry to hear that. Let me see if there’s another way to fix the issue. Please hold on for a minute.",
            "id": "7",
            "role": "Agent",
            "participantId": "Agent_1"
          }
        ],
        "modality": "text",
        "id": "conversation1",
        "language": "en"
      }
    ]
  },
  "tasks": [
    {
      "taskName": "Conversation Task 1",
      "kind": "ConversationalSummarizationTask",
      "parameters": {
        "summaryAspects": [
          "chapterTitle"
        ]
      }
    }
  ]
}
'
  1. Faça as alterações a seguir no comando quando necessário:

    • Substitua o valor your-value-language-key pela chave.
    • Substitua a primeira parte da URL de solicitação your-language-resource-endpoint pela sua URL do ponto de extremidade.
  2. Abra uma janela do prompt de comando (por exemplo: BASH).

  3. Cole o comando do editor de texto na janela do prompt de comando e, em seguida, execute-o.

  4. Obtenha operation-location do cabeçalho de resposta. O valor parece semelhante à seguinte URL:

https://<your-language-resource-endpoint>/language/analyze-conversations/jobs/12345678-1234-1234-1234-12345678?api-version=2023-11-15-preview
  1. Para obter os resultados da solicitação, use o comando cURL a seguir. Substitua <my-job-id> pelo valor do GUID recebido do cabeçalho de resposta operation-location anterior:
curl -X GET https://<your-language-resource-endpoint>/language/analyze-conversations/jobs/<my-job-id>?api-version=2023-11-15-preview \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: <your-language-resource-key>"

Exemplo de resposta JSON da sumarização de título de capítulo:

{
    "jobId": "b01af3b7-1870-460a-9e36-09af28d360a1",
    "lastUpdatedDateTime": "2023-11-15T18:24:26Z",
    "createdDateTime": "2023-11-15T18:24:23Z",
    "expirationDateTime": "2023-11-16T18:24:23Z",
    "status": "succeeded",
    "errors": [],
    "displayName": "Conversation Task Example",
    "tasks": {
        "completed": 1,
        "failed": 0,
        "inProgress": 0,
        "total": 1,
        "items": [
            {
                "kind": "conversationalSummarizationResults",
                "taskName": "Conversation Task 1",
                "lastUpdateDateTime": "2023-11-15T18:24:26.3433677Z",
                "status": "succeeded",
                "results": {
                    "conversations": [
                        {
                            "summaries": [
                                {
                                    "aspect": "chapterTitle",
                                    "text": "\"Discussing the Problem of Smart Blend 300 Espresso Machine's Wi-Fi Connectivity\"",
                                    "contexts": [
                                        {
                                            "conversationItemId": "1",
                                            "offset": 0,
                                            "length": 53
                                        },
                                        {
                                            "conversationItemId": "2",
                                            "offset": 0,
                                            "length": 94
                                        },
                                        {
                                            "conversationItemId": "3",
                                            "offset": 0,
                                            "length": 266
                                        },
                                        {
                                            "conversationItemId": "4",
                                            "offset": 0,
                                            "length": 85
                                        },
                                        {
                                            "conversationItemId": "5",
                                            "offset": 0,
                                            "length": 119
                                        },
                                        {
                                            "conversationItemId": "6",
                                            "offset": 0,
                                            "length": 21
                                        },
                                        {
                                            "conversationItemId": "7",
                                            "offset": 0,
                                            "length": 109
                                        }
                                    ]
                                }
                            ],
                            "id": "conversation1",
                            "warnings": []
                        }
                    ],
                    "errors": [],
                    "modelVersion": "latest"
                }
            }
        ]
    }
}

Para uma longa conversa, o modelo pode segmentá-lo em várias partes coesas e resumir cada segmento. Há também um campo contexts longo para cada resumo, que informa de qual intervalo da conversa de entrada geramos o resumo.

Obter resumo narrativo

A sumarização de conversas também permite obter resumos narrativos de conversas de entrada. Veja um cenário de exemplo guiado fornecido abaixo:

  1. Copie o comando abaixo em um editor de texto. O exemplo de BASH usa o caractere de continuação de linha \. Se o console ou o terminal usar um caractere de continuação de linha diferente, use aquele caractere.
curl -i -X POST https://<your-language-resource-endpoint>/language/analyze-conversations/jobs?api-version=2023-11-15-preview \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: <your-language-resource-key>" \
-d \
' 
{
  "displayName": "Conversation Task Example",
  "analysisInput": {
    "conversations": [
      {
        "conversationItems": [
          {
            "text": "Hello, you’re chatting with Rene. How may I help you?",
            "id": "1",
            "role": "Agent",
            "participantId": "Agent_1"
          },
          {
            "text": "Hi, I tried to set up wifi connection for Smart Brew 300 espresso machine, but it didn’t work.",
            "id": "2",
            "role": "Customer",
            "participantId": "Customer_1"
          },
          {
            "text": "I’m sorry to hear that. Let’s see what we can do to fix this issue. Could you please try the following steps for me? First, could you push the wifi connection button, hold for 3 seconds, then let me know if the power light is slowly blinking on and off every second?",
            "id": "3",
            "role": "Agent",
            "participantId": "Agent_1"
          },
          {
            "text": "Yes, I pushed the wifi connection button, and now the power light is slowly blinking.",
            "id": "4",
            "role": "Customer",
            "participantId": "Customer_1"
          },
          {
            "text": "Great. Thank you! Now, please check in your Contoso Coffee app. Does it prompt to ask you to connect with the machine? ",
            "id": "5",
            "role": "Agent",
            "participantId": "Agent_1"
          },
          {
            "text": "No. Nothing happened.",
            "id": "6",
            "role": "Customer",
            "participantId": "Customer_1"
          },
          {
            "text": "I’m very sorry to hear that. Let me see if there’s another way to fix the issue. Please hold on for a minute.",
            "id": "7",
            "role": "Agent",
            "participantId": "Agent_1"
          }
        ],
        "modality": "text",
        "id": "conversation1",
        "language": "en"
      }
    ]
  },
  "tasks": [
    {
      "taskName": "Conversation Task 1",
      "kind": "ConversationalSummarizationTask",
      "parameters": {
        "summaryAspects": [
          "narrative"
        ]
      }
    }
  ]
}
'
  1. Faça as alterações a seguir no comando quando necessário:

    • Substitua o valor your-language-resource-key pela chave.
    • Substitua a primeira parte da URL de solicitação your-language-resource-endpoint pela sua URL do ponto de extremidade.
  2. Abra uma janela do prompt de comando (por exemplo: BASH).

  3. Cole o comando do editor de texto na janela do prompt de comando e, em seguida, execute-o.

  4. Obtenha operation-location do cabeçalho de resposta. O valor parece semelhante à seguinte URL:

https://<your-language-resource-endpoint>/language/analyze-conversations/jobs/12345678-1234-1234-1234-12345678?api-version=2023-11-15-preview
  1. Para obter os resultados de uma solicitação, use o comando cURL a seguir. Substitua <my-job-id> pelo valor do GUID recebido do cabeçalho de resposta operation-location anterior:
curl -X GET https://<your-language-resource-endpoint>/language/analyze-conversations/jobs/<my-job-id>?api-version=2023-11-15-preview \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: <your-language-resource-key>"

Exemplo de resposta JSON da sumarização narrativa:

{
  "jobId": "d874a98c-bf31-4ac5-8b94-5c236f786754",
  "lastUpdatedDateTime": "2022-09-29T17:36:42Z",
  "createdDateTime": "2022-09-29T17:36:39Z",
  "expirationDateTime": "2022-09-30T17:36:39Z",
  "status": "succeeded",
  "errors": [],
  "displayName": "Conversation Task Example",
  "tasks": {
    "completed": 1,
    "failed": 0,
    "inProgress": 0,
    "total": 1,
    "items": [
      {
        "kind": "conversationalSummarizationResults",
        "taskName": "Conversation Task 1",
        "lastUpdateDateTime": "2022-09-29T17:36:42.895694Z",
        "status": "succeeded",
        "results": {
          "conversations": [
            {
              "summaries": [
                {
                  "aspect": "narrative",
                  "text": "Agent_1 helps customer to set up wifi connection for Smart Brew 300 espresso machine.",
                  "contexts": [
                    { "conversationItemId": "1", "offset": 0, "length": 53 },
                    { "conversationItemId": "2", "offset": 0, "length": 94 },
                    { "conversationItemId": "3", "offset": 0, "length": 266 },
                    { "conversationItemId": "4", "offset": 0, "length": 85 },
                    { "conversationItemId": "5", "offset": 0, "length": 119 },
                    { "conversationItemId": "6", "offset": 0, "length": 21 },
                    { "conversationItemId": "7", "offset": 0, "length": 109 }
                  ]
                }
              ],
              "id": "conversation1",
              "warnings": []
            }
          ],
          "errors": [],
          "modelVersion": "latest"
        }
      }
    ]
  }
}

Para uma longa conversa, o modelo pode segmentá-lo em várias partes coesas e resumir cada segmento. Há também um campo contexts longo para cada resumo, que informa de qual intervalo da conversa de entrada geramos o resumo.

Obter o resumo de tarefas de acompanhamento e a recapitulação

A sumarização de conversas também permite que você obtenha recapitulações e tarefas de acompanhamento das conversas de entrada. Veja um cenário de exemplo guiado fornecido abaixo:

  1. Copie o comando abaixo em um editor de texto. O exemplo de BASH usa o caractere de continuação de linha \. Se o console ou o terminal usar um caractere de continuação de linha diferente, use aquele caractere.
curl -i -X POST https://<your-language-resource-endpoint>/language/analyze-conversations/jobs?api-version=2023-11-15-preview \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: <your-language-resource-key>" \
-d \
' 
{
  "displayName": "Conversation Task Example",
  "analysisInput": {
    "conversations": [
      {
        "conversationItems": [
          {
            "text": "Hello, you’re chatting with Rene. How may I help you?",
            "id": "1",
            "role": "Agent",
            "participantId": "Agent_1"
          },
          {
            "text": "Hi, I tried to set up wifi connection for Smart Brew 300 espresso machine, but it didn’t work.",
            "id": "2",
            "role": "Customer",
            "participantId": "Customer_1"
          },
          {
            "text": "I’m sorry to hear that. Let’s see what we can do to fix this issue. Could you please try the following steps for me? First, could you push the wifi connection button, hold for 3 seconds, then let me know if the power light is slowly blinking on and off every second?",
            "id": "3",
            "role": "Agent",
            "participantId": "Agent_1"
          },
          {
            "text": "Yes, I pushed the wifi connection button, and now the power light is slowly blinking.",
            "id": "4",
            "role": "Customer",
            "participantId": "Customer_1"
          },
          {
            "text": "Great. Thank you! Now, please check in your Contoso Coffee app. Does it prompt to ask you to connect with the machine? ",
            "id": "5",
            "role": "Agent",
            "participantId": "Agent_1"
          },
          {
            "text": "No. Nothing happened.",
            "id": "6",
            "role": "Customer",
            "participantId": "Customer_1"
          },
          {
            "text": "I’m very sorry to hear that. Let me see if there’s another way to fix the issue. Please hold on for a minute.",
            "id": "7",
            "role": "Agent",
            "participantId": "Agent_1"
          }
        ],
        "modality": "text",
        "id": "conversation1",
        "language": "en"
      }
    ]
  },
  "tasks": [
    {
      "taskName": "Conversation Task 1",
      "kind": "ConversationalSummarizationTask",
      "parameters": {
        "summaryAspects": [
          "recap",
          "follow-up tasks"
        ]
      }
    }
  ]
}
'
  1. Faça as alterações a seguir no comando quando necessário:

    • Substitua o valor your-language-resource-key pela chave.
    • Substitua a primeira parte da URL de solicitação your-language-resource-endpoint pela sua URL do ponto de extremidade.
  2. Abra uma janela do prompt de comando (por exemplo: BASH).

  3. Cole o comando do editor de texto na janela do prompt de comando e, em seguida, execute-o.

  4. Obtenha operation-location do cabeçalho de resposta. O valor parece semelhante à seguinte URL:

https://<your-language-resource-endpoint>/language/analyze-conversations/jobs/12345678-1234-1234-1234-12345678?api-version=2023-11-15-preview
  1. Para obter os resultados de uma solicitação, use o comando cURL a seguir. Substitua <my-job-id> pelo valor do GUID recebido do cabeçalho de resposta operation-location anterior:
curl -X GET https://<your-language-resource-endpoint>/language/analyze-conversations/jobs/<my-job-id>?api-version=2023-11-15-preview \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: <your-language-resource-key>"

Exemplo de recapitulação e resposta JSON de sumarização de acompanhamento:

{
    "jobId": "e585d097-c19a-466e-8f99-a9646e55b1f5",
    "lastUpdatedDateTime": "2023-11-15T18:19:56Z",
    "createdDateTime": "2023-11-15T18:19:53Z",
    "expirationDateTime": "2023-11-16T18:19:53Z",
    "status": "succeeded",
    "errors": [],
    "displayName": "Conversation Task Example",
    "tasks": {
        "completed": 1,
        "failed": 0,
        "inProgress": 0,
        "total": 1,
        "items": [
            {
                "kind": "conversationalSummarizationResults",
                "taskName": "Conversation Task 1",
                "lastUpdateDateTime": "2023-11-15T18:19:56.1801785Z",
                "status": "succeeded",
                "results": {
                    "conversations": [
                        {
                            "summaries": [
                                {
                                    "aspect": "recap",
                                    "text": "The customer contacted the service agent, Rene, regarding an issue with setting up a wifi connection for their Smart Brew 300 espresso machine. The agent guided the customer through several steps, including pushing the wifi connection button and checking if the power light was blinking. However, the customer reported that no prompts were received in the Contoso Coffee app to connect with the machine. The agent then decided to look for another solution.",
                                    "contexts": [
                                        {
                                            "conversationItemId": "1",
                                            "offset": 0,
                                            "length": 53
                                        },
                                        {
                                            "conversationItemId": "2",
                                            "offset": 0,
                                            "length": 94
                                        },
                                        {
                                            "conversationItemId": "3",
                                            "offset": 0,
                                            "length": 266
                                        },
                                        {
                                            "conversationItemId": "4",
                                            "offset": 0,
                                            "length": 85
                                        },
                                        {
                                            "conversationItemId": "5",
                                            "offset": 0,
                                            "length": 119
                                        },
                                        {
                                            "conversationItemId": "6",
                                            "offset": 0,
                                            "length": 21
                                        },
                                        {
                                            "conversationItemId": "7",
                                            "offset": 0,
                                            "length": 109
                                        }
                                    ]
                                },
                                {
                                    "aspect": "Follow-Up Tasks",
                                    "text": "@Agent_1 will ask the customer to push the wifi connection button, hold for 3 seconds, then check if the power light is slowly blinking on and off every second."
                                },
                                {
                                    "aspect": "Follow-Up Tasks",
                                    "text": "@Agent_1 will ask the customer to check in the Contoso Coffee app if it prompts to connect with the machine."
                                },
                                {
                                    "aspect": "Follow-Up Tasks",
                                    "text": "@Agent_1 will investigate another way to fix the issue."
                                }
                            ],
                            "id": "conversation1",
                            "warnings": []
                        }
                    ],
                    "errors": [],
                    "modelVersion": "latest"
                }
            }
        ]
    }
}

Para uma longa conversa, o modelo pode segmentá-lo em várias partes coesas e resumir cada segmento. Há também um campo contexts longo para cada resumo, que informa de qual intervalo da conversa de entrada geramos o resumo.

Como obter os resultados da sumarização de problemas e resoluções de conversa

O texto a seguir é um exemplo de conteúdo que você pode enviar para sumarização de problemas e resoluções de conversa. Esse é apenas um exemplo, a API pode aceitar mensagens de texto de entrada maiores. Confira limites de dados para obter mais informações.

Agente: "Olá, como posso ajudá-lo?"

Cliente: "Como posso atualizar minha assinatura da Contoso? Tentei fazer isso o dia todo."

Agente: "Pressione o botão atualizar. Em seguida, entre e siga as instruções".

O resumo é executado após o recebimento da solicitação, criando um trabalho para o back-end da API. Se o trabalho tiver sido bem-sucedido, a saída da API será retornada. A saída está disponível para recuperação por 24 horas. Após esse período, a saída será limpa. Devido ao suporte multilíngue e a emojis, a resposta pode conter deslocamentos de texto. Confira como processar deslocamentos para obter mais informações.

Usando o exemplo acima, a API pode retornar as seguintes frases resumidas:

Mensagem de texto resumida Aspecto
"O cliente deseja atualizar a assinatura. O cliente não sabe como." problema
"O cliente precisa pressionar o botão Atualizar e entrar." resolução

Confira também