Codierung eines AutoAI -RAG-Experiments mit Textextraktion

Letzte Aktualisierung: 05. März 2025
Codierung eines AutoAI -RAG-Experiments mit Textextraktion

Lesen Sie die Richtlinien und Codebeispiele, um zu erfahren, wie Sie ein AutoAI -RAG-Experiment codieren, indem Sie die watsonx -Textextraktion zur Verarbeitung von Eingabedokumenten verwenden.

Sie können die Textextraktion verwenden, um Eingabedokumente für ein AutoAI -RAG-Experiment zu verarbeiten. Durch Textextraktion werden hochwertige Geschäftsdokumente mit Tabellen, Bildern und Diagrammen in ein Markdown-Format umgewandelt. Die resultierenden Markdown-Dateien können dann in einem AutoAI RAG-Experiment verwendet werden, um die Qualität der generierten Muster zu verbessern.

Der Textextraktionsdienst verwendet die Client-Bibliothek watsonx.ai Python (Version 1.1.11 oder höher). Weitere Informationen zur Verwendung der Textextraktion von watsonx.ai Python SDK finden Sie unter Textextraktionen.

Befolgen Sie diese Schritte, um die Textextraktion in Ihrem AutoAI -RAG-Experiment zu verwenden.

  1. Vorbereitung der Voraussetzungen für die Datenaufbereitung und Einrichtung des Experiments
  2. Eingabedokumente mit Textextraktion verarbeiten
  3. Konfigurieren Sie den RAG-Optimierer
  4. Experiment ausführen
  5. Überprüfen Sie die Muster und wählen Sie das beste aus

Schritt 1: Bereiten Sie die Voraussetzungen für die Datenaufbereitung vor und richten Sie das Experiment ein

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
    
  • Verwenden Sie Ihre Anmeldedaten, um den Client zu initialisieren. Beispiel:

    from ibm_watsonx_ai import APIClient, Credentials
    
    credentials = Credentials(
                    url = "https://us-south.ml.cloud.mydomain.com",
                    api_key = "***********"
                    )
    
    client = APIClient(credentials)
    
  • Erstellen Sie ein Projekt oder einen Bereich für Ihre Arbeit. Siehe "Projekt erstellen " oder "Bereich erstellen ".

  • Besorgen Sie sich die ID für das Projekt oder den Bereich. Siehe "Ermittlung der Projekt-ID ".

  • Legen Sie ein Standardprojekt oder einen Standardbereich fest:

client.set.default_project("<Project ID>")
client.set.default_space("<Space GUID>")
  • Vorbereitung der Gründungsdokumente
  • Bereiten Sie die Bewertungsdaten vor

Grundlegende Dokumente

Bereiten Sie die grundlegenden Dokumente vor, die Sie für die Durchführung des AutoAI RAG-Experiments mit dem Textextraktionsdienst verwenden werden, und stellen Sie eine Verbindung zu diesen her.

  1. Stellen Sie eine Verbindung zu Cloud Object Storage her und rufen Sie die ID ab.

    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)
    
  2. Bereiten Sie zwei Verbindungsressourcen vor, eine für die Eingabe und eine für die Ausgabe des Textextraktionsdienstes.

    from ibm_watsonx_ai.helpers import DataConnection, S3Location
    
    input_data_reference = DataConnection(
        connection_asset_id=cos_connection_id,
        location=S3Location(
            bucket=<BUCKET_NAME>,
            path=<TEXT EXTRACTION INPUT FILENAME>
        ),
    )
    input_data_reference.set_client(client)
    
    result_data_reference = DataConnection(
        connection_asset_id=cos_connection_id, 
        location=S3Location(
            bucket=<BUCKET_NAME>,
            path=<TEXT EXTRACTION OUTPUT FILENAME>
        )
    )
    result_data_reference.set_client(client)
    

Evaluierungsdatum

Für die Eingabe von Bewertungsdaten:

  • Die Daten müssen im JSON-Format mit einem festen Schema mit diesen Feldern vorliegen: question, correct_answer, correct_answer_document_ids
  • correct_answer_document_ids muss sich auf die Ausgabedatei des Textextraktionsdienstes beziehen
