108 lines
4.7 KiB
Markdown
108 lines
4.7 KiB
Markdown
# spark-mind
|
||
|
||
Self-hosted автономный агент (MVP). Концепт позаимствован из
|
||
[Animus](https://github.com/Craigtut/animus) (Craigtut): heartbeat,
|
||
4 слоя памяти, persona в 8 слоёв. Движок — **Ornith-1.5-9B** (локально, self-hosted, Ollama).
|
||
|
||
## Почему Ornith-1.5-9B
|
||
|
||
- Локальный inference (Ollama), никаких облачных ключей
|
||
- Нативная поддержка tool-calling (саб-агенты) + thinking
|
||
- 262K контекст (для heartbeat держим 4K-16K + внешняя память)
|
||
- ~40-60 t/s на Q6_K
|
||
|
||
> ⚠️ Spark X2.5-4B не грузится в Ollama (unknown architecture 'spark2_5').
|
||
> Ornith-9B — рабочая замена: thinking + tools, дефицитный ресурс.
|
||
|
||
## Архитектура
|
||
|
||
```
|
||
heartbeat.ts — ядро: 5 триггеров тика, состояния Cold/Warm
|
||
memory.ts — 4 слоя памяти (short/working/core self/long-term) + SQLite
|
||
persona.ts — 8 слоёв → системный промпт
|
||
mind.ts — оркестратор: heartbeat + memory + persona + LLM
|
||
subagent.ts — SubAgent SDK: researcher, coder, analyst, content-writer
|
||
embedding.ts — bge-m3 embeddings (dim=1024), cosine similarity
|
||
database.ts — SQLite репозиторий: 5 таблиц, WAL-режим
|
||
telegram.ts — Telegram Channel Layer: MAX Messenger API
|
||
```
|
||
|
||
### Heartbeat (5 триггеров)
|
||
|
||
1. **Interval** — idle-мысли по таймеру (default 5 мин)
|
||
2. **Message** — сообщение от known-контакта
|
||
3. **Task** — scheduled-задача (cron)
|
||
4. **SubAgent-Complete** — завершение саб-агента
|
||
5. **Plugin** — внешний триггер (HomeKit, сенсор и т.д.)
|
||
|
||
Таймер сбрасывается после любого тика. Warmth-окно 15 мин —
|
||
сессия переиспользуется, иначе cold-start.
|
||
|
||
### Memory (4 слоя)
|
||
|
||
| Слой | Хранение | Что держит |
|
||
|------|----------|-----------|
|
||
| short-term | SQLite (thoughts) | последние ~10 мыслей/опыт/сообщений |
|
||
| working | SQLite (notepads) | notepad по контактам |
|
||
| core self | SQLite (self_observations) | самосознательность |
|
||
| long-term | SQLite (long_term + embeddings) | факты/опыт/процедуры + bge-m3 векторы |
|
||
|
||
### Sub-Agents
|
||
|
||
Поддерживаемые агенты:
|
||
- **researcher** — сбор и анализ информации (web_search, file_read, web_extract)
|
||
- **coder** — написание и ревью кода (file_write, terminal, code_review)
|
||
- **analyst** — анализ данных и ситуаций (data_query, spreadsheet, chart_generator)
|
||
- **content-writer** — создание веб-контента (template_search, seo_check, grammar_check)
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
npm install
|
||
npm run build # tsc -p tsconfig.json (проверка типов)
|
||
npm start # node dist/index.js
|
||
```
|
||
|
||
Ornith-1.5-9B должен быть доступен по OpenAI-совместимому API (Ollama):
|
||
- Ollama: `http://localhost:11434` (модель `ornith-1.5-9b:latest`)
|
||
|
||
### Настройка Telegram
|
||
|
||
Для отправки ответов в Telegram добавьте в `index.ts`:
|
||
```typescript
|
||
import { TelegramMessenger } from './src/telegram.js';
|
||
|
||
const telegram = new TelegramMessenger({
|
||
botUrl: 'https://bot.qw4.ru/bot/nik_bot',
|
||
userId: '140245519',
|
||
});
|
||
```
|
||
|
||
> ⚠️ Примечание: если bot.qw4.ru недоступен (SSL-ошибка 'unrecognized name'),
|
||
> агент работает в console-only режиме.
|
||
|
||
## Статус P0–P5
|
||
|
||
| Priority | Компонент | Статус |
|
||
|----------|-----------|--------|
|
||
| P0 | heartbeat → mind wiring | ✅ |
|
||
| P1 | structured JSON output (parseSparkOutput) | ✅ |
|
||
| P2 | bge-m3 embeddings + cosine search | ✅ |
|
||
| P3 | SubAgent SDK (researcher, coder, analyst, content-writer) | ✅ |
|
||
| P4 | SQLite persistence (5 таблиц, WAL) | ✅ |
|
||
| P5 | Telegram Channel Layer (MAX API + fallback) | ✅ |
|
||
|
||
## Roadmap (P6+)
|
||
|
||
Полный список незакрытых задач — в [TODO.md](./TODO.md).
|
||
|
||
Кратко:
|
||
- P6: sleep & energy, cron-планировщик, рабочие слои памяти (notepads / core self) в цикле mind, tool-runtime для под-агентов
|
||
- P7: Web UI (persona setup), конфиг/.env, retry+timeout, тесты
|
||
- Каналы: Telegram — обход SSL-проблемы bot.qw4.ru
|
||
- Движок: Spark X2.5-4B (unknown architecture в Ollama)
|
||
|
||
## License
|
||
|
||
MIT — концепт вдохновлён Animus (MIT, Craig Tuttle).
|