Mudanças entre as edições de "Chatbots"

De Aulas
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 line>
+
<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 line>
+
<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 line>
+
<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 line>
+
<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 line>
+
<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 line>
+
<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 line>
+
<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 line>
+
<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 line>
+
<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 line>
+
<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 line>
+
<syntaxhighlight lang="xml">
 
<topic name="PAGAMENTO">
 
<topic name="PAGAMENTO">
  
Linha 189: Linha 190:
 
== Tag that ==
 
== Tag that ==
  
<syntaxhighlight lang=xml line>
+
<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

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

  1. Fazer o download do Plugin do RebeccaAIML para o eclipse;
  2. Descompactar o arquivo zipado;
  3. 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.