Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Introduction à l' niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles propres à votre environnement en nuage.
Créez un agent conversationnel d'entreprise avec Oracle Digital Assistant, OCI Data Science, LangChain et Oracle Database 23ai
Présentation
Dans le paysage numérique actuel, les agents conversationnels évoluent pour devenir plus intelligents, plus réactifs et plus capables de gérer des interactions complexes. Dans ce tutoriel, nous étudions la création d'un agent conversationnel de nouvelle génération en tirant parti de la puissance des capacités du service de science des données d'Oracle Cloud Infrastructure (OCI), telles que les actions rapides et le déploiement de modèles avec IA, Mistral-7B-Instruct-v0.2, Oracle Database 23ai, LangChain et Oracle Digital Assistant. Chacune de ces technologies apporte des forces uniques à la table, ce qui nous permet de créer un agent conversationnel qui non seulement comprend et répond aux demandes des utilisateurs avec une précision remarquable, mais offre également une expérience conversationnelle transparente et engageante.
L'une des principales fonctionnalités d'Oracle Database 23ai est ses capacités avancées de recherche vectorielle. Cette technologie permet une récupération efficace des informations en convertissant le texte en vecteurs de haute dimension, qui sont ensuite comparés pour leur pertinence. Lorsqu'elle est intégrée au pipeline de génération augmentée par extraction (RAG), la recherche vectorielle d'Oracle Database 23ai améliore la capacité de l'agent conversationnel à accéder aux informations les plus pertinentes provenant de vastes jeux de données et à les fournir. Cela garantit que les réponses générées sont non seulement contextuellement exactes, mais également très pertinentes pour l'interrogation de l'utilisateur.
Oracle Digital Assistant améliore encore les fonctionnalités de l'agent conversationnel en fournissant une plateforme robuste pour créer, déployer et gérer des solutions d'IA conversationnelle. Il offre des connecteurs prédéfinis, une compréhension du langage naturel (NLU) et une gestion du dialogue, qui simplifient le processus de développement et assurent une expérience utilisateur fluide. La combinaison d'Oracle Digital Assistant et du pipeline RAG permet à l'agent conversationnel de gérer des interactions complexes et de maintenir un flux de conversation naturel, améliorant ainsi l'engagement et la satisfaction des utilisateurs.
En tirant parti de la synergie d'Oracle Database 23ai et d'Oracle Digital Assistant dans le pipeline RAG, les développeurs peuvent créer un agent conversationnel qui excelle à la fois dans la précision d'extraction et la fluidité conversationnelle. Cette approche intégrée réduit non seulement le temps et les efforts nécessaires pour créer des agents conversationnels sophistiqués, mais aboutit également à une solution évolutive, efficace et capable d'offrir une expérience utilisateur supérieure. Que vous soyez un développeur, un passionné de technologie ou un chef d'entreprise cherchant à améliorer l'engagement des clients, ce tutoriel vous fournira les connaissances et les outils nécessaires pour créer un agent conversationnel avancé qui se démarque dans l'arène numérique bondée.
Pour la présentation pas à pas du processus, voir Référentiel d'échantillons d'intelligence artificielle GitHub.
Cas d'utilisation
Voici quelques exemples de cas d'utilisation qui peuvent être utiles :
-
Soutien à la clientèle personnalisé : L'interrogation des guides ainsi que de l'historique du client peut créer une meilleure vue des problèmes du client et faciliter le diagnostic et la résolution plus rapidement.
-
Optimisation de la chaîne d'approvisionnement : L'interrogation des données de fournisseur à l'aide des données internes de commande ou d'expédition peut mener à une meilleure prise de décision et à une réponse plus rapide aux changements dans la chaîne d'approvisionnement.
-
Optimiser les ventes : Interrogez les données CRM pour identifier les pistes à fort potentiel et suggérez des stratégies pour augmenter la probabilité de conclusion d'un contrat.
Avantages de la recherche de vecteurs dans Oracle AI
Oracle Database est un référentiel de données opérationnelles et d'entreprise de premier plan. Les applications d'entreprise doivent généralement rechercher une combinaison de données d'entreprise et de données non structurées. Par exemple, un site Web de vente au détail peut comporter des recherches basées sur une description de produit en langage naturel et une image de produit cible, ainsi que d'autres filtres, tels que le prix, l'emplacement du magasin, le fabricant et la disponibilité actuelle. Cette recherche nécessite de rechercher simultanément des données de catalogue non structurées (description et image du produit), des données de catalogue structurées (prix, emplacement de magasin et fabricant) ainsi que des données transactionnelles en temps réel (telles que le stock courant).
Présentation de la solution d'architecture de haut niveau
Figure : Architecture de haut niveau du pipeline RAG
Le diagramme suivant illustre l'architecture et le flux de travail de création d'un agent conversationnel avancé à l'aide de Mistral-7B-Instruct-v0.2, d'Oracle Database 23ai, de RAG, de LangChain et d'Oracle Digital Assistant. Voici les étapes détaillées impliquées dans l'architecture suivante.
-
Interaction de l'utilisateur : L'utilisateur envoie une demande à l'agent conversationnel au moyen de l'interface d'Oracle Digital Assistant.
-
Traitement des demandes : Oracle Digital Assistant reçoit la demande et la transmet à l'infrastructure du service de science des données pour OCI.
-
Traitement des interrogations : Il y a 2 étapes impliquées.
- Au sein du service de science des données pour OCI, la demande est acheminée vers LangChain, qui agit en tant qu'orchestrateur pour gérer l'interaction entre divers déploiements de modèle.
- LangChain traite la demande et identifie le besoin d'extraction d'informations à partir de documents externes et de données d'entreprise.
-
Vectorisation : Cette étape implique les sous-processus suivants :
- La demande est envoyée à un déploiement de modèle d'intégration, qui transforme l'interrogation en une représentation vectorielle haute dimension.
- Cette interrogation vectorielle est ensuite envoyée à Oracle Database 23ai pour la recherche vectorielle.
-
Extraction de données : Cette étape implique les sous-processus suivants :
- Oracle Database 23ai effectue une recherche de similarité sur des données non structurées sous forme de documents au format PDF et HTML et combine cette recherche avec une recherche régulière sur d'autres données d'affaires de la base de données.
- Les documents ou fragments pertinents sont extraits et envoyés à l'étape suivante pour traitement ultérieur.
-
Reclassement :
- La réponse générée peut être encore affinée par un déploiement de modèle de reclassement.
- Le modèle de reclassement évalue et classe les réponses pour s'assurer que la réponse la plus pertinente et la plus précise est sélectionnée.
-
Interrogation des modèles externes : Dans cette étape, les données sont extraites et génèrent une réponse.
- Les informations extraites sont utilisées pour générer une interrogation pour le déploiement du modèle Mistral-7B-Instruct-v0.2 provisionné à l'aide des fonctions d'actions rapides d'IA dans le service de science des données pour OCI.
- Le modèle Mistral-7B-Instruct-v0.2 traite l'interrogation et génère une réponse en fonction de son entraînement et du contexte extrait.
-
Génération de réponse : La réponse affinée est renvoyée à LangChain, qui consolide la sortie finale.
-
Retour de la réponse à l'utilisateur :
- La réponse finale est renvoyée à l'assistant numérique.
- Oracle Digital Assistant fournit ensuite la réponse à l'utilisateur.
Objectifs
- Créez un agent conversationnel en tirant parti des technologies les plus récentes comme les capacités du service de science des données d'OCI telles que les actions rapides et le déploiement de modèles avec intelligence artificielle, Mistral-7B-Instruct-v0.2, Oracle Database 23ai, LangChain et Oracle Digital Assistant. Nous vous guiderons à travers chaque étape, de la configuration des modèles d'IA de base à leur intégration dans une expérience conversationnelle transparente. À la fin de ce tutoriel, vous aurez une compréhension complète de la façon d'utiliser ces outils avancés pour créer un agent conversationnel intelligent, réactif et hautement efficace capable de comprendre et d'interagir avec les utilisateurs de manière naturelle et engageante.
Préalables
Préalables clés que vous devez configurer avant de pouvoir exécuter le processus de réglage fin distribué dans le service de science des données pour OCI.
-
Les politiques suivantes sont nécessaires :
-
Configurez un sous-réseau personnalisé avec une liste de sécurité pour autoriser le trafic entrant dans n'importe quel port à partir des adresses IP provenant du bloc CIDR du sous-réseau. Cela permet de s'assurer que les hôtes du sous-réseau peuvent se connecter les uns aux autres lors d'un entraînement distribué. Pour plus d'informations, voir Réseau.
-
Définissez les politiques permettant aux ressources du service de science des données pour OCI d'accéder aux seaux de stockage d'objets OCI, au réseau et à d'autres. Pour plus d'informations, voir Politiques OCI.
-
Jeton d'accès à partir de HuggingFace pour télécharger le modèle Mistral-7B-Instruct-v0.2. Pour affiner le modèle, vous devez d'abord accéder au modèle préentraîné. Le modèle préentraîné peut être obtenu à partir de HuggingFace. Dans ce tutoriel, nous utiliserons le jeton d'accès HuggingFace pour télécharger le modèle préentraîné à partir de HuggingFace (en définissant la variable d'environnement
HUGGING_FACE_HUB_TOKEN
). -
Groupe de journaux et journal du service de journalisation OCI. Il sera utilisé pour suivre l'avancement de la formation.
-
Allez au service de journalisation OCI et sélectionnez Groupes de journaux.
-
Sélectionnez un des groupes de journaux existants ou créez-en un nouveau.
-
Dans le groupe de journaux, créez deux journaux : un journal de prédiction et un journal d'accès.
- Cliquez sur Créer un journal personnalisé.
-
Spécifier un nom (prédicter) access) et sélectionnez le groupe de journaux à utiliser. - Sous Créer une configuration d'agent, sélectionnez Ajouter une configuration plus tard.
- Cliquez sur Créer une configuration d'agent.
-
-
Session de carnet utilisée pour lancer l'entraînement distribué et accéder au modèle ajusté. Pour plus d'informations, voir Session de carnet.
-
Installer la dernière version d'Oracle Accelerated Data Science (ADS)
pip install oracle-ads[opctl] -U
Tâche 1 : Déployer les modèles requis
Tâche 1.1 : Déployer le modèle Mistral-7B-Instruct-v0.2
Nous tirerons parti de la fonction de déploiement du modèle d'actions rapides de l'IA pour déployer Mistral-7B-Instruct-v0.2 en quelques clics. Le déploiement du modèle d'action rapide de l'IA aide les utilisateurs à déployer le Mistral-7B-Instruct-v0.2 en quelques clics et à fournir aux utilisateurs un point d'extrémité.
Tâche 1.2 : Déployer le modèle d'intégration Jina
-
Dans le carnet, copiez les fichiers de modèle Jine Embedding de https://huggingface.co/jinaai/jina-embeddings-v2-base-en/tree/main dans le répertoire
ads_embedding_model_dir
. -
Chargez le fichier
score.py
dans le répertoire courant (par exemple,/home/datascience/
). -
Exécutez le code suivant.
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']);
Tâche 1.3 : Déployer le modèle Bge-Reranker
Exécutez le code suivant.
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",
)
Tâche 2 : Configurer Oracle Database 23ai
Nous utiliserons les dernières fonctionnalités d'Oracle Database 23ai, en particulier la recherche de vecteurs dans Oracle AI, pour notre cas d'utilisation. Dans ce scénario, nous importerons les intégrations générées à partir du jeu de données dans Oracle Database 23ai. Lorsqu'un utilisateur interroge à l'aide de la RAG, la réponse est améliorée en fournissant aux LLM un contexte supplémentaire. Le diagramme suivant présente certains avantages liés à l'utilisation d'Oracle Database 23ai.
Figure : Illustration de la fonction de recherche d'Oracle Database 23ai (source)
Cela augmentera leurs connaissances, conduisant à des réponses plus précises et pertinentes aux demandes du client. Pour configurer Oracle Database 23ai, suivez les options mentionnées.
-
Utilisation d'une instance de conteneur. Pour plus d'informations, voir Utiliser l'image de conteneur gratuit Oracle Autonomous Database.
-
Utilisation d'un client Python.
Nous utiliserons une instance hébergée d'Oracle Database 23ai pour présenter les puissantes fonctionnalités d'Oracle AI Vector Search.
Tâche 3 : Analyser, fragmenter et stocker l'intégration dans Oracle Database 23ai
L'extrait de code suivant donne un aperçu général de la façon dont le document est analysé, comment le document est converti en fragments, puis comment l'intégration sera stockée dans Oracle Database 23ai. Pour plus d'informations, voir oda-oci-data-science-oracledb-23ai-llm.
Initialiser 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()
Tâche 4 : Se connecter à Mistral-7B-Instruct-v0.2 AI Actions rapides LLM
Créez un déploiement de modèle avec des actions rapides d'IA et obtenez le point d'extrémité de déploiement de modèle à partir de là. Exécutez le code suivant pour vous connecter à 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"
)
Tâche 5 : Configurer ROV
L'architecture RAG suivante comprendra les étapes suivantes :
Tâche 5.1 : Charger dans la base de données vectorielle 23ai
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'])
Nous utilisons le modèle d'invite et la chaîne d'assurance qualité fournis par Langchain pour créer l'agent conversationnel, ce qui aide à transmettre le contexte et la question directement au LLM.
Tâche 5.2 : Déployer le modèle 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?')
Tâche 6 : Créer un assistant numérique à l'aide d'Oracle Digital Assistant pour l'application d'agent conversationnel afin d'héberger RAG
Tâche 6.1 : Obtenir le point d'extrémité de déploiement de modèle et ajouter une politique
Ajoutez un service REST à l'instance qui appelle le fournisseur du modèle. Nous utilisons le déploiement de modèle Oracle à titre d'exemple, mais nous pouvons utiliser un service REST pour n'importe quel LLM.
Ajoutez une politique pour qu'Oracle Digital Assistant puisse accéder au point d'extrémité de prédiction du déploiement de modèle. Allez à Identité et sécurité, Politiques et cliquez sur Créer une politique.
Politiques pour le groupe dynamique
Allow any-user to {DATA_SCIENCE_MODEL_DEPLOYMENT_PREDICT} in compartment Demo where request.principal.id='ocid1.odainstance.oc1.iad.<ocid>'
Une fois la politique créée, nous pouvons la lancer dans Oracle Digital Assistant et l'ouvrir dans un navigateur.
Tâche 6.2 : Créer le service REST du fournisseur LLM
-
Allez à Oracle Digital Assistant, naviguez jusqu'à Paramètres, Services d'API, Services LLM et cliquez sur +Add Service LLM.
-
Dans la page Créer un service LLM, entrez les informations suivantes pour créer une opération Post au point d'extrémité du fournisseur et cliquez sur Créer.
- Nom : Entrez un nom facilement identifiable pour le service. Vous référencerez ce nom plus tard.
- Point d'extrémité : Copiez et collez le point d'extrémité de déploiement de modèle.
- Méthodes : Sélectionnez POST.
-
Terminez le service en ajoutant la clé d'API et les exemples de données utiles de demande et de réponse.
-
Type d'authentification : Sélectionnez Principal de ressource OCI.
-
Type de contenu : Sélectionnez application/json.
-
Corps : Ajoutez les données utiles envoyées à la demande. Par exemple :
{ "query": "Can you please give some overview on Oracle Database 23.4?" }
-
-
Cliquez sur Demande de test pour rechercher une réponse
200
.
Tâche 6.3 : Créer une compétence
Avec le service REST du fournisseur LLM ajouté à l'instance, nous devons maintenant créer une compétence qui peut appeler ce service et y connecter des utilisateurs au moyen de sa définition de flux de dialogue. Pour créer cette compétence, procédez de la façon suivante :
-
Allez à Oracle Digital Assistant, naviguez jusqu'à Développement et +Skills.
-
Cliquez sur + New Skill (Nouvelle compétence).
-
Dans la page Créer une compétence, entrez les informations suivantes et cliquez sur Créer.
- Nom d'affichage : Ajoutez un nom.
- Mode de dialogue : Sélectionnez Visuel.
- Pour les autres champs, laissez les valeurs par défaut.
Tâche 6.4 : Connecter la compétence au modèle
Nous allons maintenant permettre à la compétence d'accéder au service REST LLM en créant un composant personnalisé avec un programme de traitement d'événements qui transforme les données utiles REST dans des formats acceptés par le fournisseur LLM et Oracle Digital Assistant.
-
Cliquez sur l'icône Composants dans la barre de navigation gauche et sur Ajouter un service.
-
Dans la page Créer un service, entrez les informations suivantes et cliquez sur Créer.
- Nom : Entrez un nom qui décrit le service.
- Type de service : Acceptez le paramètre par défaut, sélectionnez Conteneur intégré.
- Type de création de l'ensemble de services de composant : Sélectionnez Nouveau composant.
- Type de composant : Sélectionnez Transformation LLLM.
- Nom du composant : entrez un nom descriptif.
- Modèle : Sélectionnez Personnalisé (situé sous autre).
-
Le composant terminé s'affiche dans la page Composants.
-
Sélectionnez le composant dans la page Composants pour vérifier son statut de déploiement. Lorsque l'option Prêt s'affiche, vous pouvez passer à l'étape suivante.
Assurez-vous que l'option Service activé (paramètre par défaut) est activée.
Tâche 6.5 : Mapper le fournisseur de services LLM et les demandes et réponses d'Oracle Digital Assistant
Les demandes de la compétence au fournisseur de services du modèle doivent être transformées de l'interface utilisée par Oracle Digital Assistant, connue sous le nom d'interface LLM commune (CLMI) dans le format accepté par le fournisseur de services. De même, les résultats renvoyés par le fournisseur de services doivent également être transformés en CLMI. Pour activer ce mappage, les méthodes de programme de traitement d'événements de service REST suivantes doivent avoir un code propre au fournisseur.
transformRequestPayload
.transformResponsePayload
.transformErrorResponsePayload
.
Pour ouvrir l'éditeur de code du programme de traitement d'événements et mettre à jour le code de transformation (dans ce cas, pour Azure OpenAI), procédez comme suit :
-
Développez le service et sélectionnez le programme de traitement d'événements.
-
Cliquez sur l'icône Modifier pour ouvrir l'éditeur.
-
Remplacez le code de méthode d'événement du programme de traitement
transformRequestPayload
(autour des lignes 24 à 26) par le code suivant.-
transformRequestPayload
:transformRequestPayload: async (event, context) => { return { "query": event.payload.messages[event.payload.messages.length - 1].content }; },
Chaque demande doit simplement passer la dernière entrée utilisateur à l'invite LLM.
-
-
Remplacez le code de méthode d'événement du programme de traitement
transformResponsePayload
(autour des lignes 35 à 37) par le code suivant.-
transformRequestPayload
:transformResponsePayload: async (event, context) => { return { candidates: [ { "content": event.payload.prediction || "" }]}; },
-
-
Remplacez le code de méthode d'événement du programme de traitement
transformErrorResponsePayload
(autour des lignes 47 à 49) par le code suivant.-
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)}; }
-
-
Cliquez sur Valider pour vérifier la syntaxe du code. Utilisez-le pour remplacer le code dans l'éditeur si vous rencontrez des erreurs de syntaxe que vous ne pouvez pas corriger.
-
Cliquez sur Enregistrer et Fermer. Attendez la fin du déploiement. Lorsque l'option Prêt s'affiche, vous pouvez passer à l'étape suivante.
Tâche 6.6 : Définir le service LLM pour la compétence
Pour permettre à la compétence de connecter des utilisateurs au modèle au moyen du flux de dialogue, vous devez créer un service LLM qui combine le service LLM à l'échelle de l'instance qui appelle le modèle avec le programme de traitement d'événements de transformation (dans ce cas, pour le déploiement de modèle Oracle).
-
Cliquez sur l'icône Paramètres dans la barre de navigation de gauche.
-
Cliquez sur Configuration.
-
Dans la page Services de modèles linguistiques étendus, cliquez sur +New Service LLM.
-
Entrez les informations suivantes
-
Nom : Entrez un nom facilement identifiable pour le service LLM. Vous référencerez ce nom lorsque vous créerez le flux de dialogue à l'étape suivante.
-
Service LLM : Sélectionnez le nom du service LLM à l'échelle de l'instance que vous avez créé dans Tâche 1 : Créer le service REST selon le modèle.
-
Programme de traitement de transformation : Sélectionnez le nom du composant du programme de traitement d'événements que vous avez créé dans le cadre du service REST dans Tâche 3 : Connecter la compétence au modèle.
-
Conservez les propriétés restantes dans leurs paramètres par défaut. Notez que l'option Par défaut est activée, s'il s'agit du seul service que vous avez créé jusqu'à présent pour ce tutoriel.
-
-
Cliquez sur Enregistrer.
-
Désélectionnez Rétroaction et les autres valeurs par défaut sur les commutateurs.
Tâche 6.7 : Intégrer le service
Maintenant que la compétence est connectée au LLM, connectez les utilisateurs de la compétence au modèle en créant un composant de flux de dialogue qui peut appeler le modèle et lui dire quoi faire. Le composant transmet ces instructions à l'aide d'une invite, qui est un bloc de texte lisible par l'homme. Dans cette tâche, nous fournirons cette invite, qui indique au modèle d'évaluer les commentaires des utilisateurs comme positifs, négatifs ou neutres.
-
Cliquez sur l'icône Flux dans la barre de navigation gauche.
-
Sélectionnez unresolvedIntent.
-
À l'état unresolvedMessage, cliquez sur l'icône points de suspension(...) et sélectionnez Ajouter un état dans le menu.
-
Sélectionnez Intégration de services et Appeler un modèle de langue volumineux.
-
Entrez une description telle que l'analyse des sentiments et cliquez sur Insérer.
Le flux de dialogue inclut maintenant l'état
unresolvedMessage
(Envoyer un message), l'étatinvokeLLM
et l'étatshowLLMError
. -
À l'état
unresolvedMessage
, cliquez sur l'icône ellipsis(...) et sélectionnez Supprimer dans le menu, car nous ne voulons pas afficher de message d'erreur pour UnresolvedIntent.Le flux de dialogue inclut maintenant l'état
invokeLLM
et l'étatshowLLMError
uniquement. -
Ouvrez l'état
invokeLLM
. Dans la page Composant, sélectionnez le service LLM que nous avons créé dans la tâche 6.6. -
Ajoutez une invite qui envoie des instructions au service LLM en collant les éléments suivants dans l'invite. Toute conversation d'utilisateur doit être transmise en tant qu'entrée d'invite.
-
Créez la variable
PROMPT_INPUT
. Cliquez sur Paramètres d'invite + pour ajouter un nouveau paramètre et sa valeur. -
Réglez Utiliser le service de diffusion en continu à Faux pour que le message soit transmis dans son intégralité, et non de manière incrémentielle.
-
Testez l'invite avec le générateur d'invites et cliquez sur Créer une invite
-
Ajoutez Valeur fictive de paramètre d'invite et cliquez sur Générer une sortie. Nous pouvons ainsi valider l'intégration LLM.
Tâche 6.8 : Tester l'invite avec le testeur de compétence
-
Cliquez sur Preview (Prévisualiser) pour ouvrir le testeur de compétence.
-
Entrez la demande suivante : Pouvez-vous donner un aperçu d'Oracle Database 23.4?
La sortie doit ressembler à ceci :
-
Demandez l'interrogation suivante à LLM : dernière base de données oracle.
La sortie doit ressembler à ceci :
Tâche 6.9 : Configurer le canal d'utilisateur Web Oracle
Nous allons créer un canal d'utilisateur Oracle Digital Assistant qui permet à un client Web Oracle d'accéder à la compétence. Pour s'assurer que seuls nos clients Web peuvent utiliser ce canal, nous le configurerons pour exiger l'authentification du client.
-
Ouvrez Oracle Digital Assistant, naviguez jusqu'à Développement, Canaux et cliquez sur +Add Canal.
-
Dans Créer un canal, entrez les informations suivantes pour créer une opération POST vers le point d'extrémité du fournisseur et cliquez sur Créer.
- Nom : Nom unique qui commence par une lettre et ne contient que des lettres, des chiffres, des points et des traits de soulignement. Par exemple,
OCI_MD_LLM
. - Description (facultatif) : À quoi sert le canal.
- Type de canal : Sélectionnez Oracle Web.
- Domaines autorisés : Entrez
*
. - Authentification du client activée : Désélectionnez-la.
- Nom : Nom unique qui commence par une lettre et ne contient que des lettres, des chiffres, des points et des traits de soulignement. Par exemple,
-
Désélectionnez Authentification du client activée si elle n'est pas déjà désactivée.
-
Dans Route, sélectionnez la compétence à utiliser. Nous avons sélectionné la compétence courante LLM-MD-Skill.
-
Activer le canal activé.
-
Notez l'ID canal et l'URI de domaine ODA sans https, qui sont affichés pour ce canal.
Nous utiliserons ces valeurs dans notre application Web et la configuration de routage du générateur de jetons.
Tâche 6.10 : Installer la trousse SDK
Téléchargez le fichier zip et extrayez-le sur votre système local. Ce fichier zip comprend un guide d'utilisation qui décrit les classes de la trousse SDK et un exemple d'application qui présente la plupart de ses fonctions.
-
Allez à la section Téléchargements d'Oracle Digital Assistant (ODA) et d'Oracle Mobile Cloud (OMC) et Trousses SDK Web pour clients natifs Oracle (pour les environnements natifs OCI).
-
Télécharger la trousse SDK Web ODA 24.06.
-
Dans Plate-formes, sélectionnez GÉNÉRIQUE.
-
Cliquez pour télécharger la dernière trousse SDK ODA Js qui est
oda-native-client-sdk-js-24_06 for (GENERIC (All Platforms)
. -
Extrayez le fichier zip téléchargé.
Tâche 6.11 : Tester l'application Web Oracle
-
Allez au dossier zip extrait de la trousse SDK Web Oracle téléchargée.
-
Ouvrez le fichier
samples/web/settings.js
et remplacez<URI>
et<channelId>
par la valeur réelle.Par exemple :
- URI :
oda-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-dax.data.digitalassistant.oci.oraclecloud.com
. - ChannelId:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.
- URI :
-
Assurez-vous également que
isClientAuthEnabled
est faux.let isClientAuthEnabled = false;
-
Exécutez le fichier
samples/web/index.html
dans n'importe quel navigateur. -
Ignorez le contenu du fichier d'index. Cliquez sur l'icône de clavardage pour afficher le statut Oracle Assistant CONNECTED.
-
Voici à quoi ressemble notre site Web avec l'icône de chat en bas à droite. Nous pouvons commencer une conversation, comme nous l'avons fait précédemment avec le testeur de compétence.
Tâche 6.12 : Version sur l'instance de calcul OCI
-
Créez une instance du service de calcul OCI. Pour plus d'informations, voir Création d'une instance
-
Assurez-vous d'avoir suivi les règles de trafic entrant.
-
Copiez tous les dossiers Web dans la nouvelle instance créée.
-
Installez NGINX. Pour plus d'informations, voir Installer le serveur Web et le mandataire NGINX sur Oracle Linux.
-
Ouvrez un navigateur et accédez à
http://<IP_address>/
. Si vous avez un certificat auto-signé, vous pouvez accéder àhttps://<IP_address>/
.
Résultats
Comparons les résultats de la demande directe du LLM par rapport à l'utilisation de RAG avec LLM :
-
Réponse de LLM
-
Réponse de ROV
Étapes suivantes
La création d'un agent conversationnel avancé au moyen d'Oracle Database 23ai, de RAG, de LangChain, de Mistral-7B-Instruct-v0.2 et d'Oracle Digital Assistant présente la puissance de l'intégration de technologies de pointe pour créer un agent conversationnel hautement réactif et intelligent. Le flux de travail détaillé, du traitement des demandes à la génération des réponses, garantit que l'agent conversationnel peut récupérer et traiter efficacement de grandes quantités d'informations, fournissant des réponses précises et pertinentes sur le plan contextuel aux utilisateurs. En tirant parti des capacités de recherche vectorielle d'Oracle Database 23ai et de la plate-forme robuste fournie par Oracle Digital Assistant, les développeurs peuvent améliorer considérablement la performance de l'agent conversationnel et l'engagement des utilisateurs. Cette approche intégrée simplifie non seulement le processus de développement, mais offre aussi une solution d'IA évolutive, efficace et hautement efficace qui se démarque dans le paysage concurrentiel des assistants numériques. Que ce soit pour le service à la clientèle, l'extraction d'informations ou le soutien interactif, cette architecture d'agent conversationnel avancée ouvre la voie à la création d'expériences conversationnelles sophistiquées qui répondent aux exigences des utilisateurs modernes.
Pour plus d'informations sur l'utilisation des actions rapides du service d'intelligence artificielle, allez à la liste de lecture YouTube d'Oracle Cloud Infrastructure Data Science pour voir une vidéo de démonstration des actions rapides du service d'intelligence artificielle. Pour plus d'informations, consultez notre documentation technique et consultez notre référentiel Github avec des conseils et des exemples.
Si vous voulez suggérer des modèles spécifiques à ajouter aux actions rapides de l'IA ou si vous avez des questions, envoyez un courriel au groupe du service de science des données pour OCI : ask-oci-data-science_grp@oracle.com.
Liens connexes
-
Essayez Essai gratuit d'Oracle Cloud! Un essai de 30 jours avec un crédit d'une valeur de 300 $ US vous donne accès au service Oracle Cloud Infrastructure Data Science. Pour plus d'informations, voir les ressources suivantes :
-
Démarrez et clonez notre nouveau référentiel GitHub! Nous avons inclus des tutoriels sur les carnets et des exemples de code.
-
Consultez nos tutoriels sur YouTube
-
Recherchez le service de science des données d'Oracle et essayez LiveLabs.
-
Présentation des actions rapides d'IA dans le service de science des données d'OCI
Confirmation
-
Auteur - Shekhar Chavan (Membre principal du personnel technique, science des données pour OCI), Ashutosh Kumar (Membre principal du personnel technique, science des données pour OCI)
-
Contributeurs - Piyush Gajjariya (gestionnaire du développement de logiciels, science des données OCI), Tzvi Keisar (directeur de la gestion des produits), SriRanjith R (membre principal du personnel technique, science des données OCI)
Autres ressources d'apprentissage
Explorez d'autres laboratoires sur la page docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Build an Enterprise Chatbot with Oracle Digital Assistant, OCI Data Science, LangChain and Oracle Database 23ai
G13774-01
August 2024