Hercules состоит из переиспользуемого ядра агента и трёх интерфейсов-фасадов (CLI, Telegram, Web API + фронтенд), которые не содержат собственной бизнес-логики.
┌─────────────┐ ┌──────────────┐ ┌──────────────────────┐
Пользователь │ CLI (REPL)│ │ Telegram-бот │ │ Web API + Astro UI │
└──────┬──────┘ └──────┬───────┘ └──────────┬───────────┘
│ │ │
└─────────────────┼──────────────────────┘
▼
┌──────────────────┐
│ AgentCore │ главный цикл обработки
└───┬───────┬──────┘
┌──────────────────────┘ └──────────────────────┐
▼ ▼ ▼ ▼ ▼
SkillRouter SkillManager MemoryManager ReflectionEngine ILLMClient
│ │ │ │ │
└──── FileSkillRepository / MemoryStore / SqliteSessionStore ──── ResilientLLMClient
│
┌────────────────┼────────────────┐
YandexGPT Ollama Cloud Ollama Local
(через Microsoft.Extensions.AI / OpenAI)
Принимают ввод пользователя, вызывают AgentCore.HandleAsync() и отображают результат.
Web API использует Agent/WebApiAdapter.cs (DTO + маппинг) как тонкий слой над ядром.
AgentCore— оркестрация: загрузка контекста → маршрутизация → вызов LLM → логирование → проверка порогов создания/улучшения навыков → сохранение памяти.SkillRouter— выбор навыка по триггерам или прямой ответ LLM.SkillManager— CRUD навыков, версионирование (skill.{id}.v{N}.md), LLM-генерация и улучшение.MemoryManager— модель пользователя, предпочтения, сущности, перенос контекста между сессиями.ReflectionEngine— самоанализ после сессии или каждые N команд, отчёты рефлексии.
Единый интерфейс ILLMClient поверх Microsoft.Extensions.AI (IChatClient).
YandexGPTClient,LocalLLMClient(Ollama/LM Studio) — конкретные провайдеры.LlmClientFactory— выбор клиента по имени провайдера.ResilientLLMClient— отказоустойчивость и fallback-цепочка изLlm:Fallback.
Гибридное:
- Файлы (
FileSkillRepository,MemoryStore) — Markdown/JSON для навыков и памяти (прозрачность знаний). - SQLite (
SqliteSessionStore) — сессии, взаимодействия, метрики, счётчики повторов.
- Запрос → загрузка профиля и контекста из памяти.
- Маршрутизация →
SkillRouterищет навык по триггерам. - Ответ LLM → с навыком (skill-prompt) или напрямую (direct).
- Логирование → input/output/confidence/mode в SQLite.
- Порог создания → повтор
SkillCreationThresholdраз → предложение создать навык (с подтверждением). - Порог улучшения →
success_rate < SkillImprovementThreshold→ предложение обновить навык. - Память → извлечение фактов о пользователе, сущностей, предпочтений.
- Рефлексия → по завершении сессии или каждые N команд.
- Never stop learning — каждая сессия обогащает память или навыки.
- Human-in-the-loop — навыки создаются/изменяются только после подтверждения (в CLI).
- Transparent & versioned — старые версии навыков сохраняются, знания читаемы в Markdown.
- Provider-agnostic — смена LLM без изменения логики ядра.
data/
├── Skills/ # skill.{id}.md / .prompt.md / .meta.json / .usage.json / .v{N}.md
├── Memory/ # user_profile.md, preferences.md, entities.md, context_{date}.md
└── sessions.db # SQLite: сессии, взаимодействия, метрики