0 / 0
Zurück zur englischen Version der Dokumentation

Codierung eines AutoAI -RAG-Experiments mit einem Milvus -Vektorspeicher

Letzte Aktualisierung: 21. März 2025
Codierung eines AutoAI -RAG-Experiments mit einem Milvus -Vektorspeicher

Sehen Sie sich die Richtlinien und Codebeispiele an, um zu erfahren, wie Sie ein AutoAI RAG-Experiment mit einer Milvus -Datenbank als Vektorspeicher codieren.

Für eine unternehmens- oder produktionsbezogene RAG-Lösung richten Sie eine Vektordatenbank mit Milvus ein. Der vektorisierte Inhalt bleibt für zukünftige Muster und Integrationen erhalten. Weitere Informationen finden Sie unter "Arbeiten mit Milvus ".

In den folgenden Abschnitten wird der kommentierte Beispielcode, der mit dem Notebook "Automating RAG pattern with Milvus database" bereitgestellt wird, näher erläutert.

Das Notebook verwendet die watsonx.ai Python Client-Bibliothek (Version 1.1.11 oder höher).

Folgen Sie diesen Schritten, um ein AutoAI RAG-Experiment für Ihren Anwendungsfall zu programmieren.

  1. Vorbereitung der Voraussetzungen für die Datenaufbereitung und den Aufbau des Experiments
  2. Konfigurieren Sie das RAG-Experiment
  3. Experiment ausführen
  4. Prüfen Sie die Muster und wählen Sie das beste aus
  5. Implementieren Sie das Muster.
  6. Aufräumen (fakultativ)

Schritt 1: Vorbereiten der Voraussetzungen für die Datenaufbereitung und den Aufbau des Experiments

Bereiten Sie die Voraussetzungen für das Experiment vor.

  • Installieren und importieren Sie die erforderlichen Module und Abhängigkeiten. Beispiel:
pip install 'ibm-watsonx-ai[rag]>=1.1.11'
pip install langchain-community==0.2.4
from ibm_watsonx_ai import APIClient, Credentials

credentials = Credentials(
                   url = "https://us-south.ml.cloud.mydomain.com",
                   api_key = "***********"
                  )

client = APIClient(credentials)
client.set.default_project("<Project ID>")
client.set.default_space("<Space GUID>")
  • Vorbereiten der Erdungsunterlagen
  • Bereiten Sie die Bewertungsdaten vor

Dokumente zur Erdung

Bereiten Sie die Erdungsunterlagen, die Sie für das RAG-Experiment verwenden, vor und schließen Sie sie an. Einzelheiten finden Sie unter Daten in einem Projekt abrufen und vorbereiten.

  • Unterstützte Formate: PDF, HTML, DOCX, Markdown, Nur-Text
  • Stellen Sie eine Verbindung zu Daten in einem Cloud Object Storage Bucket oder einem Ordner in einem Bucket her, oder geben Sie bis zu 20 Dateien an.
  • AutoAI prüft die Dokumentationen für die Durchführung des Experiments

Zum Beispiel, um eine Datenverbindung zu erstellen, wenn Dokumente in einem Cloud Object Storage Bucket gespeichert sind:

from ibm_watsonx_ai.helpers import DataConnection, S3Location

conn_meta_props= {
    client.connections.ConfigurationMetaNames.NAME: f"Connection to input data - {datasource_name} ",
    client.connections.ConfigurationMetaNames.DATASOURCE_TYPE: client.connections.get_datasource_type_id_by_name(datasource_name),
    client.connections.ConfigurationMetaNames.DESCRIPTION: "ibm-watsonx-ai SDK documentation",
    client.connections.ConfigurationMetaNames.PROPERTIES: {
        'bucket': <BUCKET_NAME>,
        'access_key': <ACCESS_KEY>,
        'secret_key': <SECRET_ACCESS_KEY>,
        'iam_url': 'https://iam.cloud.ibm.com/identity/token',
        'url': <ENDPOINT_URL>
    }
}

conn_details = client.connections.create(meta_props=conn_meta_props)
cos_connection_id = client.connections.get_id(conn_details)

input_data_references = [DataConnection(
    connection_asset_id=cos_connection_id,
    location=S3Location(
        bucket=<BACKET_NAME>,
        path=<BACKET_PATH>
    )
)]

Das folgende Beispiel zeigt, wie das im Projekt erstellte (oder in den Bereich verschobene) Daten-Asset verwendet werden kann:

Hinweis:

core_api.html ist ein Beispiel für eine Grundlagendokumentdatei, die in den Beispiel-Notizbüchern verwendet wird.

import os, wget
from ibm_watsonx_ai.helpers import DataConnection

input_data_filename = "core_api.html"
input_data_path = f"https://ibm.github.io/watsonx-ai-python-sdk/{input_data_filename}"

