📚 Основано на материале:
🎥 “Fully Local Multi-Agent Systems with LangGraph” (Видео English 9 минут) — https://www.youtube.com/watch?v=4oC1ZKa9-Hs
📘 LangGraph Swarm: https://github.com/langchain-ai/langgraph-swarm-py
📘 LangGraph Supervisor: https://github.com/langchain-ai/langgraph-supervisor-py
📝 Конспект: https://mirror-feeling-d80.notion.site/Fully-Local-Multi-Agent-1b5808527b178066bde0ed981b27998c.
Этот пример демонстрирует, как создать полностью локальную мультиагентную систему типа Swarm (Рой) с двумя агентами:
- Alice — эксперт по сложению, использует инструмент
add(a, b). - Bob — «пират», который сам не считает и передаёт математические задачи Alice.
Ключевые особенности:
- 🧠 LangGraph Swarm (
langgraph_swarm) для роевой архитектуры. - 🔄 ReAct-агенты с инструментами и механизмом handoff (передача управления).
- 🖥 Локальная LLM через Ollama (
qwen3:latest). - 🧠 Память диалога через
InMemorySaver(checkpoint).
Swarm — это мультиагентная архитектура, где нет единого центрального контроллера.
Каждый агент:
- может вызывать инструменты;
- может передавать управление другим агентам (handoff);
- участвует в общем диалоге.
Схема:
flowchart LR
User --> Alice
Alice -- handoff --> Bob
Bob -- handoff --> Alice
Alice --> User
В отличие от Supervisor:
- Supervisor = строгое централизованное управление.
- Swarm = распределённая, гибкая передача управления между агентами.
Python/Swarm
├─ swarm_flight_hotel.py
├─ Images
│ ├─ swarm_flight_hotel_graph.PNG
│ ├─ DeBug_01.png
│ ├─ DeBug_02.png
│ ├─ DeBug_03.png
│ └─ DeBug_04.png
└─ README.md
from langchain_ollama import ChatOllama
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.prebuilt import create_react_agent
from langgraph_swarm import create_handoff_tool, create_swarm
model = ChatOllama(model="qwen3:latest")
checkpointer = InMemorySaver()def add(a: int, b: int) -> int:
"""Сложить два числа"""
return a + balice = create_react_agent(
model, # Локальная модель
[
add, # Инструмент — сложение
create_handoff_tool(agent_name="Bob") # Инструмент передачи управления агенту Bob
],
prompt="Ты Alice, эксперт по сложению..", # Системное описание агента
name="Alice", # Имя агента внутри Swarm
)- знает, как складывать числа;
- может передать управление Bob.
bob = create_react_agent(
model,
[
create_handoff_tool(
agent_name="Alice",
description="Передай Alice, она может помочь с математикой."
) # Инструмент передачи управления Alice
],
prompt="Ты Bob, ты говоришь как пират.You are Bob", # Bob говорит как пират
name="Bob",
)- говорит как пират;
- не решает математику сам, а передаёт задачи Alice.
workflow = create_swarm(
[alice, bob], # Список всех агентов
default_active_agent="Alice" # По умолчанию начинает Alice
)
# Компилируем приложение (граф) со встроенным checkpoint
app = workflow.compile(checkpointer=checkpointer)config = {"configurable": {"thread_id": "1"}}
turn_1 = app.invoke(
{"messages": [{"role": "user", "content": "я хотел бы поговорить с Бобом"}]},
config,
)
print(turn_1)
turn_2 = app.invoke(
{"messages": [{"role": "user", "content": "Сколько будет 5 + 7?"}]},
config,
)
print(turn_2)Пользователь:
"я хотел бы поговорить с Бобом"
- Активный агент по умолчанию: Alice
- Alice вызывает
handoff→ управление переходит к Bob. - Теперь активный агент: Bob
Пользователь:
"what's 5 + 7?"
-
Активный агент: Bob
-
Bob понимает, что не умеет считать → вызывает
handoffк Alice. -
Alice:
- вызывает инструмент
add(5, 7); - возвращает результат (12) пользователю.
- вызывает инструмент
Благодаря thread_id="1" состояние диалога (кто активен, история сообщений) сохраняется между вызовами app.invoke.
В этом примере используется:
checkpointer = InMemorySaver() # Всё состояние хранится в памяти
app = workflow.compile(checkpointer=checkpointer)InMemorySaver— хранит состояние (включая активного агента) в оперативной памяти.- Один и тот же
thread_idобеспечивает multi-turn диалог с сохранением контекста.
- Python 3.11
- Установленный Ollama
- Локальная модель: qwen3:latest
cd venv\Scripts
activate
cd ..\..pip install -r requirements.txt
pip install -U "langgraph-cli[inmem]"ollama list
ollama pull qwen3:latestcd ..\..\Python\Swarm
python.exe swarm_flight_hotel.pyПосле этого:
- откроется PNG с графом агентов (Alice ↔ Bob);
- в консоль будут выведены результаты
turn_1иturn_2.
Пример вывода см. в файле: output_01.txt
В .env можно указать:
LANGSMITH_API_KEY=...
LANGCHAIN_TRACING_V2=true
LANGCHAIN_PROJECT=multi-agent-supervisor-demoПосле этого:
- все шаги выполнения будут доступны в веб-интерфейсе LangSmith;
- можно видеть цепочку вызовов Supervisor → Agents → Tools.
Для визуальной работы с графом:
langgraph dev-
Откроется интерфейс по адресу
http://localhost:8123 -
Можно:
- просматривать граф;
- запускать и отлаживать сценарии Swarm;
- анализировать шаги и сообщения.
Этот пример — отличный старт для:
- изучения роевых мультиагентных систем;
- экспериментов с локальными моделями через Ollama;
- построения гибких AI-сценариев, где несколько агентов динамически делят между собой задачи.






