In dieser Anleitung wird beschrieben, wie Sie die AlloyDB AI Natural Language API einrichten und verwenden . Sie erfahren, wie Sie die AlloyDB AI Natural Language API konfigurieren, damit Sie Fragen in natürlicher Sprache stellen und SQL-Abfragen und Ergebnisse erhalten können.
Die Beispiele in dieser Anleitung dienen nur zu Demonstrationszwecken.
Ziele
- Tabellen erstellen und befüllen sowie Kontext mithilfe der automatischen Generierung erstellen
- Erstellen Sie einen Wertindex für die Spalten in der Datenbank.
- Erstellen und konfigurieren Sie ein Objekt für die Konfiguration von natürlicher Sprache (
nl_config). - Erstellen Sie Vorlagen für eine Beispielabfrage in der Anwendung.
- Verwenden Sie die Funktion
get_sql(), um eine SQL-Abfrage zu erstellen, mit der eine Frage beantwortet wird. - Verwenden Sie die Funktion
execute_nl_query(), um eine Frage in natürlicher Sprache mithilfe der Datenbank zu beantworten.
Hinweise
Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind.
Abrechnung aktivieren
Wählen Sie in der Google Cloud -Console ein Projekt aus.
Die Abrechnung für Ihr Google Cloud Projekt muss aktiviert sein.
Datenbank installieren und Verbindung herstellen
Erforderliche Erweiterung aktivieren und installieren
Wenn Sie alloydb_ai_nl extension installieren und verwenden möchten, aktivieren Sie zuerst die Erweiterung, indem Sie den folgenden PostgreSQL-Befehl ausführen:
ALTER SYSTEM SET alloydb_ai_nl.enabled=on;
SELECT pg_reload_conf();
Führen Sie die folgende Abfrage aus, um die alloydb_ai_nl-Erweiterung zu installieren, die die AlloyDB AI Natural Language Support API ist:
CREATE EXTENSION alloydb_ai_nl cascade;
alloydb_ai_nl-Erweiterung aktualisieren
Wenn Sie die Erweiterung bereits installiert haben, führen Sie die folgende Anweisung aus, um sie auf die neueste Version zu aktualisieren:
ALTER EXTENSION alloydb_ai_nl UPDATE;
Schema und Tabellen für nla_demo erstellen
Jetzt erstellen Sie das Schema nla_demo und die Tabellen im Schema und füllen die Tabellen mit synthetischen Daten. Das bereitgestellte Schema und die Daten sind für die grundlegenden Vorgänge eines Online-Einzelhandelsunternehmens konzipiert. Mögliche Anwendungen erstrecken sich auf Kundenverwaltung, Analysen, Marketing und betriebliche Aspekte.
Die Beispieldaten zeigen, wie Sie AlloyDB AI Natural Language für Entwicklungs-, Test- und Demonstrationszwecke verwenden können, insbesondere für Funktionen wie Schnittstellen in natürlicher Sprache.
Erstellen Sie das Schema.
CREATE SCHEMA nla_demo;Tabellen in
nla_demo schemaerstellen In der Tabelle „addresses“ werden die Adressinformationen für Kunden und Bestellungen gespeichert.CREATE TABLE nla_demo.addresses ( address_id SERIAL PRIMARY KEY, street_address VARCHAR(255) NOT NULL, city VARCHAR(255) NOT NULL, country VARCHAR(255) ); ```Erstellen Sie die Tabelle
customers. In dieser Tabelle werden Kundeninformationen gespeichert, darunter die Kunden-ID, der Name, die Kontaktdaten, die Adressreferenz, das Geburtsdatum und die Erstellungszeit des Datensatzes.CREATE TABLE nla_demo.customers ( customer_id SERIAL PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, address_id INTEGER REFERENCES nla_demo.addresses(address_id), date_of_birth DATE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );Erstellen Sie die Tabelle
categories, in der Produktkategorien gespeichert werden.CREATE TABLE nla_demo.categories ( category_id INTEGER PRIMARY KEY, category_name VARCHAR(255) UNIQUE NOT NULL );Erstellen Sie die Tabelle
brands, in der Markennamen gespeichert werden.CREATE TABLE nla_demo.brands ( brand_id INTEGER PRIMARY KEY, brand_name VARCHAR(255) NOT NULL );Erstellen Sie die
products table, in der Produktinformationen wie Produkt-ID, Name, Beschreibung, Marke, Kategorieverknüpfung und Erstellungszeit des Datensatzes gespeichert werden.CREATE TABLE nla_demo.products ( product_id INTEGER PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT DEFAULT 'Not available', brand_id INTEGER REFERENCES nla_demo.brands(brand_id), category_id INTEGER REFERENCES nla_demo.categories(category_id), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, price DECIMAL(10, 2), description_embedding VECTOR(768) );Erstellen Sie
orders table. In dieser Tabelle werden Informationen zu Kundenbestellungen gespeichert, einschließlich Kunde, Datum, Gesamtbetrag, Versand- und Rechnungsadressen sowie Bestellstatus.CREATE TABLE nla_demo.orders ( order_id INTEGER PRIMARY KEY, customer_id INTEGER REFERENCES nla_demo.customers(customer_id), order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, total_amount DECIMAL(10, 2) NOT NULL, shipping_address_id INTEGER REFERENCES nla_demo.addresses(address_id), billing_address_id INTEGER REFERENCES nla_demo.addresses(address_id), order_status VARCHAR(50) );Erstellen Sie die Tabelle
order_items. In dieser Tabelle werden einzelne Artikel in einer Bestellung, Links zur Bestellung und zur Produktvariante sowie Menge und Preis angegeben.CREATE TABLE nla_demo.order_items ( order_item_id SERIAL PRIMARY KEY, order_id INTEGER REFERENCES nla_demo.orders(order_id), product_id INTEGER REFERENCES nla_demo.products(product_id), quantity INTEGER NOT NULL, price DECIMAL(10, 2) NOT NULL );
Tabellen im Schema „nla_demo“ mit Daten füllen
Füllen Sie die Tabelle
addressesmit der folgenden Abfrage:INSERT INTO nla_demo.addresses (street_address, city, country) VALUES ('1800 Amphibious Blvd', 'Mountain View', 'USA'), ('Avenida da Pastelaria, 1903', 'Lisbon', 'Portugal'), ('8 Rue du Nom Fictif 341', 'Paris', 'France');Füllen Sie die Tabelle
customersaus.INSERT INTO nla_demo.customers (first_name, last_name, email, address_id, date_of_birth) VALUES ('Alex', 'B.', 'alex.b@example.com', 1, '2003-02-20'), ('Amal', 'M.', 'amal.m@example.com', 2, '1998-11-08'), ('Dani', 'G.', 'dani.g@example.com', 3, '2002-07-25');Füllen Sie die Tabelle
categoriesaus.INSERT INTO nla_demo.categories (category_id, category_name) VALUES (1, 'Accessories'), (2, 'Apparel'), (3, 'Footwear'), (4, 'Swimwear');Füllen Sie die Tabelle
brandsaus.INSERT INTO nla_demo.brands (brand_id, brand_name) VALUES (1, 'CymbalPrime'), (2, 'CymbalPro'), (3, 'CymbalSports');Füllen Sie die Tabelle
productsaus.INSERT INTO nla_demo.products (product_id, brand_id, category_id, name, description, price) VALUES (1, 1, 2, 'Hoodie', 'A comfortable, casual sweatshirt with an attached hood.', 79.99), (2, 1, 3, 'Running Shoes', 'Lightweight, cushioned footwear designed for the impact of running.', 99.99), (3, 2, 4, 'Swimsuit', 'A garment designed for swimming or other water activities.', 20.00), (4, 3, 1, 'Tote Bag', 'A large, unfastened bag with two parallel handles.', 69.99), (5, 3, 3, 'CymbalShoe', 'Footwear from Cymbal, designed for your life''s rhythm.', 89.99); UPDATE nla_demo.products SET description_embedding = embedding('text-embedding-004', description);Füllen Sie die Tabelle
ordersaus.INSERT INTO nla_demo.orders (order_id, customer_id, total_amount, shipping_address_id, billing_address_id, order_status) VALUES (1, 1, 99.99, 1, 1, 'Shipped'), (2, 1, 69.99, 1, 1, 'Delivered'), (3, 2, 20.99, 2, 2, 'Processing'), (4, 3, 79.99, 3, 3, 'Shipped');Füllen Sie die Tabelle
order_itemsaus.INSERT INTO nla_demo.order_items (order_id, product_id, quantity, price) VALUES (1, 1, 1, 79.99), (1, 3, 1, 20.00), (2, 4, 1, 69.99), (3, 3, 1, 20.00), (4, 2, 1, 79.99);
Konfiguration für natürliche Sprache erstellen
Wenn Sie AlloyDB AI Natural Language verwenden möchten, muss AlloyDB AI für AlloyDB Omni für Container installiert sein.
Anschließend erstellen Sie eine Konfiguration und registrieren ein Schema.
g_alloydb_ai_nl.g_create_configuration erstellt das Modell.
Konfiguration für natürliche Sprache erstellen
SELECT alloydb_ai_nl.g_create_configuration( 'nla_demo_cfg' );Registrieren Sie Tabellen in der
nla_demo_cfg-Konfiguration.SELECT alloydb_ai_nl.g_manage_configuration( operation => 'register_table_view', configuration_id_in => 'nla_demo_cfg', table_views_in=>'{nla_demo.customers, nla_demo.addresses, nla_demo.brands, nla_demo.products, nla_demo.categories, nla_demo.orders, nla_demo.order_items}' );
Kontext für Tabellen und Spalten erstellen und anwenden
Damit Sie genaue Antworten auf Fragen in natürlicher Sprache erhalten, verwenden Sie die AlloyDB AI Natural Language API, um Kontext zu Tabellen, Ansichten und Spalten bereitzustellen. Mit der Funktion zur automatischen Kontexterstellung der AlloyDB AI Natural Language API können Sie Kontext aus Tabellen und Spalten erstellen und den Kontext als COMMENTS an Tabellen, Ansichten und Spalten anhängen.
Führen Sie den folgenden Befehl aus, um Schemakontexte für die Tabellen und ihre Spalten zu generieren, die in der
nla_demo_cfg-Konfiguration registriert sind:SELECT alloydb_ai_nl.generate_schema_context( 'nla_demo_cfg', TRUE );Mit der vorherigen Abfrage wird die Ansicht
alloydb_ai_nl.generated_schema_context_viewmit Kontext gefüllt. Wenn SieTRUEübergeben, wird der Kontext in dieser Ansicht aus vorherigen Ausführungen überschrieben.Führen Sie die folgende Abfrage aus, um den generierten Kontext für die Tabelle
nla_demo.productszu prüfen:SELECT object_context FROM alloydb_ai_nl.generated_schema_context_view WHERE schema_object = 'nla_demo.products';Der resultierende Kontext sieht etwa so aus:
The products table stores information about products, including their name, a brief description, the brand they belong to (referenced by brand_id), and the category they fall under (referenced by category_id). Each product has a unique identifier (product_id) and a timestamp indicating its creation time (created_at).So prüfen Sie den erstellten Kontext für eine Spalte wie
nla_demo.products.name:SELECT object_context FROM alloydb_ai_nl.generated_schema_context_view WHERE schema_object = 'nla_demo.products.name';Die Abfrageausgabe sieht in etwa so aus:
The name column in the nla_demo.products table contains the specific name or title of each product. This is a short, descriptive text string that clearly identifies the product, like "Hoodie," "Tote Bag," "Running Shoes," or "Swimsuit." It helps distinguish individual products within the broader context of their brand and category. The name column specifies the exact product. This column is essential for users and systems to identify and refer to specific products within the database.Sehen Sie sich den generierten Kontext in der Ansicht
alloydb_ai_nl.generated_schema_context_viewan und aktualisieren Sie den Kontext, der überarbeitet werden muss.SELECT alloydb_ai_nl.update_generated_relation_context( 'nla_demo.products', 'The "nla_demo.products" table stores product details such as ID, name, description, brand, category linkage, and record creation time.' ); SELECT alloydb_ai_nl.update_generated_column_context( 'nla_demo.products.name', 'The "name" column in the "nla_demo.products" table contains the specific name or title of each product.' );Wenden Sie den generierten Kontext an, den Sie den entsprechenden Objekten zuweisen möchten:
SELECT alloydb_ai_nl.apply_generated_relation_context( 'nla_demo.products', true ); SELECT alloydb_ai_nl.apply_generated_column_context( 'nla_demo.products.name', true );Die resultierenden Kontexteinträge in der
alloydb_ai_nl.generated_schema_context_view-Ansicht werden auf die entsprechenden Schemaobjekte angewendet und die Kommentare werden überschrieben.Wenden Sie den generierten Schemakontext an.
SELECT alloydb_ai_nl.apply_generated_schema_context( 'nla_demo_cfg', TRUE);Wenn Sie
TRUEübergeben, wird der vorhandene Kontext für Objekte überschrieben, die für „nla_demo_cfg“ registriert sind.
Wertindex erstellen
Die AlloyDB AI Natural Language API generiert mithilfe der Wertverknüpfung genaue SQL-Abfragen. Durch die Wertverknüpfung werden Wertformulierungen in natürlichsprachlichen Anweisungen mit vorab registrierten Konzepttypen und Spaltennamen verknüpft, wodurch die natürlichsprachliche Frage angereichert werden kann.
Die Frage „Gib mir den Preis eines Hoodies“ kann beispielsweise genauer beantwortet werden, wenn Hoodie mit dem Konzept product_name verknüpft ist, das wiederum mit nla_demo.products.name verknüpft ist.
Spalte.
Führen Sie die folgenden Abfragen aus, um den Konzepttyp
product_namezu definieren und der Spaltenla_demo.products.namezuzuordnen:SELECT alloydb_ai_nl.add_concept_type( concept_type_in => 'product_name', match_function_in => 'alloydb_ai_nl.get_concept_and_value_generic_entity_name', additional_info_in => '{ "description": "Concept type for product name.", "examples": "SELECT alloydb_ai_nl.get_concept_and_value_generic_entity_name(''Hoodie'')" }'::jsonb ); SELECT alloydb_ai_nl.associate_concept_type( 'nla_demo.products.name', 'product_name', 'nla_demo_cfg' );Um zu prüfen, ob der Konzepttyp
product_nameder Liste der Konzepttypen hinzugefügt wurde, führen Sie die folgende Abfrage aus. Das Ergebnis dieser Abfrage mussproduct_nameenthalten:SELECT alloydb_ai_nl.list_concept_types();Führen Sie die folgende Abfrage aus, um zu prüfen, ob die Spalte
nla_demo.products.namemit dem Konzepttypproduct_nameverknüpft ist:SELECT * FROM alloydb_ai_nl.value_index_columns WHERE column_names = 'nla_demo.products.name';Führen Sie die folgenden Abfragen aus, um den Konzepttyp
brand_namezu definieren und der Spaltenla_demo.brands.brand_namezuzuordnen:SELECT alloydb_ai_nl.add_concept_type( concept_type_in => 'brand_name', match_function_in => 'alloydb_ai_nl.get_concept_and_value_generic_entity_name', additional_info_in => '{ "description": "Concept type for brand name.", "examples": "SELECT alloydb_ai_nl.get_concept_and_value_generic_entity_name(''CymbalPrime'')" }'::jsonb ); SELECT alloydb_ai_nl.associate_concept_type( 'nla_demo.brands.brand_name', 'brand_name', 'nla_demo_cfg' );Nachdem Sie die Konzepttypen definiert und Spalten damit verknüpft haben, erstellen Sie einen Wertindex.
SELECT alloydb_ai_nl.create_value_index('nla_demo_cfg'); SELECT alloydb_ai_nl.refresh_value_index('nla_demo_cfg');
Konzepttypzuordnungen automatisch generieren
Mit AlloyDB AI Natural Language können Sie Assoziationen basierend auf den vorhandenen Konzepttypen automatisch generieren lassen, anstatt einen Konzepttyp manuell mit Spalten zu verknüpfen, z. B. durch manuelles Aufrufen von alloydb_ai_nl.associate_concept_type.
So erstellen Sie automatisch eine Zuordnung von Konzepttyp:
Assoziationen für alle Beziehungen im Bereich von
nla_demo_cfggenerieren:SELECT alloydb_ai_nl.generate_concept_type_associations('nla_demo_cfg');Sehen Sie sich die generierten Assoziationen an.
SELECT * from alloydb_ai_nl.generated_value_index_columns_view;Das Ergebnis sieht etwa so aus. Sowohl integrierte als auch nutzerdefinierte Konzepte werden berücksichtigt.
-[ RECORD 1 ]---+----------------------------------------------------------- id | 1 config | nla_demo_cfg column_names | nla_demo.addresses.city concept_type | city_name additional_info | {} -[ RECORD 2 ]---+----------------------------------------------------------- id | 2 config | nla_demo_cfg column_names | nla_demo.addresses.country concept_type | country_name additional_info | {} -[ RECORD 3 ]---+----------------------------------------------------------- id | 3 config | nla_demo_cfg column_names | nla_demo.customers.first_name,nla_demo.customers.last_name concept_type | full_person_name additional_info | {} -[ RECORD 4 ]---+----------------------------------------------------------- id | 4 config | nla_demo_cfg column_names | nla_demo.brands.brand_name concept_type | brand_name additional_info | {} -[ RECORD 5 ]---+----------------------------------------------------------- id | 5 config | nla_demo_cfg column_names | nla_demo.products.name concept_type | product_name additional_info | {} .... ```Optional: Aktualisieren oder entfernen Sie die generierten Zuordnungen.
-- Update, NULL means keeping the original value. SELECT alloydb_ai_nl.update_generated_concept_type_associations( id => 1, column_names => NULL, concept_type => 'generic_entity_name', additional_info => NULL ); -- Drop SELECT alloydb_ai_nl.drop_generated_concept_type_association(id => 1);Wenden Sie die generierten Zuordnungen an.
SELECT alloydb_ai_nl.apply_generated_concept_type_associations('nla_demo_cfg');Aktualisieren Sie den Wertindex, damit die Änderungen berücksichtigt werden.
SELECT alloydb_ai_nl.refresh_value_index('nla_demo_cfg');
Abfragevorlagen definieren
Sie können Vorlagen definieren, um die Qualität der Antworten zu verbessern, die von der AlloyDB AI Natural Language API generiert werden.
Wenn Sie Beispielvorlagen für geschäftskritische Fragen und erwartete Fragen hinzufügen möchten, für die eine hohe Genauigkeit erwartet wird, führen Sie die folgende Abfrage aus:
SELECT alloydb_ai_nl.add_template( nl_config_id => 'nla_demo_cfg', intent => 'List the first names and the last names of all customers who ordered Swimsuit.', sql => 'SELECT c.first_name, c.last_name FROM nla_demo.Customers c JOIN nla_demo.orders o ON c.customer_id = o.customer_id JOIN nla_demo.order_items oi ON o.order_id = oi.order_id JOIN nla_demo.products p ON oi.product_id = p.product_id AND p.name = ''Swimsuit''', sql_explanation => 'To answer this question, JOIN `nla_demo.Customers` with `nla_demo.orders` on having the same `customer_id`, and JOIN the result with nla_demo.order_items on having the same `order_id`. Then JOIN the result with `nla_demo.products` on having the same `product_id`, and filter rwos that with p.name = ''Swimsuit''. Return the `first_name` and the `last_name` of the customers with matching records.', check_intent => TRUE );Wenn Sie die Liste der hinzugefügten Vorlagen aufrufen möchten, fragen Sie die Ansicht
alloydb_ai_nl.template_store_viewab:SELECT nl, sql, intent, psql, pintent FROM alloydb_ai_nl.template_store_view WHERE config = 'nla_demo_cfg';Die folgende Ausgabe wird zurückgegeben:
nl | List the first names and the last names of all customers who ordered Swimsuit. sql | SELECT c.first_name, c.last_name | FROM nla_demo.Customers c | JOIN nla_demo.orders o ON c.customer_id = o.customer_id | JOIN nla_demo.order_items oi ON o.order_id = oi.order_id | JOIN nla_demo.products p ON oi.product_id = p.product_id | AND p.name = 'Swimsuit' intent | List the first names and the last names of all customers who ordered | Swimsuit. psql | SELECT c.first_name, c.last_name | FROM nla_demo.Customers c JOIN nla_demo.orders o | ON c.customer_id = o.customer_id | JOIN nla_demo.order_items oi ON o.order_id = oi.order_id | JOIN nla_demo.products p ON oi.product_id = p.product_id | AND p.name = $1 pintent | List the first names and the last names of all customers who ordered | $1.In dieser Vorlage ist der Wert, der dem Attribut
psqlentspricht, die parametrisierte SQL-Abfrage und der Wert für die Spaltepintentdie parametrisierte Intent-Anweisung. Die ID einer neu hinzugefügten Vorlage kann sich je nach den zuvor hinzugefügten Vorlagen unterscheiden. Vorlagen liefern sehr genaue Antworten auf Fragen.Führen Sie die folgende Beispielanweisung aus, um eine Vorlage zu erstellen, die die semantische Suche verwendet:
SELECT alloydb_ai_nl.add_template( nl_config_id => 'nla_demo_cfg', intent => 'List 3 products most similar to a Swimwear.', sql => $$SELECT name FROM nla_demo.products ORDER BY description_embedding <=> embedding('text-embedding-004', 'Swimwear')::vector$$, sql_explanation => $$To answer this question, ORDER products in `nla_demo.products` , based by their distance of the descrption_embedding of the product with the embedding of 'Swimwear'.$$, check_intent => TRUE );Mit der oben genannten Vorlage wird der Ansicht
alloydb_ai_nl.template_store_viewdie folgende Zeile hinzugefügt:nl | List 3 products most similar to a Swimwear. sql | SELECT name FROM nla_demo.products | ORDER BY description_embedding <=> | embedding('text-embedding-004', 'Swimwear')::vector intent | List 3 products most similar to a Swimwear. psql | SELECT name FROM nla_demo.products | ORDER BY description_embedding <=> | embedding('text-embedding-004', $1)::vector pintent | List 3 products most similar to a $1.
Abfragefragment definieren
Sie können Fragmente definieren, um die Qualität der Antworten zu verbessern, die von der AlloyDB AI Natural Language API generiert werden.
Führen Sie die folgende Abfrage aus, um ein Fragment für geschäftskritische Attribute und erwartete Bedingungen zu erstellen, für die eine hohe Genauigkeit erwartet wird:
SELECT alloydb_ai_nl.add_fragment(
nl_config_id => 'nla_demo_cfg',
table_aliases => ARRAY['nla_demo.products AS T'],
intent => 'luxury product',
fragment => $$description LIKE '%luxury%' OR description LIKE '%premium%' OR description LIKE '%exclusive%' OR description LIKE '%high-end%' OR description LIKE '%finest%' OR description LIKE '%elite%' OR description LIKE '%deluxe%'$$);
Wenn Sie die Liste der hinzugefügten Fragment-IDs aufrufen möchten, fragen Sie die Ansicht alloydb_ai_nl.fragment_store_view ab:
SELECT intent, fragment, pintent
FROM alloydb_ai_nl.fragment_store_view;
Die folgende Ausgabe wird zurückgegeben:
intent | luxury product
fragment | description LIKE '%luxury%' OR description LIKE '%premium%' OR description LIKE '%exclusive%' OR description LIKE '%high-end%' OR description LIKE '%finest%' OR description LIKE '%elite%' OR description LIKE '%deluxe%'
pintent | luxury product
SQL-Ergebnisse aus Fragen in natürlicher Sprache generieren
Wenn Sie die AlloyDB AI Natural Language API verwenden möchten, um SQL-Abfragen und Ergebnismengen zu erstellen, führen Sie die folgende Abfrage aus:
SELECT alloydb_ai_nl.get_sql( 'nla_demo_cfg', 'Find the customers who purchased Tote Bag.' ) ->> 'sql';Die folgende Ausgabe wird zurückgegeben:
SELECT DISTINCT "c"."first_name", "c"."last_name" FROM "nla_demo"."customers" AS "c" JOIN "nla_demo"."orders" AS "o" ON "c"."customer_id" = "o"."customer_id" JOIN "nla_demo"."order_items" AS "oi" ON "o"."order_id" = "oi"."order_id" JOIN "nla_demo"."products" AS "p" ON "oi"."product_id" = "p"."product_id" WHERE "p"."name" = 'Tote Bag';Die JSON-Ausgabe ist eine SQL-Abfrage, die die Vorlage verwendet, die Sie unter Abfragevorlage definieren hinzugefügt haben.
Wenn Sie die AlloyDB AI Natural Language API verwenden möchten, um SQL-Abfragen zu erstellen, führen Sie die folgende Abfrage aus:
SELECT alloydb_ai_nl.get_sql( 'nla_demo_cfg', 'List the maximum price of any CymbalShoe.' ) ->> 'sql';Die folgende Ausgabe wird zurückgegeben:
SELECT max("price") FROM "nla_demo"."products" WHERE "name" = 'CymbalShoe'Die AlloyDB AI Natural Language API erkennt, dass
CymbalShoeder Name des Produkts ist, indem sie den Wertindex verwendet. Führen Sie die folgende Abfrage aus und ersetzen SieCymbalShoedurch einen Markennamen (CymbalPrime):SELECT alloydb_ai_nl.get_sql( 'nla_demo_cfg', 'List the maximum price of any CymbalPrime.' ) ->> 'sql';Die folgende Ausgabe wird generiert:
SELECT max("price") FROM "nla_demo"."products" AS t1 JOIN "nla_demo"."brands" AS t2 ON t1."brand_id" = t2."brand_id" WHERE t2."brand_name" = 'CymbalPrime';AlloyDB AI verwendet den in Wertindex erstellen erstellten Wertindex, um
CymbalPrimein den Konzepttypbrand_nameaufzulösen, und verwendet die Spaltenla_demo.brands.brand_name, die mitbrand_nameverknüpft ist.Wenn Sie die AlloyDB AI Natural Language API verwenden möchten, um das Ergebnis einer Frage zu generieren, führen Sie die folgende Abfrage aus:
SELECT alloydb_ai_nl.execute_nl_query( 'nla_demo_cfg', 'Find the last name of the customers who live in Lisbon.' );Die folgende Ausgabe wird zurückgegeben:
execute_nl_query -------------------------- {"last_name":"M."}Wenn Sie die AlloyDB AI Natural Language API verwenden möchten, um SQL-Anweisungen zu erstellen, die die semantische Suche nutzen, führen Sie die folgende Abfrage aus:
SELECT alloydb_ai_nl.get_sql( 'nla_demo_cfg', 'List 2 products similar to a Tote Bag.');Die folgende SQL-Anweisung wird zurückgegeben:
SELECT name FROM nla_demo.products ORDER BY description_embedding <=> embedding( 'text-embedding-004', 'Tote Bag')::vector LIMIT 2;
SQL-Zusammenfassungen abrufen
Sie können eine Zusammenfassung der Ergebnisse aus einer Frage in natürlicher Sprache erstellen, die auf den in der Datenbank gespeicherten Daten basiert. So können Endnutzer Daten besser verstehen, indem sie direkt Fragen in natürlicher Sprache stellen.
Wenn Sie eine SQL-Zusammenfassung erhalten möchten, führen Sie die folgende Beispielabfrage aus:
SELECT
alloydb_ai_nl.get_sql_summary(
nl_config_id => 'nla_demo_cfg',
nl_question => 'which brands have the largest number of products.'
);
Diese Abfrage gibt ein JSON-Objekt als Ausgabe zurück, das in etwa so aussieht:
"answer": "The result set lists three brands: CymbalSports, CymbalPro, and CymbalPrime. Each brand is represented once, suggesting an equal distribution of products across these three brands within the dataset."
Bereinigen
Zur Bereinigung können Sie entweder die AlloyDB Omni-Instanz deinstallieren oder die Instanz beibehalten und die einzelnen Objekte löschen.
Objekte löschen
Sie können die Ressourcen beibehalten, die Sie unter Vorbereitung eingerichtet haben, und nur die Objekte löschen, die Sie in der Instanz erstellt haben.
Entfernen Sie die Vorlage, die Sie in Abfragevorlage definieren definiert haben.
SELECT alloydb_ai_nl.drop_template(id) FROM alloydb_ai_nl.template_store_view WHERE config = 'nla_demo_cfg';Entfernen Sie die automatisch generierten Konzeptzuordnungen, die in Automatische Zuordnungen von Konzepttypen generieren erstellt wurden.
SELECT alloydb_ai_nl.drop_generated_concept_type_association(id) FROM alloydb_ai_nl.generated_value_index_columns_view WHERE config = 'nla_demo_cfg';Entfernen Sie den Konzepttyp
product_name, den Sie in Wertindex erstellen definiert haben.SELECT alloydb_ai_nl.drop_concept_type('product_name');Aktualisieren Sie den Wertindex, nachdem Sie den Konzepttyp
product_nameentfernt haben.SELECT alloydb_ai_nl.refresh_value_index();Entfernen Sie die
nla_demo_cfg-Konfiguration, die Sie unter Konfiguration für natürliche Sprache erstellen erstellt haben.SELECT alloydb_ai_nl.g_manage_configuration( 'drop_configuration', 'nla_demo_cfg' );Entfernen Sie das
nla_demo-Schema und die Tabellen, die Sie innla_demo-Schema und ‑Tabellen erstellen und Tabellen imnla_demo-Schema mit Daten füllen erstellt und mit Daten gefüllt haben, indem Sie die folgende Abfrage ausführen:DROP SCHEMA nla_demo CASCADE;
Nächste Schritte
- Anwendungsfälle und wichtige Funktionen von AlloyDB AI für die Verarbeitung natürlicher Sprache
- SQL-Abfragen generieren, die Fragen in natürlicher Sprache beantworten: