LangGraph Intent Router

Практический паттерн маршрутизации: отдельный узел-оркестратор классифицирует намерение запроса и условным ребром направляет его в нужную ветку (RAG / инструмент / обычный диалог). Часто двухуровневый: сначала выбор ветки, затем внутри ветки — следующее решение.

Суть

Вместо одной всеведущей цепочки на входе ставится дешёвый классификатор: его задача — не ответить, а выбрать, какой узел вызвать на основе контекста запроса. Это явный, управляемый и наблюдаемый роутинг в графе (Agent Routing через условные рёбра LangGraph Nodes and Edges).

Зачем это нужно

  • Экономия: классификация — задача проще генерации ответа, под неё берут небольшую/дешёвую модель, а тяжёлую LLM зовут только в нужной ветке.
  • Контроль: маршрут виден на диаграмме графа, его можно дебажить и менять, не трогая логику узлов.

Как работает

  • Узел intent_router_node: по входящему промпту определяет intent (например rag / tool / smalltalk) и кладёт его в state.
  • Условное ребро от роутера: add_conditional_edges("router", route_fn, {"rag": "rag_node", "tool": "tool_node", "smalltalk": "smalltalk_node"}).
  • Двухуровневость: после первого выбора ветка может содержать собственное условное ребро. В практическом агенте C6: уровень 1 — роутер выбирает инструмент; уровень 2 — rag_node решает «нашёл / не нашёл» и при неудаче уходит в LangGraph MCP as Node.
  • State обычно содержит user_input, intent, retrieved_docs, tool_result, final_answer, trace.

Пример

START → intent_router_node ─(conditional)→ rag_node      ─(conditional)→ final | mcp_node
                            ├──────────────→ tool_node    ───────────────→ final
                            └──────────────→ smalltalk_node ─────────────→ final

Связано с

  • Agent Routing — общий паттерн роутинга; здесь — реализация условными рёбрами
  • LangGraph Nodes and Edges — роутер = узел + условное ребро
  • LangGraph MCP as Node — второй уровень: fallback из RAG-ветки
  • LangGraph — каркас, в котором собирается многоветочный агент

Открытые вопросы

  • классификатор: отдельная маленькая LLM vs эмбеддинг-классификатор vs правила — что дешевле/надёжнее