if not os.path.isfile(input_data_filename): 
    wget.download(input_data_path, out=input_data_filename)
    
asset_details = client.data_assets.create(input_data_filename, input_data_filename)
asset_id = client.data_assets.get_id(asset_details)

input_data_references = [DataConnection(data_asset_id=asset_id)]
Tipp:

input_data_references unterstützt bis zu 20 DataConnection Instanzen.

Evaluierungsdatum

Die Auswertungsdaten müssen im JSON-Format mit einem festen Schema mit diesen Feldern vorliegen: question, correct_answer, correct_answer_document_ids

Beispiel:

[
    {
        "question": "What is the purpose of get_token()?",
        "correct_answer": "get_token() is used to retrieve an authentication token for secure API access.",
        "correct_answer_document_ids": [
            "core_api.html"
        ]
    },
    {
        "question": "How does the delete_model() function operate?",
        "correct_answer": "delete_model() method allows users to delete models they've created or managed.",
        "correct_answer_document_ids": [
            "core_api.html"
        ]
    }
]

Zur Vorbereitung der Bewertungsdaten:

import os, wget
from ibm_watsonx_ai.helpers import DataConnection

test_data_filename = "benchmarking_data_core_api.json"
test_data_path = f"https://github.com/IBM/watsonx-ai-samples/tree/master/cloud/data/autoai_rag{test_data_filename}"

if not os.path.isfile(test_data_filename): 
    wget.download(test_data_path, out=test_data_filename)

test_asset_details = client.data_assets.create(name=test_data_filename, file_path=test_data_filename)
test_asset_id = client.data_assets.get_id(test_asset_details)

test_data_references = [DataConnection(data_asset_id=test_asset_id)]

Verbindung zu einer Milvus -Vektordatenbank

Dieser Codeausschnitt zeigt, wie man eine Verbindung zu einer Milvus -Vektordatenbank herstellt.

Hinweis : Wenn Sie bereits eine Milvus -Verbindung haben, müssen Sie die Verbindung nicht erstellen.
from ibm_watsonx_ai.helpers import DataConnection

milvus_data_source_type_id = client.connections.get_datasource_type_uid_by_name("milvus")
details = client.connections.create(
    {
        client.connections.ConfigurationMetaNames.NAME: "Milvus Connection",
        client.connections.ConfigurationMetaNames.DATASOURCE_TYPE: milvus_data_source_type_id,
        client.connections.ConfigurationMetaNames.PROPERTIES: {
            "host": <PASTE MILVUS HOST HERE>,
            "port": <PASTE MILVUS PORT HERE>,
            "username": <PASTE MILVUS USERNAME HERE>,
            "password": <PASTE MILVUS PASSWORD HERE>,
            "ssl": True,
        },
    }
)

milvus_connection_id = client.connections.get_id(details)
vector_store_references = [DataConnection(connection_asset_id=milvus_connection_id)]

Schritt 2: Konfigurieren Sie den RAG-Optimierer

Das rag_optimizer Objekt bietet eine Reihe von Methoden für die Arbeit mit dem AutoAI RAG Experiment. In diesem Schritt geben Sie die Details ein, um das Experiment zu definieren. Die verfügbaren Konfigurationsoptionen sind wie folgt:

Parameter Beschreibung Werte
Name Geben Sie einen gültigen Namen ein Name des Experiments
Beschreibung Experimentbeschreibung Optional können Sie das Experiment beschreiben
einbetten_models Modelle zum Ausprobieren einbetten ibm/slate-125m-english-rtrvr
intfloat/multilingual-e5-large
abruf_methodik Zu verwendende Abrufmethoden simple Abruf und Einstufung aller relevanten Dokumente
window Abruf und Einstufung einer festen Anzahl von relevanten Dokumenten
grundlagen_modelle Stiftungsmodelle zum Ausprobieren Siehe Stiftungsmodelle nach Aufgabe
max_number_of_rag_patterns Maximale Anzahl der zu erstellenden RAG-Muster 4-20
optimierung_metriken Name(n) der Metrik(en), die für die Optimierung verwendet werden sollen faithfulness
answer_correctness

Der folgende Beispielcode zeigt die Konfigurationsoptionen für die Ausführung des Experiments mit der ibm-watsonx-ai SDK Dokumentation:

from ibm_watsonx_ai.experiment import AutoAI

experiment = AutoAI(credentials, project_id=project_id)

