Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zur Registrierung für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Ersetzen Sie diese Werte nach Abschluss der Übung durch Werte, die für Ihre Cloud-Umgebung spezifisch sind.
Erstellen Sie einen Unternehmens-Chatbot mit Oracle Digital Assistant, OCI Data Science, LangChain und Oracle Database 23ai
Einführung
In der heutigen digitalen Landschaft entwickeln sich Chatbots zu intelligenteren, reaktionsschnelleren und in der Lage, komplexe Interaktionen zu verarbeiten. In diesem Tutorial untersuchen wir die Erstellung eines Chatbots der nächsten Generation, indem wir die Leistungsfähigkeit von Oracle Cloud Infrastructure (OCI) Data Science-Funktionen wie KI-Schnellaktionen und Modellbereitstellung, Mistral-7B-Instruct-v0.2, Oracle Database 23ai, LangChain und Oracle Digital Assistant nutzen. Jede dieser Technologien bringt einzigartige Stärken auf den Tisch und ermöglicht es uns, einen Chatbot zu erstellen, der nicht nur Benutzeranfragen mit bemerkenswerter Genauigkeit versteht und darauf reagiert, sondern auch eine nahtlose und ansprechende Konversationserfahrung bietet.
Eines der herausragenden Features von Oracle Database 23ai sind die erweiterten Vektorsuchfunktionen. Diese Technologie ermöglicht ein effizientes Abrufen von Informationen durch Umwandlung von Text in hochdimensionale Vektoren, die dann für die Relevanz verglichen werden. Wenn sie in die Pipeline der Retrieval-Augmented Generation (RAG) integriert ist, verbessert die Vektorsuche von Oracle Database 23ai die Fähigkeit des Chatbots, auf die relevantesten Informationen aus umfangreichen Datensätzen zuzugreifen und diese bereitzustellen. Dadurch wird sichergestellt, dass die generierten Antworten nicht nur kontextbezogen, sondern auch für die Abfrage des Benutzers sehr relevant sind.
Oracle Digital Assistant verbessert die Funktionalität des Chatbots weiter, indem es eine robuste Plattform für die Erstellung, Bereitstellung und Verwaltung von dialogorientierten KI-Lösungen bereitstellt. Es bietet vorgefertigte Konnektoren, Natural Language Understanding (NLU) und Dialogmanagement, die den Entwicklungsprozess optimieren und eine reibungslose Benutzererfahrung gewährleisten. Die Kombination von Oracle Digital Assistant mit der RAG-Pipeline ermöglicht es dem Chatbot, komplexe Interaktionen zu verarbeiten und einen natürlichen Gesprächsfluss aufrechtzuerhalten, wodurch die Benutzerbindung und -zufriedenheit verbessert werden.
Durch die Nutzung der Synergie von Oracle Database 23ai und Oracle Digital Assistant innerhalb der RAG-Pipeline können Entwickler einen Chatbot erstellen, der sowohl die Abrufgenauigkeit als auch die Konversationsfluidität hervorhebt. Dieser integrierte Ansatz reduziert nicht nur den Zeit- und Arbeitsaufwand für die Erstellung anspruchsvoller Chatbots, sondern führt auch zu einer Lösung, die skalierbar, effizient und in der Lage ist, überlegene Benutzererfahrungen zu bieten. Egal, ob Sie ein Entwickler, ein Tech-Enthusiast oder ein Geschäftsführer sind, der die Kundenbindung verbessern möchte, dieses Tutorial bietet Ihnen das Wissen und die Tools, um einen fortschrittlichen Chatbot zu erstellen, der sich in der überfüllten digitalen Arena abhebt.
Die Schritt-für-Schritt-Anleitung zum Prozess finden Sie unter AI-Beispiele für das Repository GitHub.
Anwendungsfälle
Hier sind einige Beispielanwendungsfälle, in denen dies nützlich sein kann:
-
Personalisierter Kundensupport: Wenn Sie sowohl Leitfäden als auch die Kundenhistorie abfragen, können Sie einen besseren Überblick über die Probleme des Kunden erhalten und das Problem schneller diagnostizieren und lösen.
-
Supply Chain-Optimierung: Das Abfragen von Lieferantendaten mit internen Geschäftsauftrags- oder Versanddaten kann zu einer besseren Entscheidungsfindung und einer schnelleren Reaktion auf Änderungen in der Lieferkette führen.
-
Umsatz optimieren: Fragen Sie CRM-Daten ab, um Leads mit hohem Potenzial zu identifizieren und Strategien zur Erhöhung der Abschlusswahrscheinlichkeit vorzuschlagen.
Vorteile von Oracle AI Vector Search
Oracle Database ist ein führendes Repository für Betriebs- und Unternehmensdaten. Unternehmensanwendungen müssen in der Regel eine Kombination aus Geschäftsdaten und unstrukturierten Daten suchen. Beispiel: Auf einer Einzelhandelswebsite können Suchen basierend auf einer Produktbeschreibung in natürlicher Sprache und einem Zielproduktbild sowie andere Filter wie Preis, Filialstandort, Hersteller und aktuelle Verfügbarkeit angezeigt werden. Diese Suche erfordert gleichzeitig die Suche nach unstrukturierten Katalogdaten (Produktbeschreibung und Bild), strukturierten Katalogdaten (Preis, Filialstandort und Hersteller) sowie Echtzeit-Transaktionsdaten (z.B. aktueller Bestand).
Überblick über die High Level Architecture-Lösung
Abbildung: Eine hochgradige Architektur der RAG-Pipeline
Das folgende Diagramm veranschaulicht die Architektur und den Workflow beim Erstellen eines erweiterten Chatbots mit Mistral-7B-Instruct-v0.2, Oracle Database 23ai, RAG, LangChain und Oracle Digital Assistant. Im Folgenden finden Sie die detaillierten Schritte für die folgende Architektur.
-
Benutzerinteraktion: Der Benutzer sendet eine Anforderung über die Oracle Digital Assistant-Schnittstelle an den Chatbot.
-
Anforderungshandhabung: Der Oracle Digital Assistant empfängt die Anforderung und leitet sie an die OCI Data Science-Infrastruktur weiter.
-
Abfrageverarbeitung: Es sind 2 Schritte erforderlich.
- Innerhalb von OCI Data Science wird die Anforderung an LangChain weitergeleitet, das als Orchestrator für die Verwaltung der Interaktion zwischen verschiedenen Modell-Deployments fungiert.
- LangChain verarbeitet die Anforderung und ermittelt, dass Informationen aus externen Dokumenten und Unternehmensdaten abgerufen werden müssen.
-
Vektorisierung: Dieser Schritt umfasst die folgenden Unterprozesse:
- Die Anforderung wird an ein Einbettungsmodell-Deployment gesendet, das die Abfrage in eine hochdimensionale Vektordarstellung umwandelt.
- Diese vektorisierte Abfrage wird dann zur Vektorsuche an Oracle Database 23ai gesendet.
-
Datenabruf: Dieser Schritt umfasst die folgenden Unterprozesse:
- Oracle Database 23ai führt eine Ähnlichkeitssuche für unstrukturierte Daten in Form von Dokumenten im PDF- und HTML-Format durch und kombiniert diese Suche mit der regulären Suche nach anderen Geschäftsdaten in der Datenbank.
- Relevante Dokumente oder Blöcke werden abgerufen und zur weiteren Verarbeitung an den nächsten Schritt gesendet.
-
Neueinstufung:
- Die generierte Antwort kann durch eine Rerank-Modellbereitstellung weiter verfeinert werden.
- Das Rerank-Modell bewertet und bewertet die Antworten, um sicherzustellen, dass die relevanteste und genaueste Antwort ausgewählt wird.
-
Externe Modelle abfragen: In diesem Schritt werden die Daten abgerufen und eine Antwort generiert.
- Mit den abgerufenen Informationen wird eine Abfrage für das Mistral-7B-Instruct-v0.2-Modell-Deployment generiert, das mit den KI-Schnellaktionenfeatures in OCI Data Science bereitgestellt wird.
- Das Modell Mistral-7B-Instruct-v0.2 verarbeitet die Abfrage und generiert eine Antwort basierend auf ihrem Training und dem abgerufenen Kontext.
-
Antwortgenerierung: Die verfeinerte Antwort wird an LangChain zurückgesendet, wodurch die endgültige Ausgabe konsolidiert wird.
-
Zurück zur Antwort an den Benutzer:
- Die letzte Antwort wird an den digitalen Assistenten zurückgegeben.
- Anschließend sendet Oracle Digital Assistant die Antwort an den Benutzer.
Ziele
- Erstellen Sie einen Chatbot, indem Sie die neuesten Technologien wie OCI Data Science-Funktionen wie KI-Schnellaktionen und Modellbereitstellung, Mistral-7B-Instruct-v0.2, Oracle Database 23ai, LangChain und Oracle Digital Assistant nutzen. Wir führen Sie durch jeden Schritt, von der Einrichtung der grundlegenden KI-Modelle bis hin zur Integration in eine nahtlose Konversationserfahrung. Am Ende dieses Tutorials haben Sie ein umfassendes Verständnis dafür, wie Sie diese fortschrittlichen Tools verwenden können, um einen intelligenten, reaktionsschnellen und hocheffektiven Chatbot zu erstellen, der in der Lage ist, Benutzer auf natürliche und ansprechende Weise zu verstehen und mit ihnen zu interagieren.
Voraussetzungen
Die wichtigsten Voraussetzungen, die Sie einrichten müssen, bevor Sie mit der Ausführung des verteilten Optimierungsprozesses in OCI Data Science Service fortfahren können.
-
Die folgenden Policys sind erforderlich:
-
Konfigurieren Sie ein benutzerdefiniertes Subnetz mit Sicherheitsliste, um Ingress-Traffic von den IPs zuzulassen, die aus dem CIDR-Block des Subnetzes stammen. Dadurch wird sichergestellt, dass sich die Hosts im Subnetz während des verteilten Trainings miteinander verbinden können. Weitere Informationen finden Sie unter Networking.
-
Legen Sie die Policys fest, damit die OCI Data Science-Serviceressourcen auf OCI Object Storage-Buckets, Networking und andere zugreifen können. Weitere Informationen finden Sie unter OCI-Policys.
-
Zugriffstoken von HuggingFace zum Herunterladen des Modells Mistral-7B-Instruct-v0.2. Um das Modell zu optimieren, müssen Sie zuerst auf das vortrainierte Modell zugreifen. Das vortrainierte Modell finden Sie unter HuggingFace. In diesem Tutorial laden wir das vortrainierte Modell mit dem HuggingFace-Zugriffstoken aus HuggingFace herunter (durch Festlegen der Umgebungsvariablen
HUGGING_FACE_HUB_TOKEN
). -
Loggruppe und Log vom OCI Logging-Service. Damit wird der Fortschritt der Schulung überwacht.
-
Gehen Sie zum OCI Logging-Service, und wählen Sie Loggruppen aus.
-
Wählen Sie entweder eine der vorhandenen Loggruppen, oder erstellen Sie eine neue Loggruppe.
-
Erstellen Sie in der Loggruppe zwei Logs: ein Vorhersagelog und ein Zugriffslog.
- Klicken Sie auf Benutzerlog erstellen.
-
Geben Sie einen Namen an (predict) öffnen) und wählen Sie die Loggruppe aus, die Sie verwenden möchten. - Wählen Sie unter Agent-Konfiguration erstellen die Option Konfiguration später hinzufügen aus.
- Klicken Sie auf Agent-Konfiguration erstellen.
-
-
Notizbuchsession zum Initiieren des verteilten Trainings und für den Zugriff auf das optimierte Modell. Weitere Informationen finden Sie unter Notizbuchsession.
-
Installieren Sie die neueste Version von Oracle Accelerated Data Science (ADS)
pip install oracle-ads[opctl] -U
Aufgabe 1: Erforderliche Modelle bereitstellen
Aufgabe 1.1: Modell Mistral-7B-Instruct-v0.2 bereitstellen
Wir werden das Deployment-Feature des KI-Schnellaktionsmodells nutzen, um Mistral-7B-Instruct-v0.2 mit wenigen Klicks bereitzustellen. Mit dem AI Quick Actions-Modell-Deployment können Benutzer Mistral-7B-Instruct-v0.2 mit wenigen Klicks bereitstellen und Benutzern einen Endpunkt bereitstellen.
Aufgabe 1.2: Jina-Einbettungsmodell bereitstellen
-
Kopieren Sie in Notizbuch die Jine-Einbettungsmodelldateien aus https://huggingface.co/jinaai/jina-embeddings-v2-base-en/tree/main in das Verzeichnis
ads_embedding_model_dir
. -
Laden Sie die Datei
score.py
in das aktuelle Verzeichnis hoch (Beispiel:/home/datascience/
). -
Führen Sie den folgenden Code aus.
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']);
Aufgabe 1.3: Bge-Reranker-Modell bereitstellen
Führen Sie den folgenden Code aus.
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",
)
Aufgabe 2: Oracle Database 23ai einrichten
Für unseren Anwendungsfall nutzen wir die neuesten Features von Oracle Database 23ai, insbesondere die Oracle AI Vector Search. In diesem Szenario werden die aus dem Dataset generierten Einbettungen in Oracle Database 23ai importiert. Wenn ein Benutzer mit der RAG abfragt, wird die Antwort verbessert, indem die LLMs mit zusätzlichem Kontext bereitgestellt werden. Das folgende Diagramm zeigt einige Vorteile der Verwendung von Oracle Database 23ai.
Abbildung: Eine Abbildung der Oracle Database 23ai-Suchfunktion (Quelle)
Dies wird ihr Wissen erweitern und zu Antworten führen, die genauer und für die Anfragen des Kunden relevant sind. Befolgen Sie die genannten Optionen, um Oracle Database 23ai einzurichten.
-
Mit einer Containerinstanz. Weitere Informationen finden Sie unter Kostenloses Containerimage von Oracle Autonomous Database verwenden.
-
Python-Client verwenden.
Wir werden eine gehostete Instanz von Oracle Database 23ai verwenden, um die leistungsstarken Features der Oracle AI Vector Search zu demonstrieren.
Aufgabe 3: Parsen, Chunking und Speichern der Einbettung in Oracle Database 23ai
Das folgende Code-Snippet bietet einen allgemeinen Überblick darüber, wie das Dokument geparst wird, wie das Dokument in Chunks konvertiert wird und wie die Einbettung dann in Oracle Database 23ai gespeichert wird. Weitere Informationen finden Sie unter oda-oci-data-science-oracledb-23ai-llm.
Oracle Database 23ai initialisieren
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()
Aufgabe 4: Verbindung zu Mistral-7B-Instruct-v0.2 AI Quick Actions LLM herstellen
Erstellen Sie ein Modell-Deployment mit AI Quick Actions, und rufen Sie den Modell-Deployment-Endpunkt von dort ab. Führen Sie den folgenden Code aus, um eine Verbindung zu LLM herzustellen.
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"
)
Aufgabe 5: RAG einrichten
Die folgende RAG-Architektur besteht aus den folgenden Schritten:
Aufgabe 5.1: In 23ai Vector Database hochladen
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'])
Wir verwenden die Prompt-Vorlage und die QS-Kette von Langchain, um den Chatbot zu erstellen. Dies hilft, den Kontext und die Frage direkt an das LLM weiterzuleiten.
Aufgabe 5.2: LangChain-Modell bereitstellen
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?')
Aufgabe 6: Digitalen Assistenten mit Oracle Digital Assistant für Chatbot-Anwendung zum Hosten von RAG erstellen
Aufgabe 6.1: Modell-Deployment-Endpunkt abrufen und Policy hinzufügen
Fügen Sie der Instanz, die den Provider des Modells aufruft, einen REST-Service hinzu. Wir verwenden das Oracle-Modell-Deployment als Beispiel. Sie können jedoch einen REST-Service für jedes LLM verwenden.
Fügen Sie eine Policy hinzu, damit Oracle Digital Assistant auf den Vorhersageendpunkt für das Modell-Deployment zugreifen kann. Gehen Sie zu Identität und Sicherheit, Policys, und klicken Sie auf Policy erstellen.
Policys für dynamische Gruppe
Allow any-user to {DATA_SCIENCE_MODEL_DEPLOYMENT_PREDICT} in compartment Demo where request.principal.id='ocid1.odainstance.oc1.iad.<ocid>'
Nachdem die Policy erstellt wurde, können wir sie in Oracle Digital Assistant starten und in einem Browser öffnen.
Aufgabe 6.2: LLM-Provider-REST-Service erstellen
-
Gehen Sie zum Oracle Digital Assistant, navigieren Sie zu Einstellungen, API-Services, LLM-Services, und klicken Sie auf +Add LLM-Service.
-
Geben Sie auf der Seite LLM-Service erstellen die folgenden Informationen ein, um einen Postvorgang am Endpunkt des Providers zu erstellen, und klicken Sie auf Erstellen.
- Name: Geben Sie einen einfach identifizierbaren Namen für den Service ein. Sie werden diesen Namen später referenzieren.
- Endpunkt: Kopieren Sie den Modell-Deployment-Endpunkt, und fügen Sie ihn ein.
- Methoden: Wählen Sie POST.
-
Schließen Sie den Service ab, indem Sie den API-Schlüssel sowie die Beispiele für die Anforderungs- und Antwort-Payload hinzufügen.
-
Authentifizierungstyp: Wählen Sie OCI-Resource Principal aus.
-
Inhaltstyp: Wählen Sie Anwendung/json aus.
-
Hauptteil: Fügen Sie die an die Anforderung gesendete Payload hinzu. Beispiel:
{ "query": "Can you please give some overview on Oracle Database 23.4?" }
-
-
Klicken Sie auf Anforderung testen, um nach einer
200
-Antwort zu suchen.
Aufgabe 6.3: Skill erstellen
Nachdem der REST-Service des LLM-Providers der Instanz hinzugefügt wurde, müssen Sie jetzt einen Skill erstellen, der diesen Service aufrufen und Benutzer über seine Dialogablaufdefinition mit ihm verbinden kann. So erstellen Sie diesen Skill:
-
Navigieren Sie zum Oracle Digital Assistant, und navigieren Sie zu Entwicklung und +Skills.
-
Klicken Sie auf + Neuer Skill.
-
Geben Sie auf der Seite Skill erstellen die folgenden Informationen ein, und klicken Sie auf Erstellen.
- Anzeigename: Fügen Sie einen Namen hinzu.
- Dialogmodus: Wählen Sie Visuell aus.
- Übernehmen Sie für die anderen Felder die Standardwerte.
Aufgabe 6.4: Skill mit dem Modell verbinden
Jetzt wird der Skill den Zugriff auf den LLM-REST-Service ermöglichen, indem eine benutzerdefinierte Komponente mit einem Ereignis-Handler erstellt wird, der die REST-Payloads in Formate transformiert, die sowohl vom LLM-Provider als auch von Oracle Digital Assistant akzeptiert werden.
-
Klicken Sie in der linken Navigationsleiste auf das Symbol Komponenten und dann auf Service hinzufügen.
-
Geben Sie auf der Seite Service erstellen die folgenden Informationen ein, und klicken Sie auf Erstellen.
- Name: Geben Sie einen Namen zur Beschreibung des Service ein.
- Servicetyp: Übernehmen Sie die Standardeinstellung, und wählen Sie Eingebetteter Container aus.
- Erstellungstyp des Komponentenservicepakets: Wählen Sie Neue Komponente aus.
- Komponententyp: Wählen Sie LLM-Transformation aus.
- Komponentenname: Geben Sie einen beschreibenden Namen ein.
- Vorlage: Wählen Sie Benutzerdefiniert aus (unter Andere).
-
Die abgeschlossene Komponente wird auf der Seite Komponenten angezeigt.
-
Wählen Sie die Komponente auf der Seite Komponenten aus, um den Deployment-Status zu prüfen. Wenn Bereit angezeigt wird, können Sie mit dem nächsten Schritt fortfahren.
Stellen Sie sicher, dass Service aktiviert (Standardeinstellung) aktiviert ist.
Aufgabe 6.5: LLM-Serviceprovider und Oracle Digital Assistant-Anforderungen und -Antworten zuordnen
Die Anforderungen des Skills an den Serviceprovider des Modells müssen von der von Oracle Digital Assistant verwendeten Schnittstelle, die als Common LLM Interface (CLMI) bezeichnet wird, in das vom Serviceprovider akzeptierte Format transformiert werden. Ebenso müssen die vom Dienstleister zurückgegebenen Ergebnisse in CLMI umgewandelt werden. Um dieses Mapping zu aktivieren, müssen die folgenden Event Handler-Methoden des REST-Service einen providerspezifischen Code aufweisen.
transformRequestPayload
.transformResponsePayload
.transformErrorResponsePayload
.
So öffnen Sie den Event Handler-Codeeditor und aktualisieren den Transformationscode (in diesem Fall für Azure OpenAI):
-
Blenden Sie den Service ein, und wählen Sie den Event Handler.
-
Klicken Sie auf das Symbol Bearbeiten, um den Editor zu öffnen.
-
Ersetzen Sie den Eventmethodencode des
transformRequestPayload
-Handlers (um die Zeilen 24-26) durch den folgenden Code.-
transformRequestPayload
:transformRequestPayload: async (event, context) => { return { "query": event.payload.messages[event.payload.messages.length - 1].content }; },
Bei jeder Anfrage müssen wir nur die letzte Benutzereingabe an die LLM-Eingabeaufforderung übergeben.
-
-
Ersetzen Sie den Eventmethodencode des
transformResponsePayload
-Handlers (um die Zeilen 35-37) durch den folgenden Code.-
transformRequestPayload
:transformResponsePayload: async (event, context) => { return { candidates: [ { "content": event.payload.prediction || "" }]}; },
-
-
Ersetzen Sie den Eventmethodencode des
transformErrorResponsePayload
-Handlers (um die Zeilen 47-49) durch den folgenden Code.-
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)}; }
-
-
Klicken Sie auf Validieren, um die Codesyntax zu prüfen. Verwenden Sie es, um den Code im Editor zu ersetzen, wenn Syntaxfehler auftreten, die Sie nicht beheben können.
-
Klicken Sie auf Save und Close. Warten Sie, bis das Deployment abgeschlossen ist. Wenn Bereit angezeigt wird, können Sie mit dem nächsten Schritt fortfahren.
Aufgabe 6.6: LLM-Service für den Skill definieren
Damit der Skill Benutzer über den Dialogablauf mit dem Modell verbinden kann, müssen Sie einen LLM-Service erstellen, der den instanzweiten LLM-Service kombiniert, der das Modell mit dem Transformationsereignis-Handler aufruft (in diesem Fall für das Oracle-Modell-Deployment).
-
Klicken Sie in der linken Navigationsleiste auf das Symbol Einstellungen.
-
Klicken Sie auf Konfiguration.
-
Klicken Sie auf der Seite Services für Large Language Models auf +New LLM-Service.
-
Geben Sie die folgenden Informationen ein
-
Name: Geben Sie einen einfach identifizierbaren Namen für den LLM-Service ein. Sie referenzieren diesen Namen, wenn Sie den Dialogablauf im nächsten Schritt erstellen.
-
LLM-Service: Wählen Sie den Namen des instanzweiten LLM-Service aus, den Sie unter Aufgabe 1: REST-Service für das Modell erstellen erstellt haben.
-
Transformations-Handler: Wählen Sie den Namen der Ereignis-Handler-Komponente aus, die Sie im Rahmen des REST-Service in Aufgabe 3: Skill mit dem Modell verbinden erstellt haben.
-
Behalten Sie die übrigen Eigenschaften in den Standardeinstellungen bei. Beachten Sie, dass Standard aktiviert ist, wenn dies der einzige Service ist, den Sie bisher für dieses Tutorial erstellt haben.
-
-
Klicken Sie auf Speichern.
-
Deaktivieren Sie Feedback und andere Standardoptionen für Switches.
Aufgabe 6.7: Service integrieren
Nachdem der Skill mit dem LLM verbunden ist, verbinden Sie die Benutzer des Skills mit dem Modell, indem Sie eine Dialogablaufkomponente erstellen, die das Modell aufrufen und ihm mitteilen kann, was zu tun ist. Die Komponente übermittelt diese Anweisungen mit einer Eingabeaufforderung, einem Block von menschenlesbarem Text. In dieser Aufgabe stellen wir diese Aufforderung zur Verfügung, die das Modell anweist, das Benutzerfeedback als positiv, negativ oder neutral zu bewerten.
-
Klicken Sie in der linken Navigationsleiste auf das Symbol Aüsse.
-
Wählen Sie unresolvedIntent.
-
Klicken Sie im Status unresolvedMessage auf das Symbol Auslassungspunkte(...), und wählen Sie im Menü die Option Status hinzufügen aus.
-
Wählen Sie Service Integration und Großsprachmodell aufrufen aus.
-
Geben Sie eine Beschreibung wie die Sentimentanalyse ein, und klicken Sie auf Einfügen.
Der Dialogablauf enthält jetzt den Status
unresolvedMessage
(Nachricht senden), den StatusinvokeLLM
und den StatusshowLLMError
. -
Klicken Sie im Status
unresolvedMessage
auf das Symbol Auslassungspunkte(...), und wählen Sie Löschen aus dem Menü aus, da die Fehlermeldung für UnresolvedIntent nicht angezeigt werden soll.Der Dialogablauf enthält jetzt nur den Status
invokeLLM
und den StatusshowLLMError
. -
Öffnen Sie den Status
invokeLLM
. Wählen Sie auf der Seite Komponente den LLM-Service aus, den wir in Aufgabe 6.6 erstellt haben. -
Fügen Sie einen Prompt hinzu, der Anweisungen an den LLM-Service sendet, indem Sie Folgendes in den Prompt einfügen. Alle Benutzerunterhaltungen müssen als Eingabeaufforderung übergeben werden.
-
Erstellen Sie die Variable
PROMPT_INPUT
. Klicken Sie auf Prompt-Parameter +, um einen neuen Parameter und dessen Wert hinzuzufügen. -
Setzen Sie Streaming verwenden auf Falsch, damit die Nachricht vollständig und nicht inkrementell zugestellt wird.
-
Testen Sie den Prompt mit dem Prompt-Builder, und klicken Sie auf Prompt erstellen.
-
Fügen Sie Prompt-Parameter-Mock-Wert hinzu, und klicken Sie auf Ausgabe generieren. Auf diese Weise können wir die LLM-Integration validieren.
Aufgabe 6.8: Prompt mit dem Skilltester testen
-
Klicken Sie auf Vorschau, um den Skilltester zu öffnen.
-
Geben Sie die folgende Anforderung ein: Können Sie einen Überblick über Oracle Database 23.4 geben?.
Die Ausgabe sollte folgendermaßen aussehen:
-
Fragen Sie die nächste Abfrage nach LLM: letzte oracle-Datenbank.
Die Ausgabe sollte folgendermaßen aussehen:
Aufgabe 6.9: Oracle Web-Benutzerkanal einrichten
Wir erstellen einen Oracle Digital Assistant-Benutzerkanal, über den ein Oracle-Webclient auf den Skill zugreifen kann. Um sicherzustellen, dass nur unsere Web-Clients diesen Kanal verwenden können, konfigurieren wir ihn so, dass eine Client-Authentifizierung erforderlich ist.
-
Öffnen Sie Oracle Digital Assistant, navigieren Sie zu Entwicklung, Kanäle, und klicken Sie auf den +Add-Kanal.
-
Geben Sie unter Kanal erstellen die folgenden Informationen ein, um einen POST-Vorgang am Endpunkt des Providers zu erstellen, und klicken Sie auf Erstellen.
- Name: Ein eindeutiger Name, der mit einem Buchstaben beginnt und nur Buchstaben, Zahlen, Punkte und Unterstriche enthält. Beispiel:
OCI_MD_LLM
. - Beschreibung (optional): Wofür wird der Kanal verwendet?
- Kanaltyp: Wählen Sie Oracle Web aus.
- Zulässige Domains: Geben Sie
*
ein. - Clientauthentifizierung aktiviert: Deaktivieren Sie die Option.
- Name: Ein eindeutiger Name, der mit einem Buchstaben beginnt und nur Buchstaben, Zahlen, Punkte und Unterstriche enthält. Beispiel:
-
Deaktivieren Sie Clientauthentifizierung aktiviert, falls noch nicht deaktiviert.
-
Wählen Sie unter Route den Skill aus, den wir verwenden möchten. Wir haben den aktuellen Skill ausgewählt, der LLM-MD-Skill ist.
-
Aktivieren Sie Kanal aktiviert.
-
Beachten Sie die Kanal-ID und die ODA-Domain-URI ohne HTTPS, die für diesen Kanal angezeigt werden.
Diese Werte verwenden wir in unserer Web-App und der Routing-Konfiguration des Token Generators.
Aufgabe 6.10: SDK installieren
Laden Sie die ZIP-Datei herunter, und exportieren Sie sie in das lokale System. Diese ZIP-Datei enthält ein Benutzerhandbuch, in dem die SDK-Klassen und eine Beispiel-App beschrieben werden, die viele der Features demonstriert.
-
Gehen Sie zum Abschnitt Oracle Digital Assistant-(ODA-) und Oracle Mobile Cloud-(OMC-)Downloads und zum Web-SDK für Oracle Native Client (für OCI Native-Umgebungen).
-
Laden Sie ODA Web SDK 24.06 herunter.
-
Wählen Sie unter Plattformen die Option GENERIC aus.
-
Klicken Sie hier, um das neueste ODA-Js-SDK mit
oda-native-client-sdk-js-24_06 for (GENERIC (All Platforms)
herunterzuladen. -
Extrahieren Sie die heruntergeladene ZIP-Datei.
Aufgabe 6.11: Oracle-Webanwendung testen
-
Gehen Sie zum extrahierten ZIP-Ordner des heruntergeladenen Oracle-Web-SDK.
-
Öffnen Sie die Datei
samples/web/settings.js
, und ersetzen Sie<URI>
und<channelId>
durch den tatsächlichen Wert.Beispiel:
- URI:
oda-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-dax.data.digitalassistant.oci.oraclecloud.com
. - ChannelId:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.
- URI:
-
Stellen Sie außerdem sicher, dass
isClientAuthEnabled
falsch ist.let isClientAuthEnabled = false;
-
Führen Sie die Datei
samples/web/index.html
in einem beliebigen Browser aus. -
Ignorieren Sie den Inhalt der Indexdatei. Klicken Sie auf das Chatsymbol, um den Status Oracle Assistant CONNECTED anzuzeigen.
-
So sieht unsere Website mit dem Chat-Symbol in der rechten unteren Ecke aus. Wir können ein Gespräch beginnen, wie wir es früher mit dem Skilltester getan haben.
Aufgabe 6.12: Release auf OCI Compute-Instanz
-
Erstellen Sie eine OCI-Compute-Instanz. Weitere Informationen finden Sie unter Instanzen erstellen
-
Stellen Sie sicher, dass Sie die Ingress-Regeln befolgen.
-
Kopieren Sie alle Webordner in eine neu erstellte Instanz.
-
Installieren Sie NGINX. Weitere Informationen finden Sie unter NGINX-Webserver und -Proxy auf Oracle Linux installieren.
-
Öffnen Sie einen Browser, und navigieren Sie zu
http://<IP_address>/
. Wenn Sie ein selbstsigniertes Zertifikat haben, können Sie zuhttps://<IP_address>/
navigieren.
Ergebnisse
Vergleichen wir die Ergebnisse aus der direkten Abfrage des LLM vs. der Verwendung von RAG mit LLM:
-
Antwort von LLM
-
Antwort von RAG
Nächste Schritte
Die Erstellung eines erweiterten Chatbots mit Oracle Database 23ai, RAG, LangChain, Mistral-7B-Instruct-v0.2 und Oracle Digital Assistant zeigt die Leistungsfähigkeit der Integration modernster Technologien, um einen hoch reaktionsschnellen und intelligenten Gesprächsagenten zu schaffen. Der detaillierte Workflow, von der Anforderungsverarbeitung bis zur Antwortgenerierung, stellt sicher, dass der Chatbot große Mengen an Informationen effizient abrufen und verarbeiten kann und den Benutzern genaue und kontextbezogene Antworten liefert. Durch die Nutzung der Vektorsuchfunktionen von Oracle Database 23ai und der robusten Plattform von Oracle Digital Assistant können Entwickler die Performance und das Benutzerengagement des Chatbots erheblich verbessern. Dieser integrierte Ansatz optimiert nicht nur den Entwicklungsprozess, sondern führt auch zu einer skalierbaren, effizienten und hochwirksamen KI-Lösung, die sich in der Wettbewerbslandschaft digitaler Assistenten auszeichnet. Ob für Kundenservice, Informationsabruf oder interaktiven Support: Diese fortschrittliche Chatbot-Architektur ebnet den Weg für anspruchsvolle Konversationserlebnisse, die den Anforderungen moderner Benutzer entsprechen.
Weitere Informationen zur Verwendung von KI-Schnellaktionen finden Sie in der Oracle Cloud Infrastructure Data Science-Wiedergabeliste YouTube in einem Demovideo zu KI-Schnellaktionen. Außerdem finden Sie unsere technische Dokumentation. Tipps und Beispiele finden Sie in unserem Github-Repository.
Wenn Sie bestimmte Modelle vorschlagen möchten, die Sie KI-Schnellaktionen hinzufügen möchten, oder Fragen haben, senden Sie eine E-Mail an die OCI Data Science-Gruppe: ask-oci-data-science_grp@oracle.com.
Verwandte Links
-
Kostenlose Oracle Cloud-Testversion testen! Eine 30-tägige Testversion mit einem kostenlosen Guthaben in Höhe von 300 US-Dollar bietet Ihnen Zugriff auf den Oracle Cloud Infrastructure Data Science-Service. Weitere Informationen finden Sie in den folgenden Ressourcen:
-
Mandanten mit Oracle Resource Manager für Data Science konfigurieren
-
Testen und klonen Sie unser neues GitHub-Repository! Wir haben Notizbuch-Tutorials und Codebeispiele aufgenommen.
-
Sehen Sie sich unsere Tutorials auf YouTube an
-
Suchen Sie nach Oracle Data Science, und versuchen Sie es mit LiveLabs.
-
Ankündigung von Oracle Database 23ai: Allgemeine Verfügbarkeit
Danksagungen
-
Autor - Shekhar Chavan (Hauptmitglied des technischen Personals, OCI Data Science), Ashutosh Kumar (Hauptmitglied des technischen Personals, OCI Data Science)
-
Mitwirkende – Piyush Gajjariya (Software Development Manager, OCI Data Science), Tzvi Keisar (Director of Product Management), SriRanjith R (Senior Member Technical Staff, OCI Data Science)
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Build an Enterprise Chatbot with Oracle Digital Assistant, OCI Data Science, LangChain and Oracle Database 23ai
G13772-01
August 2024