Strukturierte Daten extrahieren

Die Funktion ai.extract ist ein integriertes AlloyDB AI-Tool, das anhand eines bereitgestellten Schemas bestimmte strukturierte Details aus unstrukturiertem Text extrahiert. Durch die direkte Einbettung dieser Funktion in die Datenbank können Sie mit AlloyDB for PostgreSQL unstrukturierte Daten verarbeiten, ohne komplexe ETL-Pipelines (Extrahieren, Transformieren und Laden) oder externe Dienstintegrationen erstellen zu müssen.

Die Datenextraktionsfunktion bietet folgende Vorteile:

  • Skalierbarkeit: Unterstützt Smart Batching für KI-Funktionen, auch als KI-Funktionsbeschleunigung bezeichnet. Dies ist eine Funktion zur automatischen Optimierung der Abfrageausführung in AlloyDB AI, die einzelne, zeilenweise skalare KI-Funktionsaufrufe während der Abfrageausführung im Hintergrund transparent in Batch-Modellanfragen gruppiert. Außerdem wird die array- und cursorbasierte Verarbeitung unterstützt, um Tausende von Zeilen effizient zu verarbeiten.
  • Abstraktion: Bietet eine allgemeine Abstraktion, die den Modellaufruf und die Datenvorbereitung automatisch verwaltet.

Die Datenextraktionsfunktion von AlloyDB AI unterstützt mehrere Anwendungsfälle, darunter:

  • Gesundheitswesen: Medizinische Notizen im Freitextformat in strukturierte Formatfelder wie Patientennamen, Symptome und Medikamente parsen.
  • Immobilien: Unstrukturierte Immobilienbeschreibungen in bestimmte Datenpunkte wie Immobilientyp und Anzahl der Schlafzimmer umwandeln.
  • Rechtstechnologie: Automatische Identifizierung und Extraktion wichtiger Begriffe wie geltendes Recht und Haftungsobergrenzen aus langen Rechtsdokumenten.
  • Finanzvorgänge: Transkribierten Rechnungstext verarbeiten, um Metadaten und Gesamtbeträge genau in ein einheitliches Format zu extrahieren.

Hinweis

Prüfen Sie, ob die folgenden Anforderungen erfüllt sind, bevor Sie die Funktion ai.extract verwenden:

  • PostgreSQL-Version: Die Funktion ai.extract wird in PostgreSQL-Version 18 und höher unterstützt. Auf Ihrem AlloyDB-Cluster muss PostgreSQL 18 oder höher ausgeführt werden. Weitere Informationen finden Sie unter Unterstützte Datenbankversionen.
  • Erweiterungsversion: Prüfen Sie, ob Sie die aktuelle Version der google_ml_integration-Erweiterung (Version 1.6.1 oder höher) installiert haben und die Vorschaufunktion aktiviert ist.

Erweiterung aktivieren

Achten Sie darauf, dass Sie die aktuelle Version der google_ml_integration-Erweiterung (Version 1.6.1 oder höher) mit aktivierter Vorschaufunktion installiert haben.

Verwenden Sie den Befehl SET, um die Flags google_ml_integration.enable_ai_query_engine und google_ml_integration.enable_preview_ai_functions in AlloyDB zu aktivieren. Diese Flags steuern den Zugriff auf die KI-Abfrage-Engine und die Vorabversion von KI-Funktionen wie ai.extract. Der Standardwert dieser Flags ist off.

  1. Prüfen Sie, ob die Version der google_ml_integration-Erweiterung 1.6.1 oder höher ist. Prüfen Sie die Version mit dem folgenden Befehl:

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    
  2. Führen Sie eine oder mehrere der folgenden Aufgaben aus, um die Flags für Ihre aktuelle Sitzung, die gesamte Datenbank oder alle Datenbanken auf einer Instanz zu aktivieren:

    • Führen Sie den folgenden Befehl aus, um die Flags für Ihre aktuelle Sitzung zu aktivieren:

      SET google_ml_integration.enable_ai_query_engine = 'on';
      SET google_ml_integration.enable_preview_ai_functions = 'on';
      

      Für diese Änderung ist kein Neustart der Datenbank erforderlich.

    • Führen Sie den folgenden Befehl aus, um die Flags für eine bestimmte Datenbank dauerhaft zu aktivieren:

      ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
      ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_preview_ai_functions = 'on';
      
    • Wenn Sie die Flags für alle Datenbanken in einer Instanz aktivieren möchten, setzen Sie die Datenbank-Flags google_ml_integration.enable_ai_query_engine und google_ml_integration.enable_preview_ai_functions mit dem Befehl gcloud alloydb instances update auf on:

      gcloud alloydb instances update INSTANCE_ID           --database-flags google_ml_integration.enable_ai_query_engine=on,google_ml_integration.enable_preview_ai_functions=on           --region=REGION_ID           --cluster=CLUSTER_ID           --project=PROJECT_ID

      Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren.

