Mudanças entre as edições de "Chatbots"
Linha 1: | Linha 1: | ||
+ | |||
Assuntos relacionados: [[Inteligência Artificial]] | Assuntos relacionados: [[Inteligência Artificial]] | ||
Linha 11: | Linha 12: | ||
; Código do chatbot | ; Código do chatbot | ||
− | <syntaxhighlight lang=python | + | <syntaxhighlight lang="python"> |
import sys | import sys | ||
import aiml | import aiml | ||
Linha 44: | Linha 45: | ||
== Documento Simples - ''Hello World'' == | == Documento Simples - ''Hello World'' == | ||
− | <syntaxhighlight lang=xml | + | <syntaxhighlight lang="xml"> |
<aiml> | <aiml> | ||
<category> | <category> | ||
Linha 57: | Linha 58: | ||
Uma condição pode conter um curinga, ou carácter * em seu padrão | Uma condição pode conter um curinga, ou carácter * em seu padrão | ||
− | <syntaxhighlight lang=xml | + | <syntaxhighlight lang="xml"> |
<category> | <category> | ||
<pattern>MEU NOME E *</pattern> | <pattern>MEU NOME E *</pattern> | ||
Linha 68: | Linha 69: | ||
O curinga também pode ser utilizado para pegar todas as entradas de usuário que não fecharam com nenhuma regra: | O curinga também pode ser utilizado para pegar todas as entradas de usuário que não fecharam com nenhuma regra: | ||
− | <syntaxhighlight lang=xml | + | <syntaxhighlight lang="xml"> |
<category> | <category> | ||
<pattern> * </pattern> | <pattern> * </pattern> | ||
Linha 79: | Linha 80: | ||
Muitas vezes, a mesma pergunta do usuário pode ser feita de formas diferentes, mas devem ser tratadas da mesma maneira. Nesses casos, a ''tag'' '''srai''' pode ser utilizada para se referir a outra regra. | Muitas vezes, a mesma pergunta do usuário pode ser feita de formas diferentes, mas devem ser tratadas da mesma maneira. Nesses casos, a ''tag'' '''srai''' pode ser utilizada para se referir a outra regra. | ||
− | <syntaxhighlight lang=xml | + | <syntaxhighlight lang="xml"> |
<category> | <category> | ||
<pattern>COMO EU CHEGO AO SUPERMERCADO?</pattern> | <pattern>COMO EU CHEGO AO SUPERMERCADO?</pattern> | ||
Linha 100: | Linha 101: | ||
Uma regra também pode ter respostas randômicas: | Uma regra também pode ter respostas randômicas: | ||
− | <syntaxhighlight lang=xml | + | <syntaxhighlight lang="xml"> |
<category> | <category> | ||
<pattern>COMO VAI VOCE?</pattern> | <pattern>COMO VAI VOCE?</pattern> | ||
Linha 118: | Linha 119: | ||
A linguagem AIML permite a utilização de variáveis globais que podem ser utilizadas nas regras. | A linguagem AIML permite a utilização de variáveis globais que podem ser utilizadas nas regras. | ||
− | <syntaxhighlight lang=xml | + | <syntaxhighlight lang="xml"> |
<category> | <category> | ||
<pattern>MEU NOME E *</pattern> | <pattern>MEU NOME E *</pattern> | ||
Linha 129: | Linha 130: | ||
A utilização da tag ''<think>'' funciona como no exemplo anterior, mas previne que as informações sejam exibidas juntamente com a resposta. | A utilização da tag ''<think>'' funciona como no exemplo anterior, mas previne que as informações sejam exibidas juntamente com a resposta. | ||
− | <syntaxhighlight lang=xml | + | <syntaxhighlight lang="xml"> |
<category> | <category> | ||
<pattern>MEU NOME E *</pattern> | <pattern>MEU NOME E *</pattern> | ||
Linha 142: | Linha 143: | ||
O valor de uma variável global pode ser utilizado para testes. | O valor de uma variável global pode ser utilizado para testes. | ||
− | <syntaxhighlight lang=xml | + | <syntaxhighlight lang="xml"> |
<category> | <category> | ||
<pattern>VOCE GOSTARIA DE DANCAR COMIGO?</pattern> | <pattern>VOCE GOSTARIA DE DANCAR COMIGO?</pattern> | ||
Linha 158: | Linha 159: | ||
A linguagem AIML permite a utilização de contextos, ou tema, por meio da tag ''<topic>''. As regras podem ser agrupadas conforme um contexto específico. | A linguagem AIML permite a utilização de contextos, ou tema, por meio da tag ''<topic>''. As regras podem ser agrupadas conforme um contexto específico. | ||
− | <syntaxhighlight lang=xml | + | <syntaxhighlight lang="xml"> |
<category> | <category> | ||
<pattern>POSSO COMPRAR UMA PASSAGEM DE AVIAO?</pattern> | <pattern>POSSO COMPRAR UMA PASSAGEM DE AVIAO?</pattern> | ||
Linha 176: | Linha 177: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | <syntaxhighlight lang=xml | + | <syntaxhighlight lang="xml"> |
<topic name="PAGAMENTO"> | <topic name="PAGAMENTO"> | ||
Linha 189: | Linha 190: | ||
== Tag that == | == Tag that == | ||
− | <syntaxhighlight lang=xml | + | <syntaxhighlight lang="xml"> |
<!-- Clausula THAT --> | <!-- Clausula THAT --> | ||
Edição das 09h41min de 6 de março de 2025
Assuntos relacionados: Inteligência Artificial
Material Didático
- Vídeoaula sobre Chatbots e Assistentes Virtuais
- Aula de Chatbots - Slides
- Arquivos de exemplos básicos em AIML
- PyAIML3
- Ácaro: um exemplo simples de chatbot.
- Código do chatbot
import sys
import aiml
kb = sys.argv[1]
k = aiml.Kernel()
k.learn(kb)
#k.respond("load aiml b")
while True: print(k.respond(input("> ")))
Instalando o Plugin do RebeccaAIML no Eclipse
- Fazer o download do Plugin do RebeccaAIML para o eclipse;
- Descompactar o arquivo zipado;
- Copiar os arquivos JAR para a pasta plugin do eclipse;
AIML
O AIML (GNU GPL) é uma linguagem baseada em XML para chatbots desenvolvida em 1995 para o A.L.I.C.E. (Artificial Linguistic Internet Computer Entity) por Richard Wallace.
As regras das pequenas entidades são compostas de duas partes: condição e ação. Caso as condições forem satisfeitas, a ação é executada. No caso de mais de uma regra terem suas condições satisfeitas, temos um conflito. Neste caso, o interpretador precisa ter uma estratégia para resolver esses conflitos.
As tags mais importantes de um documento AIML são:
- <aiml>: inicia e termina um documento AIML;
- <category>: marca uma unidade de conhecimento;
- <pattern>: contem um padrão simples que pode fechar com o que o usuário fala ou digita;
- <template>: contem a resposta para uma entrada do usuário.
Documento Simples - Hello World
<aiml>
<category>
<pattern>OLA</pattern>
<template>Olá, como vai você?</template>
</category>
</aiml>
Tag star ou Curinga
Uma condição pode conter um curinga, ou carácter * em seu padrão
<category>
<pattern>MEU NOME E *</pattern>
<template>É um prazer conhecer você, <star/>.</template>
</category>
Há também o curinga "_". Uma diferença é que este é tratado preferencialmente pelo motor, ou seja, serão tratados primeiro. Outra coisa, por enquanto, basta saber que usa-se "_" quando é importante o que o usuário diz e "*" quando não é.
O curinga também pode ser utilizado para pegar todas as entradas de usuário que não fecharam com nenhuma regra:
<category>
<pattern> * </pattern>
<template>Eu não entendo.</template>
</category>
Tag srai
Muitas vezes, a mesma pergunta do usuário pode ser feita de formas diferentes, mas devem ser tratadas da mesma maneira. Nesses casos, a tag srai pode ser utilizada para se referir a outra regra.
<category>
<pattern>COMO EU CHEGO AO SUPERMERCADO?</pattern>
<template>Siga pela avenida principal e vire a primeira rua a direita.</template>
</category>
<category>
<pattern>COMO EU CHEGO A UNIVERSIDADE?</pattern>
<template>Siga pela rua principal por aproximadamente 2km.</template>
</category>
<category>
<pattern>QUAL O CAMINHO ATE *</pattern>
<template><srai>COMO EU CHEGO <star/></srai></template>
</category>
Ações Randômicas
Uma regra também pode ter respostas randômicas:
<category>
<pattern>COMO VAI VOCE?</pattern>
<template>
<random>
<li>Vou bem, obrigado.</li>
<li>Tudo bem..</li>
<li>Tudo em ordem. Agradeço muito por perguntar.</li>
<li>Muito bem, e você?</li>
</random>
</template>
</category>
Variáveis Globais
A linguagem AIML permite a utilização de variáveis globais que podem ser utilizadas nas regras.
<category>
<pattern>MEU NOME E *</pattern>
<template>É um prazer te conhecer,
<set name="userName"><star/></set>.
</template>
</category>
A utilização da tag <think> funciona como no exemplo anterior, mas previne que as informações sejam exibidas juntamente com a resposta.
<category>
<pattern>MEU NOME E *</pattern>
<template>É um prazer te conhecer.
<think><set name="userName"><star/></set></think>
</template>
</category>
Usando variáveis globais em condições
O valor de uma variável global pode ser utilizado para testes.
<category>
<pattern>VOCE GOSTARIA DE DANCAR COMIGO?</pattern>
<template>
Claro, será um prazer.
<condition name="userName" value="">
Você poderia me dizer seu nome?
</condition>
</template>
</category>
Utilizando Contextos
A linguagem AIML permite a utilização de contextos, ou tema, por meio da tag <topic>. As regras podem ser agrupadas conforme um contexto específico.
<category>
<pattern>POSSO COMPRAR UMA PASSAGEM DE AVIAO?</pattern>
<template>Sim.</template>
</category>
<category>
<pattern>POSSO COMPRAR UMA PASSAGEM PARA * ?</pattern>
<template>Sim, você pode.
<think>
<set name="userDestination"><star/></set>
<set name="topic">PAGAMENTO</set>
</think>
<srai>COMO POSSO PAGAR?</srai>
</template>
</category>
<topic name="PAGAMENTO">
<category>
<pattern>COMO POSSO PAGAR?</pattern>
<template>Você pode pagar em dinheiro ou cartão de crédito.</template>
</category>
</topic>
Tag that
<!-- Clausula THAT -->
<aiml version="1.0.1">
<category>
<pattern> * </pattern>
<template>...</template>
</category>
<category id="234">
<pattern>FACA UMA PERGUNTA</pattern>
<template>Você gosta de filmes?</template>
</category>
<category>
<pattern>SIM</pattern>
<that>234</that>
<template>Legal, eu também gosto de filmes.</template>
</category>
<category>
<pattern>NAO</pattern>
<that>234</that>
<template>Tudo bem, mas eu gosto de filmes.</template>
</category>
<category>
<pattern>TALVEZ</pattern>
<that>234</that>
<template>Você é muito indeciso.</template>
</category>
<category>
<pattern> * </pattern>
<that>VOCÊ GOSTA DE FILMES</that>
<template>Essa não é uma resposta válida.</template>
</category>
</aiml>
Links
- Riverscript Uma plataforma em python para testar um chatbot AIML.