RU The Agent - VVG-web/aurora-studio GitHub Wiki
Wiki · см. также: Доверие · Спросить базу · настройка: INSTALL — встроенный агент · устройство: architecture, раздел 4
Встроенный агент делает работу, которой нужен смысл: разбирает источники на карточки, пишет тезисы, выносит определения, отвечает на вопросы, производит артефакты. Сначала скрипт, потом модель: массовые операции (линт, ремонт, поиск двойников, синк, доверие, связи) — детерминированные скрипты с dry-run; модель только судит и пишет лишь через команды движка из белого списка.
Без настроенных моделей всё, что их не требует, продолжает работать.
Провайдер — любой OpenAI-совместимый API (корпоративный шлюз, облако, локальный llama.cpp или vLLM). Бэкенд —
«провайдер + модель» в роли. У каждой роли своя цепочка бэкендов: вызов идёт с первого; недоступный или занятый
пропускается, ожившего подхватывают со следующего запроса.
flowchart LR
CALL["задача роли"] --> R{"цепочка роли<br>основной → запасной → …"}
R -->|"отвечает"| OK["результат"]
R -->|"лежит или занят"| NEXT["следующий бэкенд"] --> R
R -->|"три сбоя подряд"| STOP["стоп: это провайдер,<br>а не карточки"]
| Роль | Делает |
|---|---|
worker |
рутинные шаги: разбор, тезисы |
planner |
границы и планы |
critic |
проверяет решение до записи |
qa |
Момус — сверяет каждое утверждение ответа с источником |
Рассуждения («thinking») можно отключить по ролям, но никогда — для qa и критика.
Вторая модель, которая читает вывод агента и источник и помечает каждое утверждение либо с опорой (с цитатой), либо
«без опоры». Утверждения без опоры попадают в список человеку (ops:todo) и не переносятся в документы.
agent:distill --recheck проверяет их заново.
Модели настраиваются один раз на кит — раздел панели «Модели», файл <кит>/local/models.json; все проекты
работают ею, своей у проекта нет. Сначала провайдеры (адрес, ключ, ширина), потом во вкладках LLM, OCR и
эмбеддингов — роли, и у каждой цепочка бэкендов «провайдер + модель»: первый основной, «+» добавляет запасной,
порядок меняется перетаскиванием, запасной можно выключить. Провайдера можно завести прямо из роли. Подробно —
INSTALL.
Семантический поиск (kb:embed) и распознавание сканов (kb:ingest-office) — те же роли и цепочки. Запасной
эмбеддингов — только той же модели: векторы разных моделей несравнимы. Все тексты уходят провайдерам из настройки:
если контур запрещает отправлять материалы наружу, не включайте семантику и сканы.
| Команда | Показывает |
|---|---|
agent:ping |
каждый бэкенд цепочек LLM живым запросом: роли, скорость; пустой ответ считается отказом |
agent:probe |
«нет связи», «ключ не тот» или «нет такой модели»; список моделей; --why — какой слой запроса шлюз не принимает |
agent:width |
сколько одновременных запросов держит каждый провайдер |
agent:pydantic |
что уходит в шлюз через Pydantic AI и прошла ли установленная версия проверку совместимости |
- Один пишущий на проект. Пишущий прогон агента берёт замок в проекте; второй получает отказ с pid держателя и временем старта. Замок берётся атомарно (два прогона, стартовавшие разом, не станут оба владельцами), а «жив ли держатель» везде проверяет одна функция движка — на Windows она не завершает чужой процесс. Прогон, убитый по Ctrl+C, базу не запирает.
-
Сначала чекпойнт. Перед пишущим прогоном агент фиксирует текущее состояние; нет git — писать откажется. Мигающий
index.lock(панель или редактор опрашиваютgit status) чекпойнт повторяет ~10 с; так же — коммиты самого агента. Настоящий отказ хука коммита (секрет) останавливает прогон с ненулевым кодом возврата, а проиндексированное вами остаётся проиндексированным; если замок не дал и вернуть индекс, строка остановки так и скажет и подскажет командуgit read-tree <дерево>, возвращающую ваш индекс. Замок от упавшего git: удалите.git/index.lock. -
Сбой на одной карточке прогон не останавливает; три подряд — останавливают. Это верно и для исключения, а не только
для отказа модели: упавшая единица работы (нечитаемая карточка, ответ модели не той формы) становится шагом «сбой»
с трассировкой в
failures.jsonl, а команда, не уложившаяся в срок, — неудачным результатом, а не крахом. Источник, у которого записаны не все карточки или границы планировщика покрывают меньше 60 % текста, остаётся в плане, а не отмечается разобранным; закрытая труба панели (BrokenPipeError) завершает прогон, а не считается сбоем единицы; если движок дважды подряд отказал в той же записи, план откладывает источник, а не повторяет его без конца. Команда, которая не отработала вовсе (срок, запуск), никогда не читается как «ноль»: оракул-линтер заваливает прогон («линтер не ответил»), а читатель — список конфликтов синонимов или двойников — останавливает прогон с причиной, а не отчитывается «разводить нечего». -
Остановка — не потеря. «Остановить» в панели шлёт SIGTERM: агент фиксирует уже записанное своим коммитом
agent: …(откатывается одной командой), снимает дочерние процессы, отдаёт замок и выходит с кодом 143. На Windows панель SIGTERM пока доставить не может: остановленный там прогон следующий чекпойнт запишет как работу человека. Любой путь, снимающий процесс движка (кнопка «Остановить», выход или перезапуск панели, сторож зависших шагов, уборка брошенных процессов), сначала шлёт SIGTERM одному раннеру и ждёт до 15 секунд, пока он закоммитит, и лишь потом снимает всё дерево процессов; при выходе панели задания снимаются одновременно, а сокет панели закрывается до этого, и--restartждёт, пока прежний процесс действительно уйдёт. Строка «остановлен» в консоли обещает коммит, только если прогон назвал его хеш в строке «Результат агента: … (abcd1234)»; «ничего не писал» и «коммит не сделан» обещания не дают.
Эта wiki собирается из папки wiki/ репозитория — правьте страницы там, изменения, сделанные здесь, будут перезаписаны. · Home