A função ai.extract é uma ferramenta de IA integrada do AlloyDB que extrai
detalhes estruturados especificados de textos não estruturados com base em um esquema fornecido.
Ao incorporar esse recurso diretamente no banco de dados, o AlloyDB para PostgreSQL permite
processar dados não estruturados sem criar pipelines complexos de extração, transformação e
carregamento (ETL) ou integrações de serviços externos.
A função de extração de dados oferece os seguintes benefícios:
- Escalonabilidade: oferece suporte ao lote inteligente para funções de IA, também conhecido como aceleração de funções de IA, que é um recurso de otimização automática da execução de consultas na IA do AlloyDB que agrupa de forma transparente chamadas de funções de IA escalares individuais, linha por linha, em solicitações de modelo em lote em segundo plano durante a execução da consulta. Também oferece suporte ao processamento baseado em matrizes e cursores para processar milhares de linhas com eficiência.
- Abstração: fornece uma abstração de alto nível que gerencia automaticamente a invocação de modelos e a preparação de dados.
A função de extração de dados da IA do AlloyDB é compatível com vários casos de uso, incluindo os seguintes:
- Saúde: analise notas médicas de texto livre em campos de formato estruturado, como nomes de pacientes, sintomas e medicamentos.
- Imobiliário: transforme descrições de propriedades não estruturadas em pontos de dados específicos, como tipo de propriedade e número de quartos.
- Tecnologia jurídica: identifique e extraia automaticamente termos críticos, como legislação aplicável e limites de responsabilidade, de documentos jurídicos longos.
- Operações financeiras: processe o texto transcrito de faturas para extrair com precisão metadados e valores totais em um formato consistente.
Antes de começar
Verifique se você atende aos seguintes requisitos antes de usar a
função ai.extract:
- Versão do PostgreSQL: a função
ai.extracté compatível com o PostgreSQL versão 18 e mais recentes. Verifique se o cluster do AlloyDB está executando o PostgreSQL 18 ou mais recente. Para mais informações, consulte Versões de banco de dados compatíveis. - Versão da extensão: verifique se você tem a versão mais recente da extensão
google_ml_integration(versão1.6.1ou mais recente) instalada com a funcionalidade de pré-lançamento ativada.
Ativar a extensão
Verifique se você tem a versão mais recente da
extensão google_ml_integration (versão 1.6.1
ou mais recente) instalada com a funcionalidade de pré-lançamento ativada.
Para ativar as flags google_ml_integration.enable_ai_query_engine e
google_ml_integration.enable_preview_ai_functions no
AlloyDB, use o comando SET. Essas flags controlam o acesso ao
mecanismo de consulta de IA e às funções de IA em pré-lançamento, como ai.extract. O valor padrão dessas flags é off.
Verifique se a extensão
google_ml_integrationé da versão1.6.1ou mais recente. Verifique a versão executando o seguinte:SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';Para ativar as flags na sessão atual, em todo o banco de dados ou em todos os bancos de dados de uma instância, execute uma ou mais das seguintes tarefas:
Para ativar as flags na sessão atual, execute o seguinte:
SET google_ml_integration.enable_ai_query_engine = 'on'; SET google_ml_integration.enable_preview_ai_functions = 'on';Essa mudança não exige a reinicialização do banco de dados.
Para ativar as flags de forma persistente para um banco de dados específico, execute o seguinte:
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';Para ativar as flags em todos os bancos de dados de uma instância, defina as flags de banco de dados
google_ml_integration.enable_ai_query_engineegoogle_ml_integration.enable_preview_ai_functionscomoonusando o comandogcloud 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_IDPara mais informações, consulte Configurar flags de banco de dados.
Ativar o lote inteligente para funções de IA
Para acelerar o tempo total de execução de consultas ao executar ai.extract escalar
em várias linhas, ative o
lote inteligente para funções de IA
definindo a flag de banco de dados
google_ml_integration.enable_ai_function_acceleration como on:
SET google_ml_integration.enable_ai_function_acceleration = 'on';
Quando essa flag está ativada, o AlloyDB agrupa automaticamente
chamadas escalares individuais de ai.extract em lotes inteligentes em segundo plano.
Criar uma tabela de exemplo
Para seguir os exemplos de função de extração neste documento, crie uma tabela e preencha-a com os dados de amostra a seguir.
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');
Extrair dados estruturados de uma única string
Para extrair detalhes estruturados de uma única entrada de texto, use a versão escalar
de ai.extract. Para mais informações, consulte a referência de 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.
);
Extrair dados de uma tabela
O exemplo a seguir extrai informações estruturadas da coluna da tabela 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';
Extrair campos com base no esquema JSON fornecido
O exemplo a seguir extrai campos específicos do texto de entrada com base no esquema JSON fornecido:
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"}}'
);
Veja um exemplo de saída:
{
"contact_name": "Alex R.",
"job_title": "Director of IT",
"company_name": "Example Organization",
"need": "upgrade cloud storage"
}
Extrair campos com base em um comando de linguagem natural
O exemplo a seguir extrai detalhes de leads de vendas usando um esquema de texto descritivo:
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.'
);
Veja um exemplo de saída:
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
Extrair campos com matrizes
O exemplo a seguir extrai vários valores em campos de matriz com base no esquema de saída:
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"}}}'
);
Veja um exemplo de saída:
{
"contact_name": "Kai L.",
"company_name": "Example Organization",
"current_technologies": ["MySQL", "Redis"],
"interested_features": ["enterprise database backups", "cross-region replication", "automated scaling"]
}
Extrair dados estruturados em lotes
Para acelerar o tempo total de execução de consultas em conjuntos de dados maiores, use a
versão da função baseada em matriz para processar várias entradas em uma única chamada.
Para mais informações, consulte a
referência de 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.
);
O exemplo a seguir extrai detalhes estruturados de vários registros:
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;
Extrair dados estruturados usando cursores
A função baseada em cursor é adequada para processar grandes conjuntos de dados, porque
permite que o sistema transmita dados pelo modelo de IA em lotes gerenciáveis,
sem exigir que todos os dados sejam carregados na memória de uma só vez. Para mais informações, consulte a referência sobre ai.extract.
A assinatura da função para a versão baseada em cursor de ai.extract é a
seguinte:
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
O exemplo a seguir mostra como alimentar dados para a função ai.extract linha por linha usando um cursor:
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 $$;