Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Vector generation (rds_embedding)

Última atualização: Jun 26, 2026

Ao construir pipelines de busca semântica ou geração aumentada por recuperação (RAG), a criação de embeddings de texto geralmente exige um serviço externo ao banco de dados. A extensão rds_embedding permite chamar um modelo de embedding externo diretamente do ApsaraDB RDS for PostgreSQL, armazenar os vetores resultantes junto aos dados e executar consultas de similaridade de cosseno, tudo dentro do próprio banco de dados.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Uma instância RDS com PostgreSQL 14 ou superior

  • Para PostgreSQL 17: versão secundária do mecanismo 20241030 ou posterior. Para atualizar, consulte Atualizar a versão secundária do mecanismo

  • Uma chave de API do Alibaba Cloud Model Studio. Para obter uma, consulte Obter sua chave de API

  • Um NAT Gateway configurado para a Virtual Private Cloud (VPC) onde a instância RDS está em execução. Instâncias RDS PostgreSQL não acessam a internet por padrão; portanto, é necessário um NAT Gateway para chamar modelos de embedding externos

    Etapas de configuração do NAT gateway

    Etapa 1: Crie um NAT gateway de internet

    1. Faça logon no console do NAT Gateway.

    2. Na página Internet NAT Gateway, clique em Create Internet NAT Gateway.

    3. Se esta for a primeira vez que você cria um NAT gateway de internet, clique em Create Service-Linked Role na seção Create Service-Linked Role.

    4. Na página de compra, configure os parâmetros a seguir e clique em Buy Now.

      Nota

      Para a lista completa de parâmetros, consulte Usar o recurso SNAT de um NAT gateway de internet para acessar a internet.

      Parâmetro

      Descrição

      Region

      Selecione a mesma região da instância RDS.

      VPC

      Selecione a mesma VPC da instância RDS. Localize a VPC na página Database Connection do console do ApsaraDB RDS.

      Associate vSwitch

      Selecione o mesmo vSwitch da instância RDS. Localize o vSwitch na página Database Connection do console do ApsaraDB RDS.

      Access Mode

      Selecione Configure Later.

    5. Na página Confirm, revise os detalhes, marque a caixa de seleção dos Termos de Serviço e clique em Confirm. O gateway aparecerá na página Internet NAT Gateway.

      Crie NAT gateway

    Etapa 2: Associar um Elastic IP Address (EIP) ao gateway

    1. Na página Internet NAT Gateway, clique no ID do gateway para abrir a aba Basic Information.

    2. Na aba Associated Elastic IP Address, clique em Bind Elastic IP Address.

    3. Na caixa de diálogo Associate EIP, selecione Purchase and Associate EIP.

      Bind EIP

    4. Clique em OK. O EIP aparecerá na aba Associated Elastic IP Address.

      Bound EIP

    Etapa 3: Crie uma entrada SNAT

    1. Na página Internet NAT Gateway, clique no ID do gateway para abrir a aba Basic Information.

    2. Na aba SNAT Management, clique em Create SNAT Entry.

    3. Na página Create SNAT Entry, configure os parâmetros a seguir e clique em OK. A entrada SNAT aparecerá na seção SNAT Entry List.

      Parâmetro

      Descrição

      SNAT Entry

      Selecione Specify vSwitch para permitir que apenas instâncias conectadas ao vSwitch selecionado acessem a internet.

      Select vSwitch

      Selecione o vSwitch da instância RDS.

      Select EIP

      Selecione um ou mais EIPs para acessar a internet. Neste exemplo, seleciona-se um único EIP na lista suspensa.

      SNAT entry

Nota

Além do modelo text-embedding-v3 usado neste tópico, é possível registrar outros modelos de embedding com rds_embedding.add_model(). Para mais detalhes, consulte rds_embedding.add_model().

Ative a extensão

Execute os comandos abaixo com uma conta privilegiada. Ative primeiro a extensão vector, pois ela fornece o tipo de dado vetorial e as operações das quais a rds_embedding depende.

