Graph durchsuchen

In dieser Anleitung wird beschrieben, wie Sie mit der autonomen Einbettungsgenerierung und der AI.SEARCH Funktion eine semantische Suche in Ihren Graphdaten durchführen.

Ziele

In dieser Anleitung werden die folgenden Aufgaben behandelt:

  • Tabellen erstellen, die Informationen zu Personen, Finanzkonten, Kontoinhaberschaft und Kontoübertragungen enthalten.
  • Autonome Einbettungsgenerierung verwenden, um den Workflow für die Einbettungswartung zu vereinfachen.
  • Einen Graphen erstellen, der die Beziehungen zwischen den in Ihren Tabellen gespeicherten Daten definiert.
  • Die Funktion AI.SEARCH für Ihre Graphknoten verwenden, um eine semantische Suche in Kontobeschreibungen durchzuführen.
  • Die Funktion AI.SEARCH für Ihre Graphkanten verwenden, um eine semantische Suche in Notizen zu Kontoübertragungen durchzuführen.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Cloud de Confiance by S3NS:

  • BigQuery: You incur costs for the data that you process in BigQuery.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweis

Console

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  4. Achten Sie darauf, dass Sie die folgende Rolle oder die folgenden Rollen für das Projekt haben: BigQuery-Datenbearbeiter, Projekt-IAM-Administrator

    Rollen prüfen

    1. Rufen Sie in der Cloud de Confiance Console die Seite IAM auf.

      IAM aufrufen
    2. Wählen Sie das Projekt aus.
    3. Suchen Sie in der Spalte Hauptkonto nach allen Zeilen, in denen Sie oder eine Gruppe, zu der Sie gehören, angegeben sind. Fragen Sie Ihren Administrator, zu welchen Gruppen Sie gehören.

    4. Prüfen Sie in allen Zeilen, in denen Sie angegeben oder enthalten sind, die Rolle Spalte , um zu sehen, ob die Liste der Rollen die erforderlichen Rollen enthält.

    Rollen zuweisen

    1. Rufen Sie in der Cloud de Confiance Console die Seite IAM auf.

      IAM aufrufen
    2. Wählen Sie das Projekt aus.
    3. Klicken Sie auf „Zugriffsrechte erteilen.
    4. Geben Sie im Feld Neue Hauptkonten Ihre Nutzer-ID ein. Bei einem Nutzer in einem Mitarbeiteridentitätspool ist dies in der Regel dessen Kennung. Weitere Informationen erhalten Sie unter Mitarbeiterpoolnutzer in IAM-Richtlinien darstellen oder von Ihrem Administrator.

    5. Klicken Sie auf Rolle auswählen und suchen Sie dann nach der Rolle.
    6. Klicken Sie auf Add another role, wenn Sie weitere Rollen zuweisen möchten.
    7. Klicken Sie auf Speichern.

gcloud

  1. Installieren Sie die Google Cloud CLI.

  2. Konfigurieren Sie die gcloud CLI für die Verwendung Ihrer föderierten Identität.

    Weitere Informationen finden Sie unter Mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  3. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  4. Erstellen Sie ein Cloud de Confiance Projekt oder wählen Sie eines aus.

    Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können ein beliebiges Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Project Creator“ (roles/resourcemanager.projectCreator), die die resourcemanager.projects.create Berechtigung enthält. Weitere Informationen zum Zuweisen von Rollen.
    • Projekt erstellen: Cloud de Confiance

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Cloud de Confiance Projekt, das Sie erstellen.

    • Wählen Sie das Cloud de Confiance Projekt aus, das Sie erstellt haben:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch Ihren Cloud de Confiance Projektnamen.

  5. Prüfen Sie, ob für Ihr Cloud de Confiance Projekt die Abrechnung aktiviert ist.

  6. Aktivieren Sie die BigQuery API:

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Weitere Informationen zum Zuweisen von Rollen.

    gcloud services enable bigquery.googleapis.com
  7. Weisen Sie Ihrem Nutzerkonto Rollen zu. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus: roles/bigquery.dataEditor, roles/resourcemanager.projectIamAdmin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Ersetzen Sie Folgendes:

Tabellen erstellen

Erstellen Sie ein Dataset, um die Tabellen und den Graphen zu speichern, die Sie in den folgenden Beispielen erstellen, . Mit der folgenden Abfrage wird ein Dataset mit dem Namen graph_search erstellt:

CREATE SCHEMA IF NOT EXISTS graph_search;

