Vanna: генерация точных SQL-запросов из текста с помощью техники RAG
Общее введение
Vanna - это лицензированный MIT фреймворк Python с открытым исходным кодом, предназначенный для генерации SQL-запросов с помощью методов RAG (Retrieval Augmented Generation). Пользователи могут обучать модели RAG, применять их к своим собственным данным, а затем задавать вопросы, и Vanna будет возвращать соответствующие SQL-запросы. Эти запросы могут автоматически выполняться в базе данных, упрощая сложные операции с базой данных. Vanna поддерживает различные модели большого языка (LLM) и векторные решения для хранения данных в различных базах данных, таких как PostgreSQL, MySQL, Snowflake и других.


Список функций
- Генерация SQL: Создание точных SQL-запросов с помощью естественного языка.
- Обучение модели RAGПользователи могут обучать свои собственные модели RAG для соответствия конкретным данным.
- Поддержка нескольких ЛЛМ: Совместим с OpenAI, Anthropic, HuggingFace и многими другими LLM.
- Поддержка многовекторного хранения данных: Поддержка AzureSearch, PineCone, ChromaDB и других векторных хранилищ.
- Поддержка нескольких баз данных: Совместим с PostgreSQL, MySQL, Snowflake и многими другими базами данных.
- пользователь: Предоставляет Jupyter Notebook, Streamlit, Flask и другие пользовательские интерфейсы.
Использование помощи
Процесс установки
- Установка Ванны: Установите Vanna с помощью pip.
pip install vanna
- Установка дополнительных пакетов: При необходимости установите другие дополнительные пакеты, подробности см. в документации.
Процесс использования
- Импортная Ванна: Импортируйте соответствующие модули в соответствии с используемой базой данных LLM и векторов.
from vanna.openai_chat import OpenAI_Chat
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, config=config)
vn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})
- Обучение модели RAG: Выполняйте учебные команды по мере необходимости.
vn.train(ddl_statements)
- Создание SQL-запросов: Задайте вопрос, и Ванна вернет соответствующий SQL-запрос.
sql_query = vn.ask("给我所有客户的名字")
Детальное управление функциями
- Генерация SQL: Пользователи могут ввести вопрос на естественном языке, и Vanna автоматически сгенерирует SQL-запрос. Например, введите "Дайте мне имена всех моих клиентов", и Vanna сгенерирует соответствующий SQL-запрос.
- Обучение модели RAG: Пользователи могут обучать модели RAG на основе своих данных, чтобы повысить точность генерации SQL. Процесс обучения включает в себя предоставление DDL-запросов, на основе которых Vanna будет понимать структуру и взаимосвязи базы данных.
- Поддержка нескольких ЛЛМVanna совместима с широким спектром больших языковых моделей, что позволяет пользователям выбирать подходящую модель для генерации SQL по мере необходимости.
- Поддержка многовекторного хранения данных: Vanna поддерживает различные решения для хранения векторов.
- Поддержка нескольких баз данныхVanna совместима с широким спектром баз данных и может быть настроена и использована пользователями в соответствии с их типом базы данных.
- пользовательVanna предоставляет множество пользовательских интерфейсов, пользователи могут выбрать Jupyter Notebook, Streamlit, Flask и другие интерфейсы, чтобы работать легко и быстро.
пример кода (вычисления)
Ниже приведен полный пример кода, показывающий, как генерировать SQL-запросы с помощью Vanna:
from vanna.openai_chat import OpenAI_Chat
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, config=config)
vn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})
# 训练RAG模型
vn.train(ddl_statements)
# 生成SQL查询
sql_query = vn.ask("给我所有客户的名字")
print(sql_query)
Что такое функция RAG в генерации SQL?
Компания Vanna рада представить новаторскую функцию в генерации SQL: функция RAG (Retrieval Enhanced Generation). Эта новая опциональная экспериментальная функция предназначена для повышения согласованности и детерминированности генерации SQL, чтобы удовлетворить многочисленные запросы наших пользователей.
Что такое функция RAG?
Function RAG преобразует традиционные обучающие пары "вопрос - SQL" в вызываемые шаблоны (они же функции/инструменты). Затем Большая языковая модель (LLM) вызывает эти шаблоны для генерации SQL-запросов и любого связанного с ними кода постобработки (например, кода построения графиков). Важно, что при использовании Function RAG большая языковая модель (LLM) определяет только шаблоны SQL, которые будут использоваться, и любые параметры, которые необходимо предоставить. Такой подход не только обеспечивает более согласованный результат, но и значительно ускоряет процесс генерации SQL.
Мы выпускаем API Function RAG под другим доменом и брендом, чтобы отличить его от основных пакетов Python с открытым исходным кодом.
Ключевые особенности функции RAG
- Генерация SQL на основе шаблонов: Преобразуя обучающие пары в шаблоны, функция RAG гарантирует, что генерируемый SQL будет точным и релевантным запросу пользователя.
- Повышенная безопасность: Функция RAG уменьшает количество инъекций и утечек подсказок, обеспечивая защиту процесса генерации SQL от внешних манипуляций.
- Запросы, ориентированные на конкретного пользователя: Теперь пользователи могут передавать в запросах такую информацию, как идентификаторы пользователей, без риска, что эти данные будут перезаписаны. Это позволяет безопасно и эффективно выполнять такие персонализированные вопросы, как "Каковы мои последние 10 заказов?". .
- Интегрированная генерация кода диаграммы: В дополнение к SQL Function RAG также обрабатывает генерацию кода диаграмм, что позволяет генерировать SQL и соответствующий ему код визуализации в одном запросе.
- Поддержка нескольких языков: Эта функциональность доступна через GraphQL API, что позволяет использовать ее не только из Python, но и из любого языка программирования. Это открывает возможность интеграции в различные бэкенды, включая такие фреймворки, как Ruby on Rails, .
практическое применение
Например, вот несколько примеров функций:
Когда вы задаете вопрос.vn.get_function(question=...)<span> </span>
Будет найдена наиболее подходящая функция и заполнены необходимые параметры с помощью Большой языковой модели (LLM).
Чтобы ограничить выпуск определенным пользователем, можно использовать vn.get_function(question=..., additional_data={"user_id": ...})<span> </span>
Методы. Это позволит убедиться, что user_id<span> </span>
параметр задается детерминированно.
Чтобы создать новую функцию, если вы делаете это вручную, вы можете использовать vn.create_function(...)<span> </span>
метод, или вы можете использовать встроенное веб-приложение для выполнения этого действия.
Создано вручную
vn.create_function(question=..., sql=..., plotly_code=...)
Создание функций веб-приложений
В веб-приложении появилась новая кнопка, позволяющая выбрать, как обучать результаты: в виде пар "вопрос-SQL" или в виде функций. Функция RAG автоматически извлекает из вопроса то, что похоже на параметр, и делает его доступным в качестве параметра функции.

