Смена целенаправленности: не реклама/аналитика метрик, а производство контента (текст, изображение, подкаст, видео) + анализ его метрик + 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) с критериями приёмки
5.9 KiB
5.9 KiB
spark-mind — Оставшиеся TODO
Полный план — в DESIGN.md: автономный контент-продюсер с заземлением на метриках и автономией по заслугам.
Статус: P0–P5 базовые завершены (heartbeat→mind, JSON output, bge-m3 embeddings, sub-agents, SQLite, Telegram+fallback). Далее — программа контент-производства.
Порядок обязателен: есть зависимости между шагами.
Шаг 0 — Основа
- P5:
decision.noAction: true— агент может решить, что действие не нужно, и не писать thought (сейчас heartbeat всегда «работает» → шум в памяти). - Тонкий
Channel:ConsoleChannel,TelegramChannel,FileChannel.sendReplyсейчас жёстко зашит на Telegram+console.
Шаг 1 — Планировщик (нужен для pipeline/measure/reflection)
- Cron-задачи: триггер
{type:'task'}объявлен, но никто не эмитит. - Проверка due-записей в SQLite → эмит
{type:'pipeline'}и{type:'measure'}. - Ночной
{type:'reflection'}. - Приёмка: задача с датой выполняется в срок.
Шаг 2 — Конвейер контента (центральный объект)
- Таблица
content_items(kind: text|image|podcast|video; status: brief→generated→optimized→published→measured→archived). - Переходы статусов + журнал переходов.
- Привязка к
site(свои сайты) иdeal_id(клиентские заказы). - Приёмка: item проходит brief→published, все переходы в журнале.
Шаг 3 — Заземление: outcomes + measure
- Таблица
outcomes: metric_kind (reach, engagement, position, traffic, conversion, revenue, speed, quality), direction, horizon_days, due_at. - Замер через
{type:'measure'}: Метрика API / GSC / Yandex Webmaster / Wordstat. - Нормализация в
score[-1..+1]; базлайн области для нового контента. - Приёмка: метрика замеряется через horizon, score пишется.
Шаг 4 — Автономия по заслугам
- Таблица
capabilities(тир на область: text, image, podcast, video, seo_onpage, seo_semantics, publish). - Тиры 0..4 (observer → suggest → ask → act+report → autonomous).
- +1 тир за 3 нетто-положительных; −1 за 1 отрицательный; затухание 90 дней.
- Границы persona
valuesнепреодолимы на любом тире. - Приёмка: тир растёт после 3 успехов и падает после провала.
Шаг 5 — Методы: skills + reflection
- Таблица
skills(name, area, method_md, tool, validated, uses, success_rate, embedding). - Retrieval нужного метода по эмбеддингу bge-m3 (не грузить всё сразу).
- Наполнение методами из реального стека: editor-pro (text/seo_onpage), ComfyUI (image), Silero TTS (podcast), video-pipeline (video), Wordstat (seo_semantics), Astro (publish).
reflection: ночной цикл обобщает items+outcomes+thoughts → long-term иself_observations(сейчас мёртвый слой).- Tool-runtime для под-агентов: tools сейчас — только строки-декларации.
Шаг 6 — Заказы: deals + counterparties
- Таблицы
counterparties,deals,deal_events(append-only). trust_scoreвыводится из истории, не задаётся руками.- Заказ клиента на контент: offered→accepted→delivered→paid|refused|defaulted.
- Приёмка: заказ проходит полный цикл.
Шаг 7 — Энергия: ledger
- Таблица
ledger. - Расход: тик, генерация (текст/фото/аудио/видео), публикация, саб-агент.
- Приход: положительные outcomes + донат.
- Низкий баланс → интервал тиков растёт → Deep Rest.
- Приёмка: результат пополняет энергию, дефицит замедляет тики.
Инфраструктура (по мере надобности)
- Конфиг /
.env: URL-ы Ollama, dbPath, Telegram захардкожены вindex.ts. - Retry + timeout (AbortController) для LLM/embedding fetch.
- Тесты:
parseSparkOutput,DatabaseCRUD, cosine-поиск, нормализация score. - Web UI (persona setup) вместо
DEFAULT_PERSONAв коде.
Каналы вывода
- Telegram: обход SSL-проблемы bot.qw4.ru (
tlsv1 unrecognized name, серверная). Сейчас console-only fallback.
Движок
- Spark X2.5-4B: не грузится в Ollama (
unknown architecture 'spark2_5'). Варианты: совместимый GGUF / llama.cpp напрямую / остаться на Ornith-1.5-9B. Важно: локальные модели пумолкают (пустой ответ), еслиsubAgentв JSON-схеме structured output.
Косметика
- Устаревший doc-комментарий в
mind.ts(классSparkLLMClientописан как «клиент для Spark X2.5-4B, в MVP заглушка»). - Дефолт модели в конструкторе
SparkLLMClient='spark-x2.5-4b'.