Files
ai-setup/EFFORT_MAPPING.md
Виталий Никитенко a74597dba6 feat: добавить ai-opencode лаунчер (OpenCode Go + routatic-proxy)
- Новый лаунчер ai-opencode с routatic-proxy на 127.0.0.1:3456
- Автоустановка routatic-proxy под linux/darwin amd64/arm64
- Модели: deepseek-v4-pro (opus/sonnet), kimi-k2.6 (haiku)
- AI_RESET_KEY, OPENCODE_GO_API_KEY env fallback, управление opencode_key
- Документация: EFFORT_MAPPING.md, QUICK_START.md, README.md
- Статус-проверка в setup.sh: ai-opencode, opencode_key, opencode.ai
- Тесты: 4 новых теста для ai-opencode в test_fixes.sh

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 08:41:38 +03:00

128 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Effort Mapping - соответствие уровней для Claude Code лаунчеров
## Как это работает
`/effort` и `AI_EFFORT` относятся к лаунчерам, которые запускают Claude Code:
`ai-claude`, `ai-deepseek`, `ai-kimi`, `ai-glm`, `ai-openrouter`, `ai-opencode`.
Нативные лаунчеры `ai-gpt` (OpenAI Codex) и `ai-gemini` (Antigravity `agy`) не используют
эту схему. У них свои настройки reasoning внутри соответствующего CLI.
Документ отражает текущую реализацию `scripts/ai-setup.sh`.
## Таблица маппинга
| Claude Code `/effort` | Anthropic (`ai-claude`) | DeepSeek V4 (`ai-deepseek`) | Kimi K2.7/K2.6 (`ai-kimi`) | GLM 5.2 (`ai-glm`) | OpenRouter/GPT-5.5 (`ai-openrouter`) | OpenCode Go (`ai-opencode`) |
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| `low` | нативно `low` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
| `medium` | нативно `medium` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
| `high` | нативно `high` | нативно `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
| `xhigh` | нативно `xhigh` | провайдер поднимает до `max` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
| `max` | нативно `max` | нативно `max` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
Для OpenRouter текущий лаунчер не делает локального преобразования effort и отправляет
значение дальше через Claude Code/OpenRouter. Конкретная интерпретация зависит от выбранной
модели и backend-а OpenRouter.
Для OpenCode Go лаунчер работает через `routatic-proxy`, который транслирует Anthropic-запросы
в OpenAI/Gemini-формат для OpenCode Go API. Локального маппинга effort нет — thinking budget
не транслируется напрямую в OpenCode Go бекенд. Прокси и бекенд-модели выполняют reasoning
на своей стороне независимо от уровня effort.
## Нативные уровни каждого провайдера
### Anthropic (Claude)
```text
low -> medium -> high -> xhigh -> max
```
- 5 уровней, полное соответствие с Claude Code.
- Дефолт `ai-claude`: `xhigh`.
- `max` - максимальный бюджет thinking для самых сложных задач.
### DeepSeek V4
```text
high -> max
```
- 2 реальных уровня.
- `low` и `medium` фактически поднимаются до `high`.
- `xhigh` фактически поднимается до `max`.
- Маппинг выполняется на стороне DeepSeek API.
- Дефолт `ai-deepseek`: `high`.
### Kimi K2.7/K2.6 (Moonshot AI)
```text
on / off
```
- Бинарный режим: thinking либо включен, либо выключен.
- Все уровни Claude Code effort в текущем лаунчере означают thinking on.
- Градаций глубины reasoning нет.
- Дефолт `ai-kimi`: `high`.
### GLM 5.2 (Zhipu AI)
```text
high / max
```
- Маппинг выполняется на стороне Zhipu AI API.
- Текущий `ai-glm` не делает локального преобразования effort.
- Дефолт `ai-glm`: `high`.
### OpenRouter / GPT-5.5
Текущий `ai-openrouter` работает через Claude Code с `ANTHROPIC_BASE_URL=https://openrouter.ai/api`
и не вызывает локальный effort proxy. Поэтому `low`/`medium`/`high`/`xhigh`/`max` не
преобразуются в shell-лаунчере.
### OpenCode Go (routatic-proxy)
Текущий `ai-opencode` работает через Claude Code с локальным `routatic-proxy`
(`ANTHROPIC_BASE_URL=http://127.0.0.1:3456`), который транслирует запросы в OpenCode Go API.
Effort не преобразуется локально — thinking budget не имеет прямого эффекта на OpenCode Go бекенд.
Дефолт `ai-opencode`: `high`.
`claude-gpt-effort-proxy.py` все еще генерируется как совместимый helper для старого
`claude-code-proxy` backend-а. Если использовать его вручную, он маппит только
`xhigh` -> `high`, потому что `claude-code-proxy` принимает `low`, `medium`, `high`, `max`.
## Где выполняется маппинг
| Провайдер | Кто маппит | Файл/компонент |
|:---|:---|:---|
| Anthropic | Не нужен | - |
| DeepSeek V4 | DeepSeek API | На стороне сервера |
| Kimi K2.7/K2.6 | Moonshot API | На стороне сервера |
| GLM 5.2 | Zhipu AI API | На стороне сервера |
| OpenRouter/GPT-5.5 | Локального маппинга нет | `ai-openrouter` отправляет значение как есть |
| OpenCode Go | Локального маппинга нет | `ai-opencode` отправляет значение через routatic-proxy |
| Legacy GPT proxy | helper-маппинг `xhigh` -> `high` | `~/bin/claude-gpt-effort-proxy.py` или `~/.local/bin/claude-gpt-effort-proxy.py` |
## Persistence effort между сессиями
Каждый Claude Code лаунчер (`ai-claude`, `ai-deepseek`, `ai-kimi`, `ai-glm`, `ai-openrouter`, `ai-opencode`)
запоминает свой уровень effort отдельно в `settings.json` лаунчера.
`/effort` внутри сессии работает для всех уровней. `CLAUDE_CODE_EFFORT_LEVEL` не используется.
Форсировать уровень при запуске:
```bash
AI_EFFORT=max ai-deepseek # включить max
AI_EFFORT=high ai-deepseek # включить high
ai-deepseek # без флага - использовать уровень из settings.json
```
Дефолты: `xhigh` для `ai-claude`, `high` для остальных Claude Code лаунчеров.
## Рекомендации
- Для повседневной работы: `high` или `xhigh`.
- `max` effort имеет реальный эффект у Anthropic и DeepSeek; у Kimi и GLM это всё тот же thinking on / маппинг на стороне сервера.
- `low`/`medium` у DeepSeek, Kimi и GLM фактически не снижают reasoning.