Hinweis:

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:

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

image

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.

  1. Benutzerinteraktion: Der Benutzer sendet eine Anforderung über die Oracle Digital Assistant-Schnittstelle an den Chatbot.

  2. Anforderungshandhabung: Der Oracle Digital Assistant empfängt die Anforderung und leitet sie an die OCI Data Science-Infrastruktur weiter.

  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. Antwortgenerierung: Die verfeinerte Antwort wird an LangChain zurückgesendet, wodurch die endgültige Ausgabe konsolidiert wird.

  9. 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

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.

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.

image

image

Aufgabe 1.2: Jina-Einbettungsmodell bereitstellen

  1. 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.

  2. Laden Sie die Datei score.py in das aktuelle Verzeichnis hoch (Beispiel: /home/datascience/).

  3. 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.

image

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.

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.

image

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.

image

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

  1. Gehen Sie zum Oracle Digital Assistant, navigieren Sie zu Einstellungen, API-Services, LLM-Services, und klicken Sie auf +Add LLM-Service.

  2. 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.

    image

  3. 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?"
      }
      

    image

  4. Klicken Sie auf Anforderung testen, um nach einer 200-Antwort zu suchen.

    image

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:

  1. Navigieren Sie zum Oracle Digital Assistant, und navigieren Sie zu Entwicklung und +Skills.

  2. Klicken Sie auf + Neuer Skill.

  3. 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.

    image

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.

  1. Klicken Sie in der linken Navigationsleiste auf das Symbol Komponenten und dann auf Service hinzufügen.

    Symbol "Komponenten" in der linken Navigationsleiste

  2. 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).

    image

  3. Die abgeschlossene Komponente wird auf der Seite Komponenten angezeigt.

    image

  4. 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.

    image

    Stellen Sie sicher, dass Service aktiviert (Standardeinstellung) aktiviert ist.

    image

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.

So öffnen Sie den Event Handler-Codeeditor und aktualisieren den Transformationscode (in diesem Fall für Azure OpenAI):

  1. Blenden Sie den Service ein, und wählen Sie den Event Handler.

    image

  2. Klicken Sie auf das Symbol Bearbeiten, um den Editor zu öffnen.

    image

    image

  3. 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.

  4. 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 || "" }]};
      },
      
  5. 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)};
      }
      
  6. 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.

    image

  7. 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).

  1. Klicken Sie in der linken Navigationsleiste auf das Symbol Einstellungen.

    Navigationsleiste links

  2. Klicken Sie auf Konfiguration.

    Registerkarte "Konfiguration" in den Einstellungen

  3. Klicken Sie auf der Seite Services für Large Language Models auf +New LLM-Service.

    Der Abschnitt "Large Language Model" der Seite "Konfiguration".

  4. 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.

      image

  5. Klicken Sie auf Speichern.

    Symbol "Service speichern"

  6. Deaktivieren Sie Feedback und andere Standardoptionen für Switches.

    image

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.

  1. Klicken Sie in der linken Navigationsleiste auf das Symbol Aüsse.

    Symbol "Abläufe" in der linken Navigationsleiste

  2. Wählen Sie unresolvedIntent.

    Nicht aufgelöster Fluss

  3. Klicken Sie im Status unresolvedMessage auf das Symbol Auslassungspunkte(...), und wählen Sie im Menü die Option Status hinzufügen aus.

    Option "Status hinzufügen"

  4. Wählen Sie Service Integration und Großsprachmodell aufrufen aus.

  5. Geben Sie eine Beschreibung wie die Sentimentanalyse ein, und klicken Sie auf Einfügen.

    image

    Der Dialogablauf enthält jetzt den Status unresolvedMessage (Nachricht senden), den Status invokeLLM und den Status showLLMError.

    Der Status invokeLLM mit dem Status showError im Dialogablauf

  6. 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.

    image

    Der Dialogablauf enthält jetzt nur den Status invokeLLM und den Status showLLMError.

    image

  7. Öffnen Sie den Status invokeLLM. Wählen Sie auf der Seite Komponente den LLM-Service aus, den wir in Aufgabe 6.6 erstellt haben.

    Feld "LLM-Service"

  8. 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.

    image

  9. Erstellen Sie die Variable PROMPT_INPUT. Klicken Sie auf Prompt-Parameter +, um einen neuen Parameter und dessen Wert hinzuzufügen.

    image

  10. Setzen Sie Streaming verwenden auf Falsch, damit die Nachricht vollständig und nicht inkrementell zugestellt wird.

    image

  11. Testen Sie den Prompt mit dem Prompt-Builder, und klicken Sie auf Prompt erstellen.

    image

  12. Fügen Sie Prompt-Parameter-Mock-Wert hinzu, und klicken Sie auf Ausgabe generieren. Auf diese Weise können wir die LLM-Integration validieren.

    image

