4.2 👨‍🔧👩‍🌾👷‍♂️ Собери свою банду агентов и завали босса

📊Задача на SQL-агента.🕵️‍♂️

Зачем нам учить язык запросов SQL, если можно человеческим языком заставить сделать запрос Агента?!

Что делать? Итак нам дана база данных PostgreSQL с информацией об аренде DVD. Мы хотим получить информацию из этой базы с помощью агента.

Что на входе?  Датасет с вопросами в столбце question и база данных.

Загрузка файлов с помощью кода
import pandas as pd
df = pd.read_csv("https://stepik.org/media/attachments/lesson/1107866/rental_dvd.csv")
# для загрузки базы данных
!wget https://stepik.org/media/attachments/lesson/1107866/dvdrental.tar

Что на выходе? csv файл, содержащий два столбца - question, answer

Код для подключения базы данных
# Install postgresql server
!sudo apt-get -y -qq update
!sudo apt-get -y -qq install postgresql
!sudo service postgresql start
# Setup a password `postgres` for username `postgres`
!sudo -u postgres psql -U postgres -c "ALTER USER postgres PASSWORD 'postgres';"
!sudo -u postgres psql -U postgres -c "CREATE DATABASE dvdrental;" # CREATE DATABASE
!sudo -u postgres psql -U postgres -c "create user root with encrypted password 'mypass';" # CREATE ROLE
!sudo -u postgres psql -U postgres -c "GRANT postgres TO root;" # GRANT ROLE
!sudo -u postgres psql -U postgres -c "grant all privileges on database dvdrental to root;" # GRANT
!wget https://stepik.org/media/attachments/lesson/1107866/dvdrental.tar
!sudo pg_restore -U root -d dvdrental /content/dvdrental.tar
from langchain_community.utilities import SQLDatabase
# подключимся к базе
db = SQLDatabase.from_uri("postgresql+psycopg2://root:mypass@localhost:5432/dvdrental")

Замечание: Ваше решение будет зачтено, если в нём будет минимум 3 правильных ответов.


А есть ли способ решить не используя платные модели? где нибудь пример может есть?

@Дмитрий_Блинов, небольшие опенсорс модели вряд ли справятся, может специально зафайнтюненные. Надо поискать. А для запуска больших - ресурсы нужны.

@Дмитрий_Блинов,  в предыдущих задачах на агентов. Вот такой вариант справлялся. 

from langchain_community.llms import HuggingFaceEndpoint
os.environ['HUGGINGFACEHUB_API_TOKEN'] = 'ххх'
llm = HuggingFaceEndpoint(repo_id="mistralai/Mixtral-8x7B-Instruct-v0.1")

@Иван_Александров, Что то эта модель мне ошибку выдает 

Agent stopped due to iteration limit or time limit.

Пробовал 

llm = HuggingFaceEndpoint(repo_id='QuantFactory/Meta-Llama-3-8B-Instruct-GGUF')

и GigaChat - ответы у них одинаковые, но система не принимает.

SQL-агент работает только с openAI ?

@Дмитрий_Блинов, не только с онепАи. Но надо поподбирать модель.

У вас неправильный ответ на вопрос "Из какой страны" и, как результат, решение задачи не принимается, если есть ещё 1 непрвильный ответ. 
Какая модель OpenAI используется по api курса? Токены по ключу курса закончились, пробовала со своим ключом gpt-3.5-turbo - добиться правильного ответа очень сложно, а в решениях выложен колаб где по апи ключу курса всё правильно, кроме фильма.

@Alina_Vavilova, по api курса используется gpt-3.5-turbo. А какой правильный ответ на вопрос "Из какой страны"?

Комментарий закреплён

Бейзлайн 4/5

колаб

Вы побили порог в 4: ваша точность 4 из 5.

Я б подкрутил систему проверку домашних заданий. Поскольку результаты аналогичные, но в иной формулировки задание не проходили, например вот эти ответы:

  1. e-mail клиента Enrique Forsythe: enrique.forsythe@sakilacustomer.org
  2. В коллекции преобладают фильмы с рейтингом PG-13 (223 фильма), за ним следуют NC-17 (210), R (195), PG (194) и G (178).
  3. Самый короткий фильм с актером Johnny Lollobrigida называется "Ridgemont Submarine" и длится 46 минут.
  4. Сотрудник Mike Hillyer из Канады.
  5. Средний рейтинг (rental_rate) фильмов, которые длятся меньше часа, составляет примерно 2.91.

Получили 2 из 5 баллов изначально, хотя в принципе ответы тут верные.

Вы побили порог в 3: ваша точность 4 из 5.