Loop until dry
Для задач с неизвестным размером результата (найти все баги, собрать все блокеры, разметить все edge-cases) — крутить агента до тех пор пока K последовательных итераций не вернут ничего нового.
Когда применять
- Bug hunting — никогда не знаешь сколько багов
- Discovery новостей за период — может быть 5, может быть 50
- Eval coverage — найти все edge cases для теста
- Mining insights из транскрипта — пока есть что находить
Паттерн
seen = set() dry_streak = 0 DRY_THRESHOLD = 2 # сколько пустых итераций до остановки while dry_streak < DRY_THRESHOLD: found = await find_more(seen=seen) fresh = [x for x in found if key(x) not in seen] if not fresh: dry_streak += 1 continue dry_streak = 0 # reset for x in fresh: seen.add(key(x))
Подводные камни
- Бесконечный цикл: обязательно hard cap (max iterations / max budget / max time). Loop-until-dry без cap = $$$
- Дедуп нужен правильный:
seenдолжен ловить семантические дубли, не только exact match. Иначе агент возвращает то же другими словами каждую итерацию - Dry threshold: слишком 1 = пропустим хвост; слишком 5 = переплатим. Эмпирически 2-3 оптимально
Hard cap пример
MAX_ITERS = 20 iters = 0 while dry_streak < 2 and iters < MAX_ITERS: iters += 1 ...
Связано
- fan-out-merge — каждая итерация loop может быть fan-out
- llm-as-judge — judge может проверять "уже видели" семантически
Metadata
- title
- Loop until dry — поиск до исчерпания
- tags
- ['algorithm', 'completeness', 'search']
- created
- 2026-06-30