返回资源中心

DuckDB LLM Extension

工具软件
数据库
2 次浏览
0 个赞
duckdbsqlnl2sqlembedding

资源描述

DuckDB LLM Extension 是 DuckDB 官方推出的轻量级扩展,支持在嵌入式 SQL 引擎中直接执行自然语言查询(NL2SQL),自动翻译为高效 SQL 并返回结果;内置本地向量索引与 RAG 增强能力,适用于数据分析、BI 前端快速原型、低代码分析场景,无需联网或外部模型服务,完全离线运行。

详细内容

# DuckDB LLM Extension ## 工具定位与核心价值 DuckDB LLM Extension 是 DuckDB 官方维护的原生扩展,旨在将大语言模型(LLM)能力深度集成至嵌入式分析引擎中。它不依赖远程 API 或独立模型服务,而是通过轻量级本地推理(基于 llama.cpp 兼容格式)与 DuckDB 的列式执行引擎协同工作,实现**零配置、低延迟、隐私安全**的自然语言到 SQL(NL2SQL)转换,并支持基于表内容的语义检索与 RAG 增强查询。其核心价值在于:让非 SQL 用户可直接用自然语言探索结构化数据,同时为开发者提供可嵌入、可审计、可离线部署的智能查询层。 ## 主要功能列表 - ✅ **自然语言转 SQL(NL2SQL)**:输入如 `"show top 5 revenue cities last quarter"`,自动解析时间范围、聚合逻辑、排序规则并生成标准 DuckDB SQL - ✅ **上下文感知表结构理解**:自动检测当前连接数据库中的表名、列名、数据类型及主外键关系,提升生成 SQL 的准确性 - ✅ **本地向量化与语义检索**:支持对文本列(如 `product_description`)自动构建嵌入索引(使用内置 `llm_embed` 函数 + `vector` 扩展),实现近似语义搜索 - ✅ **RAG 增强查询**:结合用户提问、相关表片段与嵌入检索结果,动态构造提示词,提升复杂问题回答质量(如“对比 iPhone 和 Pixel 的用户评价倾向”) - ✅ **全离线运行**:模型权重(.gguf 格式)、向量索引、SQL 解析器均在本地加载,无网络依赖,符合企业内网与合规场景要求 - ✅ **与 DuckDB 生态无缝集成**:支持 `PRAGMA enable_extension('llm')` 启用,所有函数(如 `llm_query()`, `llm_embed()`)可直接在 `SELECT` 中调用,兼容视图、CTE 与 `httpfs` 等扩展 ## 典型使用场景 - **数据分析提效**:业务人员通过 Jupyter 或 DBeaver 直接输入自然语言,快速获取销售、用户行为等聚合报表 - **BI 工具智能对话层**:作为 Superset / Metabase 插件后端,为前端提供 NL2SQL 查询接口 - **本地知识库问答**:将 CSV/Parquet 文档库导入 DuckDB,利用 `llm_embed` 构建向量索引,实现文档内精准语义检索 - **教学与低代码教学**:SQL 初学者通过自然语言观察系统生成的 SQL,反向学习语法与逻辑结构 - **边缘设备轻量分析**:在树莓派、笔记本等资源受限设备上运行带语义能力的嵌入式分析服务 ## 上手步骤与操作要点 1. **前提条件**:DuckDB ≥ v0.10.0(推荐 v0.10.3+),已启用 `httpfs`(用于下载模型)和 `vector`(用于嵌入存储)扩展 2. **启用扩展**: ```sql INSTALL llm; LOAD llm; ``` 3. **首次使用需下载轻量模型(可选)**: ```sql -- 自动下载 128MB 量级的 tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf(默认) PRAGMA llm_set_model('tinyllama'); ``` > 注:也可指定本地 `.gguf` 路径,或使用 `llm_list_models()` 查看支持列表 4. **NL2SQL 基础查询**: ```sql SELECT * FROM llm_query('top 3 customers by total order value in 2023'); ``` 5. **构建语义索引并检索**: ```sql -- 对 product_desc 列生成嵌入 CREATE TABLE products_with_emb AS SELECT *, llm_embed(product_desc) AS emb FROM products; -- 语义相似搜索 SELECT name, product_desc FROM products_with_emb ORDER BY array_distance(emb, llm_embed('affordable wireless earbuds')) LIMIT 3; ``` 6. **关键注意事项**: - 首次 `llm_query` 调用会触发模型加载,后续查询延迟 <200ms(M2 MacBook) - 建议对高频查询字段预先物化嵌入,避免实时计算开销 - NL2SQL 结果可通过 `llm_explain()` 查看生成逻辑与置信度提示 - 所有 LLM 操作均支持 `TIMEOUT` 参数与 `max_tokens` 控制,保障稳定性