# Text2VectorSQL **Repository Path**: zhangbo2008/Text2VectorSQL ## Basic Information - **Project Name**: Text2VectorSQL - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-05 - **Last Updated**: 2026-01-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Text2VectorSQL: 向量搜索与SQL查询的统一自然语言接口

  License: apache-2-0 GitHub Stars

如果你喜欢我们的项目,请在 GitHub 上给我们一个 ⭐ 星标,以获取最新更新。
## 💡 概览 本项目提出了**Text2VectorSQL**,旨在为查询**结构化数据**和**非结构化数据**建立统一自然语言接口的新任务。
Text2VectorSQL 任务示意图,下方场景展示了将 SQL 查询与向量检索结合后,如何实现语义过滤、多模态匹配与检索加速。这些能力对构建通用自然语言接口不可或缺。
传统的Text2SQL系统在访问表格等结构化数据方面取得了显著进展,但无法理解语义或多模态查询。与此同时,向量搜索已成为查询非结构化数据(如文本、图像)的标准,但将其与SQL集成(称为 VectorSQL)仍然依赖于手动的、易错的查询构建,并且缺乏标准化的评估方法。 Text2VectorSQL旨在弥合这一“根本差距”,我们提供了一个全面的基础生态系统:
Text2VectorSQL 生态系统。其核心是 VectorSQLGen 流水线——一个大规模、自动化的数据合成引擎,用于生成高质量训练样本。随后,这些合成数据被用来训练我们的 UniVectorSQL 模型系列。与此同时,一部分精选数据经过更严格的人工审核,形成 VectorSQLBench:我们全新的黄金标准评测基准,配备一套新颖且细粒度的评估指标。
----- ## 🚀 项目架构与核心模块 本仓库包含一个完整的生态系统,分为四个核心模块: 1. **数据合成 (Data\_Synthesizer)**: 一个可扩展的流水线,用于从公开的基础表格开始,自动合成包含(数据库、自然语言问题、VectorSQL 查询、思维链)的“四元组”训练数据。 2. **执行引擎 (Execution\_Engine)**: 一个负责解析和执行 VectorSQL 查询的后端引擎。它通过调用**嵌入服务**来处理特殊的 `lembed(model, text)` 函数,并将其转换为与目标数据库(SQLite、PostgreSQL、ClickHouse)兼容的原生查询。 3. **嵌入服务 (Embedding\_Service)**: 一个基于 FastAPI 的高性能 API 服务,为**执行引擎**提供按需的文本和图像向量化能力。它支持多模型、多GPU,并能自动缓存模型。 4. **评估框架 (Evaluation\_Framework)**: 一个用于全面评估 Text2VectorSQL 模型性能的框架。它通过**执行**模型生成的 SQL 和黄金 SQL,并比较两者的**执行结果**(而非SQL字符串)来进行准确评估。 ----- ## 🔧 安装 1. 克隆本仓库: ```bash git clone https://github.com/OpenDCAI/Text2VectorSQL.git --depth 1 cd Text2VectorSQL ``` 2. 根据您需要使用的模块,安装其独立的依赖文件。每个模块(`Data_Synthesizer`, `Execution_Engine`, `Embedding_Service`, `Evaluation_Framework`)的目录下都有一个 `requirements.txt` 文件。 例如,要安装执行引擎的依赖: ```bash cd Execution_Engine pip install -r requirements.txt ``` ----- ## ⚡ 快速开始 根据您的目标,可以按以下场景使用本项目的工具链: ### 场景一:运行嵌入服务 (所有执行的前提) `Execution_Engine` 依赖此服务来获取向量。 1. **配置服务**: 进入 `Embedding_Service/` 目录,创建 `config.yaml` 文件,指定您要使用的模型。 ```yaml # config.yaml 示例 server: host: "0.0.0.0" port: 8000 models: - name: "all-MiniLM-L6-v2" hf_model_path: "sentence-transformers/all-MiniLM-L6-v2" local_model_path: "./models/all-MiniLM-L6-v2" trust_remote_code: true # ... 其他模型 ``` 2. **启动服务**: ```bash cd Embedding_Service/ bash run.sh ``` 服务将在 `http://0.0.0.0:8000` 上运行。首次运行会自动下载模型。 ### 场景二:执行一个 VectorSQL 查询 确保场景一中的**嵌入服务**正在运行。 `Execution_Engine` 可以作为命令行工具使用: 1. **配置引擎**: 进入 `Execution_Engine/` 目录,创建 `engine_config.yaml`,指定嵌入服务的地址和数据库连接信息。 ```yaml embedding_service: url: "http://127.0.0.1:8000/embed" # 对应场景一的服务 database_connections: clickhouse: host: "localhost" port: 8123 # ... timeouts: sql_execution: 60 ``` 2. **运行查询**: ```bash cd Execution_Engine/ python execution_engine.py \ --sql "SELECT Name FROM musical m ORDER BY L2Distance(Category_embedding, lembed('all-MiniLM-L6-v2','opera')) LIMIT 5;" \ --db-type "clickhouse" \ --db-identifier "musical" \ --config "engine_config.yaml" ``` ### 场景三:合成全新的 Text2VectorSQL 数据集 使用 `Data_Synthesizer` 模块。 1. **配置流水线**: 进入 `Data_Synthesizer/` 目录,复制 `pipeline/config.yaml.example` 为 `config.yaml`。 在 `config.yaml` 中填入您的 LLM API-Key、Base-URL 等。 2. **选择数据集**: 编辑 `pipeline/general_pipeline.py`,修改顶部的 `DATASET_BACKEND` 和 `DATASET_TO_LOAD` 变量。 3. **运行流水线**: ```bash cd Data_Synthesizer/ python pipeline/general_pipeline.py ``` 最终的合成数据集将保存在 `config.yaml` 中配置的 `result_path` 路径下。 ### 场景四:评估一个 Text2VectorSQL 模型 使用 `Evaluation_Framework` 模块。 1. **准备数据**: 确保您有一个包含模型预测 SQL 的评估文件(`eval_data_file`)。如果还没有,请运行 `generate.py` 来生成。 2. **配置评估**: 进入 `Evaluation_Framework/` 目录,创建 `evaluation_config.yaml`。 配置数据库类型 (`db_type`)、数据库文件根目录 (`base_dir`)、输入文件 (`eval_data_file`) 和评估指标 (`metrics`)。 3. **运行评估流水线**: ```bash cd Evaluation_Framework/ # 运行完整流程(SQL执行 + 结果评估) python run_eval_pipeline.py --all --config evaluation_config.yaml # 或分步运行 # python run_eval_pipeline.py --execute --config evaluation_config.yaml # python run_eval_pipeline.py --evaluate --config evaluation_config.yaml ``` 评估报告(JSON文件)将保存在配置的输出路径中。您可以使用 `aggregate_results.py` 将多个报告汇总为 CSV。 ----- ## 🧩 模块详解 ### 1\. 数据合成 (Data\_Synthesizer) 此模块是训练强大 Text2VectorSQL 模型(如 UniVectorSQL)的基础 。它通过一个自动化的流水线,生成高质量的 Text2VectorSQL 数据集。 **核心流程**: 1. **数据库合成与增强 (`database_synthesis`)**: 基于 Web 表格生成结构化数据库。 2. **数据库向量化 (`vectorization`)**: 识别“语义丰富”的列(如描述),使用 Sentence Transformer 生成向量嵌入,并构建新的支持向量查询的数据库。 3. **VectorSQL与问题合成 (`synthesis_sql`, `synthesis_nl`)**: 自动生成不同复杂度的 VectorSQL 查询,并反向翻译生成对应的自然语言问题。 4. **思维链合成 (`synthesis_cot`)**: 为每个数据样本生成详细的推理步骤(Chain-of-Thought),解释从问题到 VectorSQL 的推导过程。 您可以通过 `pipeline/general_pipeline.py` 脚本一键运行完整的端到端合成流程。 ### 2\. 执行引擎 (Execution\_Engine) 这是 Text2VectorSQL 的运行时核心。它充当一个桥梁,解析包含语义搜索意图的 VectorSQL,并将其转换为数据库可以理解的原生查询。 **核心功能**: * **解析 `lembed` 函数**: 引擎专门用于处理 `lembed(model, text)` 语法的查询。 * **动态向量化**: 1. 引擎解析查询,提取所有唯一的 `(model, text)` 组合。 2. 它向一个外部的 **Embedding 服务** 发起网络请求,获取这些文本的向量表示。 * **SQL 翻译与执行**: 1. 收到向量后,引擎将 `lembed(...)` 调用替换为数据库原生的向量字面量(例如,在 PostgreSQL 中为 `[0.1, 0.2, ...]`)。 2. 它连接到目标数据库(支持 PostgreSQL, ClickHouse, SQLite)并执行翻译后的原生查询。 * **健壮性**: 引擎为网络请求和数据库执行实现了健壮的超时和错误管理。 ### 3\. 嵌入服务 (Embedding\_Service) 这是一个独立的高性能 API 服务,充当 `Execution_Engine` 的向量化后端。 **主要特性**: * **高性能**: 基于 FastAPI 和 Uvicorn,提供异步处理能力。 * **多模型与多GPU**: 支持通过 `config.yaml` 同时加载和管理多个模型(如 `all-MiniLM-L6-v2` 或 `CLIP`),并支持张量并行。 * **自动缓存**: 启动时自动从 Hugging Face Hub 下载模型并缓存到本地,避免重复下载。 * **核心接口**: * `/embed`: 接收模型名称和文本/图像列表,返回向量。 * `/health`: 健康检查。 ### 4\. 评估框架 (Evaluation\_Framework) 为了客观评估 Text2VectorSQL 模型的真实能力,我们构建了一个专用的评估框架。评估框架对比的是预测 SQL 和标准 SQL 的**执行结果**,而非仅仅比较 SQL 字符串。这对于向量搜索至关重要,因为近似结果是可接受的,且不同语法的 SQL 可能产生相同的结果 。 **评估流水线**: 1. **SQL 生成 (`generate.py`)**: 调用模型(通过 vLLM 或 API)为评估问题生成预测的 SQL 查询。 2. **SQL 执行 (`sql_executor.py`)**: 在沙箱化进程中(带超时)分别执行预测 SQL 和所有黄金 SQL,并缓存两者的执行结果。 3. **结果评估 (`evaluate_results.py`)**: 对比预测结果和黄金结果,计算一系列评估指标。 * **集合指标 (Set-based)**: Precision, Recall, F1-Score。 * **排序指标 (Rank-based)**: nDCG@k, MAP, MRR。 * **分解指标 (Decomposed)**: $ACC_{SQL}$ (SQL骨架正确性) 和 $ACC_{Vec}$ (向量部分正确性) 。 4. **结果聚合 (`aggregate_results.py`)**: 将多个实验的 JSON 报告汇总为易于比较的 CSV 文件。 ## 📖 文献引用 如果您觉得这项工作有帮助,请引用我们的论文: ```bibtex @article{wang2025text2vectorsql, title={Text2VectorSQL: Towards a Unified Interface for Vector Search and SQL Queries}, author={Wang, Zhengren and Yao, Dongwen and Li, Bozhou and Ma, Dongsheng and Li, Bo and Li, Zhiyu and Xiong, Feiyu and Cui, Bin and Tang, Linpeng and Zhang, Wentao}, journal={arXiv preprint arXiv:2506.23071}, year={2025} } ``` ## ❤️ 致谢 该仓库受益于 [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory)、[vLLM](https://github.com/vllm-project/vllm)、[ChatData](https://github.com/myscale/ChatData)、[PostgreSQL](https://github.com/postgres/postgres)、[ClickHouse](https://github.com/ClickHouse/ClickHouse)、[pgvector](https://github.com/pgvector/pgvector)、[sqlite-vec](https://github.com/asg017/sqlite-vec) 等开源项目。 ## 📞 联系方式 如有任何问题或反馈,欢迎通过 wzr@stu.pku.edu.cn 联系我们。