A função ai.summarize usa modelos de linguagem grandes (LLMs, na sigla em inglês), como o Gemini, para reformular e reorganizar o texto de entrada na forma mais essencial. Essa função captura a tese principal de um documento, preservando o tom e a nuance originais do autor. Usando essa função, é possível extrair descobertas e conclusões importantes de conjuntos de dados enormes sem revisão manual e controlar o comprimento 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 do AlloyDB AI oferece suporte a vários casos de uso, incluindo, entre outros, os seguintes:
- Transcrições de reuniões: resuma o texto conversacional para se concentrar nas decisões e nas 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 requisitos a seguir antes de usar a função ai.summarize.
Ativar a extensão
Verifique se você tem a versão mais recente da extensão google_ml_integration.enable_preview_ai_functions (versão 1.5.7 ou mais recente) instalada com a funcionalidade de visualização ativada.
Para ativar a flag google_ml_integration.enable_preview_ai_functions no AlloyDB, use o comando SET. Essa flag controla o acesso a funções de IA de visualização, como ai.summarize.
Verifique se a
google_ml_integration extensioné a versão 1.5.7 ou mais recente. Para verificar a versão, execute o seguinte:SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';Se você precisar fazer upgrade para uma versão que inclua essas funções de visualização, chame o seguinte:
CALL google_ml.upgrade_to_preview_version();Ative a flag para a sessão atual ou para todo o banco de dados. Para ativar a flag da sessão atual, execute o seguinte:
SET google_ml_integration.enable_preview_ai_functions = '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(
prompt => 'TEXT_CONTENT',
model_id => 'MODEL_ID' -- Optional
);
Execute a seguinte consulta de exemplo para fornecer um resumo conciso das avaliações de filmes:
SELECT ai.summarize(review) FROM movie_reviews;
Confira abaixo um exemplo da 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 com eficiência, use a versão baseada em matriz.
SELECT ai.summarize(
prompts => TEXT[],
batch_size => INT, -- Optional. The default is 10.
model_id => VARCHAR(100) -- Optional. The default value is gemini-2.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(
prompts => array_agg( 'Please summarize this in max 10 words, review : ' || review
ORDER BY id),
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 DESC ;
Confira abaixo um exemplo da 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 processar com eficiência conjuntos de avaliações potencialmente grandes, alimentando-os em uma função de IA e processando os resultados um por um para armazená-los novamente no banco de dados.
O exemplo a seguir mostra como usar cursores com a função ai.summarize para processar com eficiência 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 processar conjuntos de dados grandes que podem ser muito grandes 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(
prompt TEXT,
input_cursor REFCURSOR,
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) e, em seguida, 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 prompt FROM movie_reviews ORDER BY id;
-- 2. Call the AI summarize function
cursor_response := ai.summarize(
prompt => 'Please summarize the following review in max 10 words: ',
input_cursor => review_cursor
);
-- 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;
Confira abaixo um exemplo da 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.
Ela agrega valores em um comando unificado para gerar um único resumo para todo o grupo.
A consulta SQL a seguir usa a função agregada ai.agg_summarize para gerar um resumo único e 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.
Confira abaixo um exemplo da 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."