Fungsi ai.extract adalah alat AlloyDB AI bawaan yang mengekstrak
detail terstruktur yang ditentukan dari teks tidak terstruktur berdasarkan skema yang disediakan.
Dengan menyematkan kemampuan ini langsung ke dalam database, AlloyDB untuk PostgreSQL memungkinkan Anda memproses data tidak terstruktur tanpa membangun pipeline Extract, Transform, and Load (ETL) yang kompleks atau integrasi layanan eksternal.
Fungsi ekstraksi data memberikan manfaat berikut:
- Skalabilitas: mendukung pengelompokan cerdas untuk fungsi AI —juga disebut sebagai akselerasi fungsi AI—yang merupakan fitur pengoptimalan eksekusi kueri otomatis di AlloyDB AI yang secara transparan mengelompokkan panggilan fungsi AI skalar baris demi baris ke dalam permintaan model batch di latar belakang selama eksekusi kueri. Juga mendukung pemrosesan berbasis array dan berbasis kursor untuk memproses ribuan baris secara efisien.
- Abstraksi: menyediakan abstraksi tingkat tinggi yang mengelola pemanggilan model dan persiapan data secara otomatis.
Fungsi ekstraksi data AlloyDB AI mendukung beberapa kasus penggunaan, termasuk berikut ini:
- Layanan kesehatan: mengurai catatan medis teks bebas ke dalam kolom format terstruktur seperti nama pasien, gejala, dan pengobatan.
- Real estate: mengubah deskripsi properti yang tidak terstruktur menjadi titik data tertentu seperti jenis properti dan jumlah kamar tidur.
- Teknologi hukum: mengidentifikasi dan mengambil istilah penting secara otomatis seperti hukum yang mengatur dan batas kewajiban dari dokumen hukum panjang.
- Operasi keuangan: memproses teks invoice yang ditranskripsikan untuk mengekstrak metadata dan jumlah total secara akurat ke dalam format yang konsisten.
Sebelum memulai
Pastikan Anda memenuhi persyaratan berikut sebelum menggunakan fungsi ai.extract:
- Versi PostgreSQL: Fungsi
ai.extractdidukung di PostgreSQL versi 18 dan yang lebih baru. Pastikan cluster AlloyDB Anda menjalankan PostgreSQL 18 atau yang lebih baru. Untuk mengetahui informasi selengkapnya, lihat Versi database yang didukung. - Versi ekstensi: Pastikan Anda telah menginstal ekstensi
google_ml_integrationversi terbaru (versi1.6.1atau yang lebih tinggi) dengan fungsi Pratinjau diaktifkan.
Mengaktifkan ekstensi
Pastikan Anda telah menginstal ekstensi google_ml_integration versi terbaru (versi 1.6.1 atau yang lebih tinggi) dengan fungsi Pratinjau diaktifkan.
Untuk mengaktifkan flag google_ml_integration.enable_ai_query_engine dan
google_ml_integration.enable_preview_ai_functions di
AlloyDB, gunakan perintah SET. Flag ini mengontrol akses ke
mesin kueri AI dan fungsi AI pratinjau seperti ai.extract. Nilai default
flag ini adalah off.
Pastikan ekstensi
google_ml_integrationAnda adalah versi1.6.1atau yang lebih tinggi. Periksa versi dengan menjalankan perintah berikut:SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';Untuk mengaktifkan flag untuk sesi Anda saat ini, seluruh database, atau semua database pada instance, lakukan satu atau beberapa tugas berikut:
Untuk mengaktifkan flag untuk sesi Anda saat ini, jalankan perintah berikut:
SET google_ml_integration.enable_ai_query_engine = 'on'; SET google_ml_integration.enable_preview_ai_functions = 'on';Perubahan ini tidak memerlukan mulai ulang database.
Untuk mengaktifkan flag secara persisten untuk database tertentu, jalankan perintah berikut:
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';Untuk mengaktifkan flag bagi semua database di instance, tetapkan flag database
google_ml_integration.enable_ai_query_enginedangoogle_ml_integration.enable_preview_ai_functionskeonmenggunakan perintahgcloud alloydb instances update: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_IDUntuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag database.
Mengaktifkan pengelompokan cerdas untuk fungsi AI
Untuk mencapai total waktu eksekusi kueri yang lebih cepat saat Anda menjalankan ai.extract skalar di beberapa baris, aktifkan pengelompokan cerdas untuk fungsi AI dengan menetapkan flag database google_ml_integration.enable_ai_function_acceleration ke on:
SET google_ml_integration.enable_ai_function_acceleration = 'on';
Jika flag ini diaktifkan, AlloyDB akan otomatis mengelompokkan
panggilan ai.extract skalar individual ke dalam batch cerdas di latar belakang.
Membuat tabel contoh
Untuk mengikuti contoh fungsi extract dalam dokumen ini, buat tabel dan isi dengan contoh data berikut.
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');
Mengekstrak data terstruktur dari satu string
Untuk mengekstrak detail terstruktur dari satu input teks, gunakan versi skalar
ai.extract. Untuk informasi selengkapnya, lihat
referensi 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.
);
Mengekstrak data dari tabel
Contoh berikut mengekstrak informasi terstruktur dari kolom tabel raw_transcript:
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';
Mengekstrak kolom berdasarkan skema JSON yang disediakan
Contoh berikut mengekstrak kolom tertentu dari teks input berdasarkan skema JSON yang disediakan:
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"}}'
);
Berikut adalah contoh output:
{
"contact_name": "Alex R.",
"job_title": "Director of IT",
"company_name": "Example Organization",
"need": "upgrade cloud storage"
}
Mengekstrak kolom berdasarkan perintah bahasa alami
Contoh berikut mengekstrak detail prospek penjualan menggunakan skema teks deskriptif:
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.'
);
Berikut adalah contoh output:
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
Mengekstrak kolom dengan array
Contoh berikut mengekstrak beberapa nilai ke dalam kolom array berdasarkan skema output:
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"}}}'
);
Berikut adalah contoh output:
{
"contact_name": "Kai L.",
"company_name": "Example Organization",
"current_technologies": ["MySQL", "Redis"],
"interested_features": ["enterprise database backups", "cross-region replication", "automated scaling"]
}
Mengekstrak data terstruktur dalam batch
Untuk mencapai total waktu eksekusi kueri yang lebih cepat pada set data yang lebih besar, gunakan versi fungsi berbasis array untuk memproses beberapa input dalam satu panggilan.
Untuk informasi selengkapnya, lihat referensi 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.
);
Contoh berikut mengekstrak detail terstruktur dari beberapa data:
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;
Mengekstrak data terstruktur menggunakan kursor
Fungsi berbasis kursor sangat cocok untuk memproses set data besar, karena
memungkinkan sistem melakukan streaming data melalui model AI dalam batch yang dapat dikelola
tanpa mengharuskan semua data dimuat ke dalam memori sekaligus. Untuk informasi
selengkapnya, lihat
referensi ai.extract.
Tanda tangan fungsi untuk versi ai.extract berbasis kursor adalah sebagai
berikut:
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
Contoh berikut menunjukkan cara memasukkan data ke fungsi ai.extract baris demi baris menggunakan kursor:
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 $$;