Há apenas um mês, queríamos tentar criar uma extensão para as
habilidades funcionais de Alice. De acordo com a experiência de comunicação no
chat de suporte do
Yandex.Dialog , tive a impressão de que já há algo para compartilhar com os iniciantes sobre o trabalho em interfaces de voz.
Na nota, quero contar minhas impressões sobre as três semanas da
habilidade de Ano Novo de nossos
filhos, Snow Maiden, e sobre perguntas e respostas no bate-papo dos desenvolvedores de diálogos.

Para um profissional em
VUI , a nota não será novidade, mas bons conselhos e comentários de especialistas são bem-vindos. Estou escrevendo pela primeira vez, por favor, não julgue estritamente.
Por que prestar atenção em Alice?Por que tudo isso: voz, habilidades?Como criar uma habilidade?Abordagem geral e erros comuns.Falhas atuais da plataforma.Por que prestar atenção em Alice?
Se os assistentes de voz no exterior já se tornaram comuns, muitas horas de conversas com o robô já estão
vazando na rede , então ainda o temos no nível de interação com o navegador, conversas de crianças com Alice, mimos de geeks com casas inteligentes. Poucos amigos inserem notas e lembretes usando o Siri, embora, na minha opinião, essa seja uma das opções mais convenientes para usá-lo. Com alta probabilidade este ano, a situação mudará para melhor, porque a fundação já foi lançada:
- Alice tinha apenas um ano de idade, ela está estudando, mas já sabe quanto.
- Saia da estação Yandex - acho que gradualmente se tornará mais inteligente e funcional.
- A aparição à venda em dezembro dos primeiros mini-falantes afiliados de baixo custo.
- Alice School lança para desenvolver habilidades para desenvolvedores
- Foram anunciadas grandes melhorias na infraestrutura do Yandex. Os diálogos foram anunciados, em particular, “habilidades de descoberta” - uma ferramenta para pesquisa e classificação de habilidades de desenvolvedores terceirizados.
Tudo isso me diz que estamos no início do desenvolvimento de interfaces de voz na Rússia e, portanto, decidimos começar a estudar essas tecnologias.
Por que tudo isso: voz, habilidades?
Eu acho que muitas pessoas já entendem a vantagem das interfaces de voz em alguns casos, mas não será supérfluo lembrar: às vezes essa é a opção mais adequada. Por exemplo, no carro ou na cozinha, cozinhando, em qualquer outra atividade em que suas mãos estejam ocupadas, é mais conveniente dar comandos por voz. Por exemplo, há muito tempo há
robôs-enfermeiros, controlados por voz , ajudando nas operações cirúrgicas.
A voz é uma interface familiar para as pessoas interagirem. Pessoas idosas e crianças aprendem esse método sem problemas para obter informações e gerenciar gadgets.
Para pessoas com deficiência visual, a voz e a audição são um canal ainda mais importante de interação com o meio ambiente. A julgar pelo
bate-papo do
Yandex.Station, essa categoria de pessoas realmente gostou da aparência de um dispositivo que facilitou sua vida.
Não continuarei a listar casos, se for interessante, você poderá aprender mais sobre tudo isso na literatura especializada.
O Skill é um programa que implementa um certo diálogo iniciado por um determinado comando de ativação do Alice e expande os recursos do assistente de voz do Yandex.
Como criar uma habilidade?
Já existem várias boas
habilidades de terceiros, mas há muito mais nichos que você pode ocupar e criar uma habilidade verdadeiramente interessante e útil.
Existem vários artigos sobre como criá-los, inclusive sobre Habré. Há
documentação , há breves
recomendações gerais . Não vou aprofundar os detalhes técnicos da implementação, porque Eu gostaria de compartilhar abordagens comuns para iniciantes.
Tecnicamente, a habilidade é muito semelhante a um bot, com a diferença de que ele não pode enviar uma mensagem, mas apenas responde à solicitação de um usuário.
Aqui está uma pequena lista de recursos para ajudá-lo a começar:
Bibliotecas e recursos para caixas de diálogo Yandex
Perguntas frequentes não oficiais sobre como trabalhar com os Diálogos Yandex.
O documento contém links e perguntas e respostas relevantes e não muito relevantes.
Os
diálogos Yandex de bate-papo acima.
Para iniciar o desenvolvimento, você precisa de uma conta no Yandex, um servidor no qual o código do nosso programa será localizado e executado, um servidor da Web e o próprio aplicativo, escrito em qualquer idioma conveniente para você que possa fornecer trabalho através do
protocolo https .
Não darei detalhes da implementação de minhas habilidades aqui; se houver um pedido da comunidade, prestarei atenção a isso em um artigo separado. Além disso, esses materiais já existem.
Deixarei apenas
um exemplo de uma habilidade simples em PHP com comentários que, acredito, permitirão que um iniciante inicie rapidamente.
O repositório contém um script para criar um ambiente de desenvolvimento simples que inicia o servidor da Web incorporado ao PHP e, usando o serviço
serveo.net , torna a porta local acessível a partir da Internet:

