Примеры / Мультиагент + знания

Обучающая coding-пара

AI-парный программист, который становится умнее каждый раз, когда вы им пользуетесь.

learning_pair.toml

Проблема

Каждая coding-сессия с AI начинается с нуля. Агент не помнит, что вы строили вчера, какие решения принимали и какие паттерны уже закрепили. Каждая сессия заново тратит время на восстановление одного и того же контекста.

Что, если бы ваш AI-парный программист помнил каждое архитектурное решение и со временем становился умнее?

Конфиг

learning_pair.toml определяет кворум — мультиагентную систему с planner, который помнит, и coder, который реализует. Planner использует инструменты знаний; coder использует инструменты редактирования. Ответственность разделена на уровне агентов.

Конфигурация кворума

[quorum]
cwd = "."
db = "/tmp/learning_pair.db"   # Постоянное хранилище знаний
delegation = true               # Включить делегацию planner -> coder
verification = false
snapshot_policy = "diff"        # Отслеживать изменения файлов через git diff
delegation_wait_policy = "all"
max_parallel_delegations = 1

Planner: оркестратор, который несет знания

[planner]
provider = "anthropic"
model = "claude-sonnet-4-5-20250929"
tools = [
  "delegate",                # Отправляет задачи coder-у

  # Жизненный цикл знаний — уникальная возможность planner-а
  "knowledge_ingest",
  "knowledge_query",
  "knowledge_consolidate",
  "knowledge_list_unconsolidated",
  "knowledge_stats",

  # Планирование и исследование (read-only)
  "read_tool", "index", "search_text", "glob", "ls",

  "create_task", "todowrite", "todoread",
  "question",
]
Знания у planner-а, а не у coder-а

Planner — единственный агент с инструментами знаний. Он запрашивает прошлые решения перед планированием, а затем добавляет новые уроки после ревью работы coder-а. Coder stateless — чистая реализация. Такое разделение сохраняет знания чистыми и консолидированными.

Middleware planner-а: режим агента

[[planner.middleware]]
type = "context"
warn_at_percent = 80
compact_at_percent = 90
fallback_max_tokens = 128000

[[planner.middleware]]
type = "agent_mode"
default = "plan"
reminder = """# Plan Mode — Knowledge-Driven Orchestrator
You are the planner. You must NOT edit files.
1. Query knowledge before planning
2. Break work into concrete tasks
3. Delegate implementation to coder
4. Ingest decisions and lessons"""
Middleware режима агента

Middleware agent_mode вставляет system reminder на каждом ходу и удерживает planner-а в режиме "plan". Он не начнет случайно писать код — это работа coder-а. Переключать режимы можно через dashboard сочетанием Ctrl+M.

Сводка делегации: дешевая модель для результатов

[quorum.delegation_summary]
provider = "anthropic"
model = "claude-haiku-4-5-20251001"  # Более дешевая модель

Когда coder завершает задачу, результат кратко суммируется более дешевой моделью перед возвратом planner-у. Это удерживает стоимость контекста на низком уровне — planner видит summary, а не полный diff.

Делегат coder: чистая реализация

[[delegates]]
id = "coder"
provider = "anthropic"
model = "claude-sonnet-4-5-20250929"
description = "Implementation specialist..."
capabilities = ["rust", "python", "typescript", "shell"]
tools = [
  "edit", "write_file", "read_tool", "index",
  "glob", "search_text", "ls",
  "shell",
  "todowrite", "todoread",
]

Middleware coder-а: лимиты + проверка дублирования

[[delegates.middleware]]
type = "limits"
max_steps = 80
max_turns = 25

[[delegates.middleware]]
type = "context"
warn_at_percent = 80
compact_at_percent = 90

# Выявляет дубли кода в выводе coder-а
[[delegates.middleware]]
type = "dedup_check"
threshold = 0.85    # Порог сходства 85%
min_lines = 10     # Проверять только блоки >= 10 строк
Middleware dedup check

Middleware dedup_check выявляет случаи, когда coder вот-вот запишет код, который на 85%+ похож на уже существующий в проекте. Он ловит copy-paste паттерны и поощряет DRY-реализацию.

Жизненный цикл через несколько сессий

Магия происходит между сессиями. Знания хранятся в SQLite. Planner с каждым разом становится умнее.

Сессия 1
Вы: "Add rate limiting to the API"

Planner запрашивает знания: пусто (первый раз)
Planner анализирует кодовую базу через read-only инструменты
Planner планирует: "Need middleware layer, token bucket, tests"
Planner делегирует задачу coder-у -> coder реализует
Planner делает ревью и ingest: "We used a token bucket approach with Redis backend. Middleware placed before auth layer."
Сессия 2 (на следующий день)
Вы: "Add authentication to the API"

Planner запрашивает знания: находит вчерашнее "token bucket, Redis backend, middleware before auth"
Planner планирует с учетом прошлых решений: "Place auth middleware after rate limiter, consistent with existing pattern"
Planner делегирует -> coder реализует (в соответствии с текущей архитектурой)
Planner добавляет знания: "Auth uses JWT, middleware consistent with rate limiting pattern"
Сессия 3+
Каждая сессия добавляет знания в граф. Планы planner-а становятся более согласованными с архитектурой проекта. Консолидация объединяет родственные записи: "API middleware uses a layered pattern: rate limiting -> auth -> routing."

Поток делегации

1. Запрос знаний Planner проверяет, что уже знает об этой кодовой базе и типе задачи.
2. План Planner разбивает задачу на шаги с учетом прошлых решений.
3. Делегирование Planner отправляет реализацию coder-у с полным контекстом.
4. Реализация Coder пишет код, запускает тесты и возвращает результаты.
5. Добавление уроков Planner просматривает результаты и сохраняет новые знания на будущее.

Ключевые возможности

  • Жизненный цикл знаний — ingest, query, consolidate между сессиями
  • Мультиагентный кворум — planner делегирует специализированному coder-у
  • Сводка делегации — дешевая модель суммирует вывод coder-а для planner-а
  • Middleware режима агента — удерживает planner-а в режиме "plan", а не "build"
  • Dedup check — ловит дублирующийся код еще до записи
  • Делегация с учетом контекста — прошлые знания формируют текущие планы

Попробуйте сами

# Запустите learning pair
cargo run --example qmtcode --features dashboard -- \
  confs/learning_pair.toml --dashboard

# Сессия 1: попросите его что-нибудь построить
#   "Add rate limiting to the API"

# Сессия 2 (перезапуск, та же db): попросите связанную задачу
#   "Add authentication to the API"
#   Обратите внимание: planner использует знания из сессии 1

# Опционально: создайте расписание консолидации
#   Trigger: Interval, 3600s (hourly)
#   Prompt: "Run knowledge consolidation..."
#   Max runs: 24