Skip to content

使用Vanna.AI(推荐)、Vanna托管的向量数据库(推荐)通过OpenAI生成DuckDB的SQL

本笔记本介绍了使用vanna Python包通过AI(RAG + LLMs)生成SQL的过程,包括连接到数据库和训练。如果您还没有准备好在自己的数据库上进行训练,您仍然可以使用示例SQLite数据库进行尝试。

使用Colab运行 在GitHub中打开

你想使用哪个LLM?

你想在哪里存储“训练”数据?

设置

%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)

你想查询哪个数据库?

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=...)

启动用户界面

vanna-flask

from vanna.flask import VannaFlaskApp
app = VannaFlaskApp(vn)
app.run()