Die folgenden Tabellen enthalten Informationen zu Personen und Konten sowie die Beziehungen zwischen diesen Entitäten:

  • Person: Informationen zu Personen.
  • Account: Informationen zu Bankkonten.
  • PersonOwnAccount: Informationen dazu, wem welche Konten gehören.
  • AccountTransferAccount: Informationen zu Überweisungen zwischen Konten.

Führen Sie die folgenden CREATE TABLE Anweisungen aus, um diese Tabellen zu erstellen:

CREATE OR REPLACE TABLE graph_search.Person (
  id               INT64,
  name             STRING,
  PRIMARY KEY (id) NOT ENFORCED
);

CREATE OR REPLACE TABLE graph_search.Account (
  id                    INT64,
  create_time           TIMESTAMP,
  is_blocked            BOOL,
  description           STRING,
  description_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
                          GENERATED ALWAYS AS (
                          AI.EMBED(description, model => 'embeddinggemma-300m')
                          ) STORED OPTIONS( asynchronous = TRUE ),
  PRIMARY KEY (id) NOT ENFORCED
);

CREATE OR REPLACE TABLE graph_search.PersonOwnAccount (
  id               INT64 NOT NULL,
  account_id       INT64 NOT NULL,
  create_time      TIMESTAMP,
  PRIMARY KEY (id, account_id) NOT ENFORCED,
  FOREIGN KEY (id) REFERENCES graph_search.Person(id) NOT ENFORCED,
  FOREIGN KEY (account_id) REFERENCES graph_search.Account(id) NOT ENFORCED
);

CREATE OR REPLACE TABLE graph_search.AccountTransferAccount (
  id               INT64 NOT NULL,
  to_id            INT64 NOT NULL,
  amount           FLOAT64,
  create_time      TIMESTAMP NOT NULL,
  order_number     STRING,
  notes            STRING,
  notes_embedding  STRUCT<result ARRAY<FLOAT64>, status STRING>
                     GENERATED ALWAYS AS (
                     AI.EMBED(notes, model => 'embeddinggemma-300m')
                     ) STORED OPTIONS( asynchronous = TRUE ),
  PRIMARY KEY (id, to_id, create_time) NOT ENFORCED,
  FOREIGN KEY (id) REFERENCES graph_search.Account(id) NOT ENFORCED,
  FOREIGN KEY (to_id) REFERENCES graph_search.Account(id) NOT ENFORCED
);

In den Tabellen Account und AccountTransferAccount wird die autonome Einbettungs generierung verwendet, um Einbettungen für die Spalten description und notes zu verwalten.

In dieser Anleitung verwenden wir das Modell embeddinggemma-300m, da es in BigQuery ausgeführt wird und sich gut für kurze Strings eignet. Bei längeren Strings mit mehr als 128 Tokens sollten Sie ein anderes Einbettungsmodell wie text-embedding-005 auswählen. Weitere Informationen finden Sie unter Einbettungsmodell auswählen.

Daten einfügen

Mit den folgenden Abfragen werden einige Beispieldaten in Ihre Tabellen eingefügt. In den INSERT Anweisungen werden die Einbettungsspalten ausgelassen und BigQuery füllt sie automatisch aus.

INSERT INTO graph_search.Account
  (id, create_time, is_blocked, description)
VALUES
  (7,"2020-01-10 06:22:20.222",false,"Fund for a refreshing tropical vacation"),
  (16,"2020-01-27 17:55:09.206",true,"Fund for a rainy day!"),
  (20,"2020-02-18 05:44:20.655",false,"Saving up for travel");

INSERT INTO graph_search.Person
  (id, name)
VALUES
  (1,"Alex"),
  (2,"Dana"),
  (3,"Lee");

INSERT INTO graph_search.AccountTransferAccount
  (id, to_id, amount, create_time, order_number, notes)
VALUES
  (7,16,300,"2020-08-29 15:28:58.647","304330008004315", "wedding present"),
  (7,16,100,"2020-10-04 16:55:05.342","304120005529714", "birthday gift"),
  (16,20,300,"2020-09-25 02:36:14.926","103650009791820", "for shared cost of dinner"),
  (20,7,500,"2020-10-04 16:55:05.342","304120005529714", "fees for tuition"),
  (20,16,200,"2020-10-17 03:59:40.247","302290001484851", "loved the lunch");

INSERT INTO graph_search.PersonOwnAccount
  (id, account_id, create_time)
VALUES
  (1,7,"2020-01-10 06:22:20.222"),
  (2,20,"2020-01-27 17:55:09.206"),
  (3,16,"2020-02-18 05:44:20.655");

Graphen erstellen

