Datenaufnahme mit RAG Engine verwenden

Auf dieser Seite wird erläutert, wie Sie Daten aus einer unterstützten Datenquelle wie Cloud Storage, Google Drive, Slack, Jira oder SharePoint aufnehmen und wie Sie diese Daten mit der RAG Engine verwenden. Die ragFiles.import bietet Daten-Connectors für diese Datenquellen.

Für RAG unterstützte Datenquellen

Die folgenden Datenquellen werden unterstützt:

  • Lokale Datei hochladen:Ein Upload einer einzelnen Datei mit upload_file (bis zu 25 MB), das ein synchroner Aufruf ist.
  • Cloud Storage:Importieren Sie Datei(en) aus Cloud Storage.
  • Google Drive:Importieren Sie ein Verzeichnis aus Google Drive.

    Dem Dienstkonto müssen die erforderlichen Berechtigungen zum Importieren von Dateien gewährt werden. Andernfalls werden keine Dateien importiert und keine Fehlermeldung angezeigt. Weitere Informationen zu Dateigrößenbeschränkungen finden Sie unter Unterstützte Dokumenttypen.

    So authentifizieren und erteilen Sie Berechtigungen:

    1. Rufen Sie die IAM-Seite Ihres Google Cloud Projekts auf.
    2. Wählen Sie Von Google bereitgestellte Rollenzuweisung einschließen aus.
    3. Suchen Sie nach dem Dienstkonto Agent Platform RAG Data Service Agent.
    4. Klicken Sie im Drive-Ordner auf Freigeben und geben Sie es für das Dienstkonto frei.
    5. Gewähren Sie dem Dienstkonto in Ihrem Google Drive-Ordner oder Ihrer Datei die Berechtigung Viewer. Die Google Drive-Ressourcen-ID finden Sie in der Web-URL.
  • Slack: Importieren Sie Dateien aus Slack mit einem Daten Connector.

  • Jira: Importieren Sie Dateien aus Jira mit einem Daten Connector.

Datendeduplizierung

Wenn dieselbe Datei mehrmals ohne Änderungen importiert wird, wird sie übersprungen, da sie bereits vorhanden ist. Daher bezieht sich response.skipped_rag_files_count auf die Anzahl der Dateien, die während des Importvorgangs übersprungen wurden.

Eine Datei wird übersprungen, wenn die folgenden Bedingungen erfüllt sind:

  • Die Datei wurde importiert.
  • Die Datei hat sich nicht geändert.
  • Die Blockkonfiguration für die Datei hat sich nicht geändert.

Importfehler

In diesem Abschnitt werden die Metadaten in einer Antwort auf eine Importanfrage und eine Datensenke erläutert. Die Datensenke ist das Ziel für die Daten, die Sie importieren.

Antwortmetadaten

Mit response.metadata (einem Antwortobjekt im SDK) können Sie die Import- und Antwortzeiten sowie die Zeit der Anfrage aufrufen.

Senke für Importergebnisse

import_result_sink ist im SDK ein optionaler Funktionsparameter, der auf einen gültigen Stringwert festgelegt werden kann.

Wenn import_result_sink angegeben ist, werden die Ergebnisse für erfolgreiche und fehlgeschlagene Dateien in die Senke geschrieben. Wenn alle Ergebnisse in die Senke geschrieben werden, ist es einfacher zu verstehen, warum einige Dateien möglicherweise nicht importiert werden können und welche Dateien nicht importiert wurden.

import_result_sink muss ein Cloud Storage-Pfad oder eine BigQuery-Tabelle sein.

  • Wenn import_result_sink ein Cloud Storage-Pfad ist, muss er das Format gs://my-bucket/my/object.ndjson haben und das Objekt darf nicht vorhanden sein. Nach Abschluss des Importjobs enthält jede Zeile des Cloud Storage-Objekts ein JSON-Objekt mit einer Vorgangs-ID, einem Erstellungszeitstempel, einem Dateinamen, einem Status und einer Datei-ID.

  • Wenn import_result_sink eine BigQuery-Tabelle ist, muss sie das Format bq://my-project.my-dataset.my-table haben. Die Tabelle muss nicht vorhanden sein. Wenn die Tabelle nicht vorhanden ist, wird sie erstellt. Wenn die Tabelle vorhanden ist, wird das Schema überprüft. Wenn Sie die Senke für BigQuery-Importergebnisse zum ersten Mal angeben, geben Sie eine nicht vorhandene Tabelle an. Andernfalls können Sie die vorhandene Tabelle wiederverwenden.