Когда использовать
Если у вас есть варианты, в которых конечные пользователи задают подобные вопросы, и вы хотите, чтобы пользователи могли выполнять только определенные типы анализов, которые были вручную одобрены командой инженеров, то функция RAG - это отличный способ обеспечить, чтобы пользователи могли выполнять только одобренные анализы.
Ограничение доступа к утвержденным аналитическим данным помогает конечным пользователям быть уверенными в том, что они видят правильные данные и просматривают их правильным образом. Если вы интегрируете ее в SaaS-приложение, это позволит вам передать ее в руки внутренних бизнес-пользователей или конечных пользователей.
Любой пользователь может извлечь выгоду из повышения скорости, предлагаемого Function RAG. Однако аналитики данных могут захотеть вернуться к остальным функциям генерации SQL в Vanna при выполнении новых анализов, которые не присутствуют в больших объемах обучающих данных. Если вы используете векторную базу данных, размещенную на хостинге Vanna, функция резервного копирования автоматически включается во встроенное веб-приложение с помощью параметра function_generation=True<span> </span>
.
Интеграция с API GraphQL
Помимо пакета Python, можно вызывать Function RAG с помощью GraphQL API, что позволяет использовать его в других языках и фреймворках. Чаще всего мы получаем запрос на возможность использовать ее в Ruby on Rails.
юзабилити
Function RAG доступен в рамках тарифных планов Vanna Free, Premium и Enterprise Edition. Вы можете найти Function RAG в разделе Vanna v0.6.0<span> </span>
и более поздних версий для доступа к нему.
© заявление об авторских правах
Авторское право на статью Круг обмена ИИ Пожалуйста, не воспроизводите без разрешения.
Похожие статьи
Нет комментариев...