skills: SkillMiner — фоновое авто-создание скилов + debug-эндпоинты
SkillMiner (сетка безопасности skill self-improvement): каждые
AGENTIK_SKILL_MINING_INTERVAL user-ходов (default 15) LLM смотрит
последние AGENTIK_SKILL_MINING_MAX_TURNS ходы (default 30) + каталог
существующих скилов и возвращает structured JSON {"skills":[...]}.
Найденное upsert-ится в SkillStore — модель "забыла" вызвать
skill_save в ходе разговора, минер добирает её постфактум.
- SkillMiner.kt: короткий LiteConversation (one-shot), blocking-инференс
на Dispatchers.IO, defensive парсинг (кривой ответ -> пустой список).
- SkillMiningPrompts/SkillMiningParser: тот же подход, что
ReflectionParser (structured-output вместо tool-calling).
- ChatConversation.scheduleSkillMining() — хук после каждого хода
(рядом со scheduleReflection); ChatAgent/Main — прокидывание.
- DebugRoutes.kt: AGENTIK_DEBUG_ENDPOINTS=1 включает POST
/debug/reflect, /debug/skill-mine, /debug/curate, /debug/compact и
GET /debug/tokens для ручного триггерирования фоновых фич.
- ChatConversation.forceCompactNow(): принудительный compaction
без проверки порога (для /debug/compact).
- Тесты: SkillMinerTest (5) + SkillMiningParserTest (9); FakeLiteLlm
теперь записывает send()/sendContents() в lastContents.
179 jvm-тестов :standalone зелёные, README обновлён.
This commit is contained in:
@@ -55,6 +55,9 @@ java -jar standalone/build/libs/standalone-all.jar
|
||||
| `AGENTIK_COMPRESSION_THRESHOLD` | `0.8` | Доля лимита, при которой запускается compaction |
|
||||
| `AGENTIK_REFLECTION_INTERVAL` | `10` | Self-reflection: каждый N-й пользовательский ход агент оценивает себя (LiteLlm) и сохраняет рефлексию. `0` = выключено. |
|
||||
| `AGENTIK_REFLECTION_TOP_K` | `3` | Сколько последних рефлексий подмешивать в system prompt как «слабые места». `0` = не подмешивать. |
|
||||
| `AGENTIK_SKILL_MINING_INTERVAL` | `15` | Skill mining: через сколько user-ходов запускать фоновый прогон SkillMiner. `0` = выключено. |
|
||||
| `AGENTIK_SKILL_MINING_MAX_TURNS` | `30` | Сколько последних ходов передавать SkillMiner'у за один прогон. |
|
||||
| `AGENTIK_DEBUG_ENDPOINTS` | `0` | `1` включает debug-эндпоинты (`/debug/reflect`, `/debug/skill-mine`, `/debug/curate`, `/debug/compact`, `/debug/tokens`) |
|
||||
|
||||
### OpenAI backend
|
||||
|
||||
@@ -354,10 +357,45 @@ AGENTIK_SKILLS_DIR=/etc/agentik/skills
|
||||
`skill_save`/`skill_delete` не требуют рестарта агента — изменения видны
|
||||
на ближайшем вызове `read_skill` (включая в этом же диалоге).
|
||||
|
||||
### Skill mining (автонавыки)
|
||||
|
||||
Модель может "протупить" и не вызвать `skill_save`, хотя приём был
|
||||
переиспользуемым. Сетка безопасности — фоновый [SkillMiner]: каждые
|
||||
`AGENTIK_SKILL_MINING_INTERVAL` пользовательских ходов (default 15, `0` =
|
||||
выключено) LLM смотрит последние `AGENTIK_SKILL_MINING_MAX_TURNS` ходов
|
||||
(default 30) + каталог существующих скилов и возвращает structured JSON
|
||||
`{"skills": [{name, description, body}]}`. Найденные скилы upsert-ятся в
|
||||
`AGENTIK_SKILLS_DIR` — агент становится умнее между сессиями. Обновления
|
||||
существующих скилов (то же имя) поддерживаются, дубли — нет.
|
||||
|
||||
| Переменная | Default | Что делает |
|
||||
|---|---|---|
|
||||
| `AGENTIK_SKILL_MINING_INTERVAL` | `15` | Через сколько user-ходов запускать mining. `0` — выкл. |
|
||||
| `AGENTIK_SKILL_MINING_MAX_TURNS` | `30` | Сколько последних ходов показывать минеру |
|
||||
|
||||
### Debug-эндпоинты
|
||||
|
||||
`AGENTIK_DEBUG_ENDPOINTS=1` включает эндпоинты для ручного триггерирования
|
||||
фоновых фич (не ждать интервалов). Только локальная отладка: без
|
||||
авторизации, в проде не включать.
|
||||
|
||||
| Эндпоинт | Действие |
|
||||
|---|---|
|
||||
| `POST /debug/reflect?conversationId=...` | прогон LlmReflector прямо сейчас, результат в БД |
|
||||
| `POST /debug/skill-mine?conversationId=...` | прогон SkillMiner прямо сейчас, найденное в `AGENTIK_SKILLS_DIR` |
|
||||
| `POST /debug/curate` | прогон Curator.runPass (архивация stale-заметок памяти) |
|
||||
| `POST /debug/compact?conversationId=...` | принудительный compaction working memory диалога |
|
||||
| `GET /debug/tokens?conversationId=...` | token-статистика диалога из БД (turns/in/out/total) |
|
||||
|
||||
Каждый возвращает JSON с результатом (что сохранил/нашёл/сжал), чтобы было
|
||||
видно не только "триггер сработал", а что именно LLM намайнила.
|
||||
|
||||
```bash
|
||||
AGENTIK_SKILLS_DIR=/etc/agentik/skills
|
||||
AGENTIK_DEBUG_ENDPOINTS=1
|
||||
```
|
||||
|
||||
|
||||
## MCP-инструменты
|
||||
|
||||
`AGENTIK_MCP_CONFIG` — путь к JSON-файлу со списком MCP-серверов
|
||||
|
||||
Reference in New Issue
Block a user