
Как я сокращаю задержку рабочего процесса агента в 3-5 раз без увеличения затрат на модель
19 августа 2025 г.«В первый раз, когда я построил агент, это было похоже на просмотр магии, то есть до тех пор, пока потребуется 38 секунд, чтобы ответить на простой запрос клиента и стоил мне 1,12 доллара за запрос».
Когда вы начинаете строить агентские рабочие процессы, где автономные агенты планируют и действуете на многоэтапные процессы, его легко увлечь. Гибкость невероятна! Но так же, как и накладные расходы, которые приходят с этим. Некоторые из этих болевых точек включают медленное исполнение, высокое использование вычислительных материалов и беспорядок движущихся частей.
Средняя земля в агентских рабочих процессах - это то, где обычно появляются проблемы с производительностью и лучшие возможности оптимизации.
За последний год я узнал, как сделать эти системы значительно быстрее и более экономически эффективнее, не жертвуя их гибкостью, и решил создать эту пьесу.
Прежде чем говорить оптимизацию, я хотел убедиться, что вы все знали, что я имею в виду, когда использую следующие слова:
- Рабочие процессы: Предопределенные последовательности, которые могут или не могут использовать LLM в целом.
- Агенты: Самостоятельно, и они могут решить, какие шаги предпринять и порядок, в котором они решают выполнить.
- Агентные рабочие процессы: Это гибрид, где вы устанавливаете общий путь, но даете агентам в своем рабочем процессе свобода перемещаться в рамках определенных шагов.
Обрезать количество шагов
То, что каждый должен иметь в виду при разработке агентских рабочих процессов, заключается в том, что каждый вызов модели добавляет задержку. Каждый дополнительный прыжок - еще один шанс для тайм -аута. И давайте не будем забывать о том, как это также увеличивает наши шансы на галлюцинации, что приводит к принятию решений, которые отклоняются от основной цели.
Рекомендации здесь просты:
- Объединить шаги в одну подсказку
- Avoid unnecessary micro-decisions that a single model could handle in one go
- Дизайн, чтобы минимизировать поездки в оба
На этом этапе дизайна всегда есть прекрасный баланс, и процесс всегда должен начинаться с наименьшего количества шагов. Когда я разрабатываю рабочий процесс, я всегда начинаю с одного агента (потому что, возможно, нам вообще не нужен рабочий процесс), а затем оцениваю его с определенными показателями и проверками, которые у меня есть.
Основываясь на том, где это не удается, я начинаю разложить части, где оценки оценки не соответствовали минимальным критериям, и с тех пор итерации. Вскоре я добираюсь до уменьшения возврата, как метод локтя в кластеризации, и соответственно выбираю свой счет.
Параллелизуйте все, что не имеет зависимостей
Контекст заимствования с точки зрения выше, последовательные цепи также являются задержкой ловушек. Если два спрашивают, не нуждаются в выводе друг друга, запустите их вместе!
Например, я хотел имитировать агент по поддержке клиентов, где я могу помочь клиенту получить статус заказа, проанализировать настроение запроса и создать ответ. Я начал с последовательного подхода, но затем понял, что получение статуса заказа и анализ настроения запроса не зависят друг от друга. Конечно, они могут быть коррелированы, но это ничего не значит для действия, которое я пытаюсь предпринять.
После того, как у меня были эти два ответа, я тогда подал статус заказа и настроения, обнаруженные в генераторе отклика, и это легко сбрило общее время, затрачиваемое с 12 секунд до 5.
Вырезать ненужные вызовы моделей
Мы все видели посты в Интернете, в которых рассказывается о том, как CHATGPT может стать немного зафиксированным, когда дело доходит до математики. Ну, это действительно хорошее напоминание о том, что эти модели не были созданы для этого. Да, они могут получить это в 99% случаев, но зачем оставить это на судьбу?
Кроме того, если мы знаем, какой расчет, который должен иметь место, почему бы просто не кодировать его в функцию, которая может быть использована, вместо того, чтобы использовать LLM, это самостоятельно? Если это может сделать правило, резерв или небольшая функция, пропустите вызов LLM. Этот сдвиг устранит ненужную задержку, снижает затраты на токен и повысит надежность за один раз.
Сопоставьте модель с задачей
«Не каждая задача построена одинаково» является фундаментальным принципом управления задачами и производительности, признавая, что задачи различаются по своей природе, требованиям и важности. Точно так же мы должны убедиться, что мы назначаем правильные задачи для правильной модели. Модели теперь бывают разных вкусов и размеров, и нам не нужна модель Llama 405B для выполнения простой задачи классификации или извлечения объектов; Вместо этого модель 8b должна быть более чем достаточно.
В наши дни часто можно увидеть, как люди разрабатывают свои агентские рабочие процессы с самой большой моделью, которая выходит, но это происходит за счет задержки. Чем больше модель, тем больше требуется вычисление и, следовательно, задержка. Конечно, вы можете разместить его в большем случае и сойти с рук, но это буквально стоимость.
Вместо этого, способ, когда я делаю разработку рабочего процесса, было бы начать с самого маленького. Моя модель-Llama 3.1 8b, которая оказалась верным воином для разложенных задач. Я начинаю с того, что все мои агенты используют модель 8B, а затем решаю, нужно ли мне найти большую модель, или если она достаточно проста, может быть, даже спуститься к меньшей модели.
Помимо размеров, было многоПлеменные знанияо том, какие ароматы LLM лучше справляются с каждой задачей, и это еще одно соображение, которое следует учитывать, в зависимости от типа задачи, которую вы пытаетесь выполнить.
Переосмысление вашей подсказки
Сейчас это общеизвестно, но когда мы проходим наши оценки, мы склонны добавлять больше ограждений к подсказке LLM. Это начинает раздувать подсказку и, в свою очередь, влияет на задержку. Существуют различные методы для создания эффективных подсказок, которые я не получу в этой статье, но несколько методов, которые я в конечном итоге использовал, чтобы сократить время ответа в оба конца, были быстрое кэширование для статических инструкций и схем.
Это включало добавление динамического контекста в конце подсказки для лучшего повторного использования кэша. Установка четких ограничений длины отклика, так что модель не съедает время, предоставляя мне ненужную информацию.
Кэшировать все
В предыдущем разделе я говорил о быстрого кэширования, но это не должно быть тем, где вы перестаете пытаться оптимизировать с кэшированием. Кэширование не только для окончательных ответов; Это то, что должно применяться везде, где применимо. Пытаясь оптимизировать определенные дорогие вызовы инструментов, я кэшировал промежуточные и окончательные результаты.
Вы даже можете внедрить квафы KV для состояний частичного внимания и, конечно же, любые данные, конкретные, такие как данные клиента или состояния датчиков. Внедряя эти стратегии кэширования, я смог сократить повторную задержку работы на 40-70%.
Спекулятивное декодирование
Вот одна для продвинутой толпы: используйте небольшую «черновую» модель, чтобы быстро угадать следующий токен, а затем провести большую модель или исправить их параллельно. Многие из более крупных инфраструктурных компаний, которые обещают более быстрый вывод, делают это за кулисами, так что вы можете также использовать ее, чтобы продолжить свою задержку.
Сохраните точную настройку на последнее время - и сделайте это стратегически
Создание - это то, о чем многие люди говорили в первые дни, но теперь некоторые из новых усыновленных LLM даже не знают, почему или когда его использовать. Когда вы посмотрите на это, вы увидите, что это способ, чтобы ваш LLM понял ваш домен и/или вашу задачу более подробно, но как это помогает задержать задержку?
Что ж, это не так много людей, о которых говорят, но есть причина, по которой я говорю об этой оптимизации в последний раз, и я немного доберусь до этого. Когда вы настраиваете LLM, чтобы выполнить задачу, приглашение, требуемое при выводе, значительно меньше, чем у вас было бы иначе, потому что теперь, в большинстве контекстов, то, что вы вкладываете в подсказку, выпекается в весах через процесс тонкой настройки.
Это, в свою очередь, питается в вышеупомянутой точке по сокращению вашей длины подсказки и, следовательно, задержке.
Следите за неустанно
Это самый важный шаг, который я сделал, пытаясь уменьшить задержку. Это устанавливает основу для любой из оптимизаций, перечисленных выше, и дает вам ясность в отношении того, что работает, а что нет. Вот некоторые из метрик, которые я использовал:
- Время до первого токена (TTFT)
- Жетоны в секунду (TPS)
- Точность маршрутизации
- Кэш -показатель
- Многоагентное время координации
Эти метрики говорят вам, где оптимизировать и когда, потому что без них вы летите слепым.
Итог
Самые быстрые, наиболее надежные агентские рабочие процессы не просто случаются. Они являются результатом безжалостного пошагового выреза, умной параллелизации, детерминированного кода, моделирования правильного размера и кэширования повсюду, это имеет смысл. Сделайте это и оцените свои результаты, и вы должны увидеть улучшения скорости в 3-5x (и, вероятно, даже основные экономии затрат) абсолютно доступны.
Оригинал