Как ИИ-агент выполняет задачу: интерактивная схема
Три задачи, одна карта системы. Проследите запрос от пользователя до модели, инструментов и ответа — с контекстом, MCP и памятью GPU на каждом шаге.
Учебная симуляция. Реальные модели, MCP-серверы, файлы и сеть не запускаются. Схема не делает fetch/XHR. Здесь наблюдаемые запросы и результаты, а не внутренние мысли модели.
В области схемы: ← / → — шаги, пробел — пуск/пауза. Enter или пробел на узле — описание. Ожидание подтверждается кнопкой «Дальше».
↑ Запрос к модели
↓ Ответ / tool call
⇄ Вызов MCP
⌘ Встроенный инструмент
◇ Embedding-модель
⌕ Поиск по индексу
▤ Чтение / запись диска
↗ Сеть
Ⅱ Ожидание пользователя
⑂ Субагент
○ Пользователь / контекст
Карта системы
Обмен → результат → контекст
GPU / VRAM · рабочая Qwen3 8B
Общие веса: 4,678 ГиБ. Оценки KV-кэша приведены у каждого шага.
Расчёт хранения, не измерение нагрузки.
Светлые линии — возможные связи. Цветные стрелки — маршрут шага; номера задают порядок, движущийся пунктир и пакет выделяют текущую связь. Подписи объясняют тип обмена. Активные узлы имеют зелёный фон, неиспользуемые — пунктирную рамку.
Подбери видеокарту под Qwen3.8-27B с контекстом 32K
Рабочая LLM агента — Qwen3 8B. Qwen3.8-27B здесь только предмет расчёта: она не загружается. Чтение заметки разрешено заранее; поиск после оценки памяти — фиксированный workflow харнесса. Настройки на весь сценарий: num_ctx=8192, OLLAMA_NUM_PARALLEL=1; модель уже загружена, KV-буферы выделены заранее.
○ Пользователь / контекстЛокально
ШАГ 1 / 14
Задача приходит в приложение
Пользователь задаёт модель и длину контекста. Харнесс пока не знает конфигурацию компьютера.
Пользователь → Приложение-агент
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Сообщение пользователя
{
"role": "user",
"content": "Подбери видеокарту под Qwen3.8-27B с контекстом 32K"
}
⇄ Вызов MCPЛокально
ШАГ 2 / 14
Харнесс узнаёт доступные инструменты
Клиенты могут сначала вызвать server/discover, затем tools/list. Каждый запрос самодостаточен: версия и возможности клиента находятся в params._meta; inputSchema преобразуется в tools API модели.
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Во вход уходят системная инструкция, задача и схемы функций. Содержимого заметки здесь ещё нет.
Приложение-агент → Языковая модель
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Модель возвращает tool call. Это только запрос на действие; файл ещё не прочитан.
Языковая модель → Приложение-агент
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Харнесс проверяет разрешённый путь и отправляет JSON-RPC локальному серверу «Файлы». На этой границе работает протокол, а не GPU.
Приложение-агент → MCP: Файлы
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Файловый сервер читает условный мой-пк.md. Лимит 450 Вт — заданный владельцем бюджет GPU, а не универсальный вывод из мощности БП.
MCP: Файлы → Диск
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Ответ MCP превращается в сообщение role: tool. Следующий вызов модели увидит характеристики компьютера.
MCP: Файлы → Приложение-агент
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Харнесс передаёт прежнюю историю, tool call и результат чтения. Веса модели не меняются, но вход стал длиннее.
Приложение-агент → Языковая модель
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Модель выбирает memory_estimate с конкретными параметрами Qwen3.8. Оценку выполнит программная формула сервера.
Языковая модель → Приложение-агент
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Харнесс передаёт Q4_K_M, 32K и FP16 KV. Сервер считает веса, обычный KV, состояния DeltaNet и резерв отдельно.
Приложение-агент → MCP: Каталог GPU
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Все числа вычислены при сборке сайта из memory.mjs. Это текстовый сценарий без vision и пика prefill; результат добавляется к истории инструмента.
MCP: Каталог GPU → Приложение-агент
○ CPU / приложение; GPU не участвует
Бюджет запрошенной Qwen3.8-27B
Q4_K_M · 32K · KV FP16 · без vision
Веса
15,402 ГиБ
Обычный KV
2 ГиБ
Состояния DeltaNet
0,144 ГиБ
Резерв
1,5 ГиБ
Всего
19,046 ГиБ
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Заранее заданный шаг workflow использует результат расчёта и бюджет БП. Это tools/call от MCP-клиента, а не выдуманный дополнительный ответ LLM; проверка разъёмов и размеров остаётся отдельной.
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Модель получает результат memory_estimate и сведения из фиксированного поиска харнесса. Для последнего не подставляется фиктивный assistant tool call.
Приложение-агент → Языковая модель
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Приложение показывает итог. Карты — кандидаты по двум фильтрам, а не гарантия запуска или совместимости корпуса и блока питания.
Языковая модель → Приложение-агент → Пользователь
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Ответ Ollama · фрагмент
{
"message": {
"role": "assistant",
"content": "Расчётный бюджет: 19.05 ГиБ. Начните с карт от 24 ГБ. Проверьте движок, свободную память, питание, разъёмы и габариты конкретной платы."
}
}
Индекс создан заранее; извлечённый текст и номера страниц сохранены вместе. Документы вымышлены. Embedding-модель и векторный поиск в этой конфигурации работают на CPU. Настройки на весь сценарий: num_ctx=8192, OLLAMA_NUM_PARALLEL=2; модель уже загружена, KV-буферы выделены заранее.
○ Пользователь / контекстЛокально
ШАГ 1 / 13
Вопрос становится задачей поиска
Харнесс принимает вопрос и запускает заранее настроенный RAG-маршрут. Пока в контексте нет договоров.
Пользователь → Приложение-агент
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Embedding-модель создаёт вектор запроса на CPU. Это отдельный вызов модели, не shell и не обращение к MCP.
Приложение-агент → Embedding-модель
○ CPU: embedding-модель; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Вход embedding-модели
Текст: «сроки оплаты по договорам»
Устройство: CPU
Модель и параметры индекса согласованы заранее.
◇ Embedding-модельЛокально
ШАГ 3 / 13
Вектор возвращается приложению
Полученный вектор нужен для поиска близких фрагментов. Он не добавляется к текстовому контексту LLM как набор чисел.
Embedding-модель → Приложение-агент
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Сокращённый вектор
embedding = [0.12, -0.08, 0.31, …]
… — остальные компоненты не показаны.
⌕ Поиск по индексуЛокально
ШАГ 4 / 13
Поиск в локальном индексе
Харнесс запускает поиск в уже подготовленной векторной базе на CPU. Это операция поиска по индексу, а не вызов embedding-модели.
Приложение-агент → Векторная база
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Поиск харнесса
vector_search(index="contracts", query_vector=embedding, top_k=2)
Режим: локально, CPU. Индекс создан заранее.
⌕ Поиск по индексуЛокально
ШАГ 5 / 13
Найдены URI и номера страниц
Поиск возвращает адреса страниц учебных договоров, а не готовый ответ. contracts://alpha/page/3 означает страницу 3 документа «Альфа» в учебном MCP-сервере; харнесс отдельно запрашивает её текст.
Векторная база → Приложение-агент
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Ресурс выбирает приложение: resources/read передаёт серверу адрес-URI конкретной страницы. Сервер понимает собственную схему contracts:// и возвращает извлечённый текст; это не tools/call.
Приложение-агент → MCP: Файлы
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Локальный сервер читает сохранённые текстовые фрагменты PDF. Номер страницы и имя исходного файла сохраняются для ссылок.
MCP: Файлы → Диск
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Чтение диска
Из кэша извлечённого текста:
Альфа.pdf → страница 3
Бета.pdf → страница 5
Сам бинарный PDF не отправляется в текстовый messages.
⇄ Вызов MCPЛокально
ШАГ 8 / 13
Фрагменты включены в контекст
Ответы resources/read содержат result.contents, resultType и подсказки кэширования ttlMs/cacheScope. Приложение добавляет тексты как данные с указанием источников.
MCP: Файлы → Приложение-агент
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Ответ на id=21
{
"jsonrpc": "2.0",
"id": 21,
"result": {
"resultType": "complete",
"_meta": {
"io.modelcontextprotocol/serverInfo": {
"name": "demo-mcp",
"version": "1.0.0"
}
},
"ttlMs": 0,
"cacheScope": "private",
"contents": [
{
"uri": "contracts://alpha/page/3",
"mimeType": "text/plain",
"text": "Альфа.pdf, страница 3: Счёт оплачивается в течение 10 рабочих дней с даты подписания акта обеими сторонами."
}
]
}
}
Харнесс создаёт отдельный короткий контекст: проверить только даты и условия оплаты. Субагент не получает всю историю основного агента.
Приложение-агент → Субагент
○ CPU / приложение; GPU не участвует
Слот субагента отдельно: ≈ 900 из 8192 токенов, условно.
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Переданный контекст
{
"instruction": "Проверь сроки в этих фрагментах. Не вычисляй дату без даты события.",
"fragments": [
{
"uri": "contracts://alpha/page/3",
"file": "Альфа.pdf",
"page": 3,
"text": "Счёт оплачивается в течение 10 рабочих дней с даты подписания акта обеими сторонами."
},
{
"uri": "contracts://beta/page/5",
"file": "Бета.pdf",
"page": 5,
"text": "Оплата производится не позднее 25 ноября 2026 года."
}
]
}
↑ Запрос к моделиЛокально
ШАГ 10 / 13
Два запроса — одна копия весов
Субагент проверяет сроки, пока основной запрос готовит структуру ответа. OLLAMA_NUM_PARALLEL=2 настроен заранее: каждый слот имеет окно 8192 и свой KV-буфер; веса общие, VRAM на этом шаге не увеличивается.
Субагент → Языковая модель Приложение-агент → Языковая модель
▣ GPU: два занятых слота общей LLM; KV выделен заранее
Слот субагента отдельно: ≈ 900 из 8192 токенов, условно.
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Субагент · POST /api/chat
{
"model": "local-agent",
"stream": false,
"options": {
"num_ctx": 8192
},
"messages": [
{
"role": "system",
"content": "Проверь сроки, не придумывай недостающие даты."
},
{
"role": "user",
"content": "[\n {\n \"uri\": \"contracts://alpha/page/3\",\n \"file\": \"Альфа.pdf\",\n \"page\": 3,\n \"text\": \"Счёт оплачивается в течение 10 рабочих дней с даты подписания акта обеими сторонами.\"\n },\n {\n \"uri\": \"contracts://beta/page/5\",\n \"file\": \"Бета.pdf\",\n \"page\": 5,\n \"text\": \"Оплата производится не позднее 25 ноября 2026 года.\"\n }\n]"
}
],
"tools": []
}
Основной запрос · POST /api/chat
{
"model": "local-agent",
"stream": false,
"options": {
"num_ctx": 8192
},
"messages": [
{
"role": "system",
"content": "Подготовь структуру ответа. Даты будут проверены отдельным запросом."
},
{
"role": "user",
"content": "Нужны файл, страница, срок и оговорка для каждого договора."
}
],
"tools": []
}
⑂ СубагентЛокально
ШАГ 11 / 13
Субагент возвращает короткий итог
Отдельный цикл завершён; в основной контекст возвращается краткий результат. Второй слот становится свободным, но в выбранном профиле его KV-буфер остаётся выделенным до выгрузки или перенастройки движка.
Субагент → Приложение-агент
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Результат субагента
Альфа.pdf, с. 3: 10 рабочих дней после подписания акта; даты акта нет, точный день оплаты не вычислен. Бета.pdf, с. 5: не позднее 25.11.2026.
↑ Запрос к моделиЛокально
ШАГ 12 / 13
Основной агент сверяет итог
Модель получает исходные фрагменты и заключение субагента. В запросе есть основания для ссылок на страницы, но нет даты подписания акта «Альфа».
Приложение-агент → Языковая модель
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
POST /api/chat
{
"model": "local-agent",
"stream": false,
"options": {
"num_ctx": 8192
},
"messages": [
{
"role": "system",
"content": "Отвечай по наблюдаемым данным. Запрашивай нужные инструменты; не выдумывай их результаты."
},
{
"role": "user",
"content": "Сроки оплаты. Фрагменты: [\n {\n \"uri\": \"contracts://alpha/page/3\",\n \"file\": \"Альфа.pdf\",\n \"page\": 3,\n \"text\": \"Счёт оплачивается в течение 10 рабочих дней с даты подписания акта обеими сторонами.\"\n },\n {\n \"uri\": \"contracts://beta/page/5\",\n \"file\": \"Бета.pdf\",\n \"page\": 5,\n \"text\": \"Оплата производится не позднее 25 ноября 2026 года.\"\n }\n]"
},
{
"role": "user",
"content": "Проверка субагента: Альфа.pdf, с. 3: 10 рабочих дней после подписания акта; даты акта нет, точный день оплаты не вычислен. Бета.pdf, с. 5: не позднее 25.11.2026."
}
],
"tools": []
}
↓ Ответ / tool callЛокально
ШАГ 13 / 13
Ответ с файлами и страницами
Модель различает фиксированную дату и относительный срок. Ссылки ниже открывают учебные выдержки на этой странице, а не ваши реальные файлы.
Языковая модель → Приложение-агент → Пользователь
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=2. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
1,125 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
8,428 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Ответ Ollama · фрагмент
{
"message": {
"role": "assistant",
"content": "Альфа.pdf, с. 3: 10 рабочих дней после подписания акта; даты акта нет, точный день оплаты не вычислен. Бета.pdf, с. 5: не позднее 25.11.2026."
}
}
Документы вымышленные; ссылки ведут к этим выдержкам, ваши файлы не читаются.
Альфа.pdf · страница 3
Счёт оплачивается в течение 10 рабочих дней с даты подписания акта обеими сторонами.
Адрес страницы для MCP-сервера: contracts://alpha/page/3
Бета.pdf · страница 5
Оплата производится не позднее 25 ноября 2026 года.
Адрес страницы для MCP-сервера: contracts://beta/page/5
Почини падающий тест и открой pull request
Условный репозиторий example/demo; обычные CPU-тесты. Разрешения, git-команды и PR — записанные события. Никакие файлы не изменяются и запросы не отправляются. Настройки на весь сценарий: num_ctx=8192, OLLAMA_NUM_PARALLEL=1; модель уже загружена, KV-буферы выделены заранее.
○ Пользователь / контекстЛокально
ШАГ 1 / 14
Пользователь задаёт результат
Задача — исправить тест и подготовить PR. В этом учебном харнессе чтение и тесты разрешены, запись и отправка требуют отдельных подтверждений.
Пользователь → Приложение-агент
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Задача
{
"role": "user",
"content": "Почини падающий тест и открой pull request"
}
↑ Запрос к моделиЛокально
ШАГ 2 / 14
Модель получает встроенные tools
Харнесс описывает shell, read_file и edit_file как собственные функции. Эти определения не получены от MCP-сервера.
Приложение-агент → Языковая модель
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Ответ содержит два независимых tool call. Харнесс может выполнить их последовательно; в примере сначала показан тест.
Языковая модель → Приложение-агент
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Встроенный shell запускает тесты на CPU. Ошибка сообщает о reduce без начального значения для пустого массива.
Приложение-агент → Встроенные tools
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Команда и сокращённый вывод
node --test test/total.test.mjs
✗ total([]) equals 0
TypeError: Reduce of empty array with no initial value
Итог: 1 passed, 1 failed
▤ Чтение / запись дискаЛокально
ШАГ 5 / 14
Встроенный инструмент читает файл
read_file реализован самим харнессом и читает src/total.mjs. Здесь нет MCP, хотя имя функции похоже на инструмент первого сценария.
Встроенные tools → Диск → Приложение-агент
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Прочитанный файл
src/total.mjs
export const total = items => items.reduce((sum, n) => sum + n);
↑ Запрос к моделиЛокально
ШАГ 6 / 14
Модель получает ошибку и исходник
Результаты обоих tool call добавлены в историю. Теперь у модели есть конкретное основание предложить изменение.
Приложение-агент → Языковая модель
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Запрос edit_file добавляет начальное значение 0. Предложенная правка ещё не применена: харнесс сначала запрашивает разрешение.
Языковая модель → Приложение-агент
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Можно посмотреть точную замену до записи. Автопроигрывание остановлено; «Дальше» изображает согласие на эту правку.
Приложение-агент → Пользователь
○ CPU / приложение; GPU не участвует
Ожидает подтверждения. Для учебного согласия нажмите «Дальше». Это не разрешение на реальную операцию.
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Запрос разрешения
{
"operation": "edit_file",
"path": "src/total.mjs",
"before": "export const total = items => items.reduce((sum, n) => sum + n);",
"after": "export const total = items => items.reduce((sum, n) => sum + n, 0);",
"status": "awaiting_confirmation"
}
⌘ Встроенный инструментЛокально
ШАГ 9 / 14
После согласия применяется правка
В учебной записи пользователь согласился. Встроенный инструмент записывает только согласованную замену и возвращает результат.
Пользователь → Приложение-агент → Встроенные tools → Диск
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Наблюдаемое действие
{
"permission": "approved",
"tool": "edit_file",
"path": "src/total.mjs",
"before": "export const total = items => items.reduce((sum, n) => sum + n);",
"after": "export const total = items => items.reduce((sum, n) => sum + n, 0);",
"result": "1 replacement"
}
⌘ Встроенный инструментЛокально
ШАГ 10 / 14
Повторный запуск тестов
После записи фиксированный шаг workflow запускает тот же набор тестов. GPU не участвует; успех тестов не доказывает отсутствие всех возможных ошибок.
Приложение-агент → Встроенные tools
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Перед выходом в сеть харнесс показывает репозиторий, ветку и состав изменений. Подтверждение охватывает git push и создание PR; без «Дальше» воспроизведение не продолжится.
Приложение-агент → Пользователь
○ CPU / приложение; GPU не участвует
Ожидает подтверждения. Для учебного согласия нажмите «Дальше». Это не разрешение на реальную операцию.
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
После согласия харнесс запускает shell: Git читает и записывает локальный коммит на диске, затем сам отправляет ветку по сети. Диск не отправляет запросы; существование удалённой ветки нужно для PR.
Приложение-агент → Встроенные tools → Сеть / интернет Встроенные tools → Диск → Встроенные tools
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
MCP-клиент отправляет JSON-RPC удалённому серверу. Версия в HTTP-заголовке совпадает с params._meta, а Mcp-Method и Mcp-Name — с методом и именем инструмента в теле.
Приложение-агент → Сеть / интернет → MCP: GitHub
○ CPU / приложение; GPU не участвует
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
Streamable HTTP · сокращённый конверт
POST https://mcp.example.invalid/github
Content-Type: application/json
Accept: application/json, text/event-stream
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: create_pull_request
… данные авторизации не показаны
Последний вызов модели суммирует применённую правку, тесты и ответ GitHub. PR не означает автоматическое слияние изменений.
Языковая модель → Приложение-агент → Пользователь
▣ GPU: инференс языковой модели
VRAM рабочей LLM · фиксированный бюджет
Qwen3 8B · Q4_K_M · KV FP16. num_ctx=8192, OLLAMA_NUM_PARALLEL=1. Модель уже загружена; KV выделен под полное окно каждого слота и не растёт по шагам.
Общие веса
4,678 ГиБ
KV первого слота
1,125 ГиБ
KV второго слота
0 ГиБ
Рабочий резерв
1,5 ГиБ
Сумма
7,303 ГиБ
Второй KV нужен при наличии второго параллельного слота, а не из-за самого названия «субагент». Заполнение и очистка токенов не равны освобождению буфера. Это оценка выбранного профиля без пика prefill и дополнительных рабочих буферов; другие движки могут выделять память иначе.
{
"message": {
"role": "assistant",
"content": "Добавлено начальное значение reduce. Два теста прошли. Создан учебный PR #42; слияние не выполнялось."
}
}
Описание всех участников схемы
Пользователь
Задаёт цель, читает ответ и подтверждает операции. Кнопка «Дальше» на шаге ожидания изображает согласие только в учебной записи.
Приложение-агент
Собирает контекст и держит цикл. Внутри хоста — MCP-клиенты, по одному подключению к серверу. Проверки разрешений и встроенные инструменты тоже организует харнесс.
Языковая модель
Обрабатывает messages и описания tools; выдаёт текст или tool call. Здесь условный локальный alias local-agent означает Qwen3 8B в Q4_K_M. Запрос не даёт модели прямого доступа к диску.
GPU / VRAM
LLM загружена на GPU с num_ctx=8192 на слот. Буфер KV резервируется под настроенное окно и число слотов, а не растёт при каждом шаге. Числа — расчёт хранения из memory.mjs, не показания датчика.
Embedding-модель
Отдельная модель превращает вопрос в вектор для поиска. В этом сценарии она выполняется на CPU. В реальном приложении её можно разместить на GPU, тогда нужен отдельный бюджет VRAM.
Субагент
Отдельный цикл со своим контекстом использует общую LLM. Для параллельного запроса здесь заранее настроены два слота: OLLAMA_NUM_PARALLEL=2. Второй KV-буфер зарезервирован и до запуска субагента; второй копии весов нет.
MCP: Файлы
Учебный локальный сервер получает JSON-RPC через stdio. Предоставляет read_file и текстовые ресурсы извлечённых страниц. Имена функций и URI — пример реализации, не обязательные имена MCP.
MCP: Каталог GPU
Учебный локальный сервер с memory_estimate и search_gpus. Числа заранее рассчитаны при сборке сайта общей формулой, кандидаты взяты из редакционного каталога.
Встроенные tools
Shell, чтение и правка файла реализованы самим харнессом. Tool calling может запрашивать их, но это не превращает их в MCP. В сценарии запускаются обычные CPU-тесты, не GPU-задачи.
Диск
Хранит заметки, документы и код. Читает или пишет инструмент; содержимое не попадает в LLM, пока приложение не добавит его в сообщения.
Векторная база
Индекс документов подготовлен заранее: текст извлечён из PDF, разбит на фрагменты, посчитаны embeddings. Здесь поиск на CPU возвращает URI и страницы; он не обучает LLM.
Сеть / интернет
По сети уходят git push и запрос к удалённому MCP-серверу GitHub. Локальность LLM не означает отсутствие сети у инструментов. В этой демонстрации никакой отправки нет.
MCP: GitHub
Учебное удалённое подключение: MCP-клиент отправляет JSON-RPC по Streamable HTTP. Сервер создаёт PR через GitHub API. Ветка должна быть отправлена до создания PR; URL и репозиторий здесь вымышлены.
Что важно заметить
Модель не исполняет инструменты сама: она возвращает запрос, а харнесс проверяет его и организует выполнение.
MCP — способ подключить внешние инструменты и данные. Встроенный shell и правка файла не обязаны использовать MCP.
Результаты инструментов и фрагменты документов занимают контекст следующего вызова. Они не меняют обученные веса.
В этой конфигурации GPU вычисляет только на шагах LLM. Диск, сеть и обычные тесты работают без него; embedding-модель здесь на CPU.
В выбранном профиле KV-буферы выделены заранее под num_ctx × число слотов. В RAG настроены два слота по 8192: второй KV зарезервирован до запуска субагента и сохраняется после его ответа. При одном слоте запросы выполнялись бы последовательно; отдельные процессы могут дублировать и веса.
Разрешения пользователя — часть харнесса. Остановка воспроизведения помогает увидеть момент ожидания человека.
Проверено . Примеры используют MCP 2026-07-28; поля сверены с официальной schema.ts. Каждый запрос передаёт версию и возможности клиента в params._meta. Возможности сервера можно узнать через server/discover; отдельного рукопожатия и протокольных сессий здесь нет. Результаты содержат resultType; ответы tools/list, server/discover и resources/read также содержат ttlMs и cacheScope.
Имена инструментов, URI, alias модели и результаты — учебные. Данные авторизации и часть истории сокращены с пометкой «…». HTTP-заголовки Mcp-Method/Mcp-Name соответствуют методу и имени инструмента; MCP-Protocol-Version совпадает с версией в теле. Roots, Sampling и Logging в этой редакции объявлены устаревшими и в примерах не используются.
JSON отформатирован для чтения: в stdio каждое сообщение передаётся одной строкой. Для бинарного PDF ресурс использовал бы blob; здесь возвращается извлечённый текст с mimeType text/plain. Поддержка конкретной модели и tool calling зависит от движка и шаблона чата. VRAM оценивается для заранее выделенных окон; заполнение контекста не является измерителем выделенной памяти. Контекст и KV-кэш → · Почему не хватает памяти →