Dateien aus Cloud Storage oder Google Drive importieren

So importieren Sie Dateien aus Cloud Storage oder Google Drive in Ihren Korpus:

  1. Erstellen Sie einen RAG-Korpus. Weitere Informationen finden Sie unter Methode: ragCorpora.create.

  2. Verwenden Sie die ragFiles.import Methode, um Ihre Dateien aus Cloud Storage oder Google Drive zu importieren.

    Das System prüft automatisch den Pfad, den Dateinamen und die version_id Ihrer Datei. Die version_id ist ein Dateihash, der anhand des Inhalts der Datei berechnet wird. Dadurch wird verhindert, dass die Datei neu indexiert wird.

    Wenn eine Datei mit demselben Dateinamen und Pfad eine Inhaltsaktualisierung hat, wird die Datei neu indexiert.

Dateien aus Slack importieren

So importieren Sie Dateien aus Slack in Ihren Korpus:

  1. Erstellen Sie einen Korpus. Das ist ein Index, der Ihre Daten für die Suche strukturiert und optimiert. Weitere Informationen finden Sie unter Methode: ragCorpora.create.
  2. Rufen Sie die CHANNEL_ID aus der Slack-Kanal-ID ab.
  3. Erstellen Sie eine Anwendung und richten Sie sie für die Verwendung mit der RAG Engine ein.
    1. Klicken Sie in der Slack-Benutzeroberfläche im Bereich Features und Funktionen hinzufügen auf Berechtigungen.
    2. Fügen Sie die folgenden Berechtigungen hinzu:
      • channels:history
      • groups:history
      • im:history
      • mpim:history
    3. Klicken Sie auf In Workspace installieren, um die Anwendung in Ihrem Slack-Workspace zu installieren.
  4. Klicken Sie auf Kopieren , um das API-Token abzurufen, das Ihre Identität authentifiziert und Ihnen Zugriff auf eine API gewährt.
  5. Fügen Sie Ihr API-Token dem Secret Manager hinzu.
  6. Wenn Sie das gespeicherte Secret aufrufen möchten, weisen Sie dem Dienstkonto der RAG Engine Ihres Projekts die Rolle Secret Manager Secret Accessor zu.

In den folgenden Curl- und Python-Codebeispielen wird gezeigt, wie Sie Dateien aus Ihren Slack-Ressourcen importieren.

curl

Wenn Sie Nachrichten von einem bestimmten Kanal erhalten möchten, ändern Sie die CHANNEL_ID.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://ENDPOINT/v1beta1/projects/PROJECT_ID/locations/REGION/ragCorpora/RAG_CORPUS_ID/ragFiles:import \
-d '{
  "import_rag_files_config": {
    "slack_source": {
      "channels": [
        {
          "apiKeyConfig": {
            "apiKeySecretVersion": "API_KEY_SECRET_VERSION"
          },
          "channels": [
            {
              "channel_id": "CHANNEL_ID"
            }
          ]
        }
      ]
    }
  }
}'

Python

Wenn Sie Nachrichten für einen bestimmten Zeitraum oder von einem bestimmten Kanal abrufen möchten, ändern Sie eines der folgenden Felder:

  • START_TIME
  • END_TIME
  • CHANNEL1 oder CHANNEL2
    # Slack example
    start_time = protobuf.timestamp_pb2.Timestamp()
    start_time.GetCurrentTime()
    end_time = protobuf.timestamp_pb2.Timestamp()
    end_time.GetCurrentTime()
    source = rag.SlackChannelsSource(
        channels = [
            SlackChannel("CHANNEL1", "api_key1"),
            SlackChannel("CHANNEL2", "api_key2", START_TIME, END_TIME)
        ],
    )

    response = rag.import_files(
        corpus_name=(
            "projects/PROJECT_ID/locations/"
            "REGION/ragCorpora/RAG_CORPUS_ID"
        ),
        source=source,
        chunk_size=512,
        chunk_overlap=100,
    )