Intelligentes Batching für KI-Funktionen aktivieren

Wenn Sie die Gesamtausführungszeit von Abfragen verkürzen möchten, wenn Sie den skalaren ai.extract über mehrere Zeilen hinweg ausführen, aktivieren Sie das intelligente Batching für KI-Funktionen, indem Sie das Datenbank-Flag google_ml_integration.enable_ai_function_acceleration auf on setzen:

SET google_ml_integration.enable_ai_function_acceleration = 'on';

Wenn dieses Flag aktiviert ist, gruppiert AlloyDB einzelne skalare ai.extract-Aufrufe im Hintergrund automatisch in intelligente Batches.

Beispieltabelle erstellen

Wenn Sie die Beispiele für die Funktion „extract“ in diesem Dokument nachvollziehen möchten, erstellen Sie eine Tabelle und füllen Sie sie mit den folgenden Beispieldaten.

CREATE TABLE IF NOT EXISTS sales_leads (
    lead_id INT PRIMARY KEY,
    raw_transcript TEXT,
    lead_status VARCHAR(20)
);

INSERT INTO sales_leads (lead_id, raw_transcript, lead_status) VALUES
(1, 'Spoke with Alex R., Director of IT at Example Organization. They are looking to upgrade their cloud storage.', 'new'),
(2, 'Call with Kai L., Senior DevOps Engineer at Example Organization. They are currently using MySQL and Redis. Interested in automating enterprise database backups, cross-region replication, and automated scaling.', 'new'),
(3, 'Meeting with Taylor K., VP of Engineering at Example Organization. They need a scalable managed PostgreSQL database for their analytics platform. Budget is approved for Q3 launch.', 'new');

Strukturierte Daten aus einem einzelnen String extrahieren

Wenn Sie strukturierte Details aus einer einzelnen Texteingabe extrahieren möchten, verwenden Sie die skalare Version von ai.extract. Weitere Informationen finden Sie in der Referenz zu ai.extract.

SELECT ai.extract(
  input => 'TEXT_CONTENT',
  output_schema => 'OUTPUT_SCHEMA',
  model_id => 'MODEL_ID' -- Optional. The default value is gemini-3.5-flash-lite.
);

Daten aus einer Tabelle extrahieren

Im folgenden Beispiel werden strukturierte Informationen aus der Tabellenspalte raw_transcript extrahiert:

SELECT
  lead_id,
  ai.extract(
    input => raw_transcript,
    output_schema => '{"contact_name": {"type": "string"}, "company_name": {"type": "string"}, "job_title": {"type": "string"}}'
   ) AS extracted_info
FROM
  sales_leads
WHERE
  lead_status = 'new';

Felder basierend auf dem bereitgestellten JSON-Schema extrahieren

Im folgenden Beispiel werden bestimmte Felder aus dem Eingabetext basierend auf dem bereitgestellten JSON-Schema extrahiert:

SELECT ai.extract(
  input => 'Spoke with Alex R., Director of IT at Example Organization. They are looking to upgrade their cloud storage.',
  output_schema => '{"contact_name": {"type": "string"}, "job_title": {"type": "string"}, "company_name": {"type": "string"}, "need": {"type": "string"}}'
);

Hier sehen Sie die Beispielausgabe:

{
  "contact_name": "Alex R.",
  "job_title": "Director of IT",
  "company_name": "Example Organization",
  "need": "upgrade cloud storage"
}

Felder anhand eines Prompts in natürlicher Sprache extrahieren

Im folgenden Beispiel werden Details zu Verkaufsleads mithilfe eines beschreibenden Textschemas extrahiert:

