# Agentes de chat/OpenCyc

Uno de los principales puntos a tener en cuenta en la modificación de Howie, es la vinculación de su cerebro con la base da conocimientos de Cyc.
Cyc es una base de datos de conocimientos humanos con ciertos conceptos y relaciones definidas específicamente, que describen la unión o relación entre los conceptos. La ventaja de usar esta base en un proyecto de inteligencia artificial, es que ésto brindaría más sentido común al robot en cuestión. Recordemos que nuestro robot, en esa ocasión, es realmente un chatbot. La base de datos está escrita en un lenguaje formal llamado CycL, lo cual da ciertas facilidades para que una máquina pueda entenderlo, a diferencia de lo que ocurriría si se usara un lenguaje natural como el inglés en lugar de uno formal como el lenguaje matemático o CycL en este caso.
La empresa CyCorp tiene un proyecto llamado OpenCyc, cuya idea principal es dar acceso libre a la base de datos.

## Instalar OpenCyc en Linux

Lo primero por hacer sería descargar el archivo tgz de OpenCyc, en La página de descargas de Opencyc se encuentran varias direcciones, recomiendo usar la de SourceForge. Luego de haberlo descargado, sigue los siguientes pasos:
* Descomprime el archivo descargado
* Ve al directorio:
* Abre el servidor:
* Después de algún tiempo cargando el mundo en la memoria, verás:
* Ahora que el servidor se está ejecutando, puedes acceder a él desde la siguiente dirección utilizando tu navegador favorito:
Donde HOSTNAME es reemplazado por la dirección del equipo donde está corriendo el servidor. Si estás usando el mismo equipo, reemplaza HOSTNAME por localhost, presiona enter y voilà, está listo el acceso al servidor OpenCyc

## Login en el servidor

Este es un punto importante, pues cuando accedes al servidor, éste te identifica automáticamente como Guest, lo cual es una ventaja realmente poco ventajosa, pues el acceso a la base de datos no es total. La manera de solucionar este problema es simple, Escribe CycAdministrator en la caja de texto del Login y habrás ingresado al sistema con todos los privilegios de un administrador. Una vez así, intenta loguearte con el nombre de usuario que desees utilizar y esta vez te dará una opción para crearlo (no como cuando lo intentaste sin haber leído esta explicación) y de esta manera accederás al sistema con un nombre con más estética que CycAdministrador (o al menos eso espero).

## Consultando la información existente en la base de conocimiento

Antes de añadir cualquier infomación a la base de conocimiento es importante saber como consultar información en la misma, de modo tal que la información que se agregue sea consistente con la ya existente. Esto es debido a que el motor inferencial de Cyc se basa en ontologías y estas presentan una descripción organizada y jerárquica del conocimiento, de modo que es conveniente saber en qué lugar de dicha jerarquía se ha de adicionar la información. Dado que el conocimiento en el motor inferencial está escrito en inglés, las búsquedas deben hacerse en este idioma, para aprovechar todo el conocimiento ya declarado.
Advertencia: Los ejemplos a continuación acerca de las consultas está inspirados en la documentación en inglés para el manual de la versión 0.7 pero están actualizados suponiendo que usted usa la última versión en desarrollo (la 0.9).
Supongamos acabas de comprar un par de gatos llamados Tom y Silvestre y quieres indicar esto en OpenCyc. Lo primero que debes hacer entonces es buscar qué existe acerca de estos animales dentro de la base de conocimiento. Para hacer consultas en la base de conocimiento haz lo siguiente:
Carga la página de Inicio. Eligiendo cualquiera de estos dos enlaces:
* última versión en desarrollo que se encuentra en Internet (el motor de conocimiento se reinicia una vez al día en esta versión de prueba).
* la versión ya instalada en tu máquina
Verás algo como esto (Para ver la captura de pantalla más grande haz click sobre la misma):
En la parte superior izquierda existe una caja de texto donde puedes colocar un palabra que desees buscar y luego le das click en "Search".

## Añadir constantes a la base de conocimiento

Una vez logueado como algo diferente a Guest, haz click en el botón Create (en la parte superior) y en el cuadro de texto de la parte central, escribe el nombre de la constante que deseas crear, por ejemplo Terminator y presiona Create Constant o Enter. Pero, ¿qué sucede si el Terminator que deseas agregar no es la película sino el guión? En OpenCyc existe una forma predeterminada de identificar las constantes que consiste en escribir una raya y algo que caracterize a la constante, por ejemplo Terminator-ElGuión o Terminator-LaPelícula.

## Algo del código de OpenCyc

Como ya se ha mencionado antes, la base de conocimientos de OpenCyc está escrita en CycL, un lenguaje derivado del Lisp y del cálculo de predicados. El problema es que después de analizar los archivos dentro del directorio src de OpenCyc, nos encontramos con una serie de archivos de Java... ¿qué hacer ante ésto? La verdad es que se vive un cambio de paradigma bastante inesperado, pero éste realmente no debería ocurrir, pues si miramos con atención el código utilizando algún editor como jEdit, notaremos que se utilizó Java para interpretar el código CycL... Algo así como el método de interpretación de AIML de Howie. Los verdaderos archivos .lisp no están en la carpeta src, sino por fuera, en el resto de directorios de OpenCyc.