Однако я столкнулся с серьезной проблемой с надежностью обнаружения намерений.
Проблема
LLM часто неправильно классифицирует намерения пользователя, особенно если вводимые данные короткие, двусмысленные или диалоговые. Это приводит к:
- Выбирается неправильная функция
- Необходимые аргументы собираются неправильно
- Вызов функции завершается неудачно из-за отсутствия или неправильных параметров
Ввод пользователя:
Код: Выделить всё
approve
- Система должна распознать это как неоднозначное действие
- Запросить разъяснения (например, выполнить действие вместо запроса ИЛИ запросить Issue_id)
- LLM иногда направляет его в функцию запроса.
- Или вызывает Approved_Completion без обязательных аргументов.
- Или выдает противоречивые результаты при разных запусках.
Ввод пользователя:
Код: Выделить всё
make it high priority
Код: Выделить всё
update_priority(issue_id=?, priority="HIGH")
- Намерение иногда определяется как query_function
- Или не удается извлечь приоритет
- Или происходит сбой из-за отсутствия Issue_id, даже если он был указан ранее в разговоре
- Использование маршрутизации на основе подсказок LLM с вызовом инструментов
- Передача истории разговоров для контекста
- Использование модели для:
Обнаружения намерение - Извлечение аргументов
- Обработка последующих действий, таких как «это», «эта проблема»
Почему это проблема
В производстве это ведет к:
- Ненадежной автоматизации
- Нарушенным рабочим процессам
- Плохому пользовательскому опыту
Что лучше всего сделать эта система надежна в производстве?
В частности:
- Следует ли мне избегать полной зависимости от LLM для обнаружения намерений?
- Рекомендуется ли гибридный подход (на основе правил + LLM)?
- Как Вы обрабатываете:
- Неоднозначные входные данные, такие как «одобрить», «переназначить»
- Последующие действия, такие как «это», «тот»
- Следует ли мне реализовать конечный автомат (например, Redis) для сбора аргументов вместо использования памяти LLM?
Я хочу построить систему, в которой:
- Обнаружение намерений является детерминированным
- Сбор аргументов надежный
- Вызовы функций никогда не завершаются сбоем из-за отсутствия параметров
- Python (FastAPI)
- Groq (LLaMA 3)
- Вызов функций через схемы инструментов
- Redis (для памяти сеанса)
Мобильная версия