tgoop.com/neuraldeep/1587
Create:
Last Update:
Last Update:
Агент или Пайплайн?
Середина 25го года – хайп вокруг агентов начал перерастать в рабочие решения: claude code, perplexity labs, computer use и т.д.
Правда почему-то сейчас любые два запроса к API зовут агентом. А если еще с разными промптами, то, уууууу, аж система агентов.
Это бред. Большая часть того, что называют агентами – просто пайплайны – жестко заданные наборы шагов. Часть из них – запросы к LLM, часть – просто логика, например, запустить код, который сгенерировала LLM на прошлом шаге.
Агентность – способность системы самой принимать решения о типе следующего действия на основе результатов предыдущих.
Агентность – это шкала, а не бинарное значение. У системы ее может быть больше, а можем быть меньше. Как у людей.
Но для простоты, я использую вот такое разделение:
- Если заранее известно, что будет после шага X – это пайплайн.
- Если система сама решит после того как шаг X выполниться, то это агент.
- Но если алгоритим выбора захардкожен извне – это все еще пайплайн (просто более гибкий).
———
Примеры
Задача – сделать систему, которая будет отвечать на запрос пользователя используя информацию из интернета.
1. Сначала ищем странички, потом делаем запрос к LLM, подставляя их в контекст
relevant_sites = await search_google(query)
response = await generate_response(query, relevant_sites)
Агент? Нет – шаги жестко зафиксированы
———
2. Усложняем. Смотрим, что если нашли слишком мало страниц, то пытаемся поменять запрос пользователя и искать еще
relevant_sites = await search_google(query)
if len(relevant_sites) < 10:
optimized_query = await optimize_user_query(query)
more_sites = await search_google(optimized_query)
relevant_sites.extend(more_sites)
response = await generate_response(query, relevant_sites)
Вооо, теперь агент. Мы же не знаем заранее, по какому пути пойдем, да? Но решение принимает не ИИ, а программист, который написал if. Так что это тоже не агент.
———
3. Пишем агента. Теперь LLM сама определяет в check_enough_info, готовы ли генерировать ответ, или нужно добавить еще результатов.
relevant_sites = await search_google(query)
if not await check_enough_info(query, relevant_sites):
optimized_query = await optimize_user_query(query)
more_sites = await search_google(optimized_query)
relevant_sites.extend(more_sites)
response = await generate_response(query, relevant_sites)
Уже лучше, но на самом деле это еще не полноценный агент. Все равно явная последовательность шагов – модель выбирает только одну ветку, а дальше все снова определено. Но мы уже близко
———
4. Настоящему агенту нужно прописать набор действий и дать их совершать (подсовывая ему после выполнения каждого действия новую информацию в контекст)
state["query"] = query
state["sites"] = []
while "response" not in state:
next_step = await choose_next_step(state)
if next_step == "search_google":
state["sites"].extend(await search_google(query))
elif next_step == "optimize_query":
state["query"] = await optimize_user_query(query)
elif next_step == "generate_response":
state["response"] = await generate_response(query, state["sites"])
А чтобы делать такие системы надежными и масштабируемыми, нужно использовать Structured Output и определять шаги через pydantic/zod классы. Так задаем структуру размышлений для модели, чтобы она хорошо выбирала следующий шаг (SGR).
Почитать:
- Разгоняли с @neuraldeep в комментах про агентность, а через пару часов он сделал свой диприсерч всего в 600 строк кода. Особенно полезно посмотреть на pydantic классы
- База по SGR (structured guided reasoning) от @llm_under_hood
- Моя серия из 3 постов про structured_output
BY Neural Kovalskii

Share with your friend now:
tgoop.com/neuraldeep/1587