CREATE EXTENSION vector;
CREATE EXTENSION rds_embedding;

Para desativar as extensões:

DROP EXTENSION rds_embedding;
DROP EXTENSION vector;

Gerar e consultar embeddings

O exemplo a seguir usa o modelo text-embedding-v3 do Alibaba Cloud Model Studio para gerar vetores de 1024 dimensões e executar uma consulta de similaridade de cosseno. Para mais informações sobre o modelo, consulte Introdução ao modelo.

Etapa 1: Crie uma tabela

Crie uma tabela com uma coluna text para o conteúdo e uma coluna vector(1024) para os embeddings.

CREATE TABLE test(info text, vec vector(1024) NOT NULL);

Etapa 2: Registrar o modelo de embedding

Registre o text-embedding-v3 informando a URL do endpoint, o modelo de cabeçalho de autorização, o modelo de corpo da requisição e o caminho JSON para extrair o embedding da resposta.

SELECT rds_embedding.add_model(
    'text-embedding-v3',
    'https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding',
    'Authorization: Bearer sk-****',
    '{"input":{"texts":["%s"]},"model":"text-embedding-v3","parameters":{"text_type":"query"}}',
    '->''output''->''embeddings''->0->>''embedding'''
);

Substitua sk-**** pela sua chave de API.

Etapa 3: Inserir texto e embeddings

Insira cada linha chamando rds_embedding.get_embedding_by_model() diretamente na instrução. A função chama a API do modelo e retorna o vetor de embedding correspondente ao texto fornecido.

INSERT INTO test SELECT 'Windy high sky, apes cry sadly',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Windy high sky, apes cry sadly')::real[];

INSERT INTO test SELECT 'Clear islet, white sand, birds fly back',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Clear islet, white sand, birds fly back')::real[];

INSERT INTO test SELECT 'Boundless falling leaves rustle down',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Boundless falling leaves rustle down')::real[];

INSERT INTO test SELECT 'Endless Yangtze River rolls on',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Endless Yangtze River rolls on')::real[];

Substitua sk-**** pela sua chave de API.

Etapa 4: Consultar por similaridade vetorial

Use o operador <=> (distância de cosseno) para classificar as linhas por similaridade semântica em relação a uma string de consulta. Uma distância de 0 indica vetores idênticos; valores menores representam maior similaridade.

SELECT
    info,
    vec <=> rds_embedding.get_embedding_by_model(
        'text-embedding-v3',
        'sk-****',
        'Endless Yangtze River rolls on'
    )::real[]::vector AS distance
FROM
    test
ORDER BY
    vec <=> rds_embedding.get_embedding_by_model(
        'text-embedding-v3',
        'sk-****',
        'Endless Yangtze River rolls on'
    )::real[]::vector;

Substitua sk-**** pela sua chave de API.

Saída esperada:

info                                     |      distance
-----------------------------------------+--------------------
 Endless Yangtze River rolls on          |                  0
 Boundless falling leaves rustle down    | 0.42740682200152647
 Clear islet, white sand, birds fly back | 0.5161883811726116
 Windy high sky, apes cry sadly          | 0.5247695147991147
(4 rows)

A consulta retorna "Endless Yangtze River rolls on" em primeiro lugar (distância 0, correspondência exata), seguido por "Boundless falling leaves rustle down" como o vizinho semântico mais próximo.

Referências

Obter embeddings usando a API do modelo diretamente

Para verificar o endpoint do modelo ou solucionar problemas na geração de embeddings, envie uma requisição POST diretamente com curl.

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'Content-Type: application/json' \
--data '{
    "model": "text-embedding-v3",
    "input": {
        "texts": [
            "Windy high sky, apes cry sadly",
            "Clear islet, white sand, birds fly back",
            "Boundless falling leaves rustle down",
            "Endless Yangtze River rolls on"
        ]
    },
    "parameters": {
        "text_type": "query"
    }
}'
ParâmetroValor de exemploDescrição
locationhttps://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