Salvar URL https: //******.serveo.net - este será o seu URL de webhook. Ao contrário do
ngrok, esse URL não muda com o tempo, você não precisa alterá-lo nas configurações da caixa de diálogo. Você pode verificar a disponibilidade do webhook digitando este URL no navegador - o json deve retornar com um erro. Isso é normal, não passamos os parâmetros necessários para o script.
Em seguida, registre a habilidade por meio do
link :

Selecione o item "Habilidade em Alice"

Nós preenchemos todos os campos de acordo com as instruções e a documentação das caixas de diálogo:

No campo URL do webhook, insira o URL recebido anteriormente.
Tentamos salvá-lo, se seguimos as instruções fornecidas, tudo deve funcionar da primeira vez.
Neste artigo sobre implementação, aconselharei você a prestar atenção especial ao sistema de registro de ações do usuário. Sou todas as áreas problemáticas da interação do usuário, por exemplo, espero "sim | não, mas recebo outra coisa, escrevo no log e transmito imediatamente (como um processo separado para a velocidade do webhook) para o canal de telegrama para rastreamento e resposta operacional.
Abordagem geral e erros comuns.
Como eu esperava, as abordagens usuais ao desenvolvimento convencional da Web ou ao desenvolvimento de bot de telegrama não são adequadas aqui. A principal diferença é a imprevisibilidade frequente de respostas. A plataforma de diálogo permite adicionar botões com respostas claras à pergunta, mas o usuário geralmente não responde nada ao que um programador que está acostumado a seguir uma lógica clara espera.
Um exemplo
Você quer aprender outro poema?
[sim] [não]
Esperamos que a pessoa responda sim ou não, mas muitas outras opções vieram até nós:
- Sim
- sim sim
- claro que eu quero
- Sim, mãe, o que temos para comer?
- cansado de
- Como é o clima em Novosibirsk?
Tudo isso acontece por várias razões. Uma pessoa pode usar várias frases afirmativas: "claro", "sim", "sim", "vamos lá" etc. bem como negativos. Acontece que ele não começou a responder a pergunta a tempo, Alice ainda não escuta a resposta e a pessoa já está começando a falar, no final, ouvimos parte da frase. Ou vice-versa, depois que uma pessoa responde, ele continua a conversa com outro interlocutor "na vida real". Além disso, o usuário da habilidade pode simplesmente não entender o que está dentro do diálogo de terceiros e faz as solicitações comuns de aliso sem deixar o comando "suficiente".
Se simplesmente repetirmos a mesma pergunta sem reconhecer a resposta correta, isso poderá incomodar o usuário e causar desapontamento em sua habilidade e nas interfaces de voz em geral. Portanto, você deve prestar atenção especial às mensagens de erro; às vezes, é melhor reformular a pergunta, esclarecer e não perguntar novamente. É provável que o usuário responda à mesma pergunta da mesma forma, apenas mais alto.
Você também deve tentar fornecer várias opções para respostas do usuário, realçar a parte semântica. Dependendo da situação, às vezes é melhor cometer um erro uma vez a favor do reconhecimento incorreto da resposta e não forçar o usuário a responder claramente. Se você adicionar algo com o padrão às respostas esperadas (sim *), muitas vezes funcionará como deveria, e os casos em que nos disseram "deixe-me em paz já" serão uma exceção e nada crítico acontecerá na lógica do programa. Se, é claro, precisarmos de uma resposta precisa, devido ao reconhecimento incorreto de quais haverá conseqüências irreversíveis no sistema, devemos obter uma resposta clara do usuário. Ou, caso não tenhamos certeza da resposta, podemos solicitar informações adicionais ausentes.
Cada um dos casos de interação deve ser considerado separadamente.
No exemplo acima, somos confrontados com o fato de que os usuários pedem um poema mais curto ou sobre algum personagem ("existe um mais curto?", "Vamos falar sobre a donzela da neve").
Aqui temos opções - adicione novos níveis do menu, mas não se esqueça da “humanidade” do diálogo ou responda a esses pedidos de acordo com as expectativas do usuário, mas claramente não os oferece.
Não importa como pensamos nessa parte do diálogo no início, percebemos que o uso real mostraria melhor os desejos do usuário, porque iniciamos nossa primeira habilidade com funcionalidade mínima, adicionando gradualmente os recursos de nosso Snow Maiden, bem como reações às solicitações que não foram solicitadas por nós antes.
Usando APIs de terceirosPercebemos que, para fornecer algumas funções úteis em suas habilidades, os desenvolvedores às vezes recorrem ao uso excessivo de APIs de terceiros. No entanto, não esqueça que o tempo de resposta do seu webhook não deve exceder 1,5 segundos. Às vezes, isso pode causar uma experiência negativa ao usuário, com uma habilidade que responde corretamente ou escreve: "algo deu errado".
Recursos de reconhecimento de entidades nomeadas : nem todos os nomes, cidades são reconhecidas corretamente e, portanto, é aconselhável fornecer isso em sua habilidade. Até agora, para não privar o filho de um nome Yandex não reconhecido de se comunicar com o Snow Maiden, tivemos que recorrer a algumas "muletas". Leve isso em consideração imediatamente ao desenvolver, para não incomodar os usuários com os nomes Glory ou Hope, por exemplo. Esperamos que o Yandex conserte isso em breve.
Pronúncia de palavrasUma
ferramenta de teste de síntese de fala existente nem sempre corresponde ao que você realmente tem em sua habilidade. Não tenha preguiça de fornecer mecanismos para adicionar tts a qualquer uma das suas respostas. Contamos com o mecanismo Yandex, e agora é difícil
rotular algumas frases em nossa habilidade para uma pronúncia melhor (sem grandes alterações no código). Vamos considerar para o futuro.
Funções PHP simples, porém eficazes
, para comparação de palavras difusas ajudaram bastante:
similar_text () ,
levenshtein () , outras linguagens também possuem ferramentas similares. Bem, e, é claro, expressões regulares, onde sem elas.
Essas funções permitiram, por exemplo, aceitar corretamente a resposta do enigma com uma resposta parcialmente correta - não exatamente reconhecida, em diferentes declinações.
Naturalmente, isso para especialistas em
PNL (Processamento de Linguagem Natural) não parecerá sério, mas, novamente, uma observação - para iniciantes.
Fraquezas atuais da plataforma
Vou descrever brevemente as principais reivindicações dos desenvolvedores para o Yandex Dialogs, que notei no bate-papo.
Uma moderação longa, muitas vezes aparentemente ilógica. Ocorre que sua habilidade não sofre moderação devido ao fato de que, por exemplo, você tem um nome de habilidade muito comum, por exemplo, “clima na Crimeia”, mesmo que você já tenha uma habilidade com um nome semelhante - “Tempo em Severodvinsk”. Entendo que isso se deve ao fato de que anteriormente os requisitos para nomes e palavras de ativação eram mais simples e o
filho da namorada de sua mãe teve sorte pelo cara, e você não terá sucesso. Procure uma frase diferente ou tente usar uma
marca .
A documentação nem sempre é verdadeira. A plataforma em si está se desenvolvendo rapidamente, a documentação não acompanha, às vezes é interpretada de maneira diferente pelos usuários e representantes do Yandex.
Até agora, a plataforma fornece
apenas ferramentas básicas para habilidades de depuração .
Quando você adiciona uma habilidade ao painel do desenvolvedor, seu webhook já deve responder corretamente ou ocorrerá um erro de validação. Que tipo de erro, qual JSON foi enviado e qual veio - não vamos ver. Se você conseguiu adicionar a habilidade, terá um painel mínimo com apenas o conteúdo da última resposta de solicitação e pronto! Não há como verificar como isso realmente funcionará e soará no dispositivo antes da moderação. Existe um
emulador de terceiros que funciona bastante instável, não em todos os navegadores e não está em conformidade com o protocolo atual.
Existem outros desejos e solicitações dos desenvolvedores, como: integração com uma casa inteligente, determinação do interlocutor por sua voz, capacidade de escolher vozes para habilidades com melhor geração, integração de sistemas de pagamento, integração com a conta Yandex, inclusive para trabalhar com uma habilidade com dispositivos diferentes sob um único usuário, sistema pensado de habilidades particulares. Mas essas são funções que requerem estudo cuidadoso e, do ponto de vista da segurança, conveniência. Acho que o Yandex será capaz de oferecer essas oportunidades quando implementá-lo no nível adequado. No entanto, problemas com moderação, depuração e documentação às vezes irrelevante podem interferir bastante nos iniciantes para se acostumar com a plataforma.
Ajuda que, no suporte ao
bate -
papo , responda constantemente, uma comunidade menos experiente e receptiva também foi organizada, o que me ajudou muito, o ajudará. O suporte responde rapidamente a muitas reclamações com as mensagens "anotadas", "sabemos sobre a documentação, vamos corrigi-la", "decidimos sobre moderação". Ok, estamos ansiosos por isso.
Para começar rapidamente,
aconselho a publicar uma habilidade particular , agora eles são verificados com os requisitos mínimos:
- A habilidade é verificada quanto ao nome e à frase de ativação , pois a base é comum a todos os desenvolvedores.
- O Webhook deve responder às solicitações corretamente .
- Uma habilidade particular deve relatar que a habilidade está fechada em seu endereço de boas-vindas. Para que o usuário que o lançou acidentalmente seja notificado.
Dica de bate-papo:
Uma vez que uma habilidade publicada possa ser usada para testar seus outros diálogos em antecipação à moderação, por meio de proxy de solicitações de um webhook publicado para um desenvolvido, filtrando por user_id.
Conclusão
Em geral, as interfaces de voz em si pareciam um tópico muito interessante, cada vez mais exigido no futuro, pretendo mergulhar mais nele, lendo literatura especial, instruções e dicas de serviços similares estrangeiros (Google, Amazon, Siri etc.).
Deixe-me lembrá-lo novamente sobre a escola Yandex de Alice, se alguém como eu estiver interessado neste tópico.
Mais alguns links relacionados:
Blog do Diálogo YandexDiálogo Yandex do canal do YouTubeDiálogo fácilLivro que cria interfaces de usuário de vozNatasha: uma biblioteca para extrair entidades nomeadasCanal de telegrama informando sobre novas habilidadesCatálogo de Habilidades Não-oficiais