Files
petya 75601988c2 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
2026-06-22 11:29:03 +03:00

329 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-а** для кодинг-агента.