benchmarking_data = [
     {
        "question": "What are the two main variants of Granite Code models?",
        "correct_answer": "The two main variants are Granite Code Base and Granite Code Instruct.",
        "correct_answer_document_ids": <TEXT EXTRACTION OUTPUT FILENAME>
     },
     {
        "question": "What is the purpose of Granite Code Instruct models?",
        "correct_answer": "Granite Code Instruct models are finetuned for instruction-following tasks using datasets like CommitPack, OASST, HelpSteer, and synthetic code instruction datasets, aiming to improve reasoning and instruction-following capabilities.",
        "correct_answer_document_ids": <TEXT EXTRACTION OUTPUT FILENAME>
     },
     {
        "question": "What is the licensing model for Granite Code models?",
        "correct_answer": "Granite Code models are released under the Apache 2.0 license, ensuring permissive and enterprise-friendly usage.",
        "correct_answer_document_ids": <TEXT EXTRACTION OUTPUT FILENAME>
     },
]

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

Schritt 2: Eingabedokumente mit Textextraktion verarbeiten

  1. Initialisieren Sie den Textextraktionsdienst.

    from ibm_watsonx_ai.foundation_models.extractions import TextExtractions
    
    extraction = TextExtractions(
        credentials=credentials,
        space_id=<Space GUID>,
    )
    
  2. Führen Sie den Textextraktionsauftrag aus.

    from ibm_watsonx_ai.metanames import TextExtractionsMetaNames
    
    response = extraction.run_job(
        document_reference=input_data_reference,
        results_reference=result_data_reference,
        steps={
            TextExtractionsMetaNames.OCR: {
                "process_image": True,
                "languages_list": ["en"],
            },
            TextExtractionsMetaNames.TABLE_PROCESSING: {"enabled": True},
        },
        results_format="markdown",
    )
    
    job_id = response['metadata']['id']
    
  3. Stellenbeschreibung abrufen.

    extraction.get_job_details(job_id)
    
  4. Wenn der Status completed lautet, fahren Sie mit dem nächsten Schritt fort.

Schritt 3: Konfigurieren Sie den RAG-Optimierer

Das rag_optimizer -Objekt bietet eine Reihe von Methoden für die Arbeit mit dem AutoAI -RAG-Experiment. Geben Sie in diesem Schritt die Details ein, um das Experiment zu definieren. Dies sind die verfügbaren Konfigurationsoptionen:

Parameter Beschreibung Werte
Name Geben Sie einen gültigen Namen ein Name des Experiments
Beschreibung Experimentbeschreibung Optional können Sie das Experiment beschreiben
embedding_models Modelle zum Ausprobieren einbetten ibm/slate-125m-english-rtrvr
intfloat/multilingual-e5-large
retrieval_methods Zu verwendende Abrufmethoden simple ruft alle relevanten Dokumente ab und ordnet sie
window ruft eine festgelegte Anzahl relevanter Dokumente ab und ordnet sie
foundation_models Modelle zum Ausprobieren Siehe Stiftungsmodelle nach Aufgabe
max_number_of_rag_patterns Maximale Anzahl der zu erstellenden RAG-Muster 4-20
optimierungsmetriken Metrische(r) Name(n) zur Optimierung faithfulness
answer_correctness

Dieser Beispielcode zeigt die Konfigurationsoptionen für die Durchfü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 4: Experiment durchführen

Führen Sie den Optimierer aus, um die RAG-Muster mithilfe der angegebenen Konfigurationsoptionen zu erstellen. Verwenden Sie die Ausgabe der Textextraktion als Eingabe für Ihr AutoAI -RAG-Experiment.

In diesem Codebeispiel für die Durchführung eines Chroma-Experiments wird die Aufgabe im interaktiven Modus ausgeführt. Sie können die Aufgabe im Hintergrund ausführen, indem Sie background_mode in "True" ändern.

input_data_references = [result_data_reference]

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

