基于LangChain构建NL2SQL数据分析系
一、项目架构说明
SQL Agent 数据分析系统是一个基于 大语言模型(LLM) 和 RAG(检索增强生成) 技术的智能数据分析平台。系统的核心价值在于:将自然语言问题自动转换为准确的 SQL 查询,并对查询结果进行业务解读和可视化呈现。用户无需掌握 SQL 语法,只需用日常语言提问(如:"2024年销售额最高的10个产品是什么?"),系统即可自动完成数据查询、分析和报告生成。
与传统的 BI 工具相比,本系统具备三大优势:自然交互(无需学习复杂的拖拽式界面)、智能推理(基于 Agent 的多步推理能力)、持续学习(通过 RAG 技术不断积累领域知识)。
系统采用 自底向上 的四层架构设计,每一层职责明确、边界清晰,确保系统的可扩展性和可维护性。

用户通过 自然语言输入框 提出数据分析需求,系统实时展示 Agent 的思考过程(如"正在检索表结构"、"正在生成 SQL"),最终以 数据表格、可视化图表、自然语言解释 三种形式呈现查询结果。此外,用户还可以通过 训练数据管理面板 手动添加 DDL 定义、业务文档和 SQL 示例,帮助系统更好地理解业务逻辑。
而核心代理层是整个系统的"大脑",由 NL2SQL Agent 担任核心角色。Agent 负责理解用户意图、规划执行步骤、调度工具完成任务。它采用 ReAct(推理-行动)模式,即"思考一步、执行一步、再思考、再执行"的循环流程,直到完成任务。Agent 具备自主决策能力,能根据问题复杂度选择合适的工具组合,并在遇到错误时自动调整策略。这里我们参考 Vanna 项目的思路:https://github.com/vanna-ai/vanna/tree/main

二、Jina Embedding 服务安装部署
jina-embeddings-v4是一个通用的多模态和多语言检索嵌入模型。该模型专为复杂文档检索而设计,包括包含图表、表格和插图等视觉元素丰富的文档。
网址:https://huggingface.co/jinaai/jina-embeddings-v4
基于Qwen/Qwen2.5-VL-3B-Instruct构建,jina-embeddings-v4具有以下特性:
- 统一的文本、图像和视觉文档嵌入,支持密集(单向量)和延迟交互(多向量)检索。
- 支持多语言(30 多种语言),并兼容广泛的领域,包括技术性和视觉复杂的文档。
- 针对检索、文本匹配和代码相关任务的特定任务适配器,可在推理时进行选择。
- 灵活的嵌入大小:默认情况下,密集嵌入的维度为 2048,但可以截断到低至 128,性能损失极小。
功能概述:
| 特征 | Jina Embeddings V4 |
|---|---|
| 基本型号 | Qwen2.5-VL-3B-指令 |
| 支持的任务 | retrieval,,text-matchingcode |
| D型 | BFloat 16 |
| 最大序列长度 | 32768 |
| 单向量维度 | 2048 |
| 多向量维度 | 128 |
| 套娃尺寸 | 128、256、512、1024、2048 |
| 联合策略 | 平均合并 |
| 注意机制 | 闪回2 |
Jina Embedding 在本项目中被设计为一个独立的微服务,通过 FastAPI 框架对外提供 HTTP API 接口。它的主要职责是将自然语言文本(用户问题、SQL 语句、表结构文档等)转换为高维稠密向量。举个例子:
- 问题:女性客户的平均消费金额是多少?
- 系统操作:先在历史训练数据中找到语义最相似的案例(比如"不同性别客户的消费统计"),再生成准确的 SQL 查询。
这个"寻找相似案例"的过程,就依赖 Jina Embedding 将问题转化为向量,然后在向量数据库(Milvus)中进行相似度检索。同时,Jina Embedding 与 Milvus 结合应用。当系统需要添加训练数据(如表结构文档、SQL 案例)时,首先调用 Jina Embedding 将文本转为向量,然后将向量和原始文本一起存入 Milvus。后续用户提问时,系统会先将问题向量化,再从 Milvus 中检索出最相似的训练案例。
此外,我们在 Vanna 源码的基础上通过Jina Embedding 嵌入 NL2SQL 引擎协作工作流,大幅提升了 SQL 生成及信息检索的准确率。
三、实现效果
主页效果图

数据分析可视化页面:


浙公网安备 33010602011771号