7.9 KiB
Промт ресёрч-сессии: обзор LLM-транспорта чужих харнессов (research/21)
АРХИВ (23.07.2026): ОТРАБОТАН ПОЛНОСТЬЮ. Сдан и залендён
docs/research/21-llm-transport-survey.md(ревью-шапка с эрратумом и поправкой применимости — там). Все Q1–Q7 закрыты; рекомендации DEFER до после пере-прогона; Q7-кандидаты ждут вендор-сверки. Инструкции ниже не исполнять — только история.
Статус: АКТИВЕН (выдан 20.07.2026, оркестратор №7). Роль — ресёрч (полигон-профиль). Идёт ПАРАЛЛЕЛЬНО операционному пере-прогону: backend/ строго read-only, НИКАКИХ патчей — рекомендации применяются только после пере-прогона отдельным решением. Это $0-сессия чтения кода: не запускать чужие CLI, не делать НИ ОДНОГО вызова моделей, ключи не трогать.
Материал
Склонировано в /home/ubuntu/projects/tmp/ (shallow, 20.07): codex (OpenAI, Apache-2.0) · gemini-cli (Apache-2.0) · grok-build (официальный xAI, Apache-2.0, open-sourced 15.07.2026) · goose (Block, Apache-2.0) · aider (Apache-2.0) · cline (Apache-2.0) · opencode (sst, MIT) · litellm (MIT-ядро; enterprise/ — иная лицензия, НЕ читать) · crush (Charm, FSL-1.1: читать можно, копировать НЕЛЬЗЯ) · openai-go + anthropic-sdk-go (референс официальных SDK).
Периметр: leaked-форки Claude Code — ВНЕ периметра: не искать, не клонировать, не открывать (контаминация независимой разработки). Официальный трекер/чейнджлог anthropics/claude-code — читать ОНЛАЙН (issues/CHANGELOG), код не разбирать.
Контекст нашей стороны (прочитать ДО чужого кода)
CLAUDE.md→docs/README.md→ CURRENT-STATEdocs/PROGRESS.md.backend/internal/llm/(весь пакет — наш транспорт: адаптеры, фейловер, таймауты) +backend/internal/pipeline/ratelimit.go+backend/configs/models.yaml(капабилити/цены/квирки).docs/experiments/00-provider-quirks.md(наш реестр квирков) +docs/architecture/04-unhappy-paths.md(~70 режимов отказа) +docs/experiments/08-cost-model-v2.md(деньги).
Вопросы (ранжированы; на каждый — вывод «что берём/что не берём и почему»)
Q1 — Prompt-cache дисциплина (потенциально $). Как харнессы раскладывают запрос под префикс-кеш (стабильный system/tools-префикс, порядок блоков, cache_control-маркеры у Anthropic, implicit/explicit cache Gemini, автокеш DeepSeek/GLM)? Наша боль: инъекция банка меняется от чанка к чанку — какой порядок блоков (промт-константы → банк → исходник) максимизирует cache-hit на deepseek-v4-flash/glm-5? Выход: конкретная рекомендация раскладки + оценка экономии по cost-model (cache-hit $0.0028 vs miss $0.14 — до ×50 на входе).
Q2 — Rate-limit адаптив. Парсинг retry-after/x-ratelimit-*, токен-бакеты, адаптивная конкурентность (AIMD?), очереди per-provider. Сверить с нашим rate-guard (фикс-пул волнового исполнителя). Особый интерес: Mistral (замечание к плану — их лимиты жёсткие, mistral = арм редактора пере-прогона).
Q3 — finish_reason таксономия. Как нормализуют across-provider (stop/length/content_filter/tool_calls + нестандарт), как детектят тихое усечение, что делают с partial-ответом. Сверить с нашим контрактом finish=stop-only и floor min_max_tokens (deepseek thinking ⊆ completion — субсет-модель).
Q4 — Таксономия ошибок retry/fatal. Классификация HTTP/сетевых/провайдерских ошибок, backoff-формы, идемпотентность (у кого есть idempotency-key кроме OpenAI?). Дифф против 04-unhappy-paths.md — чего у нас нет.
Q5 — Usage-учёт. Как считают reasoning/thinking-токены по провайдерам, cache-hit поля, атрибуция стоимости. Сверить с нашим ledger (Р7): есть ли поля usage, которые мы теряем/книжим неверно.
Q6 — Streaming vs non-streaming надёжность. Меньше ли у стриминга обрывов/таймаутов на длинных генерациях (наш режим отказа — тихие пропуски на выходе 2–8k)? SSE-реассемблинг, обработка обрыва посреди стрима, ретрай частичного. Вывод: есть ли довод менять наш non-streaming путь (сейчас — attempt_s 240 + ретраи).
Q7 — Issue-sweep по НАШИМ провайдерам (возможно, самое ценное). По трекерам всех склонированных + anthropics/claude-code онлайн: поиск по deepseek / zai / glm / gemini / mistral / grok / xai / kimi — жатва квирк-репортов (новые finish_reason, игнор параметров, депрекации, флейки) с датами и ссылками. Выход: таблица кандидатов в 00-provider-quirks.md (кандидаты! абсорбирует оркестратор после вендор-сверки — правило 10.07).
Метод (жёстко)
- Каждое утверждение о чужом коде — с
repo/file:line. README ≠ код: пересказ документации фактом о коде не считается. - Мандат самопроверки (12.07): спорные находки верифицировать чтением второго места в коде (call-site, тест); в отчёте помечать confidence.
- Лицензии — в шапке отчёта per-repo. НИКАКОГО копирования чужого кода в textmachine: выход — отчёт-рекомендации; реимплементация — отдельное решение после пере-прогона.
.envне читать. Git textmachine не трогать (сессия не коммитит).
Выход
docs/research/21-llm-transport-survey.md — НЕ коммитить (лендит оркестратор). Структура: (1) топ-рекомендации, ранжированные по ожидаемому импакту ($ / надёжность), каждая с «какая наша метрика двинется и на сколько (оценка)»; (2) таблица quirk-кандидатов Q7 со ссылками; (3) per-question разборы с цитатами; (4) appendix per-repo (лицензия, что смотрели, что пропустили). Плюс короткое итоговое сообщение оркестратору.