Initial commit: LangChain evolution tutorial deck (132 slides)

- Cover, TOC, 5 dividers, 3 recap slides
- 5 sections (chains, langgraph, deepagents, openswe, ecosystem)
- design-system.js with theme tokens + 9 helper functions
- research/: timeline + sources + per-tech notes
- final-compile.js + merge.js for rebuild pipeline
- output/: langchain-evolution.pptx (2.3 MB) + langchain-evolution.pdf (1.1 MB) + 7 sample previews
This commit is contained in:
2026-06-22 11:29:03 +03:00
parent ed5b5c91bf
commit 75601988c2
220 changed files with 13069 additions and 3 deletions
+328
View File
@@ -0,0 +1,328 @@
# Deep Agents
## Что это в одном абзаце
Deep Agents — это Python-библиотека LangChain Inc., позиционируемая как «batteries-included agent harness». Построена поверх LangGraph (граф-рантайм) и `langchain.agents.create_agent` (минимальный harness от LangChain 1.0). Deep Agents добавляет opinionated defaults: встроенный planning tool, pluggable filesystem backend, subagent-ы для изоляции контекста, persistent memory через `Store`, human-in-the-loop middleware. Вдохновлена Claude Code, Deep Research и Manus — то есть это попытка формализовать то, что делает Claude Code, в виде переиспользуемой библиотеки. **Важно: на дату snapshot 2026-06-22 формального major 1.0 для пакета не выпущено — последняя стабильная версия `deepagents==0.6.11`**, хотя README и блог-посты уже описывают архитектуру как «1.0-ready».
**Метаданные на дату snapshot 2026-06-22:**
- GitHub stars: ~24.9k
- Latest stable (Python): `deepagents==0.6.11` (от 18.06.2026)
- License: MIT
- JS-аналог: `deepagents` (npm, репо `langchain-ai/deepagentsjs`)
**Источники:**
- README `github.com/langchain-ai/deepagents`
- https://docs.langchain.com/oss/python/deepagents/overview
- https://www.langchain.com/blog/introducing-deepagents-cli
- https://medium.com/data-science-collective/building-deep-agents-with-langchain-1-0s-middleware-architecture-7fdbb3e47123
---
## Ключевые API (≥ 0.6.x)
### Импорты верхнего уровня
```python
from deepagents import create_deep_agent
from deepagents.middleware import SubAgentMiddleware
from deepagents.backends import FilesystemBackend, SandboxBackend
```
### Минимальный агент
```python
from deepagents import create_deep_agent
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[my_custom_tool],
system_prompt="You are a research assistant.",
)
result = agent.invoke({"messages": "Research LangGraph and write a summary"})
```
### Subagents (делегирование в изолированный контекст)
```python
from deepagents import create_deep_agent
research_agent = {
"name": "research",
"description": "Does deep web research",
"system_prompt": "You are a research specialist.",
"tools": [web_search],
}
writing_agent = {
"name": "writer",
"description": "Writes polished reports",
"system_prompt": "You are a writing specialist.",
"tools": [],
}
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
subagents=[research_agent, writing_agent],
)
# Main agent может вызывать subagents через `task` tool
```
### Filesystem backend
```python
from deepagents.backends import FilesystemBackend
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
backend=FilesystemBackend(root_dir="./workspace"),
)
# Встроенные tools: read_file, write_file, edit_file, ls, glob, grep
```
### Sandbox backend (для удалённого выполнения)
```python
from deepagents.backends import SandboxBackend
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
backend=SandboxBackend(provider="daytona", api_key="..."),
)
```
### Custom middleware (через LangChain 1.0 middleware)
```python
from langchain.agents.middleware import HumanInTheLoopMiddleware
from deepagents import create_deep_agent
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
middleware=[HumanInTheLoopMiddleware(interrupt_on={"bash": True})],
)
```
### Persistent memory через Store
```python
from langgraph.store.memory import InMemoryStore
store = InMemoryStore()
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
store=store,
)
# Cross-session memory через `store` namespace
```
### Skills (reusable behaviors)
```python
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
skills=[
{"name": "code_review", "path": "./skills/code_review.md"},
{"name": "deploy", "path": "./skills/deploy.md"},
],
)
```
---
## Что нового
### Архитектурные изменения по сравнению с просто `create_agent`
- **Planning tool `write_todos`** — встроенный, не надо писать свой.
- **Filesystem tools** — `read_file` / `write_file` / `edit_file` / `ls` / `glob` / `grep` — стандартный набор.
- **Subagent tool `task`** — вызов child-агента с изолированным контекстом.
- **Context management** — суммаризация длинных тредов, offloading tool outputs на диск.
- **Shell access** — `bash` tool для выполнения команд.
- **Pluggable backends** — local filesystem или remote sandbox.
- **Persistent memory** — cross-session recall через Store.
- **HITL middleware** — approve/edit/reject tool calls до их исполнения.
- **Skills system** — переиспользуемые поведения, загружаемые on-demand.
### Что нового в 0.6.x (последняя ветка на snapshot)
- Полная интеграция с LangChain 1.0 middleware-системой.
- Поддержка `Send` API для параллельных subagent-вызовов.
- Стабилизация плагинной системы backends.
- Улучшения в skills: версионирование и hot-reload.
---
## Что нужно раскрыть в презентации
- **Зачем Deep Agents поверх LangChain и LangGraph?** — opinionated defaults, батарейки в комплекте.
- **`task` tool и subagent isolation** — почему subagent-ы получают свой контекст, а не общий.
- **`write_todos` planning** — как агент декомпозирует задачу.
- **Filesystem как context overflow protection** — большие результаты offload-ятся на диск.
- **Sandbox backends** — Daytona, Modal, Runloop, LangSmith — паттерн «isolate first, full permissions inside».
- **Skills vs Tools** — skills это «знания» (markdown-инструкции), tools это «действия».
- **Security model** — «trust the LLM», границы только на уровне tool / sandbox.
- **Сравнение с Claude Code** — попытка воспроизвести паттерн, но в виде библиотеки.
---
## 7 рабочих примеров кода Python
### 1. Hello world
```python
from deepagents import create_deep_agent
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
system_prompt="You are a helpful assistant.",
)
result = agent.invoke({"messages": "Write a haiku about Python"})
```
### 2. С кастомным tool
```python
from langchain.tools import tool
from deepagents import create_deep_agent
@tool
def get_stock_price(ticker: str) -> str:
"""Return current stock price."""
return f"${ticker}: 123.45 USD"
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[get_stock_price],
)
result = agent.invoke({"messages": "What's the price of AAPL?"})
```
### 3. Subagent для делегирования
```python
from deepagents import create_deep_agent
researcher = {
"name": "researcher",
"description": "Researches topics on the web",
"system_prompt": "You do thorough research.",
"tools": [],
}
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
subagents=[researcher],
)
result = agent.invoke({"messages": "Research quantum computing and write a 200-word summary"})
```
### 4. Filesystem backend
```python
from deepagents import create_deep_agent
from deepagents.backends import FilesystemBackend
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
backend=FilesystemBackend(root_dir="./workspace"),
)
result = agent.invoke({"messages": "Create a file notes.md with Python best practices"})
```
### 5. HITL middleware
```python
from langchain.agents.middleware import HumanInTheLoopMiddleware
from deepagents import create_deep_agent
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
middleware=[HumanInTheLoopMiddleware(interrupt_on={"bash": True, "write_file": True})],
)
# При попытке выполнить bash или write_file — interrupt, ждёт человека
```
### 6. Persistent memory
```python
from langgraph.store.memory import InMemoryStore
from deepagents import create_deep_agent
store = InMemoryStore()
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
store=store,
system_prompt="Remember user preferences.",
)
# Store put/get вызываются изнутри нод агента
```
### 7. Skills (загрузка поведений)
```python
from deepagents import create_deep_agent
agent = create_deep_agent(
model="openai:gpt-4.1",
tools=[],
skills=["./skills/code_review.md", "./skills/deploy.md"],
)
# Агент загрузит skill когда посчитает нужным
```
---
## TypeScript-аналог
```typescript
import { createDeepAgent } from "deepagents";
const agent = await createDeepAgent({
model: "openai:gpt-4.1",
tools: [],
systemPrompt: "You are a helpful assistant.",
});
const result = await agent.invoke({ messages: "Write a haiku" });
```
JS-версия (`langchain-ai/deepagentsjs`) покрывает базовый API, но filesystem/sandbox backend-ы и subagents-конфигурация могут отставать от Python.
---
## Плюсы и минусы текущей версии (0.6.x)
### Плюсы
- **Batteries included** — planning + filesystem + subagents + skills из коробки.
- **Меньше boilerplate** чем LangGraph, opinionated defaults.
- **Плагинные backends** — local / Daytona / Modal / Runloop / LangSmith.
- **Skills system** — переиспользуемые поведения on-demand.
- **Open source + MIT** — можно форкать и адаптировать.
- **Хорошо документированный security model** — «trust the LLM, restrict at tool level».
### Минусы
- **Major 1.0 не зафиксирован** — нумерация 0.6.x может означать breaking changes в minor.
- **Opinionated** — если дефолты не подходят, override-ы могут быть сложными.
- **Sandbox providers требуют внешние аккаунты** — Daytona / Modal / Runloop — это SaaS.
- **Skills — новый концепт** — экосистема готовых skills ещё формируется.
- **Документация по middleware+skills** — некоторые edge cases не покрыты.
- **Performance overhead** — плагинная архитектура добавляет latency.
---
## Заметки для презентации
- Подчеркнуть иерархию: **LangGraph = runtime, LangChain.create_agent = thin harness, Deep Agents = opinionated harness**.
- Использовать аналогию: **Deep Agents = "Django поверх raw WSGI"**, даёт быстрый старт, но с conventions.
- Показать, как `task` tool позволяет main agent делегировать без загрязнения своего контекста.
- Объяснить, почему именно Claude Code вдохновил — это конкурентный аргумент: «посмотрите, что сделал Anthropic, мы сделали то же в open source».
- Если рассказывать про Open SWE — это **реальный пример использования Deep Agents как harness-а** для кодинг-агента.