Фреймворки: LangGraph, LangChain, CrewAI, AutoGen
Писать цикл агента вручную полезно для понимания, но в продакшне берут фреймворк. Разбираем главные и их назначение.
Агентный фреймворк — библиотека, которая берёт на себя рутину: цикл, вызов инструментов, парсинг, память, оркестрацию, — чтобы вы описывали логику агента, а не инфраструктуру.
Что даёт фреймворк
В разделах 2–5 мы руками писали диспетчер, парсер, цикл, память, маршрутизацию. Фреймворк всё это уже реализовал и протестировал. Сверху он добавляет интеграции с моделями, готовые инструменты, логирование и обработку ошибок. Вы пишете что агент делает, а не как крутится цикл.
Главные фреймворки
| Фреймворк | Подход | Силён в |
| LangChain agents | цепочки и агенты, много готовых инструментов | быстрый старт, экосистема |
| LangGraph | агент как граф состояний | сложные циклы, явное состояние, контроль |
| CrewAI | команда агентов с ролями | мультиагентность «из коробки» |
| AutoGen | агенты, общающиеся диалогом | беседы агентов, кооперация |
LangGraph: агент как граф
LangGraph моделирует агента как граф: узлы — шаги (вызов модели, инструмента), рёбра — переходы, плюс явное общее состояние. Это удобно для сложных циклов с ветвлениями, рефлексией и человеком-в-цикле, потому что весь поток виден и управляем. Код ниже — иллюстрация идеи (нельзя запустить в браузере: нужен пакет и доступ к модели), поэтому он помечен как text.
# Псевдо-LangGraph: узлы и переходы (идея, не запускается в браузере)
graph = StateGraph(AgentState)
graph.add_node("think", call_model) # узел: спросить модель
graph.add_node("act", call_tool) # узел: выполнить инструмент
# условный переход: если модель просит инструмент -> act, иначе конец
graph.add_conditional_edges("think", route_decision, {
"tool": "act",
"done": END,
})
graph.add_edge("act", "think") # после инструмента — снова думать
app = graph.compile()
Заметьте: это ровно наш цикл ReAct из раздела 3 — «думать → действовать → думать», — только описанный как граф, с явным состоянием и переходами.
CrewAI: команда ролей
CrewAI заточен под мультиагентность из раздела 5: вы описываете агентов с ролями и задачами, фреймворк организует их совместную работу.
# Псевдо-CrewAI: агенты-роли (идея)
researcher = Agent(role="Исследователь", goal="найти факты", tools=[search])
writer = Agent(role="Писатель", goal="оформить отчёт")
crew = Crew(agents=[researcher, writer], tasks=[task1, task2])
result = crew.kickoff()
Брать фреймворк или писать руками
- Фреймворк — когда нужен продакшн: меньше своего кода, готовые интеграции, логирование, поддержка. Минус — свои абстракции и «магия», которую надо изучить.
- Вручную — для обучения, прототипов и нестандартной логики, где фреймворк мешает. Вы уже умеете: цикл, диспетчер, парсер — это и есть «руками».
Главное — понимать механику под капотом. Тогда любой фреймворк читается как «обёртка над тем, что вы уже знаете», а не как магия.
Итог
- Фреймворки берут рутину (цикл, инструменты, память, оркестрацию) на себя — вы пишете логику.
- LangChain — экосистема и быстрый старт; LangGraph — граф состояний для сложных циклов; CrewAI/AutoGen — мультиагентность.
- Понимание ручной механики делает любой фреймворк прозрачным; для продакшна обычно берут готовый.