Mit der folgenden Abfrage wird die CREATE PROPERTY GRAPH Anweisung verwendet, um im Dataset graph_search einen Graphen mit dem Namen FinGraph zu erstellen. Die Tabellen Account und Person sind die Knotentabellen. Die Tabellen AccountTransferAccount und PersonOwnAccount sind die Kantentabellen, die Beziehungen zwischen den Knotentabellen darstellen.

CREATE OR REPLACE PROPERTY GRAPH graph_search.FinGraph
NODE TABLES (graph_search.Account, graph_search.Person)
EDGE TABLES (
  graph_search.PersonOwnAccount
    SOURCE KEY (id) REFERENCES Person (id)
    DESTINATION KEY (account_id) REFERENCES Account (id)
    LABEL Owns,
  graph_search.AccountTransferAccount
    SOURCE KEY (id) REFERENCES Account (id)
    DESTINATION KEY (to_id) REFERENCES Account (id)
    LABEL Transfers
);

Knoten suchen

Die folgenden Abfragen zeigen, wem Konten für Urlaubsreisen und Urlaub gehören. In der ersten Abfrage wird mit einer DECLARE Anweisung eine Variable mit dem Namen similar_account erstellt. Die Variable wird in der DEFAULT-Anweisung mit einem Aufruf von AI.SEARCH initialisiert, der Konten findet, deren Beschreibungen accounts for leisure travel and vacation am ähnlichsten sind. In der Abfrage wird das Argument top_k im Aufruf von AI.SEARCH auf 2 gesetzt, um die Anzahl der Ergebnisse zu begrenzen. Die zweite Abfrage ist eine Graphabfrage, die den Namen des Kontoinhabers zusammen mit der Kontobeschreibung zurückgibt.

DECLARE similar_account DEFAULT ((
SELECT ARRAY_AGG(base.id)
FROM
  AI.SEARCH(
    (SELECT * FROM graph_search.Account WHERE description_embedding IS NOT NULL),
    'description',
    'accounts for leisure travel and vacation',
    top_k => 2)
));

GRAPH graph_search.FinGraph
MATCH (p:Person)-[:Owns]->(a:Account)
WHERE a.id IN UNNEST(similar_account)
RETURN p.name, a.description;

Das Ergebnis sieht etwa so aus:

+------+-----------------------------------------+
| name | description                             |
+------+-----------------------------------------+
| Dana | Saving up for travel                    |
| Alex | Fund for a refreshing tropical vacation |
+------+-----------------------------------------+

Kanten suchen

Die folgenden Abfragen zeigen, wer Kontoüberweisungen im Zusammenhang mit Lebensmittelzahlungen vorgenommen hat. In der ersten Abfrage wird die Funktion AI.SEARCH verwendet, um eine Variable mit dem Namen food_transfers zu füllen. Diese Variable enthält die Bestellnummer der Überweisungen, deren zugehörige Notiz food am ähnlichsten ist. In der Abfrage wird das Argument top_k im Aufruf von AI.SEARCH auf 2 gesetzt, um die Anzahl der Ergebnisse zu begrenzen. Die zweite Abfrage ist eine Graphabfrage, die den Namen des Kontoinhabers zusammen mit der Überweisungsnotiz zurückgibt.

DECLARE food_transfers DEFAULT ((
SELECT ARRAY_AGG(base.order_number)
FROM
  AI.SEARCH(
    (SELECT * FROM graph_search.AccountTransferAccount WHERE notes_embedding IS NOT NULL),
    'notes',
    'food',
    top_k => 2)
));

GRAPH graph_search.FinGraph
MATCH (p:Person)-[:Owns]->(:Account)-[t:Transfers]->(:Account)
WHERE t.order_number IN UNNEST(food_transfers)
RETURN p.name, t.notes;

Das Ergebnis sieht etwa so aus:

+------+---------------------------+
| name | notes                     |
+------+---------------------------+
| Dana | loved the lunch           |
| Lee  | for shared cost of dinner |
+------+---------------------------+

Vektorindex erstellen

Vektorindizes reduzieren die Latenz und die Rechenkosten Ihrer Suchanfragen. Die Tabellen in dieser Anleitung sind zu klein, um einen Vektorindex zu verwenden. Vektorindizes sind nützlich, wenn Ihre Tabellen groß sind, in der Regel mit Millionen von Zeilen. BigQuery bietet zwei Arten von Indizes: IVF und TreeAH. Weitere Informationen zum Erstellen eines Index und zum Auswählen eines Typs finden Sie unter Vektorindizes verwalten.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

    Projekt löschen: Cloud de Confiance

    gcloud projects delete PROJECT_ID

Nächste Schritte