Skip to content

使用Azure OpenAI和ChromaDB生成SQLite的SQL

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

使用Colab运行 在GitHub中打开

你想使用哪个LLM?

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

设置

%pip install 'vanna[chromadb,openai]'
from vanna.openai import OpenAI_Chat
from openai import AzureOpenAI
from vanna.chromadb import ChromaDB_VectorStore
class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
    def __init__(self, config=None):
        ChromaDB_VectorStore.__init__(self, config=config)
        OpenAI_Chat.__init__(self, client=AzureOpenAI(...), config=config) # 确保将你的AzureOpenAI客户端放在这里

vn = MyVanna(config={'model': 'gpt-4-...'})

你想查询哪个数据库?

vn.connect_to_sqlite('my-database.sqlite')

训练

你只需要训练一次。除非你想添加更多的训练数据,否则不要再次训练。

df_ddl = vn.run_sql("SELECT type, sql FROM sqlite_master WHERE sql is not null")

for ddl in df_ddl['sql'].to_list():
  vn.train(ddl=ddl)
# 以下是添加训练数据的方法。确保你修改示例以匹配你的数据库。

# 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()