Dateien aus Jira importieren

So importieren Sie Dateien aus Jira in Ihren Corpus:

  1. Erstellen Sie einen Korpus. Das ist ein Index, der Ihre Daten für die Suche strukturiert und optimiert. Weitere Informationen finden Sie unter Methode: ragCorpora.create.

  2. Melden Sie sich zum Erstellen eines API-Tokens auf der Atlassian Website an.

  3. Verwenden Sie in der Anfrage {YOUR_ORG_ID}.atlassian.net als SERVER_URI.

  4. Verwenden Sie Ihre Atlassian-E-Mail-Adresse als EMAIL in der Anfrage.

  5. Geben Sie in Ihrer Anfrage projects oder customQueries an. Weitere Informationen zu benutzerdefinierten Abfragen finden Sie unter Erweiterte Suche mit Jira Query Language (JQL).

    Wenn Sie projects importieren, wird projects in die entsprechenden Abfragen erweitert, um das gesamte Projekt abzurufen. Beispiel: MyProject wird zu project = MyProject erweitert.

  6. Klicken Sie auf Kopieren, um das API-Token abzurufen, das Ihre Identität authentifiziert und Ihnen Zugriff auf eine API gewährt.

  7. Fügen Sie Ihr API-Token dem Secret Manager hinzu.

  8. Weisen Sie dem Dienstkonto der RAG Engine Ihres Projekts die Rolle Secret Manager Secret Accessor zu.

curl

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://ENDPOINT/v1beta1/projects/PROJECT_ID/locations/REGION/ragCorpora/RAG_CORPUS_ID/ragFiles:import \
-d '{
  "import_rag_files_config": {
    "jiraSource": {
      "jiraQueries": [{
        "projects": ["JIRA_PROJECT"],
        "customQueries": ["CUSTOM_QUERY"],
        "email": "EMAIL",
        "serverUri": "SERVER_URI",
        "apiKeyConfig": {
          "apiKeySecretVersion": "API_KEY_SECRET_VERSION"
        }
      }]
    }
  }
}'

Python

    # Jira Example
    jira_query = rag.JiraQuery(
        email="EMAIL",
        jira_projects=["JIRA_PROJECT"],
        custom_queries=["CUSTOM_QUERY"],
        api_key="API_KEY_SECRET_VERSION",
        server_uri="SERVER_URI"
    )
    source = rag.JiraSource(
        queries=[jira_query],
    )

    response = rag.import_files(
        corpus_name=(
            "projects/PROJECT_ID/locations/"
            "REGION/ragCorpora/RAG_CORPUS_ID"
        ),
        source=source,
        chunk_size=512,
        chunk_overlap=100,
    )

Dateien aus SharePoint importieren

So importieren Sie Dateien von Ihrer SharePoint-Website in Ihren Korpus:

  1. Erstellen Sie einen Korpus. Das ist ein Index, der Ihre Daten für die Suche strukturiert und optimiert. Weitere Informationen finden Sie unter Methode: ragCorpora.create.

  2. Erstellen Sie eine Azure-App, um auf Ihre SharePoint-Website zuzugreifen.

    1. Rufen Sie App-Registrierungen auf, um eine Registrierung zu erstellen.

      1. Geben Sie einen Namen für die Anwendung an.

      2. Wählen Sie die Option Nur Konten in diesem Organisationsverzeichnis aus.

      3. Prüfen Sie, ob die Umleitungs-URIs leer sind.

    2. Verwenden Sie im Abschnitt Übersicht Ihre Anwendungs-ID (Client) als CLIENT_ID und Ihre Verzeichnis-ID (Mandanten-ID) als TENANT_ID.

    3. Aktualisieren Sie im Abschnitt Verwalten die API-Berechtigungen:

      1. Fügen Sie die SharePoint-Berechtigung Sites.Read.All hinzu.

      2. Fügen Sie die Microsoft Graph-Berechtigungen Files.Read.All und Browser SiteLists.Read.All hinzu.

      3. Erteilen Sie die Administratorzustimmung, damit diese Berechtigungsänderungen wirksam werden.

    4. Führen Sie im Abschnitt Verwalten folgende Schritte aus:

      1. Aktualisieren Sie Zertifikate und Secrets mit einem neuen Clientschlüssel.

      2. Verwenden Sie API_KEY_SECRET_VERSION, um den Secret Wert dem Secret Manager hinzuzufügen.

  3. Weisen Sie dem Dienstkonto der RAG Engine Ihres Projekts die Rolle Secret Manager Secret Accessor zu.

  4. Verwenden Sie {YOUR_ORG_ID}.sharepoint.com als SHAREPOINT_SITE_NAME.

  5. In der Anfrage muss ein Laufwerksname oder eine Laufwerks-ID auf der SharePoint-Website angegeben werden.

  6. Optional: Es kann ein Ordnerpfad oder eine Ordner-ID auf dem Laufwerk angegeben werden. Wenn der Ordnerpfad oder die Ordner-ID nicht angegeben ist, werden alle Ordner und Dateien auf dem Laufwerk importiert.

