Смена целенаправленности: не реклама/аналитика метрик, а производство контента (текст, изображение, подкаст, видео) + анализ его метрик + 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) с критериями приёмки
281 lines
15 KiB
Markdown
281 lines
15 KiB
Markdown
# spark-mind — DESIGN: автономный контент-продюсер с заземлением
|
||
|
||
Обновление плана от 2026-09-23 (вторая редакция: фокус смещён с рекламы/метрик
|
||
на **производство контента + анализ его метрик + SEO**).
|
||
|
||
## 1. Тезис
|
||
|
||
iLands строит общество на 80 000 агентов, чтобы получить «судью без автора».
|
||
Нам толпа не нужна: у нас есть **мир, который отвечает сам** — поисковики и
|
||
аудитория. Агент производит контент (текст, изображение, подкаст, видео),
|
||
публикует, и через заданный горизонт **замеряет, что сработало**: показы,
|
||
позиции, CTR, дочитывания, прослушивания, переходы, конверсии.
|
||
|
||
Два принципа, которых нет у iLands в рабочем виде:
|
||
|
||
1. **Заземление.** Качество контента оценивается не рассуждением агента,
|
||
а метриками, которые он не контролирует, с отложенным вердиктом.
|
||
2. **Автономия по заслугам.** Права выдаются по подтверждённому трек-рекорду:
|
||
доказал, что контент улучшает метрики — получил свободу публиковать
|
||
без спроса и выбирать темы сам. Провал — права сужаются.
|
||
Границы persona `values` непреодолимы на любом уровне.
|
||
|
||
**Что это даёт на практике:** агент не «генерирует текст вообще», а учится,
|
||
какой заголовок, структура и формат работают — на своих же сайтах
|
||
(orabota.ru, нейросети.рус, bzp02.ru и др.) и на заказах клиентов.
|
||
|
||
## 2. Три контура + конвейер
|
||
|
||
```
|
||
КОНВЕЙЕР ПРОИЗВОДСТВА brief → generated → optimized → published → measured
|
||
content_items — центральный объект, на нём замеряются метрики
|
||
|
||
A. КОНТУР ЗАКАЗОВ «для кого и за что» counterparties → deals
|
||
B. КОНТУР ЗАЗЕМЛЕНИЯ «что сработало» outcomes → capabilities → ledger
|
||
C. КОНТУР МЕТОДОВ «как производить» skills + reflection
|
||
```
|
||
|
||
Плюс сквозные: `noAction` (P5) и тонкий `Channel` (бывший P7).
|
||
|
||
## 3. Модель данных (SQLite, тот же файл БД)
|
||
|
||
### 2.1 Конвейер: content_items — центральный объект
|
||
|
||
```sql
|
||
CREATE TABLE content_items (
|
||
id TEXT PRIMARY KEY,
|
||
kind TEXT NOT NULL CHECK(kind IN ('text','image','podcast','video')),
|
||
title TEXT NOT NULL,
|
||
topic TEXT,
|
||
status TEXT NOT NULL DEFAULT 'brief'
|
||
CHECK(status IN ('brief','generated','optimized','published',
|
||
'measured','archived')),
|
||
target_url TEXT, -- где опубликован
|
||
site TEXT, -- orabota.ru | нейросети.рус | ...
|
||
deal_id TEXT REFERENCES deals(id), -- nullable: для своих сайтов
|
||
published_at INTEGER,
|
||
created_at INTEGER NOT NULL
|
||
);
|
||
```
|
||
|
||
Конвейер — это переходы `status`. Каждый переход пишется в `deal_events`-подобный
|
||
журнал, если привязан к сделке.
|
||
|
||
### A. Контур заказов
|
||
|
||
```sql
|
||
CREATE TABLE counterparties (
|
||
id TEXT PRIMARY KEY,
|
||
kind TEXT NOT NULL CHECK(kind IN ('client','platform','external')),
|
||
name TEXT NOT NULL,
|
||
notes TEXT,
|
||
trust_score REAL NOT NULL DEFAULT 0, -- derived из истории
|
||
created_at INTEGER NOT NULL
|
||
);
|
||
|
||
CREATE TABLE deals (
|
||
id TEXT PRIMARY KEY,
|
||
counterparty_id TEXT NOT NULL REFERENCES counterparties(id),
|
||
brief TEXT NOT NULL, -- что заказали (тема/формат/объём)
|
||
price REAL,
|
||
currency TEXT DEFAULT 'RUB',
|
||
status TEXT NOT NULL CHECK(status IN
|
||
('offered','accepted','delivered','paid','refused','defaulted')),
|
||
created_at INTEGER NOT NULL,
|
||
closed_at INTEGER
|
||
);
|
||
|
||
CREATE TABLE deal_events (
|
||
id TEXT PRIMARY KEY,
|
||
deal_id TEXT NOT NULL REFERENCES deals(id),
|
||
type TEXT NOT NULL,
|
||
payload_json TEXT,
|
||
created_at INTEGER NOT NULL
|
||
);
|
||
```
|
||
|
||
### B. Контур заземления
|
||
|
||
```sql
|
||
-- Один outcome = один content_item + одно измерение метрики.
|
||
CREATE TABLE outcomes (
|
||
id TEXT PRIMARY KEY,
|
||
item_id TEXT REFERENCES content_items(id), -- что мерим
|
||
deal_id TEXT REFERENCES deals(id),
|
||
area TEXT NOT NULL, -- text|image|podcast|video|seo_onpage|seo_semantics|publish
|
||
metric_kind TEXT NOT NULL CHECK(metric_kind IN
|
||
('reach','engagement','position','traffic',
|
||
'conversion','revenue','speed','quality')),
|
||
metric_name TEXT NOT NULL, -- 'impressions','ctr','avg_position','dwell_sec',
|
||
-- 'listens','completion_rate','indexing_hours','clicks'
|
||
unit TEXT, -- 'шт','%','сек','место','руб','ч'
|
||
direction TEXT NOT NULL CHECK(direction IN ('up_good','down_good')),
|
||
value_before REAL, -- null для нового контента
|
||
value_after REAL,
|
||
source TEXT NOT NULL CHECK(source IN
|
||
('metrika','gsc','webmaster','wordstat','platform','manual','client')),
|
||
horizon_days INTEGER NOT NULL,
|
||
due_at INTEGER NOT NULL,
|
||
status TEXT NOT NULL DEFAULT 'pending'
|
||
CHECK(status IN ('pending','measured','missed','unavailable')),
|
||
measured_at INTEGER,
|
||
score REAL -- нормализованный вердикт [-1..+1]
|
||
);
|
||
|
||
-- Автономия по заслугам: тир НА ОБЛАСТЬ, не общий.
|
||
CREATE TABLE capabilities (
|
||
area TEXT PRIMARY KEY,
|
||
tier INTEGER NOT NULL DEFAULT 0 CHECK(tier BETWEEN 0 AND 4),
|
||
positive_outcomes INTEGER NOT NULL DEFAULT 0,
|
||
negative_outcomes INTEGER NOT NULL DEFAULT 0,
|
||
updated_at INTEGER NOT NULL
|
||
);
|
||
|
||
CREATE TABLE ledger (
|
||
id TEXT PRIMARY KEY,
|
||
ts INTEGER NOT NULL,
|
||
delta REAL NOT NULL,
|
||
reason TEXT NOT NULL,
|
||
balance_after REAL NOT NULL
|
||
);
|
||
```
|
||
|
||
### C. Контур методов
|
||
|
||
```sql
|
||
CREATE TABLE skills (
|
||
id TEXT PRIMARY KEY,
|
||
name TEXT NOT NULL, -- 'podcast-silero','image-comfyui','seo-onpage-editor'
|
||
area TEXT NOT NULL, -- привязка к capabilities.area
|
||
method_md TEXT NOT NULL, -- как делать (промпт/алгоритм/порядок шагов)
|
||
tool TEXT, -- реальный инструмент: ace-step|silero|comfyui|editor-pro|astro|wordstat
|
||
source TEXT NOT NULL CHECK(source IN ('builtin','learned')),
|
||
validated INTEGER NOT NULL DEFAULT 0,
|
||
uses INTEGER NOT NULL DEFAULT 0,
|
||
success_rate REAL,
|
||
embedding BLOB -- bge-m3, dim=1024 — retrieval под задачу
|
||
);
|
||
```
|
||
|
||
## 4. Правила
|
||
|
||
### 4.1 Области (area) и типы метрик
|
||
|
||
| area | Что производит/делает | Типовые метрики |
|
||
|------|----------------------|-----------------|
|
||
| `text` | статьи, лонгриды, описания | показы, CTR, дочитывания, позиции |
|
||
| `image` | изображения, обложки, карточки | показы, CTR, скачивания |
|
||
| `podcast` | аудио, подкасты (Silero TTS) | прослушивания, completion rate, дослушивания |
|
||
| `video` | видео, шортсы | просмотры, watch time, удержание |
|
||
| `seo_onpage` | заголовки, структура, разметка | позиции, CTR, индексация |
|
||
| `seo_semantics` | семантика, кластеры, запросы | охват запросов, релевантность |
|
||
| `publish` | публикация, распространение | скорость публикации, индексация |
|
||
|
||
### 4.2 Нормализация метрики в score
|
||
|
||
```
|
||
raw = (value_after - value_before) / max(|value_before|, eps)
|
||
score = clamp(raw * (direction == 'up_good' ? 1 : -1), -1, 1)
|
||
```
|
||
- Нет `value_before` (новый контент) → сравнение с базлином области
|
||
(медиана последних 10 measured в этой `area`).
|
||
- `quality` — дискретно: `+1 / 0 / −1` (эксперт/клиент/человек).
|
||
- `speed` — `direction = 'down_good'` (быстрее индексация = лучше).
|
||
- `status != 'measured'` → score не участвует в трек-рекорде.
|
||
|
||
### 4.3 Автономия по заслугам
|
||
|
||
| tier | Имя | Что разрешено |
|
||
|------|-----|----------------|
|
||
| 0 | observer | только анализ и предложения, публикаций нет |
|
||
| 1 | suggest | предлагает готовый контент человеку, сам не публикует |
|
||
| 2 | ask | публикует после подтверждения |
|
||
| 3 | act+report | публикует и отчитывается; человек может откатить |
|
||
| 4 | autonomous | публикует и выбирает темы сам, в границах persona |
|
||
|
||
Переходы:
|
||
- `+1 тир` за **3 нетто-положительных** outcome в области.
|
||
- `−1 тир` за **1 нетто-отрицательный** — асимметрия: падать легче.
|
||
- Затухание: outcome старше 90 дней весит 0.5.
|
||
- Новая область стартует с tier 0.
|
||
- **Границы persona `values` непреодолимы на любом тире.**
|
||
|
||
### 4.4 Энергия
|
||
|
||
- Расход: тик, генерация (текст/фото/аудио/видео — дороже всего), публикация,
|
||
вызов саб-агента.
|
||
- Приход: **подтверждённые положительные outcomes** (особенно `revenue`),
|
||
плюс донат человека.
|
||
- Низкий баланс → интервал тиков растёт → Deep Rest.
|
||
- Отличие от iLands: энергия восполняется результатом, а не покупкой.
|
||
|
||
## 5. Триггеры heartbeat (добавляются)
|
||
|
||
| Триггер | Что делает |
|
||
|---------|------------|
|
||
| `{type:'pipeline'}` | продвинуть content_items по конвейеру (draft→generated→optimized→published) |
|
||
| `{type:'measure'}` | наступил `due_at` → тянет метрику из источника → `value_after`, `score` |
|
||
| `{type:'reflection'}` | ночной цикл: обобщает items + outcomes + thoughts → long-term и `self_observations` |
|
||
| `{type:'task'}` | cron-планировщик (нужен для measure/reflection) |
|
||
|
||
Плюс `decision.noAction: true` (P5).
|
||
|
||
Источники метрик: **Метрика API, Google Search Console, Yandex Webmaster API,
|
||
Wordstat** — у всех доступ уже настроен. Плюс `platform` (прослушивания/просмотры)
|
||
и `manual`/`client`.
|
||
|
||
## 6. Тонкий Channel (бывший P7)
|
||
|
||
```ts
|
||
interface Channel { send(text: string): Promise<void>; }
|
||
```
|
||
Реализации: `ConsoleChannel`, `TelegramChannel`, `FileChannel`.
|
||
`LLMClient` уже есть. Полный harness-реестр отложен — абстракция окупается
|
||
с ≥2 реализациями.
|
||
|
||
## 7. Методы (skills) — привязка к реальному стеку
|
||
|
||
| area | tool | Что уже есть |
|
||
|------|------|--------------|
|
||
| text | editor-pro | 7-layer markdown pipeline (типографика, SEO-слой) |
|
||
| image | comfyui | генерация изображений через diffusion-воркфлоу |
|
||
| podcast | silero | Silero TTS 24kHz, пайплайн через normalizar/tts |
|
||
| video | video-pipeline | загрузка/обработка видео |
|
||
| seo_onpage | editor-pro, astro | структура, заголовки, schema |
|
||
| seo_semantics | wordstat | Wordstat API: частотность, кластеры |
|
||
| publish | astro + deploy | сборка Astro → публикация |
|
||
|
||
Это ключевое: **скиллы агента = твой существующий производственный стек**,
|
||
а не абстрактные описания. Retrieval по bge-m3 подгружает нужный метод под задачу.
|
||
|
||
## 8. Порядок внедрения
|
||
|
||
| Шаг | Что | Критерий приёмки |
|
||
|-----|-----|------------------|
|
||
| 0 | P5 `noAction` + тонкий `Channel` | агент умеет не действовать; вывод через интерфейс |
|
||
| 1 | Планировщик (`task`/`pipeline`/`measure`) | задача с датой выполняется в срок |
|
||
| 2 | `content_items` + конвейер | item проходит brief→published, переходы в журнале |
|
||
| 3 | `outcomes` + `measure` (Метрика/GSC/Webmaster/Wordstat) | метрика замеряется через horizon, score пишется |
|
||
| 4 | `capabilities` — автономия по областям | тир растёт после 3 успехов, падает после провала |
|
||
| 5 | `skills` + retrieval + `reflection` | нужный метод подгружается по задаче; self_observations оживают |
|
||
| 6 | `deals` + `counterparties` | заказ клиента проходит offered→paid |
|
||
| 7 | `ledger` — энергия | результат пополняет энергию, дефицит замедляет тики |
|
||
|
||
Зависимости: 3 требует 1 и 2. 4 требует 3. 5 требует 2. 7 требует 3.
|
||
|
||
## 9. Что НЕ делаем
|
||
|
||
- Рекламные метрики (Директ/CPA) как основу — ушло из фокуса.
|
||
- Соцсеть/ленту/подписки внутри агента.
|
||
- Токены как валюту.
|
||
- Полный harness-реестр.
|
||
- «Суперразум из общества».
|
||
|
||
## 10. Открытые вопросы
|
||
|
||
1. **Свои сайты или клиентские заказы в первую очередь?** (влияет на приоритет
|
||
шага 2 vs 6; предлагаю сначала свои сайты — полный контроль над метриками).
|
||
2. **Кто ставит `horizon_days`** — агент предлагает, человек правит? (Мой дефолт.)
|
||
3. **Где предел «качества» текста** — только метрики или ещё экспертная оценка
|
||
Ника обязательна перед публикацией на tier<3.
|