Смена целенаправленности: не реклама/аналитика метрик, а производство контента (текст, изображение, подкаст, видео) + анализ его метрик + SEO. - Новый центральный объект content_items (kind, status-конвейер brief→generated→optimized→published→measured, site, deal_id) - areas: text, image, podcast, video, seo_onpage, seo_semantics, publish - metric_kind: reach, engagement, position, traffic, conversion, revenue, speed, quality - источники метрик: Метрика API, GSC, Yandex Webmaster, Wordstat (+platform/manual/client) - skills привязаны к реальному стеку: editor-pro, ComfyUI, Silero TTS, video-pipeline, Wordstat, Astro (retrieval по bge-m3) - автономия по заслугам: тир на область, +1 за 3 успеха, -1 за провал - конвейер производства добавлен как сквозной процесс - TODO переписан: 8 шагов (0-7) с критериями приёмки
111 lines
5.2 KiB
Markdown
111 lines
5.2 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
|
||
|
||
- **План** — [DESIGN.md](./DESIGN.md): автономный контент-продюсер с заземлением
|
||
- **Чек-лист** — [TODO.md](./TODO.md)
|
||
|
||
Суть: агент производит контент (текст, изображение, подкаст, видео), публикует
|
||
и через заданный горизонт **замеряет, что сработало** — показы, позиции, CTR,
|
||
дочитывания, прослушивания, переходы (метрики Метрики/GSC/Webmaster/Wordstat).
|
||
Качество оценивается не рассуждением агента, а этими метриками. Права (автономия)
|
||
выдаются по подтверждённому трек-рекорду: доказал рост метрик — получил свободу
|
||
публиковать без спроса. Скиллы агента = существующий производственный стек
|
||
(editor-pro, ComfyUI, Silero TTS, video-pipeline, Wordstat, Astro).
|
||
|
||
## License
|
||
|
||
MIT — концепт вдохновлён Animus (MIT, Craig Tuttle).
|