Bom dia a todos,
Inteligência Artificial - Chatbot Ja houviram falar de A.I (Inteligência Artificial) ? Ok!
Provavelmente ja viram algo sobre os famosos chatbots ou chatterbots.
Chatbot ou chatterbot, são programas de computador que usam da
Inteligência Artificial, com o propósito de simular a habilidade de conversacão de um ser humano.
Chat = sala de bate-papo.
Bot = Robô.
Então pode se dizer que chatbot, é um robô com inteligência de interagir, num ambiênte de bate-papo.
Estes chatbots são usados em sala de bate-papo, para prender a atençãodo usuário, são usados também, por empresas que querem que haja uma interação mecânica (porém inteligente) do cliente com seu site, divulgando produtos, informando preços, atraindo a atenção do cliente, de modo que este pense estar teclando com algum humano.
Eles são baseados em uma rotina de 'estímulo - resposta', ou seja, você pergunta, e ele responde com base na sua pergunta. Mas não é tão simples quanto a explicção sugere, há uma rotina muito complexa por trás de tudo.
AIML - Artificial Intelligence Markup LanguagePara criar um chatbot, podemos Usar
Prolog, ou outra linguagem de programacão em lógica, e criar um chatbot a partir do zero, mas isso não é tarefa facil, ou ainda adaptar uma versão existente de algum programa desse tipo. Tudo isso requer muito conhecimento elaborado de programacão de computadores e de programacão em lógica.
Porém, podemos usar uma linguagem de marcacão desenvolvida para esse propósito como a
Artificial Intelligence Markup Language (
AIML).
A especificacão da AIML encontra-se na
Internet.
AIML é virtualmente independente de linguagem de programacão.Existem inumeros chatterbot's na internet, porém, um deles ganha destaque neste conceito, trata-se da
A.L.I.C.E. Este bot ja ganhou muitos premios por ser o mais realista possivel, e é escrito em AIML.
Python e AIML = pyAIML. Tudo que precisamos para AIML funcionar, é um processador de AIML escrito na linguagem que mais convém, no nosso caso, Python. Essa opcão permite um rápido desenvolvimento sem a necessidade de técnicos especialistas em programação e lógica.
PyAIML, é nosso motor para funcionar o bot em AIML.
Download de PyAIML:
http://sourceforge.net/projects/pyaimlEsse módulo é uma implementação de um interpretador para AIML (Artificial Intelligence Markup Language. Na página de download do módulo
PyAIML baixe também as definições padrões da AIML, ou vá direto por aqui:
Download da AIML standard.
Esse arquivo de definições, é que contém a "inteligência" do robô. Apenas descompacte-o para uma pasta qualquer.
Trabalhando com pyAIMLAgôra que foi resumido o que é AIML e pyAIML, vou mostrar um bot que escrevi á um tempo atrás.
Primeiro, gostria de informar que ao fazer o bot, trabalhamos apenas com texto, como em uma sala de bate papo, veja um pequeno exemplo:
GeSHi (python):
# coding: iso-8859-1 -*-
import aiml
import os
os.chdir('C:/Python24/curso/projetoAIML') # diretório que contém os arquivos da AIML standard
ai = aiml.Kernel() # inicialização
ai.learn('std-startup.xml') # lê o arquivo principal da AIML e faz referências aos outros
ai.respond('load aiml b') # faz com que os outros arquivos da AIML sejam carregados
while (1==1):
frase = raw_input('Fale algo ao bot em english:')
print "Resposta do bot: %s" % ai.respond(frase)
Created by GeSHI 1.0.7.20
Ok, mas para dar mais dinamismo e impolgação ao programa, resolvi que o mesmo, deveria ter um mecanismo da fala, foi então que implantei ao mesmo a função de TSS (Text-To-Speak), da Microsoft.
Com
pyTTS,
você converte texto em fala humana.
Download do PyTTSVeja o exemplo com pyTTS:
GeSHi (python):
# coding: iso-8859-1 -*-
import aiml
import os
import pyTTS
import time
tts = pyTTS.Create() # cria o motor de fala.
tts.Volume = 90 # Ajusta o Volume.
os.chdir('C:/Python24/curso/projetoAIML') # muda para o diretório que contém os arquivos da AIML
standard
ai = aiml.Kernel() # inicialização
ai.learn('std-startup.xml') # abre o arquivo principal da AIML (que faz referências aos outros)
ai.respond('load aiml b') # faz com que os outros arquivos da AIML sejam carregados
while (1==1):
frase = raw_input('Fale algo ao bot em english:')
print "Resposta do bot: %s" % tts.Speak(ai.respond(frase))
Created by GeSHI 1.0.7.20
Ainda não satisfeito com o programa, percebi que ele não estaria completo sem uma interface gráfica, algo que chamaria a atenção do usuário, ou seja, que deveria ter uma aparencia realista, foi então que tive a brilhante idéia de usar os
Agentes da Microsoft (MS Agent's).
Veja a famosa foto de um deles:

saiba mais sobre MS Agent's
aquiAgôra meu bot tem:
Inteligência;
Fala;
Aparência.
Então, voltando a falar de AIMLCom AIML, podemos criar um bot, capaz de aprender com os usuários que interagem com ele, isso mesmo, tem como fazer o bot aprender palavres novas e adicionalas em sua base dados.
Os arquivos AIML, são formados por tag's XML, que tem uma engine simples e facil de entender/programar. Funciona assim:
Saiba mais sobre AIMLAs principais tags são:
<aiml> inicia o bloco AIML.
<category> indica uma categoria ou unidade de conhecimento.
<pattern> Indica o padrão da mensagem que será digitada pelo usuário.
<templat> indica a resposta para o que foi digitado
<random> proporciona respostas aleatórias
<li> marca bloco de respostas aleatórias é usado dentro do bloco <random>
<that> registra a ultima sentença, gerando uma seqüência no dialogo.
<srai> Redireciona para outra questão ou categoria.
exemplo de tags AIML:
GeSHi (xml):
<aiml>
<category>
<pattern>oi</pattern>
<template>Ola, tudo bem?</template>
</category>
<category>
<pattern>qual o seu nome?</pattern>
<template>
<random>
<li>Sou chamado de chatterbot</li>
<li>Me chamo chatterbot</li>
<li>Chatterbot</li>
<li>pode me chamar de chatterbot</li>
</random>
</template>
</category>
</aiml>
Created by GeSHI 1.0.7.20
Simples !!!
Com isso, e um pouco mais de estudo sobre a Linguagem, eu pretendo criar uma pequena e expansível inteligência para o meu bot.
Eu adicionei alguns componentes da Micrisoft, que fazem meu bot falar em Portugûes, ja que por padão ele fala em inglês.
baixe-os quiObs: Vou citar aqui, mas creio que isso é obvio. Para Utilizarem os MS Agent's, é preciso a manipulação da 'Component Objec Model', que é conhecida apenas por COM, ou seja, é uma plataforma da Microsoft para componentes de software lançada em 1993. Ela é usada para permitir a comunicação entre processos e a criação dinâmica de objetos em qualquer linguagem de programação que suporte a tecnologia.
Como Python te da suporte a está tecnologia (COM), atraves do pacote
pyWin32 você pode controlar muitos objetos do Windows.
E para finalizar, meu bot (não está totalmente pronto, preciso arrumar o soteio da lista):
GeSHi (python):
# coding: iso-8859-1 -*-
# Projeto: bot-AIMerLin
# Por: Kratos - 2007
import aiml # Carrega a Inteligência Articial de coversação do bot
import os, sys # Para entrada e saida de dados e fechar o programa
import random # Para Sortear itens na lista
import win32com.client # Controla API do Win32 (COM)
ag = win32com.client.Dispatch("Agent.Control.2") # Declara o objeto a ser controlado (Agent's)
ag.connected = True # Conecta com o objeto
# lista de Animação do MS Agent, no caso, o Sr. Merlin.
playList =["Acknowledge","Alert","Announce","Blink","Confused","Congratulate","Congratulate_2", "Greet","Decline","DoMagic1","DoMagic2","DontRecognize","GestureDown","GestureLeft",
"GestureRigh","GestureUp","GetAttention","GetAttentionContinued","GetAttentionReturn","Greet",
"Hearing_1","Hearing_2","Hearing_3","Hide","Idle1_1","Idle1_2","Idle1_3","Idle1_4","Idle2_1",
"Idle2_2","Idle3_1","Idle3_2","LookDown","LookDownBlink","LookDownReturn","LookLeft","LookLeftBli
nk", "LookLeftReturn","LookRight","LookRightBlink","LookRightReturn","LookUp","LookUpBlink","LookUpRet
urn", "Pleased","Process","Processing","Read","ReadContinued","Reading","ReadReturn","RestPose",
"Sad","Search","StartListening","StopListening","Suggest","Surprised","Think","Uncertain",
"Uncertain","Wave","Write"]
os.chdir('C:\Python24\Curso\Meus Programas\Projetos\BotPython') # AIML standard.
ai = aiml.Kernel() # Inicialização no bot.
ai.learn('std-startup.xml') # Abre o arquivo principal da AIML (que faz referências aos outros).
ai.respond('load aiml b') # Carrega arquivos da AIML (Inteligência Artificial).
ag.Characters.Load("Merlin") # Carrega o Merlin como agent, existem inumeros outros.
ag.Characters("Merlin").Show() # Mostra o agent.
ag.Characters("Merlin").TTSModeID = "{8AA08CA1-A1AE-11D3-9BC5-00A0C967A2D1}" # Português BR
ag.Characters("Merlin").Play(playList[7]) # Executa uma animação da lista
ag.Characters("Merlin").Speak(u"Olá, meu criador, Kratos, ainda está me ensinando a falar em português!") # Fala
ag.Characters("Merlin").Play(playList[0]) # Executa a animaçõ da Lista.
ag.Characters("Merlin").Speak(u"Meu nome é Mérlin, qual é o seu nome?") # Fala a frase.
ag.Characters("Merlin").Speak(u"Só lembrando que a partir de agôra, falarei em inglês,com sutáque Português")
ag.Characters("Merlin").Speak(u"Pois, precisam carregar meus dados AIML com informações em Português")
about = """ >>> Agente AIML Speak <<<
Digite '-q' ou nada, para sair.
Digite '-h' para minimizar.
Digite '-s' para maximizar.
Total de Animações: %s .\n""" %(len(playList))
print about
# Inicia a converça com o bot, você pergunta, e ele responde!
while (1==1):
try:
youSpeak = raw_input(u"Fale algo ao bot em english: ")
if youSpeak == "-q":
sys.exit()
if youSpeak == "-h":
ag.Characters("Merlin").Hide()
if youSpeak == "-s":
ag.Characters("Merlin").Show()
botSpeak = ai.respond(youSpeak)
ag.Characters("Merlin").Speak(botSpeak)
print
except:
ag.connected = False
sys.exit()
raw_input(">>") # Serve para manter o Agent ativo
Created by GeSHI 1.0.7.20
Proponho aqui, um projeto, para se criar um bot (chatbot). Preciso de ajuda, pois:
1° Decidir sobre o que o Bot irá saber, sobre qual tipo de conhecimento ele terá tendência, se será só bate-papo, ou ele pode responder questões de matemática, moda, programação, dicas etc..
2° Coletar as informações, sobre o que o bot irá saber, para escrever nas Tag's de AIML.
3° Escrever, em seus arquivos de AIML, os "estimulos" e suas respetivas "respostas"... isso sozinho vai demorar pra Caramba, preciso de alguem pra ajudar, porque sem duvida, esta parte é a mais dificil. Por padrão, todas as informações do bot AIML são em inglês, então devmso reescrever tudo para Português.
Bom galera, espero que tenham gostado!
Até a proxima!
Kratos