MyScale 的 `EmbedText` 函数将 SQL 查询与文本向量化功能集成在一起,从而将文本转换为数值向量。这些向量有效地将人类感知的语义相似性映射到向量空间中的相似性。`EmbedText` 使用熟悉的 SQL 语法简化了向量化过程,提高了可访问性,使用户能够在 MyScale 中高效地执行文本向量化,并与 OpenAI、Jina AI 和 Amazon Bedrock 等模型提供商在实时和批处理场景下进行协作。此外,通过利用自动批处理,大量数据的处理性能得到了极大的提升。这种集成消除了对外部工具或复杂编程的需求,简化了向量化过程,使其在 MyScale 数据库环境中进行。
EmbedText 函数介绍
`EmbedText` 函数的定义为 `EmbedText(text, provider, base_url, api_key, others)`,具有高度可配置性,旨在实现实时搜索和批处理。
该函数的详细参数,请参见 MyScale [文档]。
如下表所示,`EmbedText` 函数支持以下模型,每个提供商都具有独特的优势:
| 提供商 | 支持情况 | 提供商 | 支持情况 |
|---|---|---|---|
| OpenAI | ✔ | Amazon Bedrock | ✔ |
| HuggingFace | ✔ | Amazon SageMaker | ✔ |
| Cohere | ✔ | Jina AI | ✔ |
| Voyage AI | ✔ | Gemini | ✔ |
例如,OpenAI 的 `text-embedding-ada-002` 模型以其强大的性能而闻名。可以使用以下 SQL 命令在 MyScale 中使用该模型:
SELECT EmbedText('YOUR_TEXT','OpenAI','','API_KEY','{"model":"text-embedding-ada-002"}')
Jina AI 的 `jina-embeddings-v2-base-en` 模型支持长达 8k 的序列长度,提供了一种经济高效的 embedding dimension 选择。以下是如何使用该模型的示例:
SELECT EmbedText('YOUR_TEXT','Jina','','API_KEY','{"model":"jina-embeddings-v2-base-en"}')
Amazon Bedrock Titan 与 OpenAI 模型兼容,在 AWS 集成和安全功能方面表现出色,为 AWS 用户提供了全面的解决方案,如下代码片段所示:
SELECT EmbedText('YOUR_TEXT','Bedrock','','SECRET_ACCESS_KEY','{"model":"amazon.titan-embed-text-v1", "region_name":"us-east-1", "access_key_id":"ACCESS_KEY_ID"}')
创建专用函数
为了方便使用,你可以为每个模型创建专用函数。例如,可以使用 OpenAI 的 `text-embedding-ada-002` 模型定义以下函数:
CREATE FUNCTION OpenAIEmbedText ON CLUSTER '{cluster}' AS (x) -> EmbedText(x,'OpenAI','','API_KEY','{"model":"text-embedding-ada-002"}')
然后,可以简化 `OpenAIEmbedText` 函数的使用:
SELECT OpenAIEmbedText('YOUR_TEXT')
这种方法简化了嵌入过程,并减少了常见参数(如 API 密钥)的重复输入。
使用 EmbedText 进行向量处理
`EmbedText` 彻底改变了 MyScale 中向量处理的方式,尤其是对于向量搜索和数据转换。这个函数在将搜索查询和数据库列转化为数值向量方面起着关键作用,这是向量搜索和数据管理中的关键步骤。
提升向量搜索
在向量相似性搜索中,如下面的代码所示,传统方法要求用户手动在 SQL 中输入查询向量。
SELECT id, distance(vector, [0.123, 0.234, ...]) AS dist FROM test_embedding ORDER BY dist LIMIT 10
而使用 `EmbedText` 简化了向量搜索过程,使其更直观,大大优化了用户体验,并将重点放在查询的形成上,而不是向量创建的机制上,如下代码片段所示:
SELECT id, distance(vector, OpenAIEmbedText('the text query')) AS dist FROM test_embedding ORDER BY dist LIMIT 10
简化批处理转换
根据下图,我们可以看到批处理转换的典型工作流程涉及预处理和将文本数据存储为结构化格式。

假设我们有以下包含原始数据的 `chunk_data` 表。
CREATE TABLE chunk_data (id UInt32,chunk String,) ENGINE = MergeTree ORDER BY idINSERT INTO chunk_data VALUES (1, 'chunk1'), (2, 'chunk2'), ...
我们可以创建第二个表 `test_embedding` 表,使用 `EmbedText` 函数用以下方式存储创建的向量嵌入。
CREATE TABLE test_embedding (id UInt32,paragraph String,vector Array(Float32) DEFAULT OpenAIEmbedText(paragraph),CONSTRAINT check_length CHECK length(vector) = 1536,) ENGINE = MergeTree ORDER BY id
如此一来,将数据插入 `test_embedding` 变得简单。
INSERT INTO test_embedding (id, paragraph) SELECT id, chunk FROM chunk_data
或者,可以在插入过程中直接应用 `EmbedText`。
INSERT INTO test_embedding (id, paragraph, vector) SELECT id, chunk, OpenAIEmbedText(chunk) FROM chunk_data
如上所述,`EmbedText` 包括一个自动批处理功能,在处理多个文本时显著提高了处理效率。该功能在将数据发送到 embedding API 之前,在内部管理批处理过程,确保高效、简化的数据处理工作流程。在 NVIDIA A10G GPU 上使用 BAAI/bge-small-en 模型的示例中,实现了每秒处理高达 1200 个请求。
结论
MyScale 的 `EmbedText` 函数是一个实用且高效的文本向量化工具,简化了复杂的过程,使高级的向量搜索和数据转换变得更大众化。我们希望将这一创新无缝集成到日常数据库操作中,为更广泛的用户提供 AI/LLM 相关的数据处理能力。
了解墨奇科技 点击更多资讯





