Vanna: генерация точных SQL-запросов из текста с помощью техники RAG

Общее введение

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

Vanna:利用RAG技术将文本生成精准SQL查询

 

Vanna:利用RAG技术将文本生成精准SQL查询

 

Список функций

  • Генерация SQL: Создание точных SQL-запросов с помощью естественного языка.
  • Обучение модели RAGПользователи могут обучать свои собственные модели RAG для соответствия конкретным данным.
  • Поддержка нескольких ЛЛМ: Совместим с OpenAI, Anthropic, HuggingFace и многими другими LLM.
  • Поддержка многовекторного хранения данных: Поддержка AzureSearch, PineCone, ChromaDB и других векторных хранилищ.
  • Поддержка нескольких баз данных: Совместим с PostgreSQL, MySQL, Snowflake и многими другими базами данных.
  • пользователь: Предоставляет Jupyter Notebook, Streamlit, Flask и другие пользовательские интерфейсы.

 

Использование помощи

Процесс установки

  1. Установка Ванны: Установите Vanna с помощью pip.
   pip install vanna
  1. Установка дополнительных пакетов: При необходимости установите другие дополнительные пакеты, подробности см. в документации.

Процесс использования

  1. Импортная Ванна: Импортируйте соответствующие модули в соответствии с используемой базой данных 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-...'})
  1. Обучение модели RAG: Выполняйте учебные команды по мере необходимости.
   vn.train(ddl_statements)
  1. Создание 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, .

практическое применение

Например, вот несколько примеров функций: Vanna:利用RAG技术将文本生成精准SQL查询

Когда вы задаете вопрос.vn.get_function(question=...)<span> </span> Будет найдена наиболее подходящая функция и заполнены необходимые параметры с помощью Большой языковой модели (LLM). Vanna:利用RAG技术将文本生成精准SQL查询

Чтобы ограничить выпуск определенным пользователем, можно использовать 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 автоматически извлекает из вопроса то, что похоже на параметр, и делает его доступным в качестве параметра функции.

Vanna:利用RAG技术将文本生成精准SQL查询

Когда использовать

Если у вас есть варианты, в которых конечные пользователи задают подобные вопросы, и вы хотите, чтобы пользователи могли выполнять только определенные типы анализов, которые были вручную одобрены командой инженеров, то функция 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> и более поздних версий для доступа к нему.

© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...