Shell di un Sistema Esperto
Nell'ambito dei Sistemi Esperti lo Shell, che è una parola inglese che significa conchiglia, guscio, rivestimento, viene utilizzato per indicare il rivestimento della base di conoscenza, cioè tutto ciò che si trova tra quest'ultima e l'utente: il motore inferenziale è l'interfaccia utente.
Lo shell quindi è un Sistema Esperto privo di conoscenza, perchè ha una conoscenza vuota. Esso è il programma privo di dati, e di conseguenza non eseguibile.
Uno shell è uno strumento molto appetibile commercialmente perchè mette in grado un utente di costruirsi il propio Sistema Esperto con pochissimo sforzo.
Per creare una base di conoscenza non è necessario essere specialisti di programmazione nè di informatica, basterà prendere il concetto di regola di produzione e conoscere il formato con cui esprimerla. Per poter sviluppare una base di conoscenza occorre essere esperti nel dominio di applicazione: la base di conoscenza di un Sistema Esperto in medicina, ad esempio sarà necessariamente elaborata da un medico; quella di un Sistema Esperto in legge da un avvocato e così via. Naturalmente non si può pretendere che un medico o un avvocato conoscano i linguaggi di programmazione; occorre dunque separare lo sviluppo di un programma, a cura di specialisti di informatica, da quello di una base di conoscenza, effettuato da esperti nel settore di applicazione.
Sviluppare una base di conoscenza ben fatta e ben interpretabile dallo shell a disposizione non è un impresa facile. innanzitutto, ogni shell richiederà un certo qual formato per le regole di produzione, in secondo luogo ogni dominio di applicazione avrà le proprie regole correlate più o meno strettamente fra di loro.
Al fine di facilitare lo sviluppo e la manutenzione delle basi di conoscenza, è utile definire un linguaggio di sviluppo che permette di esprimere le regole di produzione in maniera facilmente comprendibile e offra all'utente dei comandi per la gestione della base di conoscenza. La maggior parte degli shell in commercio è corredata di strumenti ausiliari per lo sviluppo incrementale della base di conoscenza (compilatori interfacce, strumenti di verifica, ...).
Se volessimo trasformare il nostro Sistema Esperto in uno shell degno di tale nome dovremmo:
  • memorizzare le regole di produzione su file;
  • definire un linguaggio per esprimere le regole;
  • implementare un programma di utilità che metta a disposizione dei comandi di accesso a tali file (aggiungi, togli, modifica, ...) e quindi l'utente a definire correttamente le regole;
  • mettere eventualmente a punto un compilatore che traduca le regole in un formato interno, al duplice scopo di rilevare eventuali errori e di ottimizzare i tempi di scanzione del motore inferenziale.

  • Nonostante l'esistenza di questi strumenti, lo sviluppo di una base di conoscenza rimane sempre il punto critico per la buona riuscita del Sistema Esperto. Il problema sta nel fatto che il cervello umano non è sempre pienamente cosciente dei ragionamenti che sta effettuando; i problemi, spesso, vengono elaborati nel subconscio e la soluzione appare sotto la forma di intuizione. Questa caratteristica tipica della mente umana rende difficile il compito di tradurre in regole di produzione la propia esperienza personale. Per sviluppare una base di conoscenza è quindi preferibile che l'esperto sia affiancato da una persona che conosca a fondo il linguaggio di sviluppo e abbia la capacità di modellare la realtà in termini di regole di produzione. Tale persona prenderà il nome di "ingegnere della conoscenza" e svolgerà un ruolo intermedio fra l'esperto nel campo di applicazione e il programmatore.
    Il compito dell'ingegnere della conoscenza è di effettuare una serie di colloqui con l'esperto, o gli esperti, al fine di individuare la struttura del problema da risolvere e tradurre nel linguaggio di sviluppo le associazioni mentali e i processi deduttivi emersi durante i colloqui. La base di conoscenza viene poi costruita in modo incrementale e modulare, aggiungendo o modificando di volta in volta le opportune regole di produzione.
    E' importante osservare che la figura dell'ingegnere della conoscenza differisce sia da quella dell'analista sia da quella del programmatore. Non sarà infatti necessario conoscere i linguaggi di programmazione nè tantomeno le problematiche hardware e software del sistema. Sarà sufficiente avere una certa pratica del linguaggio di sviluppo e della funzionalità dello shell a disposizione. Ovviamente la medesima persona potrà assumere il ruolo di ingegnere della conoscenza per lo sviluppo di più basi di conoscenza, nei più svariati campi.