| name | second-opinion |
| description | Adversarial second opinion for important NON-code decisions and answers.
Sends the draft recommendation to an independent free model (litellm
`reasoning` rotation group) that is instructed to argue AGAINST it and
score it 0-100; the answer is revised over up to 3 rounds and delivered
together with the judge's remaining objections — never silent agreement.
Use when: "второе мнение", "проверь это решение", "поспорь со мной",
"а вдруг я не прав", "devil's advocate", "second opinion", "challenge
this decision" — and PROACTIVELY whenever giving advice on a high-stakes
personal decision: money (крупная покупка, кредит, инвестиция, переезд),
health (лечение, операция — не диагноз), career (смена работы, оффер),
legal/visa choices. High-stakes = expensive to reverse.
Not for: code review (code-reviewing skill / code-reviewer agent),
tech-spec validation (skeptic agent), quick factual questions, low-stakes
choices (что приготовить, какой фильм) — там второе мнение только шум.
|
Second Opinion — кросс-модельная проверка решений
LLM склонна поддакивать: скажи «я думаю, надо брать» — она найдёт причины согласиться.
Этот скилл ломает зеркалирование структурно: независимая модель получает черновик
ответа без указания автора, и её задача — построить сильнейший кейс ПРОТИВ. Стоимость $0 —
судья ходит через бесплатный litellm-прокси (reasoning, 14 бэкендов).
Пайплайн
0. Privacy scrub — перед отправкой
Судья — внешние бесплатные провайдеры, они логируют запросы. Замени в payload:
ФИО → роль («жена», «врач»), номера счетов/документов → [№], точные адреса → город,
названия компаний → отрасль (если чувствительно). Суммы, сроки, проценты, симптомы —
оставить: без них второе мнение бесполезно.
Чекпоинт: в payload не осталось имён, номеров и точных адресов.
1. Черновик
Сначала полностью сформируй собственную рекомендацию с аргументами — судье нужен
готовый объект критики, а не вопрос («оцени вопрос» вырождается в общие слова).
Чекпоинт: в черновике есть позиция и аргументы, а не открытый вопрос.
2. Вызов судьи
Payload пиши в файл в scratchpad (не инлайнь в команду — quoting hell), оберни в теги:
<вопрос>— исходный вопрос/решение пользователя (после privacy scrub)</вопрос>
<контекст>— релевантные факты: суммы, сроки, ограничения</контекст>
<черновик>— рекомендация с аргументами. Автор не указывается.</черновик>
jq -n --rawfile sys <судья-промпт> --rawfile user <payload> \
'{model:"reasoning", max_tokens:8000, cache:{"no-cache":true},
messages:[{role:"system",content:$sys},{role:"user",content:$user}]}' |
curl -sS http://localhost:4000/v1/chat/completions \
-H "Authorization: Bearer ${LITELLM_MASTER_KEY:-sk-local-workbot}" \
-H "Content-Type: application/json" -d @- > <ответ.json>
jq -r '.choices[0].message.content' <ответ.json>
Почему именно такие параметры (проверено живым прогоном):
cache: {"no-cache": true}. У прокси семантический кэш с порогом 0.85: payload
раунда 2 похож на раунд 1, и без no-cache судья «ответит» кэшем первого раунда —
критика перестанет обновляться; кэш также реплеит старые обрезанные ответы.
ai CLI кэш не обходит — поэтому curl, не ai.
max_tokens: 8000. Reasoning-модели тратят тысячи токенов на размышления до
ответа; при 2500 весь бюджет уходит в thinking → finish_reason: "length" и пустой
content. Если это случилось — это не отказ судьи, см. «Отказы».
Системный промпт судьи (шаблон, подстрой язык под пользователя):
Ты — жёсткий независимый рецензент решений. Тебе дан вопрос и черновик
рекомендации неизвестного автора. Твоя работа — не соглашаться, а проверять.
Ответ строго из четырёх секций, в этом порядке:
ПРОТИВ: сильнейший честный кейс против рекомендации (даже если в целом
согласен — лучший контраргумент, который должен пережить это решение).
ОШИБКИ: фактические ошибки и неучтённые риски черновика, по пунктам.
НЕ ХВАТАЕТ: какой информации не хватает, чтобы решать уверенно.
СЧЁТ: N/100 — качество рекомендации (не вежливость, а полнота и корректность).
Комплименты, пересказ черновика и общие слова («зависит от обстоятельств»)
без конкретики не несут ценности — вместо них конкретные аргументы. Пиши сжато.
Чекпоинт: в ответе непустой content со всеми четырьмя секциями
(ПРОТИВ/ОШИБКИ/НЕ ХВАТАЕТ/СЧЁТ) — только после этого переходи к ревизии.
3. Ревизия (до 3 раундов)
Каждый пункт критики либо встраивается в ответ, либо явно отклоняется с причиной —
третьего варианта нет. Новый черновик → судье со сноской «что изменено с прошлого
раунда». Стоп: СЧЁТ ≥ 85 и нет новых существенных пунктов, или 3 раунда.
Для действительно дорогих решений — минимум 2 раунда, даже если первый счёт высокий.
4. Выдача — формат ответа
Ответ пользователю завершается блоком прозрачности:
Второе мнение: счёт 62→88, 2 раунда (litellm reasoning).
Что изменилось после критики: …
Где судья всё ещё не согласен: …
Последняя строка — главная: остаточное несогласие показывается, а не сглаживается.
Если судья прав, а изначальная рекомендация была неверна — сказать это прямо.
Отказы
- 402/ошибка бэкенда (rotation может выдать мёртвый бэкенд, у chat-групп нет
fallback): повторить вызов один раз — shuffle возьмёт другой бэкенд. Снова ошибка →
выдать собственный ответ с пометкой «⚠️ без второго мнения — прокси/бэкенды недоступны».
Имитировать критику самому — подделка независимости; лучше честная пометка.
- Пустой
content при finish_reason: "length" — бюджет съеден thinking'ом:
повторить с max_tokens: 12000. Если и так пусто — взять хвост
.choices[0].message.reasoning_content (вердикт часто уже сформирован там).
- Судья вернул воду (пересказ, «всё зависит»): один повтор с добавкой «предыдущий
ответ отклонён: не было конкретики. Дай конкретные контраргументы или конкретные
ошибки». Снова вода → пометка «второе мнение неинформативно», продолжить без него.
- Reasoning-модели иногда выводят цепочку рассуждений перед вердиктом — брать
финальные секции ПРОТИВ/ОШИБКИ/НЕ ХВАТАЕТ/СЧЁТ, рассуждения не цитировать.
Самопроверка перед выдачей
- Privacy scrub применён (имена/номера/адреса не ушли наружу).
- Каждый пункт критики встроен или явно отклонён с причиной — ни один не проигнорирован молча.
- Блок прозрачности содержит и динамику счёта, и остаточное несогласие судьи.
- Если второго мнения не было (отказы) — это сказано явно, а не опущено.