rag_optimizer = experiment.rag_optimizer(
    name='DEMO - AutoAI RAG ibm-watsonx-ai SDK documentation',
    description="AutoAI RAG experiment grounded with the ibm-watsonx-ai SDK documentation",
    max_number_of_rag_patterns=5,
    optimization_metrics=[AutoAI.RAGMetrics.ANSWER_CORRECTNESS]
)
Tipp: Sie können die Konfiguration ändern, indem Sie unterstützte Werte verwenden, wie in der Konfigurationstabelle beschrieben.
rag_optimizer = experiment.rag_optimizer(
    name='DEMO - AutoAI RAG ibm-watsonx-ai SDK documentation',
    description="AutoAI RAG experiment grounded with the ibm-watsonx-ai SDK documentation",
    embedding_models=["ibm/slate-125m-english-rtrvr"],
    foundation_models=["ibm/granite-13b-chat-v2","mistralai/mixtral-8x7b-instruct-v01"],
    max_number_of_rag_patterns=5,
    optimization_metrics=[AutoAI.RAGMetrics.ANSWER_CORRECTNESS]
)

Schritt 3: Durchführung des Experiments

Führen Sie den Optimierer aus, um die RAG-Muster unter Verwendung der angegebenen Konfigurationsoptionen zu erstellen. In diesem Codebeispiel wird die Aufgabe im interaktiven Modus ausgeführt. Sie können die Aufgabe im Hintergrund laufen lassen, indem Sie das background_mode auf True setzen.

run_details = rag_optimizer.run(
    input_data_references=input_data_references,
    test_data_references=test_data_references,
    vector_store_references=vector_store_references,
    background_mode=False
)

Schritt 4: Prüfen Sie die Muster und wählen Sie das beste aus

Nachdem das AutoAI RAG-Experiment erfolgreich abgeschlossen wurde, können Sie die Muster überprüfen. Verwenden Sie die Methode " summary, um abgeschlossene Muster und Informationen zu den Bewertungsmetriken in Form eines Pandas DataFrame aufzulisten, so dass Sie die Muster in einer Rangfolge nach Leistung gegenüber der optimierten Metrik überprüfen können.

summary = rag_optimizer.summary()
summary

Die Ergebnisse werden beispielsweise wie folgt angezeigt:

Muster mittlere_Antwort_korrektheit mittlere_Treue mittlere_Kontext_Korrektheit chunking.chunk_size embeddings.model_id vector_store.distance_metric retrieval.method retrieval.number_of_chunks generation.model_id
Pattern1 0.6802 0.5407 1.0000 512 ibm/slate-125m-english-rtrvr euclidean Fenster 5 meta-llama/llama-3-70b-instruct
Pattern2 0.7172 0.5950 1.0000 1024 Zeichen. intfloat/multilingual-e5-large euclidean Fenster 5 ibm/granite-13b-chat-v2
Pattern3 0.6543 0.5144 1.0000 1024 Zeichen. intfloat/multilingual-e5-large euclidean einfach 5 ibm/granite-13b-chat-v2
Pattern4 0.6216 0.5030 1.0000 1024 Zeichen. intfloat/multilingual-e5-large Kosinus Fenster 5 meta-llama/llama-3-70b-instruct
Pattern5 0.7369 0.5630 1.0000 1024 Zeichen. intfloat/multilingual-e5-large Kosinus Fenster 3 mistralai/mixtral-8x7b-instruct-v01

Wählen Sie ein Muster für den lokalen Test

Der nächste Schritt besteht darin, ein Muster auszuwählen und es lokal zu testen.

best_pattern = rag_optimizer.get_pattern()
payload = {
    client.deployments.ScoringMetaNames.INPUT_DATA: [
        {
            "values": ["How to use new approach of providing credentials to APIClient?"],
        }
    ]
}

resp = best_pattern.query(payload)
print(resp["predictions"][0]["values"][0][0])

Die Antwort des Modells:

According to the document, the new approach to provide credentials to APIClient is by using the Credentials class. Here's an example:


from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai import Credentials

credentials = Credentials(
                   url = "https://us-south.ml.cloud.ibm.com",
                   token = "***********",
                  )

client = APIClient(credentials)


This replaces the old approach of passing a dictionary with credentials to the APIClient constructor.

Tipp:

Um ein bestimmtes Muster abzurufen, übergeben Sie den Namen des Musters an rag_optimizer.get_pattern().

Schritt 5: Einsatz eines Musters

Nachdem Sie ein Muster lokal getestet haben, können Sie das Muster bereitstellen, um den Endpunkt zu erhalten und ihn in Anwendungen einzubinden. Die Bereitstellung erfolgt durch Speichern der definierten RAG-Funktion und anschließendes Erstellen eines bereitgestellten Assets. Weitere Informationen zum Einsatz finden Sie unter Einsatz und Verwaltung von KI-Assets und Online-Einsätze.

So erstellen Sie die Bereitstellung:

deployment_details = best_pattern.deploy(
    name="AutoAI RAG deployment - ibm_watsonx_ai documentataion",
    space_id=space_id
)

Abrufen der Bereitstellungs-ID für das bereitgestellte Asset.