Schritt 5: Überprüfen Sie die Muster und wählen Sie das beste aus

Nach erfolgreichem Abschluss des AutoAI -RAG-Experiments können Sie die Muster überprüfen. Verwenden Sie die summary -Methode, um abgeschlossene Muster und Bewertungsmetrikinformationen in Form einer Pandas DataFrame aufzulisten, damit Sie die Muster überprüfen können, die nach Leistung im Vergleich zur optimierten Metrik geordnet sind.

summary = rag_optimizer.summary()
summary

Beispielsweise werden die Ergebnisse der Muster wie folgt angezeigt:

Muster richtigkeit der Antwort mean_faithfulness mean_context_correctness 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 aus, um es lokal zu testen

Der nächste Schritt besteht darin, ein Muster auszuwählen und es vor Ort zu testen. Da Chroma speicherresident ist, müssen Sie den Dokumentenindex neu erstellen.

Tipp:

Im folgenden Codebeispiel wird der Index mit den Dokumenten core_api.html und fm_embeddings.html erstellt.

from langchain_community.document_loaders import WebBaseLoader

best_pattern = rag_optimizer.get_pattern()

urls = [
    "https://ibm.github.io/watsonx-ai-python-sdk/core_api.html",
    "https://ibm.github.io/watsonx-ai-python-sdk/fm_embeddings.html",
]
docs_list = WebBaseLoader(urls).load()
doc_splits = best_pattern.chunker.split_documents(docs_list)
best_pattern.indexing_function(doc_splits)

RAG-Muster lokal abfragen.

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

best_pattern.query(payload)

Die Antwort des Modells sieht so aus:

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, senden Sie die Musternummer an rag_optimizer.get_pattern().

Überprüfung der Versuchsergebnisse in Cloud Object Storage

Wenn das Experiment als fehlgeschlagen oder fehlerhaft eingestuft wird, wenden Sie sich an rag_optimizer.get_logs() oder sehen Sie sich die Ergebnisse des Experiments an, um zu verstehen, was schiefgelaufen ist. Die Ergebnisse und Protokolle der Experimente werden in der Standardinstanz Cloud Object Storage gespeichert, die mit Ihrem Konto verknüpft ist. Standardmäßig werden die Ergebnisse im Verzeichnis default_autoai_rag_out gespeichert.

Die Ergebnisse sind nach Mustern geordnet. Beispiel:

|-- Pattern1
|      | -- evaluation_results.json
|      | -- indexing_inference_notebook.ipynb (Chroma)
|-- Pattern2
|    ...
|-- training_status.json

Jedes Muster enthält diese Ergebnisse:

  • Die Datei evaluation_results.json enthält die Bewertungsergebnisse für jede Benchmark-Frage.
  • Die indexing_inference_notebook.ipynb enthält den Python -Code für den Aufbau eines Vektordatenbankindex sowie für den Aufbau von Abruf- und Generierungsfunktionen. Das Notizbuch führt Befehle zum Abrufen von Daten, zum Chunking und zur Erstellung von Einbettungen sowie zum Abrufen von Chunks, zum Erstellen von Eingabeaufforderungen und zum Generieren von Antworten ein.
Hinweis:

Das Ergebnis-Notizbuch indexing_notebook.ipynb enthält den Code zum Einbetten und Indizieren der Dokumente. Sie können die Indizierung der Dokumente beschleunigen, indem Sie vector_store.add_documents() in vector_store.add_documents_async() ändern.

Erhalten Sie ein Notizbuch für Schlussfolgerungen und Indexierung

Um ein bestimmtes Inferenz-Notizbuch herunterzuladen, wenden Sie sich an get_inference_notebook(). Wenn Sie pattern_name leer lassen, lädt die Methode das Notizbuch mit dem besten berechneten Muster herunter.

rag_optimizer.get_inference_notebook(pattern_name='Pattern3')

Weitere Informationen und Codebeispiele finden Sie im AutoAI RAG mit watsonx Text Extraction Service-Notizbuch.

Übergeordnetes Thema: Automatisierung der Suche nach einem RAG-Muster