Введение в AI-агентов и продакшн-подход

Что такое AI-агент и чем он отличается от чат-бота

Содержание курса

0 / 1 баллов

Выбор инструмента по ключевым словам

Настоящая модель выбирает инструмент, читая его описание. Соберём грубую замену этому механизму: посчитаем, чьи ключевые слова чаще встречаются в запросе. Задача учебная, но вывод из неё рабочий — выбор целиком держится на описании, и невнятное описание означает, что модель будет промахиваться.

Задание

Реализуйте функцию choose_tool(query, tools). Первый аргумент — текст запроса пользователя, второй — словарь: имя инструмента → список его ключевых слов.

Вес инструмента — это суммарное число вхождений всех его ключевых слов в запрос. Считайте вхождения методом str.count без учёта регистра; он находит непересекающиеся вхождения, и этого здесь достаточно. Верните имя инструмента с наибольшим весом. Если наибольший вес набрали несколько инструментов, верните лексикографически меньшее имя. Если ни одно ключевое слово не встретилось, верните None.

Пример

tools = {
    "calc": ["sum", "add", "plus"],
    "db": ["sql", "select", "table"],
}

choose_tool("How to select from a table in SQL?", tools)  # "db"
choose_tool("Please add 2 and 2", tools)                   # "calc"
choose_tool("Hello world", tools)                          # None

Примечание

Запрос уже разобран и приходит аргументом — читать ввод не нужно. Пустых ключевых слов в списках нет, но сам словарь tools может оказаться пустым, а запрос — пустой строкой; в обоих случаях ответ None.

Разрешена только стандартная библиотека Python 3.12, и та здесь не понадобится.

О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

Проверяется тестами (1)
  • Примеры из условия
    _TOOLS = {
        "calc": ["sum", "add", "plus"],
        "db": ["sql", "select", "table"],
    }
    
    assert choose_tool("How to select from a table in SQL?", _TOOLS) == "db", \
        "три ключа db против нуля у calc — ожидалось 'db'"
    assert choose_tool("Please add 2 and 2", _TOOLS) == "calc", \
        "единственное совпадение 'add' — ожидалось 'calc'"
    assert choose_tool("Hello world", _TOOLS) is None, \
        "совпадений нет — ожидался None"
РешениеPython · Python 3.12 (basic)
Как проверяется решение

Проверяются функции и их результаты. Собственный запуск выполняет ваш код без авторских тестов. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.

Отправьте решение, чтобы увидеть результаты тестов.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.