news 2026/9/6 16:36:30

vanna 自然语言生成 SQL 实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vanna 自然语言生成 SQL 实战指南

vanna 自然语言生成 SQL 实战指南

【免费下载链接】vanna🤖 Chat with your SQL database 📊. Accurate Text-to-SQL Generation via LLMs using Agentic Retrieval 🔄.项目地址: https://gitcode.com/GitHub_Trending/va/vanna

运营同事每天早晨都会发来同一类需求:"拉一下昨天 Top 10 客户的营收。" 以前你要手写 SQL、跑批、截图发回群里。vanna 就是这个环节要解决的开源 Python 框架:你用自然语言提问,它生成 SQL、在数据库上执行,并把表格和图表流式返回。2.0 版本把它做成了一个 Agent 服务——自带 Web 聊天组件、按用户分权限、可审计。本文覆盖安装跑通、关键配置和三条部署路径;不覆盖 0.x 到 2.0 的完整迁移步骤,那部分见仓库根目录的 MIGRATION_GUIDE.md。

5分钟跑通

四步,全程不需要先注册任何服务。

  1. 安装核心包。CLI 入口vanna和 FastAPI 服务器都在这个包里。
pip install "vanna[fastapi]"

终端执行pip show vanna,版本号为2.0.2即安装成功。

  1. 用 Mock LLM 验证框架本身。这一步不消耗任何 API 额度,专门用来确认环境没问题。
python -m vanna.examples.mock_quickstart

终端出现Hello! I'm a helpful AI assistant created using the Vanna Agents framework.即表示 Agent 循环、消息流全部就绪。

  1. 看看内置了哪些可直接运行的示例 Agent。
vanna --list-examples

预期输出以mock_quickstartanthropic_quickstartmock_sqlite_example等开头的列表。

  1. 换上真实 LLM,起 Web 服务。
export ANTHROPIC_API_KEY=your-api-key vanna --framework fastapi --example anthropic_quickstart --port 8000

看到✓ Loaded example agent🚀 Starting FastAPI server on http://0.0.0.0:8000后,浏览器打开http://localhost:8000,页面出现聊天框即可开始提问。API 文档同端口/docs下。

关键配置拆解

2.0 的行为集中在AgentConfig(src/vanna/core/agent/config.py)里。下面四个是对出结果影响最大的。

temperature:默认0.7,建议0.1~0.3。SQL 是确定性任务,温度高一点,模型就可能在表名、字段名上给出近义但错误的写法。

max_tool_iterations:默认10。控制 Agent 单轮最多调用几次工具。调到5~8能压住"模型反复试探"带来的延迟和 token 成本;但别设太小,多表 JOIN 类问题正常就需要 2~3 次查表加一次执行。

stream_responses:默认True,建议保持。前端组件的进度条、表格、图表都走这条流,关掉后聊天界面只剩最后一段文本,中间状态全丢。

LLM 与 Runner 选型:Agent 构造时传入llm_serviceRunSqlToolsql_runner,对应不同的 extras 依赖:

组件常用选择为什么
LLMAnthropic / OpenAI / Ollama云端模型质量稳定,Ollama 适合内网离线
SQL RunnerSQLite / Postgres / DuckDB本地演示用 SQLite,生产对应装[postgres]等 extras
记忆存储内置DemoAgentMemory/ ChromaDB / Qdrant演示用零依赖内存版,生产上向量库

部署路径决策

如果你只是内部验证或个位数用户,选单机 Python

  1. pip install "vanna[fastapi,anthropic]",装齐服务器与 LLM 依赖
  2. ANTHROPIC_API_KEY写入环境或.env
  3. vanna --framework fastapi --example anthropic_quickstart --port 8000
  4. 用你熟悉的进程管理器(systemd、supervisor)托管这个命令

如果你要和生产环境一致、或多实例滚动发布,选容器化

# Dockerfile FROM python:3.11-slim ENV PYTHONUNBUFFERED=1 # 只装必需的 extras:fastapi 服务器 + anthropic LLM RUN pip install --no-cache-dir "vanna[fastapi,anthropic]" EXPOSE 8000 # CLI 直接加载内置示例 Agent,无需携带业务代码 CMD ["vanna", "--framework", "fastapi", "--example", "anthropic_quickstart", "--port", "8000"]
docker build -t vanna-web . docker run -d -p 8000:8000 -e ANTHROPIC_API_KEY=your-api-key --name vanna vanna-web

无状态服务,多副本前挂一层负载均衡即可。


