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 conversação de um ser humano.
Então pode se dizer que chatbot, é um robot com inteligência de interagir, num ambiente de conversação. Estes chatbots são usados em sala de bate-papo, para prender a atenção do utilizador, são usados também, por empresas que querem que haja uma interacçã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 explicação sugere, há uma rotina muito complexa por trás de tudo.
Para criar um chatbot, podemos Usar Prolog, ou outra linguagem de programação em lógica, e criar um chatbot a partir do zero, mas isso não é tarefa fácil, ou ainda adaptar uma versão existente de algum programa desse tipo. Tudo isso requer muito conhecimento elaborado de programação de computadores e de programação em lógica.
Porém, podemos usar uma linguagem de marcação desenvolvida para esse propósito como a Artificial Intelligence Markup Language (AIML).
A especificação da AIML encontra-se na Internet.
Existem inúmeros chatterbot's na Internet, porém, um deles ganha destaque neste conceito, trata-se da A.L.I.C.E.. Este bot já ganhou muitos prémios por ser o mais realista possível, e é escrito em AIML.
Tudo que precisamos para AIML funcionar, é um processador de AIML escrito na linguagem que mais convém, no nosso caso, Python. Essa opçã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.
Esse 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á directo por aqui: Download da AIML standard.
Esse arquivo de definições, é que contém a "inteligência" do robot. Apenas descompacte-o para uma pasta qualquer.
Agora que foi resumido o que é AIML e pyAIML, vou mostrar um bot que escrevi há um tempo atrás. Primeiro, gostaria de informar que ao fazer o bot, trabalhamos apenas com texto, como em uma sala de bate papo, veja um pequeno exemplo:
# 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)
Ok, mas para dar mais dinamismo e empolgaçã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.
Veja o exemplo com pyTTS:
# 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))
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 utilizador, ou seja, que deveria ter uma aparência realista, foi então que tive a brilhante ideia de usar os Agentes da Microsoft (MS Agent's).
Veja a famosa foto de um deles:
saiba mais sobre MS Agent's aqui
Agora meu bot tem:
Com AIML, podemos criar um bot, capaz de aprender com os usuários que interagem com ele, isso mesmo, tem como fazer o bot aprender palavras novas e adicioná-las em sua base dados.
Os arquivos AIML, são formados por tag's XML, que tem uma engine simples e fácil de entender/programar. Funciona assim:
As principais tags são:
exemplo de tags AIML:
<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>
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 Microsoft, que fazem meu bot falar em Português, já que por padrão ele fala em inglês. baixe-os aqui.
Obs: Vou citar aqui, mas creio que isso é óbvio. 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 objectos em qualquer linguagem de programação que suporte a tecnologia. Como Python te da suporte a está tecnologia (COM), através do pacote pyWin32 você pode controlar muitos objectos do Windows.
E para finalizar, meu bot (não está totalmente pronto, preciso arrumar o sorteio da lista):
# 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:Python24CursoMeus ProgramasProjetosBotPython') # 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