A extensão rds_ai para RDS for PostgreSQL integra modelos avançados do Alibaba Cloud Model Studio, incluindo Qwen, modelos de embedding de texto de uso geral e modelos de reranking de texto de uso geral. Este tópico mostra como usar a extensão rds_ai para implementar a geração aumentada por recuperação (RAG) em um banco de dados usando apenas SQL.
SELECT *
FROM rds_ai.rag (
'Tell me about the origin of the PostgreSQL database.',
'public',
'chunk',
'text',
'embedding'
);
Pré-requisitos
-
Certifique-se de que sua instância do RDS for PostgreSQL atenda aos requisitos de versão na tabela a seguir:
Versão principal
Versão secundária
PostgreSQL 16
20241230 ou posterior
PostgreSQL 14, PostgreSQL 15 e PostgreSQL 17
20250430 ou posterior
PostgreSQL 18
20251130 ou posterior
Para atualizar a versão secundária do mecanismo, consulte {{XREF_0}}.
Você precisa ter uma conta privilegiada para o RDS for PostgreSQL. Para obter instruções sobre como criar uma conta privilegiada, consulte {{XREF_1}}.
Ative o Alibaba Cloud Model Studio e obtenha uma chave de API. Para mais informações, consulte {{XREF_2}}.
Configure a rede para permitir que sua instância do RDS for PostgreSQL acesse modelos externos. Para mais informações, consulte {{XREF_3}}.
Visão geral da solução
Esta solução usa a extensão rds_ai para implementar a geração aumentada por recuperação (RAG) dentro do seu banco de dados com comandos SQL simples. Essa abordagem é ideal para casos de uso menos complexos, permitindo a criação de uma aplicação RAG sem a necessidade de escrever código de aplicação.
Não é necessário gerenciar frameworks RAG complexos, ambientes de execução ou outros componentes, nem ter um conhecimento profundo sobre RAG. Execute operações de RAG usando instruções SQL simples, o que reduz a barreira técnica e aumenta a eficiência. Para mais informações, consulte {{XREF_4}}.
Esta solução segue estas etapas:
Divisão de documentos: Use SQL para dividir o conteúdo do seu documento em chunks menores.
Embedding de texto: Use a extensão rds_ai para converter texto em vetores.
Recuperação multimodal: Use a extensão rds_ai para recuperar informações usando vários métodos, como recuperação baseada em embedding e recuperação baseada em palavras-chave.
Reranking: Use a extensão rds_ai para reclassificar os resultados recuperados e melhorar sua relevância.
Invocação de modelo de linguagem grande (LLM): Use a extensão rds_ai para chamar um serviço de LLM e sintetizar uma resposta para a sua pergunta.
Etapa 1: Instale e configure as extensões
-
Instale as extensões rds_ai e pg_jieba. A extensão pg_jieba fornece segmentação de palavras em chinês. Para mais informações, consulte {{XREF_5}}.
Acesse a página Instances. Na barra de navegação superior, selecione uma região. Em seguida, clique no ID da instância de destino.
No painel de navegação à esquerda, clique em Plug-ins.
Na aba Extension Marketplace, localize a extensão rds_ai e clique em Install.
Na caixa de diálogo exibida, selecione o banco de dados e a conta de destino e clique em Install para instalar a extensão no banco de dados.
-
Aguarde o status da instância mudar de Maintaining Instance para Running. Em seguida, repita as etapas anteriores para instalar a extensão pg_jieba.
NotaA instalação leva cerca de um minuto. Atualize a página para verificar o status da instância.
-
{{XREF_6}} e configure a extensão rds_ai no schema public do banco de dados de destino.
-
Defina a chave de API para todos os modelos padrão.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' ); -
A extensão rds_ai usa a extensão pgsql-http para chamar modelos remotamente. Defina os seguintes parâmetros de tempo limite para interromper chamadas de longa duração.
ImportanteEstas são configurações de nível de sessão e devem ser reconfiguradas para cada nova sessão.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' );
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' );Após conectar a VPC da sua instância do RDS for PostgreSQL ao Alibaba Cloud Model Studio via PrivateLink, consulte {{XREF_7}} para obter as URLs dos modelos. Por exemplo, se a sua VPC estiver na região China (Beijing), substitua o nome de domínio público
dashscope.aliyuncs.comemhttps://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generationpelo seu nome de domínio de serviço personalizado, comovpc-cn-beijing.dashscope.aliyuncs.com.A seguinte instrução SQL fornece um exemplo de como atualizar as URLs para vários modelos:
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' ); -
Etapa 2: Prepare os dados para RAG
Insira os dados dos documentos da base de conhecimento em um banco de dados usando instruções SQL. Durante esse processo, preste atenção especial ao escape de texto. Use uma ferramenta de escape para lidar com isso. Por exemplo, um caractere de nova linha é escapado como \n.
-
Crie tabelas e índices de teste.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' ); -
Crie a função split_text para dividir textos longos. Essa função usa um comprimento fixo de caracteres para a divisão e define um comprimento de sobreposição entre dois chunks consecutivos. Para métodos de divisão mais complexos, recomendamos o uso de um framework especializado em divisão de texto.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' ); -
Crie triggers para preencher automaticamente a tabela chunk quando documentos forem inseridos na tabela doc.
Se os seus cenários de processamento de documentos e chunking forem complexos, consulte {{XREF_8}} para implementar embedding de texto em lote.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' ); -
Insira os dados dos documentos da base de conhecimento. Por exemplo:
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' ); -
Visualize a tabela chunk. Cada linha contém um chunk de texto do documento original, juntamente com seu embedding e tsvector gerados automaticamente.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' );
Etapa 3: Converta documentos em embeddings
Pule esta etapa se já tiver criado triggers para atualizar automaticamente a tabela chunk quando dados forem inseridos na tabela doc.
Se os seus cenários de processamento de documentos e chunking forem complexos, recomendamos o uso de um framework RAG como o LangChain para processamento programático. Execute operações de embedding em uma tabela chunk existente no banco de dados. Esta etapa descreve como realizar o embedding de texto usando chamadas individuais para a função rds_ai.embed ou chamadas em lote para uma função personalizada.
-
Chamadas individuais
Use a função rds_ai.embed para converter o texto em cada registro da tabela chunk em uma representação vetorial e armazene esses vetores na coluna embedding.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' ); -
Chamadas em lote
-
Adicione um modelo personalizado text-embedding-v3-batch para chamadas em lote.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' ); -
Defina a chave de API para o novo modelo.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' ); -
Teste o modelo.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' );
-
As chamadas em lote são significativamente mais rápidas, porém mais complexas de implementar. No entanto, para simplificar, recomendamos começar com chamadas individuais. A melhor abordagem depende dos seus resultados de teste.
SELECT *
FROM rds_ai.rag (
'Tell me about the origin of the PostgreSQL database.',
'public',
'chunk',
'text',
'embedding'
);
Etapa 4: Realize a recuperação multimodal
O exemplo a seguir demonstra a recuperação multimodal, que utiliza tanto a recuperação baseada em palavras-chave quanto a baseada em embedding. Se quiser usar apenas a recuperação baseada em embedding, recomendamos chamar diretamente a função rds_ai.retrieve.
SELECT *
FROM rds_ai.rag (
'Tell me about the origin of the PostgreSQL database.',
'public',
'chunk',
'text',
'embedding'
);
Teste a recuperação multimodal.
SELECT *
FROM rds_ai.rag (
'Tell me about the origin of the PostgreSQL database.',
'public',
'chunk',
'text',
'embedding'
);
Etapa 5: Reclassifique os resultados
Recuperação multimodal
Esta etapa descreve dois métodos para reclassificar resultados: usar a função rds_ai.rank e usar uma função de Reciprocal Rank Fusion (RRF).
Usar a função rds_ai.rank
SELECT *
FROM rds_ai.rag (
'Tell me about the origin of the PostgreSQL database.',
'public',
'chunk',
'text',
'embedding'
);
Usar a função RRF
SELECT *
FROM rds_ai.rag (
'Tell me about the origin of the PostgreSQL database.',
'public',
'chunk',
'text',
'embedding'
);
Chame a função para reclassificar os resultados.
SELECT *
FROM rds_ai.rag (
'Tell me about the origin of the PostgreSQL database.',
'public',
'chunk',
'text',
'embedding'
);
Recuperação por embedding
Se você usar a recuperação baseada em embedding e quiser realizar uma reclassificação refinada com a função rank, execute a seguinte instrução SQL:
SELECT *
FROM rds_ai.rag (
'Tell me about the origin of the PostgreSQL database.',
'public',
'chunk',
'text',
'embedding'
);
Etapa 6: Gere a resposta
Recuperação multimodal
-
Crie a função escape_for_json. Ao chamar a função rds_ai.prompt, os parâmetros são montados no formato JSON e enviados via HTTP para o serviço Alibaba Cloud Model Studio. Portanto, é necessário escapar caracteres especiais, como novas linhas, na sua entrada de texto.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' ); -
Crie a função RAG. Este exemplo usa a recuperação multimodal com a função rds_ai.rank.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' ); -
Chame a função RAG para retornar o resultado.
SELECT * FROM rds_ai.rag ( 'Tell me about the origin of the PostgreSQL database.', 'public', 'chunk', 'text', 'embedding' );
Recuperação por embedding
Para a recuperação baseada em embedding, chame diretamente a função rds_ai.rag.
SELECT *
FROM rds_ai.rag (
'Tell me about the origin of the PostgreSQL database.',
'public',
'chunk',
'text',
'embedding'
);