如果你不想养机器、按调用量付费,选 Serverless:不走 CLI,直接复用Agent,进程内单例避免每次冷启动重建。

# handler.py(云函数入口,Anthropic + SQLite 示例) import asyncio from vanna import Agent, User from vanna.core.registry import ToolRegistry from vanna.integrations.anthropic import AnthropicLlmService from vanna.integrations.sqlite import SqliteRunner from vanna.tools import RunSqlTool _agent = None # 云函数实例会被复用,单例避免每次请求重建 def _build() -> Agent: tools = ToolRegistry() tools.register(RunSqlTool(sql_runner=SqliteRunner("/opt/data/chinook.db"))) return Agent(llm_service=AnthropicLlmService(model="claude-sonnet-4-5"), tool_registry=tools) async def _ask(question: str) -> str: global _agent _agent = _agent or _build() user = User(id="anon", email="anon@example.com", group_memberships=["admin"]) parts = [] # send_message 是异步流式 API,逐块收集组件内容 async for comp in _agent.send_message(user=user, message=question, conversation_id="one-shot"): if hasattr(comp, "content"): parts.append(comp.content) return "".join(parts) def handler(event, context): return {"answer": asyncio.run(_ask(event.get("question", "")))}

踩坑实录

API 版本混用:照旧教程写from vanna.openai.openai_chat import OpenAI_Chatvn.train(...)会困惑。2.0 主线是Agent+ToolRegistry,0.x 实现移到了 src/vanna/legacy/ 目录。新代码按 2.0 写;旧项目先找LegacyVannaAdapter包住,再逐步迁移。

可选依赖缺失:报ModuleNotFoundError: No module named 'anthropic''chromadb'。核心包只带基础依赖,每个 LLM、数据库、向量库都是独立 extra。执行pip install "vanna[fastapi,anthropic]"补齐,完整清单在 pyproject.toml 的optional-dependencies段。

Web 界面空白:服务起来了,浏览器却是空白页。CLI 默认从外部 CDN 加载前端组件脚本,内网环境连不上。加--dev --static-folder <本地静态目录>,或把--cdn-url指到你自托管的组件脚本。

SQL 块不显示:结果正常但看不到生成的 SQL。按默认配置,SQL 代码块只展示给admin组的用户。把你UserResolver返回的group_memberships里加上admin即可。

迭代提前中断:复杂问题 Agent 跑两三次工具就输出结论,SQL 不完整。调大AgentConfig(max_tool_iterations=8),并检查是不是temperature过高导致模型过早收敛。

选型速查

维度推荐配置
本地验证vannaCLI +mock_quickstart,零 API key
生产 LLMAnthropicclaude-sonnet-4-5或 OpenAI 高阶模型
参数temperature=0.2max_tool_iterations=5~8stream_responses=True
数据库演示 SQLite,生产按 extras 装 Postgres/MySQL 等 Runner
前端官方<vanna-chat>组件接/api/vanna/v2/chat_sse流式端点
安全UserResolver挂你自己的鉴权,审计默认开启

把上表按规模裁剪,就是最小可行配置:单机加 Mock 起步,上了真实用户再切 LLM 与 Runner。更多实现细节可直接看 src/vanna/tools/ 的工具基类、src/vanna/integrations/ 的各数据库与 LLM 适配,以及 notebooks/quickstart.ipynb 里的完整示例。

【免费下载链接】vanna🤖 Chat with your SQL database 📊. Accurate Text-to-SQL Generation via LLMs using Agentic Retrieval 🔄.项目地址: https://gitcode.com/GitHub_Trending/va/vanna

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 16:29:08

PyG 加载 QM9 数据集:从下载到跑通训练

PyG 加载 QM9 数据集&#xff1a;从下载到跑通训练 【免费下载链接】pytorch_geometric Graph Neural Network Library for PyTorch 项目地址: https://gitcode.com/GitHub_Trending/py/pytorch_geometric 第一次用 PyTorch Geometric&#xff08;PyG&#xff0c;一个基…

作者头像 李华
网站建设 2026/9/6 16:27:24

自动测试系统与网络化仪器:从总线演进到系统落地全解析

简介&#xff1a;这份《自动测试系统与网络化仪器》PPT课件聚焦电子测量与自动测试领域&#xff0c;适合测控、仪器科学与技术专业学生及从事测试系统开发的工程师。内容系统梳理了ATS的组成架构&#xff0c;从控制器、程控仪器到总线接口、测试软件与被测对象&#xff0c;并着…

作者头像 李华