Website-ID ermitteln

  1. Öffnen Sie Ihren Browser und rufen Sie die URL Ihrer SharePoint-Zielwebsite auf.
  2. Fügen Sie am Ende der URL /_api/site/id/ hinzu.

    Beispiel:https://example-sp.sharepoint.com/sites/example-site/_api/site/id/

    Die Seite gibt eine XML-Nutzlast zurück. Notieren Sie sich den String nach Edm.Guid. Das ist Ihre Website-ID.

Laufwerks-ID ermitteln

Senden Sie mit der erfassten Website-ID eine authentifizierte GET-Anfrage mit Microsoft Graph Explorer oder Ihrem API-Client:

GET https://graph.microsoft.com/v1.0/sites/SITE_ID/drive

Rufen Sie die SHAREPOINT_DRIVE_ID ab. Der Wert ist im Feld id in der JSON-Antwort aufgeführt.

Bestimmte Ordner-ID ermitteln

Listen Sie mit Ihrer Laufwerks-ID die untergeordneten Elemente des Stammverzeichnisses auf:

GET https://graph.microsoft.com/v1.0/drives/SHAREPOINT_DRIVE_ID/root/children
  • Suchen Sie in der JSON-Antwort nach dem Objekt, das dem ausgewählten Ordnernamen entspricht, und kopieren Sie den entsprechenden id-String. Das ist Ihre SHAREPOINT_FOLDER_ID.

curl

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://ENDPOINT/v1beta1/projects/PROJECT_ID/locations/REGION/ragCorpora/RAG_CORPUS_ID/ragFiles:import \
-d '{
  "import_rag_files_config": {
    "sharePointSources": {
      "sharePointSource": [{
        "clientId": "CLIENT_ID",
        "apiKeyConfig": {
          "apiKeySecretVersion": "API_KEY_SECRET_VERSION"
        },
        "tenantId": "SHAREPOINT_TENANT_ID",
        "sharepointSiteName": "SHAREPOINT_SITE_NAME",
        "sharepointFolderId": "SHAREPOINT_FOLDER_ID",
        "driveId": "SHAREPOINT_DRIVE_ID"
      }]
    }
  }
}'

Python

    from vertexai.preview import rag
    from vertexai.preview.rag.utils import resources
    import vertexai

    vertexai.init(
        project="PROJECT_ID",
        location="REGION",
    )

    # SharePoint Example.
    source = resources.SharePointSources(
        share_point_sources=[
            resources.SharePointSource(
                client_id="CLIENT_ID",
                client_secret="API_KEY_SECRET_VERSION",
                tenant_id="SHAREPOINT_TENANT_ID",
                sharepoint_site_name="SHAREPOINT_SITE_NAME",
                sharepoint_folder_id="SHAREPOINT_FOLDER_ID",
                drive_id="SHAREPOINT_DRIVE_ID",
            )
        ]
    )

    response = rag.import_files(
        corpus_name=(
            "projects/PROJECT_ID/locations/"
            "REGION/ragCorpora/RAG_CORPUS_ID"
        ),
        source=source,
        chunk_size=512,
        chunk_overlap=100,
    )

Nächste Schritte