O recurso de vetorização de embeddings na integração de dados do Alibaba Cloud DataWorks permite extrair dados de sources heterogêneas, como OSS, MaxCompute e HDFS, convertê-los em vetores e gravá-los em destinos como os bancos de dados vetoriais Milvus, Elasticsearch e OpenSearch, ou tabelas vetoriais do Hologres. Essa capacidade simplifica o processo de ETL, facilita a vetorização de conhecimento e viabiliza cenários de IA, como RAG.
Por que usar embeddings
À medida que a tecnologia de Large Language Model (LLM) continua a evoluir, integrar conhecimento privado a esses modelos é fundamental para gerar valor ao negócio. A Geração Aumentada por Recuperação (RAG) é uma abordagem essencial para alcançar esse objetivo. Ao codificar dados em representações vetoriais e usar um banco de dados vetorial para recuperação eficiente, o RAG fornece aos LLMs um conhecimento de domínio preciso, confiável e atualizado dinamicamente.
Seus dados de negócios podem estar espalhados em sources de dados heterogêneas, como Object Storage Service (OSS), MaxCompute, HDFS, MySQL, Oracle ou filas de mensagens. Você precisa gerar embeddings desses dados e gravar os vetores resultantes em um destino compatível com vetores, como um banco de dados vetorial (Milvus, OpenSearch e Elasticsearch) ou uma tabela vetorial do Hologres. Esse processo exige a escrita de scripts de ETL complexos e a adaptação a vários tipos de sources de dados. As múltiplas etapas do pipeline de dados — extração, transformação, geração de embeddings e gravação — criam um processo longo e fortemente acoplado, o que atrasa significativamente a iteração do modelo.
Recursos
O recurso de embedding na DataWorks do data integration permite extrair dados, gerar embeddings e gravá-los em um vector database em um único pipeline de dados. Essa automação end-to-end reduz a complexidade do desenvolvimento. Com ela, atualize o conhecimento sem latência e viabilize a knowledge ingestion de forma eficiente para cenários como RAG, intelligent customer service e search and recommendation.
O recurso de embedding para offline synchronization na data integration suporta dois modos de configuração:
Configure in wizard mode: Use a interface visual e configure rapidamente a
offline synchronization.Configure in script mode: Este modo suporta configurações avançadas, permitindo que você configure vários pipelines de sincronização para atender a requisitos personalizados.
Limitações
Este recurso está disponível apenas em workspaces onde a nova versão do Data Development está ativada.
Este recurso suporta apenas grupos de recursos serverless.
Atualmente, este recurso está disponível apenas para canais de sincronização offline selecionados.
Faturamento
Além das taxas padrão de Data Integration scenarios, as tarefas de Integração de Dados com assistência de IA incorrem em custos pela chamada a um modelo de linguagem grande.
Para o faturamento do service de modelos do Alibaba Cloud DataWorks, consulte Billing of Serverless resource groups — large language model services.
Para o faturamento do Alibaba Cloud Model Studio, consulte Model inference (call) billing.
Para o faturamento do marketplace de modelos do Alibaba Cloud PAI, consulte Elastic Algorithm Service (EAS) billing.
Pré-requisitos
Você criou um workspace with the new version of Data Development enabled.
Você criou um Serverless resource group e o vinculou ao workspace.
-
Você configurou o service de modelos grandes necessário para o processamento com assistência de IA. Os preparativos variam de acordo com o provedor do service de modelos:
O service de modelos do Alibaba Cloud DataWorks: Você implantou um modelo em Large Model Service Management e iniciou o service de modelos.
Alibaba Cloud Model Studio: Você ativou o Model Studio e o obtained an API key.
Marketplace de modelos do Alibaba Cloud PAI: Você ativou o PAI e obteve o token do service de modelos.
-
Você criou a source e o destino data sources necessários para a tarefa de sincronização offline.
Este tutorial usa a sincronização de dados do MaxCompute para o Milvus como exemplo. Portanto, você deve primeiro criar uma source de dados do MaxCompute e uma source de dados do Milvus.
Preparar dados de teste
Este tutorial usa dados de tabela do Conjunto de Dados de Previsão de Sentimento de Avaliações de product de E-commerce público. As avaliações dos usuários são vetorizadas e, em seguida, sincronizadas com o Milvus para pesquisa de similaridade.
-
source do MaxCompute: crie uma tabela de teste e insira dados de teste.
-
Destino Milvus: crie uma coleção de destino para receber os dados vetorizados. O schema está definido na tabela abaixo.
Esta coleção tem o auto-ID ativado.
Nome do campo
Tipo
Descrição
id
Int64
A chave primária. Autoincrementável.
sentence
VarChar(32)
Armazena o texto bruto.
sentence_e
FloatVector(128)
O campo vetorial para pesquisa de similaridade, usando a medida COSINE.
Configuração pela interface sem código
Este tutorial mostra como configurar uma tarefa de sincronização offline na integração de dados usando a interface sem código. O exemplo lê dados de uma source do MaxCompute (ODPS), gera embeddings vetoriais e sincroniza os dados para um destino Milvus.
Etapa 1: Criar um nó de sincronização offline
No console do DataWorks, acesse a página Workspaces. Na barra de navegação superior, selecione a região desejada. Encontre o workspace desejado e escolha na coluna Actions.
No diretório do projeto, clique no ícone
e clique em . configure a Source and Destination (neste tutorial, a source é o MaxCompute e o destino é o Milvus), insira um Name para o nó e clique em OK.
Etapa 2: Configurar a tarefa de sincronização offline
-
configure as informações básicas.
Data Source: selecione as sources de dados para a source e o destino.
Running Resources: selecione o grupo de recursos e execute a tarefa de sincronização offline. O grupo de recursos deve estar vinculado ao workspace atual e conectado à source de dados.
Se não houver sources de dados ou grupos de recursos disponíveis, verifique se você concluiu o prerequisites .
-
configure a Data Source.
Os parâmetros a seguir se aplicam à source de dados do MaxCompute usada neste tutorial. A configuração varia para outras sources de dados, portanto, ajuste suas configurações de acordo.
Neste tutorial, para Table, selecione
test_tb. Para Filtering Method, selecione Partition Filter e defina a condição de partição comosplit=dev. Para When partition does not exist, selecione Ignore and run task as normal.Parâmetro
Descrição
Tunnel Resource Group
Este é o grupo de recursos para a cota do tunnel. O valor padrão é
Public Transmission Resource, que é a cota gratuita para o MaxCompute. Para mais informações sobre como selecionar um recurso de transmissão de dados para o MaxCompute, consulte Purchase and use an exclusive Data Transmission Service resource group.ImportanteSe uma Tunnel Quota dedicada ficar indisponível devido a expiração ou pagamento em atraso, os jobs em execução alternam automaticamente para o
Public Transmission Resource.Tables
selecione a tabela de source a ser sincronizada.
Se não houver tabelas de source disponíveis, **verifique** se você concluiu Test data preparation.
Filtering Method
Suporta Partition Filter e Data Filtering:
-
Para tabelas particionadas, selecione um intervalo de dados para sincronizar e especifique as partições.
-
Para tabelas não particionadas, você pode usar uma cláusula
WHEREpara filtrar os dados a serem sincronizados.
Você pode clicar em Data Preview e verifique se a configuração está correta.
A caixa de diálogo Data Preview exibe os dados da tabela de source. Neste tutorial, os dados incluem as colunas
sentence(texto da avaliação),label(rótulo de sentimento) edataset(source do conjunto de dados). -
-
configure o Data Processing.
ative o processamento de dados. Na Data Processing List, clique em para adicionar um nó de processamento de Data Embedding.
-
configure o nó Data Embedding. Para Name, insira
sentence2emb. Para Model Name, selecione text-embedding-v4. Para o campo a ser vetorizado, selecionesentence. Para Vectorization Output Field, insirasentence_e. defina o Vector Dimension como128e marque a caixa de seleção Convert NULL To Empty String. A tabela a seguir descreve os principais parâmetros.NotaO desempenho do nó Data Embedding depende do desempenho do modelo configurado. Os modelos QWen fornecidos pelo Alibaba Cloud Model Studio têm limites de consultas por segundo (QPS). Para o marketplace de modelos do Alibaba Cloud PAI, você deve implantar um modelo no PAI-EAS, e seu desempenho depende das especificações de recursos usadas para a implantação.
Para um determinado conjunto de parâmetros, os modelos de embedding produzem vetores determinísticos. A Integração de Dados usa um cache LFU (Least Frequently Used) durante a sincronização para evitar chamadas redundantes ao modelo para dados de source idênticos. Isso melhora o desempenho do processamento e reduz os custos de embedding.
Parâmetro
Descrição
Model Provider
Alibaba Cloud Model Studio
Model Name
O modelo de embedding responsável pelo processamento inteligente de dados. selecione um modelo com base nas suas necessidades. Observe que modelos diferentes incorrem em taxas diferentes. Para mais informações, consulte Data Agent fees.
Batch Size
O tamanho do lote para vetorização. Isso depende se o modelo de embedding suporta processamento em lote. O processamento em lote pode melhorar o desempenho do embedding e reduzir custos. O valor padrão é 10.
Select Fields to Vectorize
Define quais colunas vetorizar e especifica o nome do campo de saída. A Integração de Dados suporta a vetorização de um único campo de source ou uma combinação de vários campos concatenados.
Vectorization Output Field
O nome do campo vetorial definido para o campo de source vetorizado.
Vector Dimension
A dimensão do vetor de saída. O modelo de embedding deve suportar esta dimensão. O valor padrão é 1024.
Convert a NULL value to an empty string.
Modelos grandes não podem processar valores NULL para vetorização. ative esta opção para converter NULLs em seus dados de source em strings vazias, o que evita erros. Esta opção está desativada por padrão.
Concatenate Field Names
Especifica se deve concatenar o nome do campo com o texto para vetorização. Se você ativar esta opção, também deverá configurar um Field Name Delimiter. Esta opção está desativada por padrão.
Skip Empty Fields
Ao concatenar vários campos para vetorização, especifique se deve pular campos vazios. Esta opção está ativada por padrão.
-
visualize a saída dos dados.
No canto superior direito da área de configuração do nó Data Embedding, clique em Preview Data Output e, em seguida, em Preview. visualize os resultados vetorizados e verifique a configuração.
Você também pode clicar em Dry Run na parte superior da página do editor de sincronização offline e visualize os resultados vetorizados.
Nos resultados da visualização, a nova coluna sentence_e exibe o embedding vetorial (uma sequência de números de ponto flutuante) para cada frase.
-
configure o Destination.
Os parâmetros a seguir se aplicam ao destino Milvus usado neste tutorial. A configuração varia para outros destinos, portanto, ajuste suas configurações de acordo.
Neste tutorial, defina Collection como Milvus_Collection, selecione insert para Write Mode, defina Rows per write como 1024 e selecione Ignore para Collection creation mode.
Parâmetro
Descrição
Collection
A coleção que recebe os dados vetoriais.
Partition Key
Opcional. Se a coleção for particionada, especifique uma partição para os dados vetoriais recebidos.
Write Mode
-
upsert:
-
Se o auto-ID estiver desativado para a coleção: Atualiza uma entidade com base em sua chave primária.
-
Se o auto-ID estiver ativado para a coleção: Insere os dados como uma nova entidade com uma chave primária gerada automaticamente.
-
-
insert: Normalmente usado para inserir dados em uma coleção com auto-ID ativado, onde o Milvus gera chaves primárias automaticamente.
Usar
insertem uma coleção sem auto-ID ativado causa duplicação de dados.
-
-
configure o Destination Field Mapping.
Depois de configurar a source, o processamento de dados e o destino, a tarefa de sincronização offline gera mapeamentos de campos automaticamente. Como o destino tem um schema não estruturado, a tarefa mapeia os campos por sua posição por padrão. clique em Edit ao lado de um Source Field ou Target Field e edite a ordem do mapeamento ou remova campos desnecessários para garantir que o mapeamento esteja correto.
Por exemplo, neste tutorial, exclua manualmente os campos desnecessários. O mapeamento ajustado é o seguinte.
O campo de source sentence é mapeado para o campo de destino sentence (Tipo: VarChar, maxLength: 32), e o campo de source sentence_e é mapeado para o campo de destino sentence_e (Tipo: FloatVector, dimension: 128).
-
configure mais opções em Advanced Settings.
clique em Advanced Settings no lado direito da página de configuração do nó. configure parâmetros como simultaneidade da tarefa, taxa de sincronização e políticas de dados sujos (dirty data) conforme necessário.
Etapa 3: Depurar e executar
No lado direito da página do editor de nós de sincronização offline, clique em Run Configuration. defina o Resource Group e os Script Parameters para a execução de depuração e, em seguida, clique em Running na barra de ferramentas superior e execute o pipeline de sincronização.
acesse o Milvus e verifique se os dados na coleção de destino estão conforme o esperado.
Etapa 4: Configurar agendamento e publicar
clique em Scheduling Settings à direita da tarefa de sincronização offline. defina os parâmetros de scheduling configuration para execuções agendadas, clique em Publish na barra de ferramentas superior e, em seguida, siga as instruções na tela no painel Publish para publish.
Configuração no modo de script
Este tutorial mostra como configurar uma tarefa de sincronização offline na integração de dados usando o modo de script. Neste exemplo, você lerá dados de uma source do MaxCompute (ODPS), os vetorizará em embeddings e, em seguida, os sincronizará com o Milvus.
Etapa 1: Criar um nó de sincronização offline
No console do DataWorks, acesse a página Workspaces. Na barra de navegação superior, selecione a região desejada. Encontre o workspace desejado e escolha na coluna Actions.
No diretório do projeto, clique no ícone
e clique em . configure a Source and Destination (neste tutorial, a source é o MaxCompute e o destino é o Milvus), insira um Name para o nó e clique em OK.
Configurar o script de sincronização
Clique no ícone
na barra de ferramentas do nó de sincronização offline para alternar para o modo de script.-
Esta tarefa sincroniza dados do MaxCompute para o Milvus.
O script a seguir é usado para este exemplo. Para obter detalhes sobre o formato do script, consulte Appendix 1: Script mode format specification.
{ "type": "job", "version": "2.0", "steps": [ { "stepType": "odps", "parameter": { "partition": [ "split=dev" ], "datasource": "MaxCompute_Source", "successOnNoPartition": true, "tunnelQuota": "default", "column": [ "sentence" ], "enableWhere": false, "table": "test_tb" }, "name": "Reader", "category": "reader" }, { "category": "flatmap", "stepType": "embedding-transformer", "parameter": { "modelProvider": "bailian", "modelName": "text-embedding-v4", "embeddingColumns": { "sourceColumnNames": [ "sentence" ], "embeddingColumnName": "sentence_e" }, "apiKey": "sk-****", "dimension": 128, "nullAsEmptyString": true }, "displayName": "sentence2emb", "description": "" }, { "stepType": "milvus", "parameter": { "schemaCreateMode": "ignore", "enableDynamicSchema": true, "datasource": "Milvus_Source", "column": [ { "name": "sentence", "type": "VarChar", "elementType": "None", "maxLength": "32" }, { "name": "sentence_e", "type": "FloatVector", "dimension": "128", "elementType": "None", "maxLength": "65535" } ], "writeMode": "insert", "collection": "Milvus_Collection", "batchSize": 1024, "columnMapping": [ { "sourceColName": "sentence", "dstColName": "sentence" }, { "sourceColName": "sentence_e", "dstColName": "sentence_e" } ] }, "name": "Writer", "category": "writer" } ], "setting": { "errorLimit": { "record": "0" }, "speed": { "concurrent": 2, "throttle": false } }, "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] } }Para obter detalhes sobre os parâmetros do Reader e do Writer, consulte MaxCompute Data Source e Milvus Data Source.
Se você usar outros tipos de sources ou destinos, consulte o List of Supported Data Sources.
-
A tabela a seguir descreve os parâmetros para o script de vetorização de dados:
Parâmetro
Descrição
Obrigatório
modelProvider
especifique o provedor do modelo grande. Os seguintes provedores são suportados: dataworksBailian.
Sim
modelName
O nome do modelo de embedding a ser usado.
-
Quando modelProvider é bailian, selecione
text-embedding-v4outext-embedding-v3. -
Quando modelProvider é paiModelGallery, selecione
bge-m3.
Sim
batchSize
O tamanho do lote para vetorização. Isso depende se o modelo de embedding suporta processamento em lote. O processamento em lote pode melhorar o desempenho do embedding e reduzir custos. O valor padrão é 10.
Não
embeddingColumns
defina as colunas a serem vetorizadas e o nome da coluna de saída. A integração de dados suporta a vetorização de uma única coluna de source ou uma concatenação de várias colunas.
Exemplo:
{ "embeddingColumns": { "sourceColumnNames": [ "col1", "col2" ], "embeddingColumnName": "my_vector" } }Sim
appendDelimiter
O delimitador usado para unir valores de várias colunas em uma única string de texto para vetorização. Padrão:
\n.Não
skipEmptyValue
especifique se deve pular colunas vazias ao concatenar várias colunas para vetorização. Padrão: false.
Não
dimension
A dimensão do vetor de saída. O modelo de embedding deve suportar esta dimensão. O valor padrão é 1024.
Não
nullAsEmptyString
Modelos de embedding não podem processar entrada NULL. Se seus dados de source contiverem valores NULL, defina este parâmetro como
truepara convertê-los em strings vazias e evitar erros de vetorização. Padrão:false.Não
appendFieldNameEnable
especifique se deve adicionar o nome da coluna antes dos dados antes da vetorização. Se
true, você também deve configurar appendFieldNameDelimiter. Padrão:false.Não
appendFieldNameDelimiter
O delimitador para concatenar nomes de colunas. Este parâmetro só entra em vigor quando appendFieldNameEnable está definido como
true.Não
-
-
execute o teste (Dry run).
Na barra de ferramentas do nó, clique em Dry Run. Em seguida, clique em Start Collection e Preview. visualize os resultados vetorizados e verifique a configuração. Na caixa de diálogo, defina Number of samples como 3 e clique em Start Sampling para buscar os dados de entrada. A tabela de dados de entrada contém as colunas
sentence,labeledataset. Os resultados da visualização mostram uma nova colunasentence_e, que exibe o vetor de ponto flutuante gerado para cada entrada de texto após a conversão de embedding. Nenhum registro de dados sujos (dirty data) foi encontrado nos dados de entrada. Se os resultados estiverem corretos, clique em OK. -
configure mais opções em Advanced Settings.
clique em Advanced Settings no lado direito da página de configuração do nó. configure parâmetros como simultaneidade da tarefa, taxa de sincronização e políticas de dados sujos (dirty data) conforme necessário.
Etapa 3: Depurar e executar
No lado direito da página do editor de nós de sincronização offline, clique em Run Configuration. defina o Resource Group e os Script Parameters para a execução de depuração e, em seguida, clique em Running na barra de ferramentas superior e execute o pipeline de sincronização.
acesse o Milvus e verifique se os dados na coleção de destino estão conforme o esperado.
Etapa 4: Configurar agendamento e publicar
clique em Scheduling Settings à direita da tarefa de sincronização offline. defina os parâmetros de scheduling configuration para execuções agendadas, clique em Publish na barra de ferramentas superior e, em seguida, siga as instruções na tela no painel Publish para publish.
Anexo 1: Formato do modo de script
A estrutura básica de um script é a seguinte:
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "xxx",
"parameter": {
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "xxx",
"parameter": {
},
"name": "transformer1",
"category": "map/flatmap"
},
{
"stepType": "xxx",
"parameter": {
},
"name": "transformer2",
"category": "map/flatmap"
},
{
"stepType": "xxx",
"parameter": {
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
}
}
O array steps define cada etapa de processamento. Ele deve conter pelo menos um Reader e um Writer, e pode incluir opcionalmente várias etapas de Transformer intermediárias. Por exemplo, se você definir a simultaneidade como 2, o job terá dois fluxos de processamento de dados paralelos. Cada Reader, Transformer e Writer é considerado uma step na configuração da tarefa.

O array steps define o tipo e os parâmetros para cada etapa. O fluxo de processamento de dados segue a ordem dos elementos step no array.
Para obter configurações detalhadas de parâmetros para os conectores de leitura/gravação de várias sources de dados suportadas pela integração de dados, consulte: Supported Data Sources and Sync Solutions.
Anexo 2: Sincronizar do OSS para o Milvus
Este exemplo sincroniza dados JSON Lines (JSONL) do OSS, os analisa, vetoriza campos. especifique os campos a vetorizar e grave a saída no Milvus. O exemplo a seguir mostra a configuração JSON completa:
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "oss",
"parameter": {
"datasource": "${YOUR_OSS_DATASOURCE_NAME}",
"column": [
{
"name": "chunk_text",
"index": 0,
"type": "string"
}
],
"fieldDelimiter": ",",
"encoding": "UTF-8",
"fileFormat": "jsonl",
"object": [
"embedding/chunk1.jsonl"
]
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "json-extracting",
"parameter": {
"column": [
{
"name": "text",
"fromColumn": "chunk_text",
"jsonPath": "$.text",
"type": "STRING",
"nullOrInvalidDataAction": "DIRTY_DATA"
}
]
},
"name": "jsonextract",
"category": "flatmap"
},
{
"stepType": "embedding-transformer",
"parameter": {
"modelProvider": "bailian",
"modelName": "text-embedding-v4",
"apiKey": "${YOUR_API_KEY}",
"embeddingColumns": {
"sourceColumnNames": [
"text"
],
"embeddingColumnName": "my_vector"
},
"batchSize": 8,
"dimension": 1024
},
"name": "embedding",
"category": "flatmap"
},
{
"stepType": "milvus",
"parameter": {
"schemaCreateMode": "ignore",
"enableDynamicSchema": true,
"datasource": "${YOUR_MILVUS_DATASOURCE_NAME}",
"column": [
{
"name": "my_vector",
"type": "FloatVector",
"dimension": "1024",
"elementType": "None",
"maxLength": "65535"
},
{
"name": "text",
"type": "VarChar",
"elementType": "None",
"maxLength": "65535"
}
],
"collection": "yunshi_vector_07171130",
"writeMode": "insert",
"batchSize": 1024,
"columnMapping": [
{
"sourceColName": "my_vector",
"dstColName": "my_vector"
},
{
"sourceColName": "text",
"dstColName": "text"
}
]
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"concurrent": 1
}
}
}