赞
踩
官方连接:Vanna.AI - Personalized AI SQL Agent
基于大模型的TextToSql的关键为给大模型提供正确有效的数据库信息及问题,以提升大模型生成sql的正确率。database_info + question形成prompt,但是实际中通常会遇到一个问题,生产中的数据库结构之复杂,通常一个数据库可能200-500个表,那么prompt通常容不下这么多信息?这是面临的主要问题:如何在有效的prompt长度限制之内传递给大模型有效的信息辅助生成sql?
选表!
让大模型根据问题自动选择相关的表信息组合形成prompt。
完全可以借助RAG完成自动选表!将数据库相关信息存入向量知识库,每次查询检索相关表信息形成prompt,可以很好的解决上述问题。Vanna-ai正是借助RAG增强了大模型SQL的生成能力。
Vanna 使用一种称为 LLM(大型语言模型)的生成式人工智能。简而言之,这些模型是在大量数据(包括一堆在线可用的 SQL 查询)上进行训练的,并通过预测响应提示中最有可能的下一个单词或“标记”来工作。Vanna 优化了提示(通过向量数据库使用嵌入搜索)并微调 LLM 模型以生成更好的 SQL。
Vanna 正在使用和试验许多不同的LLM,以获得最准确的结果。OpenAI 的 GPT 模型通常表现出色,但有时 Google 的 Bard、Meta 的 LLAMA 和 Falcon 模型表现最好。
从本质上讲,Vanna 是一个 Python 包,它使用检索增强来帮助您使用 LLM 为数据库生成准确的 SQL 查询。
Vanna 的工作过程分为两个简单步骤 :
当你向 Vanna 提出问题时,会执行以下过程
随着时间的推移,Vanna 不断提高对您的模式的理解,并正确回答越来越多的问题。
- import vanna
- from vanna.openai.openai_chat import OpenAI_Chat
- from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore
-
- class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
- def __init__(self, config=None):
- ChromaDB_VectorStore.__init__(self, config=config)
- OpenAI_Chat.__init__(self, config=config)
-
- vn = MyVanna(config={'api_key': 'sk-*************', 'model': 'gpt-3.5-turbo'})
-
- # 训练向量库
- vn.train(ddl="""
- SELECT customer_name, SUM(sales_amount) as total_sales
- FROM sales_wn
- GROUP BY customer_name
- ORDER BY total_sales DESC
- LIMIT 10;
- """)
-
- vn.train(sql="SELECT name, age FROM my-table WHERE name = 'John Doe'")
-
-
- # 询问问题
- vn.ask("What are the top 10 customers by sales?")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。