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.3.17 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 durchfü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.

Bevor Sie den Beispielcode verwenden, müssen Sie die folgende Einrichtungsaufgabe durchführen:

  • Wenden Sie sich an Ihren Cloud Pak for Data -Administrator und fragen Sie ihn nach Ihren Anmeldedaten
  1. Installieren und importieren Sie die erforderlichen Module und Abhängigkeiten. Zum Beispiel:

    pip install 'ibm-watsonx-ai[rag]>=1.3.17'
    
  2. Verbinden Sie sich mit Watson Machine Learning.

    Authentifizieren Sie den Watson Machine Learning -Dienst auf IBM Cloud Pak for Data. Sie müssen die Plattform url, Ihre username und Ihre api_key angeben.

    username = 'PASTE YOUR USERNAME HERE'
    api_key = 'PASTE YOUR API_KEY HERE'
    url = 'PASTE THE PLATFORM URL HERE'
    
  3. Verwenden Sie diese, um den Client zu initialisieren. Zum Beispiel:

    from ibm_watsonx_ai import APIClient, Credentials
    
    credentials = Credentials(
        username = "username",
        api_key = "***********",
        url = "url",
        instance_id = "openshift"
    )
    
    client = APIClient(credentials)
    

    Alternativ können Sie auch Ihre username und password verwenden, um Watson Machine Learning Dienste zu authentifizieren.

    credentials = Credentials(
        username=***,
        password=***,
        url=***,
        instance_id="openshift"
    )
    
    client = APIClient(credentials)
    
  4. Schaffen Sie sich einen Raum für Ihre Arbeit. Siehe "Einen Raum schaffen ".

  5. Legen Sie ein Standard-Leerzeichen fest. Zum Beispiel:

    client.set.default_space("<Space GUID>")
    
  6. Bereiten Sie die grundlegenden Dokumente vor.

  7. Bereiten Sie die Bewertungsdaten vor.

Grundlagendokumente

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.

    datasource_name = 'bluemixcloudobjectstorage'
    
    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.

    text_extraction_input_filename = <TEXT EXTRACTION INPUT FILENAME>
    text_extraction_result_filename = <TEXT EXTRACTION RESULT FILENAME>
    
    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_result_filename
        )
    )
    result_data_reference.set_client(client)
    

Auswertungsdaten

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_result_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_result_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_result_filename],
    },
]
import os, json

test_filename = "benchmark.json"

if not os.path.isfile(test_filename):
    with open(test_filename, "w") as json_file:
        json.dump(benchmarking_data, json_file, indent=4)

test_data_reference = DataConnection(
    connection_asset_id=cos_connection_id,
    location=S3Location(bucket=<BUCKET_NAME>, path=test_filename),
)
test_data_reference.set_client(client)

# Upload file to the COS bucket
test_data_reference.write(test_filename)

test_data_references = [test_data_reference]

Schritt 2: Eingabedokumente mit Textextraktion verarbeiten

  1. Initialisieren Sie den Textextraktionsdienst.

    from ibm_watsonx_ai.foundation_models.extractions import TextExtractionsV2
    
    extraction = TextExtractionsV2(api_client=client)
    
  2. Führen Sie den Textextraktionsauftrag aus.

    from ibm_watsonx_ai.metanames import TextExtractionsV2ParametersMetaNames
    from ibm_watsonx_ai.foundation_models.extractions import TextExtractionsV2ResultFormats
    
    response = extraction.run_job(
        document_reference=input_data_reference,
        results_reference=result_data_reference,
        parameters={
            TextExtractionsV2ParametersMetaNames.OCR_MODE: "enabled",
            TextExtractionsV2ParametersMetaNames.LANGUAGES: ["en"]
        },
        result_formats=TextExtractionsV2ResultFormats.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 Objekt rag_optimizer 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. Die verfügbaren Konfigurationsoptionen finden Sie unter Konfigurationsparameter für Experimenteinstellungen.

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, die in [Konfigurationsparameter für Experimenteinstellungen]( autoai-rag-settings.html #parameters) angegeben sind.

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 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 euklidisch Fenster 5 meta-llama/llama-3-70b-instruct
Pattern2 0.7172 0.5950 1.0000 1.024 intfloat/multilingual-e5-large euklidisch Fenster 5 ibm/granite-13b-chat-v2
Pattern3 0.6543 0.5144 1.0000 1.024 intfloat/multilingual-e5-large euklidisch einfach 5 ibm/granite-13b-chat-v2
Pattern4 0.6216 0.5030 1.0000 1.024 intfloat/multilingual-e5-large Kosinus Fenster 5 meta-llama/llama-3-70b-instruct
Pattern5 0.7369 0.5630 1.0000 1.024 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.

best_pattern = rag_optimizer.get_pattern()

RAG-Muster lokal abfragen.

from ibm_watsonx_ai.deployments import RuntimeContext

runtime_context = RuntimeContext(api_client=client)
inference_service_function = best_pattern.inference_service(runtime_context)[0]
question = "How to use new approach of providing credentials to APIClient?"

context = RuntimeContext(
    api_client=client,
    request_payload_json={"messages": [{"role": "user", "content": question}]},
)
print(inference_service_function(context)["body"]["choices"][0]["message"]["content"])

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

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.