URL do endpoint do modelo de embedding de texto.
Cabeçalho AuthorizationAuthorization: Bearer sk-****Formato: Authorization: Bearer <API-KEY>. Para obter uma chave de API, consulte Obter sua chave de API.
Cabeçalho Content-Typeapplication/jsonValor fixo.
modeltext-embedding-v3Nome do modelo a ser chamado.
input.textsArray de stringsConteúdo de texto para conversão em embedding.
parameters.text_typequeryParâmetros adicionais da requisição, que variam conforme o modelo. Consulte a documentação do modelo de embedding de texto para a lista completa.

Funções fornecidas pela extensão rds_embedding

Execute o comando psql a seguir para listar todos os objetos da extensão:

\dx+ rds_embedding
             Objects in extension "rds_embedding"
                      Object description
---------------------------------------------------------------
 function rds_embedding.add_model(text,text,text,text,text)
 function rds_embedding.del_model(text)
 function rds_embedding.get_embedding_by_model(text,text,text)
 function rds_embedding.get_response_by_model(text,text,text)
 function rds_embedding.show_models()
 function rds_embedding.update_model(text,text,text,text,text)
 schema rds_embedding
 table rds_embedding.models
(8 rows)

rds_embedding.add_model()

Adiciona um modelo de embedding à tabela rds_embedding.models.

rds_embedding.add_model(mname text, murl text, mauth_header_template text, mbody_template text, membedding_path text)

Parâmetro

Tipo

Exemplo

Descrição

mname

text

text-embedding-v3

Nome do modelo. Identifica o modelo ao chamar outras funções.

murl

text

https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

Endpoint HTTP do modelo. Consulte a documentação do modelo de embedding de texto para obter a URL.

mauth_header_template

text

Authorization: Bearer sk-****

Cabeçalho de autorização para a requisição POST. Formato: Authorization: Bearer <API-KEY>.

mbody_template

text

{"input":{"texts":["%s"]},"model":"text-embedding-v3","parameters":{"text_type":"query"}}

Corpo da requisição POST. Use %s como espaço reservado para o texto de entrada; ele será substituído pelo texto real no momento da chamada. Consulte a documentação do modelo de embedding de texto para ver a estrutura do corpo de diferentes modelos.

membedding_path

text

->''output''->''embeddings''->0->>''embedding''

Caminho JSON para extrair o embedding da resposta. O caminho do exemplo percorre: objeto output → array embeddings → primeiro elemento (0) → valor string embedding. Certifique-se de que este caminho corresponda à estrutura real de resposta do modelo.

Importante

Verifique se membedding_path corresponde à estrutura JSON retornada pelo modelo antes de usá-lo. Um caminho incorreto causa falhas na extração ou erros. Para a estrutura de resposta esperada, consulte os exemplos de resposta na documentação do modelo de embedding de texto.

rds_embedding.get_embedding_by_model()

Retorna o vetor de embedding do texto especificado ao chamar o modelo registrado.

rds_embedding.get_embedding_by_model(mname text, api-key text, texts text)

Parâmetro

Tipo

Exemplo

Descrição

mname

text

text-embedding-v3

Nome do modelo conforme registrado com add_model().

api-key

text

sk-****

Chave de API do modelo. Para obter uma, consulte Obter sua chave de API.

texts

text

Windy high sky, apes cry sadly

Texto de entrada para gerar o embedding.

rds_embedding.del_model()

Remove um modelo da tabela rds_embedding.models.

rds_embedding.del_model(mname text)

Parâmetro

Tipo

Exemplo

Descrição

mname

text

text-embedding-v3

Nome do modelo a ser removido.

rds_embedding.update_model()

Atualiza um modelo existente na tabela rds_embedding.models. Aceita os mesmos parâmetros de rds_embedding.add_model().

rds_embedding.show_models()

Lista todos os modelos registrados atualmente na tabela rds_embedding.models.

Nota

A função rds_embedding.get_response_by_model() ainda não está disponível.