Fan-out / merge
Распараллелить обработку независимых items → собрать результаты обратно.
Когда применять
- Несколько источников данных (RSS feeds, API endpoints) — fetch параллельно
- Применение одного prompt'а к N items — score N кандидатов параллельно
- Multiple LLM perspectives — несколько judges на один item
Паттерн в Python
import asyncio async def process_one(item): # fetch / LLM call / whatever return result results = await asyncio.gather( *[process_one(item) for item in items], return_exceptions=True # один сбой не валит весь батч ) # фильтр исключений ok = [r for r in results if not isinstance(r, Exception)]
Паттерн в LangGraph
LangGraph умеет Send API для динамического fan-out:
from langgraph.types import Send def dispatcher(state): return [Send("worker_node", {"item": item}) for item in state["items"]]
Каждый worker записывает в свой ключ state'а; reducer собирает.
Подводные камни
- Rate limits: asyncio.gather запустит всё сразу — у Gemini Free Tier ~60 RPM. Лекарство:
asyncio.Semaphoreдля ограничения concurrency - Cost: N параллельных LLM-вызовов = N * цена. Считать перед fan-out для больших N
- Partial failure: один item упал — не валить весь pipeline.
return_exceptions=True+ filter
Связано
- loop-until-dry — комбинируется с fan-out для completeness
- llm-as-judge — judges идут fan-out
Metadata
- title
- Fan-out / merge — параллельные запросы
- tags
- ['algorithm', 'parallelism', 'langgraph']
- created
- 2026-06-30