SELECT ai.extract(
  input => 'Meeting with Taylor K., VP of Engineering at Example Organization. They need a scalable managed PostgreSQL database for their analytics platform. Budget is approved for Q3 launch.',
  output_schema => 'Extract the following details as a clean, line-by-line list: Contact Name, Job Title, Company Name, Technical Requirement, Target Use Case, and Timeline.'
);

Hier sehen Sie die Beispielausgabe:

Contact Name: Taylor K.
Job Title: VP of Engineering
Company Name: Example Organization
Technical Requirement: Scalable managed PostgreSQL database
Target Use Case: Analytics platform
Timeline: Q3 launch

Felder mit Arrays extrahieren

Im folgenden Beispiel werden mehrere Werte basierend auf dem Ausgabeschema in Arrayfelder extrahiert:

SELECT ai.extract(
  input => 'Call with Kai L., Senior DevOps Engineer at Example Organization. They are currently using MySQL and Redis. Interested in automating enterprise database backups, cross-region replication, and automated scaling.',
  output_schema => '{"contact_name": {"type": "string"}, "company_name": {"type": "string"}, "current_technologies": {"type": "array", "items": {"type": "string"}}, "interested_features": {"type": "array", "items": {"type": "string"}}}'
);

Hier sehen Sie die Beispielausgabe:

{
  "contact_name": "Kai L.",
  "company_name": "Example Organization",
  "current_technologies": ["MySQL", "Redis"],
  "interested_features": ["enterprise database backups", "cross-region replication", "automated scaling"]
}

Strukturierte Daten in Batches extrahieren

Wenn Sie bei größeren Datasets eine schnellere Gesamtausführungszeit für Abfragen erreichen möchten, verwenden Sie die arraybasierte Version der Funktion, um mehrere Eingaben in einem einzigen Aufruf zu verarbeiten. Weitere Informationen finden Sie in der Referenz zu ai.extract.

SELECT ai.extract(
  inputs => TEXT[],
  output_schema => TEXT,
  batch_size => INT, -- Optional. The default value is 10.
  model_id => VARCHAR(100) -- Optional. The default value is gemini-3.5-flash-lite.
);

Im folgenden Beispiel werden strukturierte Details aus mehreren Datensätzen extrahiert:

SELECT
  ai.extract(
    inputs => array_agg(raw_transcript ORDER BY lead_id),
    output_schema => '{"contact_name": {"type": "string"}, "company_name": {"type": "string"}, "job_title": {"type": "string"}}',
    batch_size => 4
  )
FROM sales_leads;

Strukturierte Daten mit Cursorn extrahieren

Die cursorbasierte Funktion eignet sich gut für die Verarbeitung großer Datasets, da das System Daten in überschaubaren Batches durch das KI-Modell streamen kann, ohne dass alle Daten auf einmal in den Arbeitsspeicher geladen werden müssen. Weitere Informationen finden Sie in der Referenz zu ai.extract.

Die Funktionssignatur für die cursorbasierte Version von ai.extract sieht so aus:

CREATE OR REPLACE FUNCTION ai.extract(
    input_cursor REFCURSOR,
    output_schema TEXT,
    batch_size INT DEFAULT NULL,
    model_id VARCHAR(100) DEFAULT NULL)
  RETURNS REFCURSOR

Im folgenden Beispiel wird gezeigt, wie Sie der Funktion ai.extract mithilfe eines Cursors Zeile für Zeile Daten zuführen:

DO $$
DECLARE
    input_cur REFCURSOR;
    output_cur REFCURSOR;
    result_record RECORD;
BEGIN
    -- Open the input cursor with the data to process
    OPEN input_cur FOR
        SELECT raw_transcript
        FROM sales_leads
        WHERE lead_status = 'new';

    -- Call ai.extract passing the input cursor
    output_cur := ai.extract(
        input_cursor => input_cur,
        output_schema => '{"contact_name": "string", "company_name": "string", "job_title": "string"}',
        batch_size => 10
    );

    -- Loop through the output cursor (columns: input TEXT, output TEXT)
    LOOP
        FETCH output_cur INTO result_record;
        EXIT WHEN NOT FOUND;

        RAISE NOTICE 'Extracted Data: %', result_record.output;
    END LOOP;

    CLOSE input_cur;
    CLOSE output_cur;
END $$;

Nächste Schritte