Aufgabe 6.8: Prompt mit dem Skilltester testen

  1. Klicken Sie auf Vorschau, um den Skilltester zu öffnen.

    Schaltfläche "Vorschau"

  2. Geben Sie die folgende Anforderung ein: Können Sie einen Überblick über Oracle Database 23.4 geben?.

    Die Ausgabe sollte folgendermaßen aussehen:

    image

  3. Fragen Sie die nächste Abfrage nach LLM: letzte oracle-Datenbank.

    Die Ausgabe sollte folgendermaßen aussehen:

    image

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.

  1. Öffnen Sie Oracle Digital Assistant, navigieren Sie zu Entwicklung, Kanäle, und klicken Sie auf den +Add-Kanal.

  2. 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.

    image

  3. Deaktivieren Sie Clientauthentifizierung aktiviert, falls noch nicht deaktiviert.

  4. 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.

  5. Aktivieren Sie Kanal aktiviert.

  6. 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.

  1. 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).

  2. Laden Sie ODA Web SDK 24.06 herunter.

  3. Wählen Sie unter Plattformen die Option GENERIC aus.

  4. Klicken Sie hier, um das neueste ODA-Js-SDK mit oda-native-client-sdk-js-24_06 for (GENERIC (All Platforms) herunterzuladen.

    image

  5. Extrahieren Sie die heruntergeladene ZIP-Datei.

Aufgabe 6.11: Oracle-Webanwendung testen

  1. Gehen Sie zum extrahierten ZIP-Ordner des heruntergeladenen Oracle-Web-SDK.

  2. Ö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.
  3. Stellen Sie außerdem sicher, dass isClientAuthEnabled falsch ist.

    let isClientAuthEnabled = false;
    
  4. Führen Sie die Datei samples/web/index.html in einem beliebigen Browser aus.

  5. Ignorieren Sie den Inhalt der Indexdatei. Klicken Sie auf das Chatsymbol, um den Status Oracle Assistant CONNECTED anzuzeigen.

    image

  6. 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.

    image

    image

Aufgabe 6.12: Release auf OCI Compute-Instanz

  1. Erstellen Sie eine OCI-Compute-Instanz. Weitere Informationen finden Sie unter Instanzen erstellen

  2. Stellen Sie sicher, dass Sie die Ingress-Regeln befolgen.

    image

  3. Kopieren Sie alle Webordner in eine neu erstellte Instanz.

  4. Installieren Sie NGINX. Weitere Informationen finden Sie unter NGINX-Webserver und -Proxy auf Oracle Linux installieren.

  5. Öffnen Sie einen Browser, und navigieren Sie zu http://<IP_address>/. Wenn Sie ein selbstsigniertes Zertifikat haben, können Sie zu https://<IP_address>/ navigieren.

Ergebnisse

Vergleichen wir die Ergebnisse aus der direkten Abfrage des LLM vs. der Verwendung von RAG mit LLM:

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.

Danksagungen

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.