Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Crea un chatbot aziendale con Oracle Digital Assistant, OCI Data Science, LangChain e Oracle Database 23ai
Introduzione
Nel panorama digitale di oggi, i chatbot si stanno evolvendo per diventare più intelligenti, reattivi e in grado di gestire interazioni complesse. In questo tutorial, analizziamo la creazione di un chatbot di nuova generazione sfruttando la potenza delle funzionalità di Data Science di Oracle Cloud Infrastructure (OCI) come AI Quick Actions e Model Deployment, Mistral-7B-Instruct-v0.2, Oracle Database 23ai, LangChain e Oracle Digital Assistant. Ognuna di queste tecnologie porta punti di forza unici sul tavolo, consentendoci di creare un chatbot che non solo capisca e risponda alle query degli utenti con notevole precisione, ma offra anche un'esperienza di conversazione fluida e coinvolgente.
Una delle caratteristiche di spicco di Oracle Database 23ai sono le sue funzionalità avanzate di ricerca vettoriale. Questa tecnologia consente un recupero efficiente delle informazioni convertendo il testo in vettori ad alta dimensione, che vengono quindi confrontati per rilevanza. Una volta integrata nella pipeline RAG (Recovery-augmented Generation), la ricerca vettoriale di Oracle Database 23ai migliora la capacità del chatbot di accedere e fornire le informazioni più pertinenti da vasti set di dati. Ciò garantisce che le risposte generate non siano solo accurate dal punto di vista contestuale, ma anche altamente pertinenti per la query dell'utente.
Oracle Digital Assistant migliora ulteriormente le funzionalità del chatbot fornendo una solida piattaforma per creare, distribuire e gestire soluzioni di intelligenza artificiale conversazionale. Offre connettori predefiniti, comprensione del linguaggio naturale (NLU) e gestione del dialogo, che semplificano il processo di sviluppo e garantiscono un'esperienza utente fluida. La combinazione di Oracle Digital Assistant e la pipeline RAG consente al chatbot di gestire interazioni complesse e mantenere un flusso naturale di conversazioni, migliorando così il coinvolgimento e la soddisfazione degli utenti.
Sfruttando la sinergia di Oracle Database 23ai e Oracle Digital Assistant all'interno della pipeline RAG, gli sviluppatori possono creare un chatbot che eccelle sia nell'accuratezza del recupero che nella fluidità della conversazione. Questo approccio integrato non solo riduce il tempo e gli sforzi necessari per creare chatbot sofisticati, ma si traduce anche in una soluzione scalabile, efficiente e in grado di offrire user experience di livello superiore. Che tu sia uno sviluppatore, un appassionato di tecnologia o un leader aziendale che cerca di migliorare il coinvolgimento dei clienti, questo tutorial ti fornirà le conoscenze e gli strumenti per costruire un chatbot avanzato che si distingue nell'affollata arena digitale.
Per una panoramica dettagliata del processo, vedere Repository di GitHub esempi di AI.
Casi d'uso
Ecco alcuni esempi di casi d'uso in cui questo può essere utile:
-
Assistenza clienti personalizzata: l'esecuzione di query sia sulle guide che sulla cronologia dei clienti può creare una visione migliore dei problemi del cliente e aiutare a diagnosticare e risolvere il problema più rapidamente.
-
Ottimizzazione della supply chain: eseguire query sui dati dei fornitori con dati interni di ordini aziendali o di spedizione può portare a un processo decisionale migliore e a una risposta più rapida ai cambiamenti nella supply chain.
-
Ottimizza le vendite: esegui una query sui dati CRM per identificare lead ad alto potenziale e suggerire strategie per aumentare la probabilità di chiusura delle trattative.
Vantaggi di Oracle AI Vector Search
Oracle Database è un repository leader di settore di dati operativi e aziendali. Le applicazioni aziendali in genere devono cercare una combinazione di dati aziendali e dati non strutturati. Ad esempio, un sito Web retail potrebbe includere ricerche basate su una descrizione del prodotto in linguaggio naturale e su un'immagine del prodotto target, insieme ad altri filtri, ad esempio prezzo, posizione del negozio, produttore e disponibilità corrente. Questa ricerca richiede la ricerca simultanea di dati di catalogo non strutturati (descrizione e immagine del prodotto), dati di catalogo strutturati (prezzo, posizione del negozio e produttore) e dati transazionali in tempo reale (come l'inventario corrente).
Panoramica della soluzione High Level Architecture
Figura: un'architettura di alto livello della pipeline RAG
Il seguente diagramma illustra l'architettura e il flusso di lavoro della creazione di un chatbot avanzato utilizzando Mistral-7B-Instruct-v0.2, Oracle Database 23ai, RAG, LangChain e Oracle Digital Assistant. Ecco i passaggi dettagliati coinvolti nella seguente architettura.
-
Interazione con gli utenti: l'utente invia una richiesta al chatbot tramite l'interfaccia di Oracle Digital Assistant.
-
Gestione delle richieste: Oracle Digital Assistant riceve la richiesta e la inoltra all'infrastruttura OCI Data Science.
-
Elaborazione delle query: sono coinvolti 2 passi.
- All'interno di OCI Data Science, la richiesta viene instradata a LangChain, che funge da orchestratore per la gestione dell'interazione tra varie distribuzioni di modelli.
- LangChain elabora la richiesta e identifica la necessità di recuperare informazioni da documenti esterni e dati aziendali.
-
Vettorizzazione: questo passo prevede i seguenti processi secondari:
- La richiesta viene inviata a una distribuzione del modello di incorporamento, che trasforma la query in una rappresentazione vettoriale ad alta dimensione.
- Questa query vettoriale viene quindi inviata a Oracle Database 23ai per la ricerca dei vettori.
-
Recupero dati: questo passo prevede i seguenti processi secondari:
- Oracle Database 23ai esegue una ricerca di somiglianza su dati non strutturati sotto forma di documenti in formato PDF e HTML e combina tale ricerca con la ricerca regolare su altri dati aziendali nel database.
- I documenti o i blocchi pertinenti vengono recuperati e verranno inviati al passo successivo per un'ulteriore elaborazione.
-
Raggruppamento:
- La risposta generata può essere ulteriormente perfezionata mediante una distribuzione del modello di classificazione.
- Il modello di classificazione valuta e classifica le risposte per garantire la selezione della risposta più pertinente e accurata.
-
Esecuzione di query sui modelli esterni: in questo passo i dati vengono recuperati e genera una risposta.
- Le informazioni recuperate vengono utilizzate per generare una query per la distribuzione del modello Mistral-7B-Instruct-v0.2 di cui è stato eseguito il provisioning utilizzando le funzioni AI Quick Actions in OCI Data Science.
- Il modello Mistral-7B-Instruct-v0.2 elabora la query e genera una risposta in base al suo addestramento e al contesto recuperato.
-
Generazione risposta: la risposta ridefinita viene inviata a LangChain, che consolida l'output finale.
-
Restituzione della risposta all'utente:
- La risposta finale viene restituita all'assistente digitale.
- Oracle Digital Assistant fornisce quindi la risposta all'utente.
Obiettivi
- Crea un chatbot sfruttando le tecnologie più recenti come le funzionalità di OCI Data Science come AI Quick Actions e Model Deployment, Mistral-7B-Instruct-v0.2, Oracle Database 23ai, LangChain e Oracle Digital Assistant. Ti guideremo in ogni fase, dall'impostazione dei modelli di intelligenza artificiale di base all'integrazione in un'esperienza conversazionale senza interruzioni. Alla fine di questo tutorial, avrai una comprensione completa di come utilizzare questi strumenti avanzati per creare un chatbot intelligente, reattivo e altamente efficace in grado di comprendere e interagire con gli utenti in modo naturale e coinvolgente.
Prerequisiti
Prerequisiti chiave che è necessario impostare prima di poter continuare a eseguire il processo di ottimizzazione distribuito su OCI Data Science Service.
-
Sono necessari i criteri seguenti:
-
Configura subnet personalizzata con lista di sicurezza per consentire l'ingresso in qualsiasi porta dagli IP che hanno origine nel blocco CIDR della subnet. Ciò garantisce che gli host nella subnet possano connettersi tra loro durante la formazione distribuita. Per maggiori informazioni, vedere Networking.
-
Impostare i criteri per consentire alle risorse del servizio OCI Data Science di accedere ai bucket di OCI Object Storage, al networking e ad altri. Per ulteriori informazioni vedere Criteri OCI.
-
Token di accesso da HuggingFace per scaricare il modello Mistral-7B-Instruct-v0.2. Per ottimizzare il modello, è necessario prima accedere al modello pre-addestrato. Il modello pre-addestrato può essere ottenuto dal sito HuggingFace. In questa esercitazione verrà utilizzato il token di accesso HuggingFace per scaricare il modello pre-addestrato da HuggingFace (impostando la variabile di ambiente
HUGGING_FACE_HUB_TOKEN
). -
Gruppo di log e log dal servizio di log OCI. Questo verrà utilizzato per monitorare l'avanzamento della formazione.
-
Andare al servizio di log OCI e selezionare Gruppi di log.
-
Selezionare uno dei gruppi di log esistenti o crearne uno nuovo.
-
Nel gruppo di log creare due log: un log di previsione e un log di accesso.
- Fare clic su Crea log personalizzato.
-
Specificare un nome (previsione) accedere) e selezionare il gruppo di log che si desidera utilizzare. - In Crea configurazione agente, selezionare Aggiungi configurazione in seguito.
- Fare clic su Crea configurazione agente.
-
-
Sessione notebook utilizzata per avviare l'addestramento distribuito e accedere al modello ottimizzato. Per ulteriori informazioni, vedere Sessione del blocco note.
-
Installa la versione più recente di Oracle Accelerated Data Science (ADS)
pip install oracle-ads[opctl] -U
Task 1: Distribuisci modelli richiesti
Task 1.1: distribuire il modello Mistral-7B-Instruct-v0.2
Sfrutteremo la funzionalità di distribuzione del modello di azioni rapide AI per distribuire Mistral-7B-Instruct-v0.2 con pochi clic. La distribuzione del modello Azioni rapide AI consente agli utenti di distribuire Mistral-7B-Instruct-v0.2 con pochi clic e fornire agli utenti un endpoint.
Task 1.2: Distribuire il modello di incorporamento Jina
-
Nel blocco note, copiare i file modello di incorporamento Jine da https://huggingface.co/jinaai/jina-embeddings-v2-base-en/tree/main nella directory
ads_embedding_model_dir
. -
Caricare il file
score.py
nella directory corrente (ad esempio,/home/datascience/
). -
Eseguire il seguente codice.
import tempfile import ads from ads.model.generic_model import GenericModel from config import CONDA_PACK_PATH, LOG_GROUP_ID, EMBEDDING_MODEL_ACCESS_LOG_LOG_ID, EMBEDDING_MODEL_PREDICT_LOG_LOG_ID ads.set_auth("resource_principal") embedding_model = GenericModel( model_file_name="model-w-mean-pooling.onnx" ,artifact_dir="ads_embedding_model_dir",estimator=None, serialize=False) embedding_model.summary_status() embedding_model.prepare( inference_conda_env=CONDA_PACK_PATH, inference_python_version = "3.9", model_file_name="model.onnx", score_py_uri= "score.py", force_overwrite=True ) op=embedding_model.verify(['Can you please give some overview on Oracle Database 23.4']) print(op['embeddings']); embedding_model.save(display_name="jina-embedding") embedding_md = embedding_model.deploy( display_name = "Jina Embedding Model Deployment", deployment_log_group_id = LOG_GROUP_ID, deployment_access_log_id = EMBEDDING_MODEL_ACCESS_LOG_LOG_ID, deployment_predict_log_id = EMBEDDING_MODEL_PREDICT_LOG_LOG_ID, ) output = embedding_md.predict(['Can you please give some overview on Oracle Database 23.4']) print(output['embeddings']);
Task 1.3: Distribuisci modello Bge-Reranker
Eseguire il seguente codice.
import ads
from FlagEmbedding import FlagReranker
from ads.model.generic_model import GenericModel
from ads.model.model_metadata import MetadataCustomCategory
from config import CONDA_PACK_PATH, LOG_GROUP_ID, RERANKER_MODEL_ACCESS_LOG_LOG_ID, RERANKER_MODEL_PREDICT_LOG_LOG_ID
#
# This custom class wrap the reranker model
#
class Reranker:
def __init__(self, model_id):
self.model_id = model_id
self.reranker = FlagReranker(self.model_id, use_fp16=True)
def predict(self, x):
# x is expected as a list of list of str
# [["x1", "x2"]] -> y = [score12]
scores = self.reranker.compute_score(x)
return scores
reranker_model = Reranker(model_id="BAAI/bge-reranker-large")
reranker_payload = [
["what is panda?", "It is an animal living in China. In the future model input will be serialized by.In the future model input will be serialized by.In the future model input will be serialized by"],
["what is panda?", "The giant panda is a bear species endemic to China.In the future model input will be serialized by.In the future model input will be serialized by.In the future model input will be serialized by.In the future model input will be serialized by"],
]
reranker_model.predict(reranker_payload)
reranker_generic_model = GenericModel(estimator=reranker_model, artifact_dir="./reranker_dir")
reranker_generic_model.summary_status()
reranker_generic_model.prepare(
reload=False,
inference_conda_env=CONDA_PACK_PATH,
inference_python_version="3.9",
model_file_name="reranker.pkl",
force_overwrite=True
)
reranker_generic_model.save(
display_name="reranker2-baai-large",
bucket_uri="oci://reranker_bucket@bigdatadatasciencelarge/reranker/",
ignore_introspection=True
)
reranker_md = reranker_generic_model.deploy(
display_name = "reranker2-baai-large",
deployment_log_group_id = LOG_GROUP_ID,
deployment_access_log_id = RERANKER_MODEL_ACCESS_LOG_LOG_ID,
deployment_predict_log_id = RERANKER_MODEL_PREDICT_LOG_LOG_ID,
deployment_instance_shape="VM.Standard2.4",
)
Task 2: impostare Oracle Database 23ai
Per il nostro caso d'uso utilizzeremo le funzionalità più recenti di Oracle Database 23ai, in particolare Oracle AI Vector Search. In questo scenario, le incorporazioni generate dal data set verranno importate in Oracle Database 23ai. Quando un utente esegue query utilizzando l'AG, la risposta verrà migliorata fornendo agli LLM un contesto aggiuntivo. Il seguente diagramma mostra alcuni dei vantaggi derivanti dall'uso di Oracle Database 23ai.
Figura: un'illustrazione della funzione di ricerca di Oracle Database 23ai (origine)
Ciò aumenterà le loro conoscenze, portando a risposte più accurate e pertinenti alle richieste del cliente. Per impostare Oracle Database 23ai, segui le opzioni menzionate.
-
Utilizzo di un'istanza contenitore. Per ulteriori informazioni, vedere Usa Oracle Autonomous Database Free Container Image.
-
Uso di un client Python.
Utilizzeremo un'istanza in hosting di Oracle Database 23ai per dimostrare le potenti funzioni di Oracle AI Vector Search.
Task 3: Analisi, creazione di chunk e integrazione del negozio in Oracle Database 23ai
Il seguente frammento di codice offre una panoramica generale delle modalità di analisi del documento, della conversione del documento in chunk e della memorizzazione dell'incorporamento in Oracle Database 23ai. Per ulteriori informazioni, consulta oda-oci-data-science-oracledb-23ai-llm.
Inizializza Oracle Database 23ai
def load_documents(embedding_model):
# connect to db
# Configure logging
logging.basicConfig(
level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
)
logging.info("Connecting to Oracle DB...")
DSN = f"{DB_HOST_IP}/{DB_SERVICE}"
with oracledb.connect(user=DB_USER, password=DB_PWD, dsn=DSN) as connection:
logging.info("Successfully connected to Oracle Database...")
num_pages = []
for book in INPUT_FILES:
logging.info(f"Processing book: {book}...")
if ENABLE_CHUNKING is False:
# chunks are pages
logging.info("Chunks are pages of the book...")
nodes_text, nodes_id, pages_num = read_and_split_in_pages([book])
num_pages.append(len(nodes_text))
else:
logging.info(f"Enabled chunking, chunck_size: {MAX_CHUNK_SIZE}...")
nodes_text, nodes_id, pages_num = read_and_split_in_chunks([book])
# create embeddings
# process in batch (max 96 for batch, chosen BATCH_SIZE, see above)
logging.info("Computing embeddings...")
embeddings = compute_embeddings(embedding_model, nodes_text)
# determine book_id and save in table BOOKS
logging.info("Registering document...")
book_id = register_document(book, connection)
# store embeddings
# here we save in DB
save_embeddings_in_db(embeddings, nodes_id, connection)
# store text chunks (pages for now)
save_chunks_in_db(nodes_text, nodes_id, pages_num, book_id, connection)
# a txn is a book
connection.commit()
Task 4: Connettersi a Mistral-7B-Instruct-v0.2 AI Azioni rapide LLM
Crea una distribuzione modello con azioni rapide AI e ottieni l'endpoint di distribuzione modello da lì. Eseguire il codice seguente per connettersi a LLM.
import ads
ads.set_auth("resource_principal")
command_md = OCIModelDeploymentVLLM(
endpoint="https://modeldeployment.eu-frankfurt-1.oci.customer-oci.com/ocid1.datasciencemodeldeployment.oc1.<ocid>/predict",
model="odsc-llm"
)
Task 5: Imposta RAG
La seguente architettura RAG sarà costituita dai seguenti passaggi:
Task 5.1: Carica su 23ai Vector Database
class CustomRetriever(BaseRetriever):
def _get_relevant_documents(
self, query: str, *, run_manager: CallbackManagerForRetrieverRun
) -> List[Document]:
matching_documents = []
#Embedding model
rps = oci.auth.signers.get_resource_principals_signer()
prediction = requests.post(EMBEDDING_MD_ENDPOINT, data=f'["{query}"]', auth=rps)
#Search in DB
q_result = test_oracle_query(prediction.json()['embeddings'][0], TOP_K, True, False)
text_list = []
for n, id, sim in zip(q_result.nodes, q_result.ids, q_result.similarities):
text_list.append(n.text)
paired_list = [[query, text] for text in text_list]
print(f'Reranker payload: {paired_list}')
#ReRanker model
reranker_results = requests.post(RERANKER_MD_ENDPOINT, data=json.dumps(paired_list), auth=rps) # make a prediction request
max_value = max(reranker_results.json()['prediction'])
if max_value < -3:
return matching_documents;
# Find the index of the maximum value
max_index = reranker_results.json()['prediction'].index(max_value)
print(f"The maximum value is: {max_value}")
print(f"The index of the maximum value is: {max_index}")
doc = Document(page_content=paired_list[max_index][1], metadata={"source": "local"})
matching_documents.append(doc)
return matching_documents
customRetriever = CustomRetriever()
chain = RetrievalQA.from_chain_type(
llm=command_md,
retriever=customRetriever
)
prompt = "Can you please give some overview on Oracle Database 23.4?"
res = chain(prompt)
print('Output::')
print(res['result'])
Utilizziamo il modello di prompt e la catena di garanzia della qualità forniti da Langchain per creare il chatbot, questo aiuta a passare il contesto e la domanda direttamente al LLM.
Task 5.2: Distribuire il modello LangChain
import tempfile
import ads
from ads.model.generic_model import GenericModel
from config import CONDA_PACK_PATH, LOG_GROUP_ID, LANGCHAIN_MODEL_ACCESS_LOG_LOG_ID, LANGCHAIN_MODEL_PREDICT_LOG_LOG_ID
ads.set_auth("resource_principal")
langchain_model = GenericModel( artifact_dir="langchain_model",estimator=None, serialize=False)
langchain_model.summary_status()
#Copy required python scripts to artifact dir
langchain_model.prepare(
inference_conda_env=CONDA_PACK_PATH,
inference_python_version = "3.9",
model_file_name="test",
score_py_uri= "score_langchain_final.py",
force_overwrite=True
)
op=langchain_model.verify('Can you please give some overview on Oracle Database 23.4?')
model_id = langchain_model.save(display_name="langchain-model")
deploy = langchain_model.deploy(
display_name="Langchain Model Deployment",
deployment_log_group_id = LOG_GROUP_ID,
deployment_access_log_id = LANGCHAIN_MODEL_ACCESS_LOG_LOG_ID,
deployment_predict_log_id = LANGCHAIN_MODEL_PREDICT_LOG_LOG_ID,
environment_variables={"CRYPTOGRAPHY_OPENSSL_NO_LEGACY":"1"},
deployment_instance_shape="VM.Standard2.4",
)
deploy.predict('Can you please give some overview on Oracle Database 23.4?')
Task 6: Creare un assistente digitale utilizzando Oracle Digital Assistant per l'applicazione chatbot per ospitare RAG
Task 6.1: Recupero dell'endpoint di distribuzione del modello e aggiunta del criterio
Aggiungere un servizio REST all'istanza che chiama il provider del modello. La distribuzione del modello Oracle viene utilizzata come esempio, ma è possibile utilizzare un servizio REST per qualsiasi LLM.
Aggiungere un criterio per consentire a Oracle Digital Assistant di accedere all'endpoint di previsione della distribuzione del modello. Andare a Identità e sicurezza, Criteri e fare clic su Crea criterio.
Criteri per il gruppo dinamico
Allow any-user to {DATA_SCIENCE_MODEL_DEPLOYMENT_PREDICT} in compartment Demo where request.principal.id='ocid1.odainstance.oc1.iad.<ocid>'
Una volta creato il criterio, possiamo avviarlo in Oracle Digital Assistant e aprirlo in un browser.
Task 6.2: Creare il servizio REST del provider LLM
-
Accedere a Oracle Digital Assistant, accedere a Impostazioni, Servizi API, Servizi LLM e fare clic su +Add Servizio LLM.
-
Nella pagina Crea servizio LLM, immettere le informazioni riportate di seguito per creare un'operazione successiva all'endpoint del provider e fare clic su Crea.
- Nome: immettere un nome facilmente identificabile per il servizio. In seguito verrà fatto riferimento a questo nome.
- Endpoint: copiare e incollare l'endpoint di distribuzione del modello.
- Metodi: selezionare POST.
-
Completare il servizio aggiungendo la chiave API e gli esempi di payload di richiesta e risposta.
-
Tipo di autenticazione: selezionare Principal risorsa OCI.
-
Tipo di contenuto: selezionare applicazione/json.
-
Corpo: aggiungere il payload inviato alla richiesta. Ad esempio:
{ "query": "Can you please give some overview on Oracle Database 23.4?" }
-
-
Fare clic su Richiesta di test per verificare la presenza di una risposta
200
.
Task 6.3: Creare una competenza
Con il servizio REST del provider LLM aggiunto all'istanza, ora è necessario creare una competenza in grado di chiamare questo servizio e connettere gli utenti ad esso tramite la relativa definizione del flusso di finestre di dialogo. Per creare questo skill, effettuare le operazioni riportate di seguito.
-
Vai a Oracle Digital Assistant, vai a Sviluppo e +Skills.
-
Fare clic su + Nuova capacità.
-
Nella pagina Crea competenza, immettere le informazioni seguenti e fare clic su Crea.
- Nome visualizzato: aggiungere un nome.
- Modalità di dialogo: selezionare Visuale.
- Per gli altri campi, lasciare i valori predefiniti.
Task 6.4: Collegare l'abilità al modello
Ora abiliteremo la competenza per accedere al servizio REST LLM creando un componente personalizzato con un gestore di eventi che trasforma i payload REST in formati accettati sia dal provider LLM che da Oracle Digital Assistant.
-
Fare clic sull'icona Componenti nella barra di navigazione a sinistra e su Aggiungi servizio.
-
Nella pagina Crea servizio, immettere le informazioni seguenti e fare clic su Crea.
- Nome: immettere un nome che descriva il servizio.
- Tipo di servizio: accettare l'impostazione predefinita, selezionare Contenitore incorporato.
- Tipo di creazione package di servizio componente: selezionare Nuovo componente.
- Tipo di componente: selezionare Trasformazione LLM.
- Nome componente: immettere un nome descrittivo.
- Modello: selezionare Personalizzato (situato in altro).
-
Il componente completato viene visualizzato nella pagina Componenti.
-
Selezionare il componente dalla pagina Componenti per verificarne lo stato di distribuzione. Quando viene visualizzato Pronto, è possibile passare al passo successivo.
Assicurarsi che Service Enabled (impostazione predefinita) sia abilitato.
Task 6.5: mappare il provider di servizi LLM e le richieste e le risposte di Oracle Digital Assistant
Le richieste di competenze al fornitore di servizi del modello devono essere trasformate dall'interfaccia utilizzata da Oracle Digital Assistant, nota come Common LLM Interface (CLMI) nel formato accettato dal fornitore di servizi. Allo stesso modo, anche i risultati restituiti dal fornitore di servizi devono essere trasformati in CLMI. Per abilitare questo mapping, i seguenti metodi di handler di eventi del servizio REST devono avere un codice specifico del provider.
transformRequestPayload
.transformResponsePayload
.transformErrorResponsePayload
.
Per aprire l'editor di codice del gestore di eventi e aggiornare il codice di trasformazione (in questo caso, per Azure OpenAI), attenersi alla procedura riportata di seguito.
-
Espandere il servizio e selezionare il gestore di eventi.
-
Fare clic sull'icona Modifica per aprire l'editor.
-
Sostituire il codice del metodo evento dell'handler
transformRequestPayload
(intorno alle righe 24-26) con il codice seguente.-
transformRequestPayload
:transformRequestPayload: async (event, context) => { return { "query": event.payload.messages[event.payload.messages.length - 1].content }; },
Ogni richiesta deve solo passare l'ultimo input utente al prompt LLM.
-
-
Sostituire il codice del metodo evento del gestore
transformResponsePayload
(intorno alle righe 35-37) con il codice seguente.-
transformRequestPayload
:transformResponsePayload: async (event, context) => { return { candidates: [ { "content": event.payload.prediction || "" }]}; },
-
-
Sostituire il codice del metodo evento del gestore
transformErrorResponsePayload
(intorno alle righe 47-49) con il codice seguente.-
transformRequestPayload
:transformErrorResponsePayload: async (event, context) => { let errorCode = 'unknown'; if (event.payload.error) { if ( 'context_length_exceeded' === event.payload.error.code) { errorCode = 'modelLengthExceeded'; } else if ('content_filter' === event.payload.error.code) { errorCode = 'flagged'; } return {"errorCode" : errorCode, "errorMessage": event.payload.error.message}; } return {"errorCode" : errorCode, "errorMessage": JSON.stringify(event.payload)}; }
-
-
Fare clic su Convalida per controllare la sintassi del codice. Utilizzarlo per sostituire il codice nell'editor se si verificano errori di sintassi che non è possibile correggere.
-
Fare clic su Save e Close. Attendere il completamento della distribuzione. Quando viene visualizzato Pronto, è possibile passare al passo successivo.
Task 6.6: definire il servizio LLM per la competenza
Per abilitare la capacità di connettere gli utenti al modello tramite il flusso della finestra di dialogo, è necessario creare un servizio LLM che combini il servizio LLM a livello di istanza che chiama il modello con l'handler di eventi di trasformazione (che in questo caso è per la distribuzione del modello Oracle).
-
Fare clic sull'icona Impostazioni nella barra di navigazione a sinistra.
-
Fare clic su Configurazione.
-
Nella pagina Servizi LLM, fare clic su +New Servizio LLM.
-
Immettere le informazioni riportate di seguito
-
Nome: immettere un nome facilmente identificabile per il servizio LLM. Questo nome verrà utilizzato come riferimento quando si genera il flusso di finestre di dialogo nel passo successivo.
-
Servizio LLM: selezionare il nome del servizio LLM a livello di istanza creato in Task 1: Creare il servizio REST nel modello.
-
Handler trasformazione: selezionare il nome del componente del gestore di eventi creato nell'ambito del servizio REST in Task 3: Connettere lo skill al modello.
-
Lasciare le proprietà rimanenti nelle impostazioni predefinite. Si noti che Predefinito è abilitato, se si tratta dell'unico servizio creato finora per questa esercitazione.
-
-
Fare clic su Save.
-
Deselezionare Feedback e altri switch predefiniti.
Task 6.7: Integrare il servizio
Ora che l'abilità è connessa all'LLM, connettere gli utenti dell'abilità al modello creando un componente di flusso della finestra di dialogo che può chiamare il modello e dirgli cosa fare. Il componente trasmette queste istruzioni utilizzando un prompt, che è un blocco di testo leggibile dall'utente. In questo task, forniremo questo prompt, che indica al modello di valutare il feedback dell'utente come positivo o negativo o neutro.
-
Fare clic sull'icona Flussi nella barra di navigazione sinistra.
-
Selezionare unresolvedIntent.
-
Nello stato unresolvedMessage fare clic sull'icona ellipsis(...) e selezionare Aggiungi stato dal menu.
-
Selezionare Service Integration e Richiama modello di linguaggio di grandi dimensioni.
-
Immettere una descrizione simile all'analisi del sentiment e fare clic su Inserisci.
Il flusso della finestra di dialogo ora include lo stato
unresolvedMessage
(Invia messaggio), lo statoinvokeLLM
e lo statoshowLLMError
. -
Nello stato
unresolvedMessage
fare clic sull'icona ellipsis(...) e selezionare Elimina dal menu in quanto non si desidera visualizzare il messaggio di errore per UnresolvedIntent.Il flusso della finestra di dialogo ora include solo lo stato
invokeLLM
e lo statoshowLLMError
. -
Aprire lo stato
invokeLLM
. Nella pagina Componente, selezionare il servizio LLM creato nel task 6.6. -
Aggiungere un prompt che invii istruzioni al servizio LLM incollando quanto riportato di seguito in Prompt. Tutte le conversazioni utente devono essere passate come input prompt.
-
Creare la variabile
PROMPT_INPUT
. Fare clic su Parametri prompt + per aggiungere un nuovo parametro e il relativo valore. -
Impostare Usa streaming su False in modo che il messaggio venga consegnato nella sua interezza e non in modo incrementale.
-
Eseguire il test del prompt con Prompt Builder e fare clic su Crea prompt
-
Aggiungere Valore modello parametro prompt e fare clic su Genera output. In questo modo possiamo convalidare l'integrazione LLM.
Task 6.8: Testare il prompt con il tester skill
-
Fare clic su Anteprima per aprire il tester skill.
-
Immettere la richiesta seguente: È possibile fornire una panoramica su Oracle Database 23.4?.
L'output dovrebbe essere simile al seguente:
-
Chiedi la query successiva a LLM: l'ultimo database oracle.
L'output dovrebbe essere simile al seguente:
Task 6.9: Impostazione del canale utente Web Oracle
Verrà creato un canale utente Oracle Digital Assistant che consente a un client Web Oracle di accedere alle competenze. Per garantire che solo i nostri clienti Web possano utilizzare questo canale, lo configureremo per richiedere l'autenticazione del client.
-
Aprire Oracle Digital Assistant, passare a Sviluppo, Canali e fare clic su Canale +Add.
-
In Crea canale, immettere le informazioni riportate di seguito per creare un'operazione POST nell'endpoint del provider e fare clic su Crea.
- Nome: nome univoco che inizia con una lettera e contiene solo lettere, numeri, punti e caratteri di sottolineatura. Ad esempio,
OCI_MD_LLM
. - Descrizione (facoltativo): a cosa serve il canale.
- Tipo di canale: selezionare Web Oracle.
- Domini consentiti: immettere
*
. - Autenticazione client abilitata: deselezionare.
- Nome: nome univoco che inizia con una lettera e contiene solo lettere, numeri, punti e caratteri di sottolineatura. Ad esempio,
-
Deselezionare Autenticazione client abilitata se non è già disabilitata.
-
In Ciclo, selezionare lo skill che si desidera utilizzare. È stata selezionata la competenza corrente LLM-MD-Skill.
-
Abilita Canale abilitato.
-
Prendere nota dell'ID canale e dell'URI dominio ODA senza https, visualizzati per questo canale.
Useremo questi valori nella nostra applicazione web e nella configurazione di routing del generatore di token.
Task 6.10: Installare l'SDK
Scaricare il file zip ed estrarlo nel sistema locale. Questo file zip include una guida per l'utente che descrive le classi dell'SDK e un'applicazione di esempio che illustra molte delle sue funzioni.
-
Vai alla sezione Download di Oracle Digital Assistant (ODA) e Oracle Mobile Cloud (OMC) e SDK Web Oracle Native Client (per ambienti nativi OCI).
-
Scarica ODA Web SDK 24.06.
-
In Piattaforme, selezionare GENERIC.
-
Fare clic per scaricare l'SDK ODA Js più recente, ovvero
oda-native-client-sdk-js-24_06 for (GENERIC (All Platforms)
. -
Estrarre il file zip scaricato.
Task 6.11: Test dell'applicazione Web Oracle
-
Andare alla cartella zip estratta del kit Oracle Web SDK scaricato.
-
Aprire il file
samples/web/settings.js
e sostituire<URI>
e<channelId>
con il valore effettivo.Ad esempio:
- URI:
oda-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-dax.data.digitalassistant.oci.oraclecloud.com
. - ChannelId:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.
- URI:
-
Assicurarsi inoltre che
isClientAuthEnabled
sia falso.let isClientAuthEnabled = false;
-
Eseguire il file
samples/web/index.html
su qualsiasi browser. -
Ignorare il contenuto del file di indice. Fare clic sull'icona della chat per visualizzare lo stato di Oracle Assistant CONNECTED.
-
Ecco come appare il nostro sito web con l'icona della chat nell'angolo in basso a destra. Possiamo iniziare una conversazione, come abbiamo fatto in precedenza con il tester di abilità.
Task 6.12: rilasciare l'istanza di OCI Compute
-
Creare l'istanza OCI Compute. Per ulteriori informazioni, vedere Creazione di un'istanza.
-
Assicurarsi di aver seguito le regole di entrata.
-
Copiare tutte le cartelle Web nell'istanza appena creata.
-
Installare NGINX. Per ulteriori informazioni, vedere Installa il server Web e il proxy NGINX su Oracle Linux.
-
Aprire un browser e passare a
http://<IP_address>/
. Se si dispone di un certificato con firma automatica, è possibile passare ahttps://<IP_address>/
.
Risultati
Confrontiamo gli output direttamente chiedendo al LLM rispetto all'utilizzo di RAG con LLM:
-
Risposta da LLM
-
Risposta da RAG
Passi successivi
Creare un chatbot avanzato utilizzando Oracle Database 23ai, RAG, LangChain, Mistral-7B-Instruct-v0.2 e Oracle Digital Assistant mostra la potenza di integrare tecnologie all'avanguardia per creare un agente conversazionale altamente reattivo e intelligente. Il flusso di lavoro dettagliato, dalla gestione delle richieste alla generazione delle risposte, garantisce che il chatbot possa recuperare ed elaborare in modo efficiente grandi quantità di informazioni, fornendo risposte accurate e contestualmente pertinenti agli utenti. Sfruttando le funzionalità di ricerca vettoriale di Oracle Database 23ai e la solida piattaforma fornita da Oracle Digital Assistant, gli sviluppatori possono migliorare in modo significativo le prestazioni e il coinvolgimento degli utenti del chatbot. Questo approccio integrato non solo semplifica il processo di sviluppo, ma si traduce anche in una soluzione AI scalabile, efficiente e altamente efficace che si distingue nel panorama competitivo degli assistenti digitali. Che si tratti di assistenza clienti, recupero delle informazioni o supporto interattivo, questa architettura chatbot avanzata apre la strada alla creazione di sofisticate esperienze di conversazione che soddisfano le esigenze degli utenti moderni.
Per ulteriori informazioni su come utilizzare le azioni rapide di AI, vai alla list di Oracle Cloud Infrastructure Data Science YouTube per vedere un video dimostrativo su AI Quick Actions e trovare la nostra documentazione tecnica e consultare il nostro repository di Github con suggerimenti ed esempi.
Se desideri suggerire modelli specifici da aggiungere alle azioni rapide di AI o hai domande, invia un'e-mail al gruppo OCI Data Science: ask-oci-data-science_grp@oracle.com.
Collegamenti correlati
-
Prova la prova gratuita di Oracle Cloud. Una prova di 30 giorni con 300 dollari di credito gratuito ti consente di accedere al servizio Oracle Cloud Infrastructure Data Science. Per ulteriori informazioni, consultare le risorse seguenti:
-
Uso di Oracle Resource Manager per la configurazione della tenancy per Data Science
-
Stella e copia il nostro nuovo GitHub repo. Abbiamo incluso tutorial per notebook ed esempi di codice.
-
Guarda i nostri tutorial su YouTube
-
Cerca Oracle Data Science e prova LiveLabs.
Conferme
-
Autore - Shekhar Chavan (membro principale dello staff tecnico, OCI Data Science), Ashutosh Kumar (membro principale dello staff tecnico, OCI Data Science)
-
Contributori - Piyush Gajjariya (Software Development Manager, OCI Data Science), Tzvi Keisar (Director of Product Management), SriRanjith R (Senior Member Technical Staff, OCI Data Science)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione del prodotto, visita l'Oracle Help Center.
Build an Enterprise Chatbot with Oracle Digital Assistant, OCI Data Science, LangChain and Oracle Database 23ai
G13776-01
August 2024