使用Vanna.AI(推荐)、Vanna托管的向量数据库(推荐)通过OpenAI生成DuckDB的SQL
本笔记本介绍了使用vanna
Python包通过AI(RAG + LLMs)生成SQL的过程,包括连接到数据库和训练。如果您还没有准备好在自己的数据库上进行训练,您仍然可以使用示例SQLite数据库进行尝试。
你想使用哪个LLM?
-
[已选择] 通过 Vanna.AI 使用 OpenAI(推荐)免费使用 Vanna.AI 生成您的查询
-
OpenAI使用您自己的API密钥与OpenAI一起使用
-
Azure OpenAI如果您在Azure上部署了OpenAI模型
-
Anthropic使用Anthropic的Claude与您的Anthropic API密钥
-
Ollama免费在本地使用Ollama。需要额外的设置。
-
Google Gemini使用您的Gemini或Vertex API密钥与Google Gemini一起使用
-
通过Mistral API使用Mistral如果您有Mistral API密钥
-
其他LLM如果您有其他的LLM模型
你想在哪里存储“训练”数据?
-
[已选择] Vanna 托管的向量数据库(推荐)免费使用 Vanna.AI 托管的向量数据库(pgvector)。这可以在多台机器上使用,无需额外设置。
-
ChromaDB免费在本地使用ChromaDB的开源向量数据库。无需额外设置——所有数据库文件将在本地创建和存储。
-
Qdrant使用Qdrant的开源向量数据库
-
Marqo免费在本地使用Marqo。需要额外的设置。或者使用他们的托管选项。
-
其他向量数据库使用任何其他向量数据库。需要额外的设置。
设置
%pip install 'vanna[duckdb]'
import vanna
from vanna.remote import VannaDefault
api_key = # 你的API密钥来自 https://vanna.ai/account/profile
vanna_model_name = # 你的模型名称来自 https://vanna.ai/account/profile
vn = VannaDefault(model=vanna_model_name, api_key=api_key)
你想查询哪个数据库?
-
Postgres
-
Microsoft SQL Server
-
MySQL
-
[已选择] DuckDB
-
Snowflake
-
BigQuery
-
SQLite
-
Oracle
-
其他数据库使用Vanna为任何SQL数据库生成查询
vn.connect_to_duckdb(url='motherduck:')
训练
你只需要训练一次。除非你想添加更多的训练数据,否则不需要再次训练。
# 信息模式查询可能需要根据你的数据库进行一些调整。这是一个很好的起点。
df_information_schema = vn.run_sql("SELECT * FROM INFORMATION_SCHEMA.COLUMNS")
# 这将把信息模式分解成可以被LLM引用的小块
plan = vn.get_training_plan_generic(df_information_schema)
plan
# 如果你喜欢这个计划,那么取消注释并运行它以进行训练
# vn.train(plan=plan)
# 以下是添加训练数据的方法。确保你修改示例以匹配你的数据库。
# DDL语句非常强大,因为它们指定了表名、列名、类型以及潜在的关系
vn.train(ddl="""
CREATE TABLE IF NOT EXISTS my-table (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT
)
""")
# 有时你可能想添加关于业务术语或定义的文档。
vn.train(documentation="我们的业务将OTIF分数定义为按时和完整交付的订单百分比")
# 你也可以将SQL查询添加到你的训练数据中。如果你已经有一些查询,这很有用。你可以直接从编辑器中复制并粘贴这些查询以开始生成新的SQL。
vn.train(sql="SELECT * FROM my-table WHERE name = 'John Doe'")
# 你可以随时检查包能够引用的训练数据
training_data = vn.get_training_data()
training_data
# 如果有过时/错误的信息,你可以删除训练数据。
vn . remove_training_data ( id = '1-ddl' )
```## 询问AI
每当你提出一个新问题时,它将找到10个最相关的训练数据片段,并将其作为LLM提示的一部分来生成SQL。
```python
vn.ask(question=...)
启动用户界面
from vanna.flask import VannaFlaskApp
app = VannaFlaskApp(vn)
app.run()