deployment_id = client.deployments.get_id(deployment_details)
deployment_scoring_href = client.deployments.get_scoring_href(deployment_details)
print(deployment_scoring_href)

Der RAG-Dienst ist jetzt in einem Raum eingerichtet und kann getestet werden.

Testen des eingesetzten Musters

Dieses Codebeispiel zeigt, wie man die bereitgestellte Lösung testet. Geben Sie die Testfragen in die Nutzlast ein, indem Sie das folgende Format verwenden:

questions = ["How to use new approach of providing credentials to APIClient?"]

payload = {
    client.deployments.ScoringMetaNames.INPUT_DATA: [
        {
            "values": questions,
            "access_token": client.service_instance._get_token()
        }
    ]
}

resp = client.deployments.score(deployment_id, payload)
print(resp["predictions"][0]["values"][0][0])

Die Antwort des Modells:

According to the document, the new approach to provide credentials to APIClient is by using the Credentials class. Here's an example:


from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai import Credentials

credentials = Credentials(
                   url = "https://us-south.ml.cloud.ibm.com",
                   token = "***********",
                  )

client = APIClient(credentials)


This replaces the old approach of passing a dictionary with credentials to the APIClient constructor.

Überprüfung der Versuchsergebnisse in Cloud Object Storage.

Wenn der endgültige Status des Experiments "fehlgeschlagen" oder "Fehler" lautet, verwenden Sie rag_optimizer.get_logs() oder lesen Sie die Ergebnisse des Experiments, um zu verstehen, was falsch gelaufen ist. Experimentergebnisse und Protokolle werden in der Standardinstanz Cloud Object Storage gespeichert, die mit Ihrem Konto verknüpft ist. Standardmäßig werden die Ergebnisse nach Experiment-Trainings-ID im Verzeichnis default_autoai_rag_out gespeichert.

Die Ergebnisse sind nach Mustern geordnet. Beispiel:

|-- Pattern1
|      | -- evaluation_results.json
|      | -- indexing_notebook.ipynb (Milvus)
|      | -- inference_notebook.ipynb (Milvus)
|-- Pattern2
|    ...
|-- training_status.json

Jedes Muster enthält diese Ergebnisse:

  • Die Datei evaluation_results.json enthält die Bewertungsergebnisse für jede Benchmark-Frage.
  • Der indexing_notebook.ipynb enthält den Python-Code für die Erstellung eines Vektor-Datenbankindex. Es werden Befehle zum Abrufen von Daten, zum Chunking und zur Erstellung von Einbettungen vorgestellt.
  • Das inference_notebook.ipynb-Notebook konzentriert sich darauf, für Benutzeranfragen relevante Passagen aus einer Wissensbasis abzurufen und Antworten zu generieren, indem die abgerufenen Passagen in ein großes Sprachmodell eingespeist werden.

Sie können die Notizbücher überprüfen oder ausführen, indem Sie die Authentifizierungsdaten hinzufügen.

Hinweis:

Das Ergebnisnotizbuch indexing_notebook.ipynb enthält den Code für die Einbettung und Indizierung der Dokumente. Sie können die Indizierung der Dokumente beschleunigen, indem Sie vector_store.add_documents() in vector_store.add_documents_async() ändern.

Inferenz- und Indizierungsnotizbücher abrufen

Um das angegebene Inferenz-Notizbuch vom Service herunterzuladen, verwenden Sie get_inference_notebook(). Wenn Sie pattern_name leer lassen, lädt die Methode das Notizbuch für das Muster mit dem höchsten Rang herunter.

rag_optimizer.get_inference_notebook(pattern_name='Pattern3')

Schritt 6: Aufräumen (optional)

Wenn Sie Ihre Sammlung aus der Milvus Vektordatenbank entfernen möchten, verwenden Sie das Python-SDK für Milvus.

Um den Namen der Sammlung zu finden, gehen Sie zu Musterdetails und sehen Sie den Indexnamen des Vektorspeichers.

Beispiel:

from pymilvus import MilvusClient

password = "<YOUR APIKEY>"
user = "ibmlhapikey"
uri = f"https://<HOST>:<PORT_NUMBER>"

collection_name = "autoai_rag_5c74df6a_20250319124623"   

client = MilvusClient(uri=uri, password=password, user=milvus_credentials["username"])

client.drop_collection(collection_name=collection_name)

Nächste Schritte

  • Führen Sie das Schlussfolgerungsnotizbuch mit neuen Fragen aus, um das ausgewählte RAG-Muster zu verwenden.
  • Verwenden Sie die indizierten Dokumente aus diesem Experiment in der Prompt Lab, um Aufforderungen für ein Gründungsmodell zu begründen. Siehe Verwendung eines AutoAI Rag-Index zum Chatten mit Dokumenten.

Übergeordnetes Thema: Automatisierung eines RAG-Musters mit dem AutoAI SDK