A função ai.summarize usa modelos de linguagem grandes (LLMs), como o Gemini, para reformular
e reorganizar o texto de entrada em sua forma mais essencial. Essa função
captura a tese principal de um documento, preservando o tom e as nuances
originais do autor. Com essa função, é possível extrair as principais descobertas e
conclusões de conjuntos de dados imensos sem revisão manual e controlar o tamanho da saída
especificando restrições como contagem de palavras ou limites de frases no
comando. Também é possível usar o processamento em lote ou snapshots baseados em cursor para processar
milhões de linhas de forma assíncrona.
A função de resumo de conteúdo de IA do AlloyDB é compatível com vários casos de uso, incluindo, mas não se limitando aos seguintes:
Transcrição de reuniões: resuma o texto da conversa para focar nas decisões e ações necessárias.
Documentação técnica: condense metodologias, resultados e implicações complexas em visões gerais de alto nível.
Registros de suporte ao cliente: agregue várias avaliações de usuários ou tíquetes de suporte em um único resumo unificado de problemas comuns.
Antes de começar
Verifique se você atende aos seguintes requisitos antes de usar a função
ai.summarize.
Ativar a extensão
Verifique se você tem a extensão google_ml_integration (versão 1.6.4 ou
mais recente) instalada com o mecanismo de consulta de IA ativado.
Para ativar a flag google_ml_integration.enable_ai_query_engine no AlloyDB Omni,
use o comando SET. Essa flag controla o acesso a funções de IA, como
ai.summarize.
Verifique se a extensão
google_ml_integrationé a versão 1.6.4 ou mais recente. Para verificar a versão, execute o seguinte:SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';Se você precisar atualizar a extensão, execute o seguinte comando:
ALTER EXTENSION google_ml_integration UPDATE;Ative a flag para a sessão atual ou para todo o banco de dados. Para ativar a flag na sessão atual, execute o seguinte:
SET google_ml_integration.enable_ai_query_engine = 'on';Essa mudança não exige a reinicialização do banco de dados. O valor padrão dessa flag é
off.
Criar uma tabela de exemplo
Para seguir os exemplos de função de resumo neste documento, crie uma tabela e preencha-a com as seguintes avaliações de filmes.
CREATE TABLE movie_reviews (
id INT PRIMARY KEY,
movie_id INT,
review TEXT
);
INSERT INTO movie_reviews (id, movie_id, review) VALUES
(1, 1, 'The Midnight Echo represents a masterclass in atmospheric tension. The cinematography captures the isolation of the frozen tundra perfectly while the lead actor delivers a superb performance. Although the pacing slows down significantly in the second act, the final twist remains unexpected. This is a truly remarkable experience.'),
(2, 1, 'Neon Velocity delivers high octane action but lacks the narrative depth required to make the stakes feel real. The visual effects are undeniably stunning, creating a vibrant cyberpunk world that pops off the screen. However, the dialogue feels cliched and the secondary characters are thin. This film is a shallow blockbuster.');
-- more rows are present in this table
Resumir uma única string
Para processar um único bloco de texto, use a versão escalar de ai.summarize.
SELECT ai.summarize(
input => 'TEXT_CONTENT',
additional_instructions => 'ADDITIONAL_INSTRUCTIONS', -- Optional
model_id => 'MODEL_ID' -- Optional
);
Execute o exemplo de consulta a seguir para fornecer um resumo conciso das avaliações de filmes:
SELECT id, ai.summarize(review) AS summary FROM movie_reviews;
Veja um exemplo de saída:
id | summary
----+-----------------------------------------------------------
1 | "Atmospheric thriller with a haunting performance and shocking twist."
2 | "Visually stunning cyberpunk action film lacks narrative depth."
...
Resumir em lotes
Para processar vários registros de forma eficiente, use a versão baseada em matriz.
SELECT ai.summarize(
inputs => TEXT[],
additional_instructions => TEXT, -- Optional
batch_size => INT, -- Optional. The default is 10.
model_id => VARCHAR(100) -- Optional. The default value is gemini-3.5-flash-lite.
);
O exemplo a seguir mostra como usar a versão baseada em matriz da função ai.summarize para processar com eficiência vários registros de texto em uma única chamada.
WITH summarized_results AS (
SELECT
ARRAY_AGG(id ORDER BY id) as ids,
ai.summarize(
inputs => array_agg(review ORDER BY id),
additional_instructions => 'Summarize the following review in max 10 words',
batch_size => 15) as summaries
FROM movie_reviews
),
correlated_results AS (
SELECT ids[i] as ID, summaries[i] as summary
FROM summarized_results,
generate_series(1, array_length(ids, 1)) AS i
)
SELECT movie_reviews.id, correlated_results.summary as summary
FROM movie_reviews
JOIN correlated_results ON movie_reviews.id = correlated_results.id
ORDER BY movie_reviews.id;
Veja um exemplo de saída:
id | summary
---+----------------------------------------------------------------------------
1 | "Masterclass in tension, haunting performance with a twist."
2 | "High octane action, stunning visuals, shallow blockbuster."
3 | "Gentle, moving exploration of emotional honesty."
Resumir usando cursores
É possível usar cursores para lidar de forma eficiente com conjuntos potencialmente grandes de avaliações, alimentando-os em uma função de IA e processando os resultados um por um para armazená-los de volta no banco de dados.
O exemplo a seguir mostra como usar cursores com a função ai.summarize
para processar com eficiência as linhas da tabela movie_reviews, gerar um resumo
para cada avaliação e armazenar esses resumos em uma nova tabela chamada review_summaries.
Essa abordagem baseada em cursor é útil para lidar com grandes conjuntos de dados que podem ser
grandes demais para serem processados em um único lote ou caber na memória de uma só vez.
O parâmetro input_cursor usa um REFCURSOR. Isso significa que você precisa fornecer
um nome de cursor, que funciona como um ponteiro para os resultados de uma consulta SQL. A
função ai.summarize busca dados desse cursor para usar como entrada para
o resumo.
CREATE OR REPLACE FUNCTION ai.summarize(
input_cursor REFCURSOR,
additional_instructions TEXT DEFAULT NULL,
batch_size INT DEFAULT NULL,
model_id VARCHAR(100) DEFAULT NULL)
RETURNS REFCURSOR
O exemplo a seguir cria uma tabela review_summaries (se necessário),
itera pelas avaliações de filmes, gera um resumo conciso para cada uma usando uma
função de IA e armazena os resumos vinculados aos IDs de avaliação originais na
tabela.
-- Create a table to store the results
CREATE TABLE IF NOT EXISTS review_summaries (
review_id INT,
summary_text TEXT
);
DO $$
DECLARE
-- Use descriptive cursor and variable names
review_cursor REFCURSOR;
result_record RECORD;
cursor_response REFCURSOR;
id_array INT[];
idx INT := 1;
BEGIN
-- 1. Open cursor for the input text
OPEN review_cursor FOR
SELECT review AS input FROM movie_reviews ORDER BY id;
-- 2. Call the AI summarize function
cursor_response := ai.summarize(
input_cursor => review_cursor,
additional_instructions => 'Summarize the following review in max 10 words: '
);
-- 3. Map IDs into an array to maintain relational integrity during the loop
SELECT ARRAY_AGG(id ORDER BY id) INTO id_array FROM movie_reviews;
-- 4. Iterate through AI results and insert into the results table
LOOP
FETCH cursor_response INTO result_record;
EXIT WHEN NOT FOUND;
INSERT INTO review_summaries (review_id, summary_text)
VALUES (id_array[idx], result_record.output);
idx := idx + 1;
END LOOP;
-- 5. Clean up cursors
CLOSE review_cursor;
CLOSE cursor_response;
END;
$$;
-- Verify results
SELECT * FROM review_summaries;
Veja um exemplo de saída:
review_id | summary_text
-----------+---------------------------------------------------------------------------
1 | "Masterclass in atmospheric tension with haunting performance, devastating twist."
2 | "High octane action, stunning visuals, but shallow blockbuster."
3 | "Gentle, moving exploration of grief with poetic screenplay."
Resumo agregado em linhas
A função ai.agg_summarize opera em várias linhas de uma coluna.
Ele agrega valores em um comando unificado para gerar um único resumo para todo o grupo.
A consulta SQL a seguir usa a função de agregação ai.agg_summarize para gerar
um único resumo unificado para cada movie_id com base em todas as avaliações na
tabela movie_reviews.
select ai.agg_summarize(review) from movie_reviews group by movie_id;
Ao contrário de ai.summarize, que resume cada linha individualmente, ai.agg_summarize
combina o texto de várias linhas em uma única entrada para produzir um
resumo consolidado para todo o grupo de linhas.
Veja um exemplo de saída:
agg_summarize
"The Midnight Echo is a masterclass in atmospheric tension, featuring haunting performances and stunning cinematography, though its pacing falters in the second act before a final twist. Neon Velocity offers stunning visual effects and high-octane action within a vibrant cyberpunk world, but suffers from shallow narrative depth, cliched dialogue, and underdeveloped characters. Garden of Whispers is a gentle, moving, and emotionally honest exploration of and life, characterized by poetic screenwriting and natural performances. Shadow Protocol ambitiously attempts to reinvent the spy thriller with a non-linear narrative and precise action, but ultimately confuses the audience and presents a derivative central mystery. The Last Alchemist uniquely blends historical drama with subtle fantasy, boasting meticulous production design and electric chemistry between its protagonists."