1312 lines
58 KiB
Markdown
1312 lines
58 KiB
Markdown
<div align="center">
|
||
<img src="../images/9router.png?1" alt="Панель управления 9Router" width="800"/>
|
||
|
||
# 9Router - Free AI Router
|
||
|
||
**Никогда не прекращайте кодить. Автоматическая маршрутизация к БЕСПЛАТНЫМ и дешёвым AI-моделям с умным механизмом резервирования.**
|
||
|
||
**Бесплатный AI-провайдер для OpenClaw.**
|
||
|
||
<p align="center">
|
||
<img src="../public/providers/openclaw.png" alt="OpenClaw" width="80"/>
|
||
</p>
|
||
|
||
[](https://www.npmjs.com/package/9router)
|
||
[](https://www.npmjs.com/package/9router)
|
||
[](https://github.com/decolua/9router/blob/main/LICENSE)
|
||
|
||
[🚀 Быстрый старт](#-quick-start) • [💡 Возможности](#-key-features) • [📖 Установка](#-setup-guide) • [🌐 Сайт](https://9router.com)
|
||
</div>
|
||
|
||
---
|
||
|
||
## 🤔 Почему 9Router?
|
||
|
||
**Перестаньте тратить деньги и упираться в лимиты:**
|
||
|
||
- ❌ Квота подписки сгорает каждый месяц, не будучи израсходованной
|
||
- ❌ Ограничение скорости (rate limit) прерывает вас прямо во время работы
|
||
- ❌ Дорогие API ($20-50/мес за каждого провайдера)
|
||
- ❌ Приходится вручную переключаться между провайдерами
|
||
|
||
**9Router решает это:**
|
||
|
||
- ✅ **Максимум из подписки** — Отслеживает квоту, использует каждый бит до сброса
|
||
- ✅ **Автоматическое резервирование** — Подписка → Дёшево → Бесплатно, нулевой простой
|
||
- ✅ **Несколько аккаунтов** — Round-robin по аккаунтам каждого провайдера
|
||
- ✅ **Универсальность** — Работает с Claude Code, Codex, Gemini CLI, Cursor, Cline, любым CLI-инструментом
|
||
|
||
---
|
||
|
||
## 🔄 Как это работает
|
||
|
||
```
|
||
┌─────────────┐
|
||
│ Your CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...)
|
||
│ Tool │
|
||
└──────┬──────┘
|
||
│ http://localhost:20128/v1
|
||
↓
|
||
┌────────────────────────────────────────┐
|
||
│ 9Router (Smart Router) │
|
||
│ • Format translation (OpenAI ↔ Claude) │
|
||
│ • Quota tracking │
|
||
│ • Auto token refresh │
|
||
└──────┬──────────────────────────────────┘
|
||
│
|
||
├─→ [Tier 1: SUBSCRIPTION] Claude Code, Codex, Gemini CLI
|
||
│ ↓ quota exhausted
|
||
├─→ [Tier 2: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
|
||
│ budget limit
|
||
└─→ [Tier 3: FREE] iFlow, Qwen, Kiro (unlimited)
|
||
|
||
Result: Never stop coding, minimal cost
|
||
```
|
||
|
||
---
|
||
|
||
## ⚡ Быстрый старт
|
||
|
||
**1. Глобальная установка:**
|
||
|
||
```bash
|
||
npm install -g 9router
|
||
9router
|
||
```
|
||
|
||
🎉 Панель управления откроется на `http://localhost:20128`
|
||
|
||
**2. Подключите БЕСПЛАТНОГО провайдера (без подписки):**
|
||
|
||
Панель управления → Providers → Подключить **Claude Code** или **Antigravity** → Вход через OAuth → Готово!
|
||
|
||
**3. Используйте в вашем CLI-инструменте:**
|
||
|
||
```
|
||
Настройки Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline:
|
||
Endpoint: http://localhost:20128/v1
|
||
API Key: [скопируйте из панели управления]
|
||
Model: if/kimi-k2-thinking
|
||
```
|
||
|
||
**Готово!** Начинайте кодить с БЕСПЛАТНЫМИ AI-моделями.
|
||
|
||
**Альтернатива: запуск из исходников (этот репозиторий):**
|
||
|
||
Пакет этого репозитория приватный (`9router-app`), поэтому запуск из исходников/Docker — это ожидаемый путь локальной разработки.
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
npm install
|
||
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
|
||
```
|
||
|
||
Режим Production:
|
||
|
||
```bash
|
||
npm run build
|
||
PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run start
|
||
```
|
||
|
||
URL по умолчанию:
|
||
- Панель управления: `http://localhost:20128/dashboard`
|
||
- OpenAI-совместимый API: `http://localhost:20128/v1`
|
||
|
||
---
|
||
|
||
## 🎥 Видео-руководство
|
||
|
||
<div align="center">
|
||
|
||
### 📺 Полное руководство по настройке - 9Router + Claude Code БЕСПЛАТНО
|
||
|
||
[](https://www.youtube.com/watch?v=raEyZPg5xE0)
|
||
|
||
**🎬 Полное пошаговое руководство:**
|
||
- ✅ Установка и настройка 9Router
|
||
- ✅ Настройка Claude Sonnet 4.5 БЕСПЛАТНО
|
||
- ✅ Интеграция с Claude Code
|
||
- ✅ Тестирование кода вживую
|
||
|
||
**⏱️ Длительность:** 20 минут | **👥 Автор:** Сообщество разработчиков
|
||
|
||
[▶️ Смотреть на YouTube](https://www.youtube.com/watch?v=o3qYCyjrFYg)
|
||
|
||
</div>
|
||
|
||
---
|
||
|
||
## 🛠️ Поддерживаемые CLI-инструменты
|
||
|
||
9Router бесшовно работает со всеми основными AI-инструментами для кодинга:
|
||
|
||
<div align="center">
|
||
<table>
|
||
<tr>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/claude.png" width="60" alt="Claude Code"/><br/>
|
||
<b>Claude-Code</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/openclaw.png" width="60" alt="OpenClaw"/><br/>
|
||
<b>OpenClaw</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/codex.png" width="60" alt="Codex"/><br/>
|
||
<b>Codex</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/opencode.png" width="60" alt="OpenCode"/><br/>
|
||
<b>OpenCode</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/cursor.png" width="60" alt="Cursor"/><br/>
|
||
<b>Cursor</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/antigravity.png" width="60" alt="Antigravity"/><br/>
|
||
<b>Antigravity</b>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/cline.png" width="60" alt="Cline"/><br/>
|
||
<b>Cline</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/continue.png" width="60" alt="Continue"/><br/>
|
||
<b>Continue</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/droid.png" width="60" alt="Droid"/><br/>
|
||
<b>Droid</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/roo.png" width="60" alt="Roo"/><br/>
|
||
<b>Roo</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/copilot.png" width="60" alt="Copilot"/><br/>
|
||
<b>Copilot</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/kilocode.png" width="60" alt="Kilo Code"/><br/>
|
||
<b>Kilo Code</b>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
---
|
||
|
||
## Поддерживаемые провайдеры
|
||
|
||
### 🔐 OAuth-провайдеры
|
||
|
||
<div align="center">
|
||
<table>
|
||
<tr>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/claude.png" width="60" alt="Claude Code"/><br/>
|
||
<b>Claude-Code</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/antigravity.png" width="60" alt="Antigravity"/><br/>
|
||
<b>Antigravity</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/codex.png" width="60" alt="Codex"/><br/>
|
||
<b>Codex</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/github.png" width="60" alt="GitHub"/><br/>
|
||
<b>GitHub</b>
|
||
</td>
|
||
<td align="center" width="120">
|
||
<img src="../public/providers/cursor.png" width="60" alt="Cursor"/><br/>
|
||
<b>Cursor</b>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
### 🆓 Бесплатные провайдеры
|
||
|
||
<div align="center">
|
||
<table>
|
||
<tr>
|
||
<td align="center" width="150">
|
||
<img src="../public/providers/iflow.png" width="70" alt="iFlow"/><br/>
|
||
<b>iFlow AI</b><br/>
|
||
<sub>8+ моделей • Без ограничений</sub>
|
||
</td>
|
||
<td align="center" width="150">
|
||
<img src="../public/providers/qwen.png" width="70" alt="Qwen"/><br/>
|
||
<b>Qwen Code</b><br/>
|
||
<sub>3+ моделей • Без ограничений</sub>
|
||
</td>
|
||
<td align="center" width="150">
|
||
<img src="../public/providers/gemini-cli.png" width="70" alt="Gemini CLI"/><br/>
|
||
<b>Gemini CLI</b><br/>
|
||
<sub>180K/мес БЕСПЛАТНО</sub>
|
||
</td>
|
||
<td align="center" width="150">
|
||
<img src="../public/providers/kiro.png" width="70" alt="Kiro"/><br/>
|
||
<b>Kiro AI</b><br/>
|
||
<sub>Claude • Без ограничений</sub>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
### 🔑 Провайдеры с API Key (40+)
|
||
|
||
<div align="center">
|
||
<table>
|
||
<tr>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/openrouter.png" width="50" alt="OpenRouter"/><br/>
|
||
<sub>OpenRouter</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/glm.png" width="50" alt="GLM"/><br/>
|
||
<sub>GLM</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/kimi.png" width="50" alt="Kimi"/><br/>
|
||
<sub>Kimi</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/minimax.png" width="50" alt="MiniMax"/><br/>
|
||
<sub>MiniMax</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/openai.png" width="50" alt="OpenAI"/><br/>
|
||
<sub>OpenAI</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/anthropic.png" width="50" alt="Anthropic"/><br/>
|
||
<sub>Anthropic</sub>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/gemini.png" width="50" alt="Gemini"/><br/>
|
||
<sub>Gemini</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/deepseek.png" width="50" alt="DeepSeek"/><br/>
|
||
<sub>DeepSeek</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/groq.png" width="50" alt="Groq"/><br/>
|
||
<sub>Groq</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/xai.png" width="50" alt="xAI"/><br/>
|
||
<sub>xAI</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/mistral.png" width="50" alt="Mistral"/><br/>
|
||
<sub>Mistral</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/perplexity.png" width="50" alt="Perplexity"/><br/>
|
||
<sub>Perplexity</sub>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/together.png" width="50" alt="Together"/><br/>
|
||
<sub>Together AI</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/fireworks.png" width="50" alt="Fireworks"/><br/>
|
||
<sub>Fireworks</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/cerebras.png" width="50" alt="Cerebras"/><br/>
|
||
<sub>Cerebras</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/cohere.png" width="50" alt="Cohere"/><br/>
|
||
<sub>Cohere</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/nvidia.png" width="50" alt="NVIDIA"/><br/>
|
||
<sub>NVIDIA</sub>
|
||
</td>
|
||
<td align="center" width="100">
|
||
<img src="../public/providers/siliconflow.png" width="50" alt="SiliconFlow"/><br/>
|
||
<sub>SiliconFlow</sub>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
<p><i>...и более 20 других провайдеров, включая Nebius, Chutes, Hyperbolic и пользовательские OpenAI/Anthropic-совместимые эндпоинты</i></p>
|
||
</div>
|
||
|
||
---
|
||
|
||
## 💡 Ключевые возможности
|
||
|
||
| Возможность | Что делает | Почему это важно |
|
||
|---------|--------------|----------------|
|
||
| 🎯 **Smart 3-Tier Fallback** | Авто-маршрутизация: Подписка → Дёшево → Бесплатно | Никогда не прекращайте кодить, нулевой простой |
|
||
| 📊 **Отслеживание квоты в реальном времени** | Живой подсчёт токенов + обратный отсчёт до сброса | Максимум ценности из подписки |
|
||
| 🔄 **Трансляция форматов** | OpenAI ↔ Claude ↔ Gemini бесшовно | Работает с любым CLI-инструментом |
|
||
| 👥 **Поддержка нескольких аккаунтов** | Несколько аккаунтов на каждого провайдера | Балансировка нагрузки + резервирование |
|
||
| 🔄 **Авто-обновление токена** | OAuth-токены обновляются автоматически | Не нужно входить вручную заново |
|
||
| 🎨 **Пользовательские комбо** | Создавайте безграничные комбинации моделей | Настройте резервирование под себя |
|
||
| 📝 **Логирование запросов** | Режим отладки с полным логом запросов/ответов | Лёгкая диагностика проблем |
|
||
| 💾 **Облачная синхронизация** | Синхронизация конфигурации между устройствами | Одинаковые настройки везде |
|
||
| 📊 **Аналитика использования** | Отслеживание токенов, затрат, трендов во времени | Оптимизация расходов |
|
||
| 🌐 **Развёртывание где угодно** | Localhost, VPS, Docker, Cloudflare Workers | Гибкие варианты развёртывания |
|
||
|
||
<details>
|
||
<summary><b>📖 Подробности о возможностях</b></summary>
|
||
|
||
### 🎯 Smart 3-Tier Fallback
|
||
|
||
Создавайте комбо с автоматическим резервированием:
|
||
|
||
```
|
||
Combo: "my-coding-stack"
|
||
1. cc/claude-opus-4-6 (ваша подписка)
|
||
2. glm/glm-4.7 (дешёвый бэкап, $0.6/1M)
|
||
3. if/kimi-k2-thinking (бесплатное резервирование)
|
||
|
||
→ Автопереключение при исчерпании квоты или ошибке
|
||
```
|
||
|
||
### 📊 Отслеживание квоты в реальном времени
|
||
|
||
- Потребление токенов по каждому провайдеру
|
||
- Обратный отсчёт до сброса (5 часов, ежедневно, еженедельно)
|
||
- Оценка затрат для платных уровней
|
||
- Ежемесячный отчёт о расходах
|
||
|
||
### 🔄 Трансляция форматов
|
||
|
||
Бесшовная трансляция между форматами:
|
||
- **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI Responses**
|
||
- Ваш CLI-инструмент отправляет формат OpenAI → 9Router транслирует → Провайдер получает родной формат
|
||
- Работает с любым инструментом, поддерживающим пользовательский эндпоинт OpenAI
|
||
|
||
### 👥 Поддержка нескольких аккаунтов
|
||
|
||
- Добавляйте несколько аккаунтов на каждого провайдера
|
||
- Round-robin или маршрутизация по приоритету автоматически
|
||
- Резервирование на следующий аккаунт при достижении квоты
|
||
|
||
### 🔄 Авто-обновление токена
|
||
|
||
- OAuth-токены автоматически обновляются до истечения срока
|
||
- Не нужна повторная ручная аутентификация
|
||
- Бесшовный опыт со всеми провайдерами
|
||
|
||
### 🎨 Пользовательские комбо
|
||
|
||
- Создавайте безграничные комбинации моделей
|
||
- Сочетайте уровни подписки, дешёвые и бесплатные
|
||
- Называйте комбо для удобного доступа
|
||
- Делитесь комбо между устройствами через облачную синхронизацию
|
||
|
||
### 📝 Логирование запросов
|
||
|
||
- Включите режим отладки для просмотра полного лога запросов/ответов
|
||
- Отслеживайте вызовы API, заголовки и payload
|
||
- Диагностируйте проблемы интеграции
|
||
- Экспортируйте логи для анализа
|
||
|
||
### 💾 Облачная синхронизация
|
||
|
||
- Синхронизация провайдеров, комбо и настроек между устройствами
|
||
- Автоматическая фоновая синхронизация
|
||
- Безопасное зашифрованное хранилище
|
||
- Доступ к настройкам откуда угодно
|
||
|
||
#### Заметки о облачном рантайме
|
||
|
||
- Приоритет серверным облачным переменным в production-окружении:
|
||
- `BASE_URL` (внутренний callback URL, используемый планировщиком синхронизации)
|
||
- `CLOUD_URL` (база эндпоинта облачной синхронизации)
|
||
- `NEXT_PUBLIC_BASE_URL` и `NEXT_PUBLIC_CLOUD_URL` по-прежнему поддерживаются для совместимости/UI, но серверный рантайм теперь приоритезирует `BASE_URL`/`CLOUD_URL`.
|
||
- Запросы облачной синхронизации теперь используют тайм-аут + fail-fast поведение, чтобы избежать зависания UI при недоступности DNS/облачной сети.
|
||
|
||
### 📊 Аналитика использования
|
||
|
||
- Отслеживание использования токенов по провайдеру и модели
|
||
- Оценка затрат и тренды расходов
|
||
- Ежемесячные отчёты и инсайты
|
||
- Оптимизация ваших AI-расходов
|
||
|
||
> **💡 ВАЖНО - Понимание «Затрат» на панели управления:**
|
||
>
|
||
> «Затраты», показанные в Аналитике использования, предназначены **только для отслеживания и сравнения**.
|
||
> Сам 9Router **никогда ничего не взимает** с вас. Вы платите напрямую провайдерам (если используете платные сервисы).
|
||
>
|
||
> **Пример:** Если на панели показано «общие затраты $290» при использовании моделей iFlow, это представляет
|
||
> сумму, которую вы заплатили бы при прямом использовании платного API. Ваши фактические затраты = **$0** (iFlow бесплатен без ограничений).
|
||
>
|
||
> Считайте это «трекером экономии», показывающим, сколько вы экономите, используя бесплатные модели или
|
||
> маршрутизацию через 9Router!
|
||
|
||
### 🌐 Развёртывание где угодно
|
||
|
||
- 💻 **Localhost** — По умолчанию, работает офлайн
|
||
- ☁️ **VPS/Cloud** — Общий доступ между устройствами
|
||
- 🐳 **Docker** — Развёртывание одной командой
|
||
- 🚀 **Cloudflare Workers** — Глобальная edge-сеть
|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
## 💰 Обзор цен
|
||
|
||
| Уровень | Провайдер | Стоимость | Сброс квоты | Лучше всего для |
|
||
|------|----------|------|-------------|----------|
|
||
| **💳 ПОДПИСКА** | Claude Code (Pro) | $20/мес | 5ч + еженедельно | Уже подписаны |
|
||
| | Codex (Plus/Pro) | $20-200/мес | 5ч + еженедельно | Пользователи OpenAI |
|
||
| | Gemini CLI | **БЕСПЛАТНО** | 180K/мес + 1K/день | Для всех! |
|
||
| | GitHub Copilot | $10-19/мес | Ежемесячно | Пользователи GitHub |
|
||
| **💰 ДЁШЕВО** | GLM-4.7 | $0.6/1M | 10:00 ежедневно | Бюджетный бэкап |
|
||
| | MiniMax M2.1 | $0.2/1M | Скользящие 5 часов | Самый дешёвый вариант |
|
||
| | Kimi K2 | $9/мес фикс. | 10M токенов/мес | Предсказуемая стоимость |
|
||
| **🆓 БЕСПЛАТНО** | iFlow | $0 | Без ограничений | 8 бесплатных моделей |
|
||
| | Qwen | $0 | Без ограничений | 3 бесплатные модели |
|
||
| | Kiro | $0 | Без ограничений | Claude бесплатно |
|
||
|
||
**💡 Профи-совет:** Начните с комбо Gemini CLI (180K бесплатно/мес) + iFlow (без ограничений бесплатно) = $0 затрат!
|
||
|
||
---
|
||
|
||
### 📊 Понимание затрат и оплаты в 9Router
|
||
|
||
**Реальность оплаты 9Router:**
|
||
|
||
✅ **Софт 9Router = БЕСПЛАТНО навсегда** (открытый код, никогда не взимает плату)
|
||
✅ **«Затраты» на панели = Только для отображения/отслеживания** (не реальный счёт)
|
||
✅ **Вы платите напрямую провайдерам** (подписка или плата за API)
|
||
✅ **БЕСПЛАТНЫЕ провайдеры остаются БЕСПЛАТНЫМИ** (iFlow, Kiro, Qwen = $0 без ограничений)
|
||
❌ **9Router никогда не выставляет счёт** и не списывает с вашей карты
|
||
|
||
**Как работает отображение затрат:**
|
||
|
||
Панель показывает **оценочные затраты**, как если бы вы напрямую использовали платный API. Это **не оплата** — это инструмент сравнения, показывающий вашу экономию.
|
||
|
||
**Пример сценария:**
|
||
```
|
||
Показано на панели:
|
||
• Всего запросов: 1,662
|
||
• Всего токенов: 47M
|
||
• Отображаемые затраты: $290
|
||
|
||
Реальная проверка:
|
||
• Провайдер: iFlow (БЕСПЛАТНО без ограничений)
|
||
• Фактическая оплата: $0.00
|
||
• Значение $290: Сумма, которую вы СЭКОНОМИЛИ, используя бесплатные модели!
|
||
```
|
||
|
||
**Правила оплаты:**
|
||
- **Провайдеры подписки** (Claude Code, Codex): Платите им напрямую через их сайт
|
||
- **Дешёвые провайдеры** (GLM, MiniMax): Платите им напрямую, 9Router только маршрутизирует
|
||
- **БЕСПЛАТНЫЕ провайдеры** (iFlow, Kiro, Qwen): Действительно бесплатны навсегда, без скрытых платежей
|
||
- **9Router**: Никогда ничего не взимает, никогда
|
||
|
||
---
|
||
|
||
## 🎯 Сценарии использования
|
||
|
||
### Сценарий 1: «У меня подписка Claude Pro»
|
||
|
||
**Проблема:** Квота сгорает неиспользованной, rate limit при интенсивной работе
|
||
|
||
**Решение:**
|
||
```
|
||
Combo: "maximize-claude"
|
||
1. cc/claude-opus-4-6 (полное использование подписки)
|
||
2. glm/glm-4.7 (дешёвый бэкап при исчерпании квоты)
|
||
3. if/kimi-k2-thinking (бесплатное аварийное резервирование)
|
||
|
||
Месячная стоимость: $20 (подписка) + ~$5 (бэкап) = $25 итого
|
||
против $20 + упирание в лимит = разочарование
|
||
```
|
||
|
||
### Сценарий 2: «Хочу нулевые затраты»
|
||
|
||
**Проблема:** Не могу позволить подписку, нужен надёжный AI-кодинг
|
||
|
||
**Решение:**
|
||
```
|
||
Combo: "free-forever"
|
||
1. gc/gemini-3-flash (180K бесплатно/мес)
|
||
2. if/kimi-k2-thinking (без ограничений бесплатно)
|
||
3. qw/qwen3-coder-plus (без ограничений бесплатно)
|
||
|
||
Месячная стоимость: $0
|
||
Качество: Production-ready модели
|
||
```
|
||
|
||
### Сценарий 3: «Нужно кодить 24/7, без перерывов»
|
||
|
||
**Проблема:** Дедлайны, нельзя допустить простоя
|
||
|
||
**Решение:**
|
||
```
|
||
Combo: "always-on"
|
||
1. cc/claude-opus-4-6 (лучшее качество)
|
||
2. cx/gpt-5.2-codex (вторая подписка)
|
||
3. glm/glm-4.7 (дёшево, ежедневный сброс)
|
||
4. minimax/MiniMax-M2.1 (самый дешёвый, сброс 5ч)
|
||
5. if/kimi-k2-thinking (бесплатно без ограничений)
|
||
|
||
Результат: 5 слоёв резервирования = нулевой простой
|
||
Месячная стоимость: $20-200 (подписки) + $10-20 (бэкап)
|
||
```
|
||
|
||
### Сценарий 4: «Хочу БЕСПЛАТНЫЙ AI в OpenClaw»
|
||
|
||
**Проблема:** Нужен AI-ассистент в мессенджерах (WhatsApp, Telegram, Slack...), полностью бесплатно
|
||
|
||
**Решение:**
|
||
```
|
||
Combo: "openclaw-free"
|
||
1. if/glm-4.7 (без ограничений бесплатно)
|
||
2. if/minimax-m2.1 (без ограничений бесплатно)
|
||
3. if/kimi-k2-thinking (без ограничений бесплатно)
|
||
|
||
Месячная стоимость: $0
|
||
Доступ через: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
|
||
```
|
||
|
||
---
|
||
|
||
## ❓ Часто задаваемые вопросы
|
||
|
||
<details>
|
||
<summary><b>📊 Почему моя панель показывает высокие затраты?</b></summary>
|
||
|
||
Панель отслеживает ваше использование токенов и показывает **оценочные затраты**, как если бы вы напрямую использовали платный API. Это **не реальная оплата** — это справка, показывающая, сколько вы экономите, используя бесплатные модели или существующие подписки через 9Router.
|
||
|
||
**Пример:**
|
||
- **Панель показывает:** «Общие затраты $290»
|
||
- **Реальность:** Вы используете iFlow (БЕСПЛАТНО без ограничений)
|
||
- **Ваши фактические затраты:** **$0.00**
|
||
- **Значение $290:** Сумма, которую вы **экономите**, используя бесплатные модели вместо платного API!
|
||
|
||
Отображение затрат — это «трекер экономии», помогающий понять паттерны использования и возможности оптимизации.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>💳 Взимает ли с меня плату 9Router?</b></summary>
|
||
|
||
**Нет.** 9Router — это бесплатное ПО с открытым кодом, работающее на вашем собственном компьютере. Оно никогда ничего с вас не взимает.
|
||
|
||
**Вы платите только:**
|
||
- ✅ **Провайдерам подписки** (Claude Code $20/мес, Codex $20-200/мес) → Платите им напрямую на их сайте
|
||
- ✅ **Дешёвым провайдерам** (GLM, MiniMax) → Платите им напрямую, 9Router только маршрутизирует ваши запросы
|
||
- ❌ **Самому 9Router** → **Никогда ничего не взимает, никогда**
|
||
|
||
9Router — это локальный прокси/роутер. У него нет вашей кредитной карты, он не может выставлять счета и не имеет платёжной системы. Это полностью бесплатное ПО.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>🆓 Действительно ли БЕСПЛАТНЫЕ провайдеры безлимитны?</b></summary>
|
||
|
||
**Да!** Провайдеры, отмеченные как БЕСПЛАТНЫЕ (iFlow, Kiro, Qwen), действительно безлимитны и **без скрытых платежей**.
|
||
|
||
Это бесплатные сервисы, предоставляемые соответствующими компаниями:
|
||
- **iFlow**: Бесплатный безлимитный доступ к 8+ моделям через OAuth
|
||
- **Kiro**: Бесплатные безлимитные модели Claude через AWS Builder ID
|
||
- **Qwen**: Бесплатный безлимитный доступ к моделям Qwen через аутентификацию устройства
|
||
|
||
9Router только маршрутизирует ваши запросы к ним — никаких «ловушек» или будущих платежей. Это действительно бесплатные сервисы, а 9Router облегчает их использование с поддержкой резервирования.
|
||
|
||
**Примечание:** Некоторые провайдеры подписки (Antigravity, GitHub Copilot) могут иметь бесплатные пробные периоды, которые позже становятся платными, но об этом чётко уведомляют сами провайдеры, а не 9Router.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>💰 Как минимизировать мои реальные AI-затраты?</b></summary>
|
||
|
||
**Стратегия «Бесплатное в приоритете»:**
|
||
|
||
1. **Начните со 100% бесплатного комбо:**
|
||
```
|
||
1. gc/gemini-3-flash (180K/мес бесплатно от Google)
|
||
2. if/kimi-k2-thinking (без ограничений бесплатно от iFlow)
|
||
3. qw/qwen3-coder-plus (без ограничений бесплатно от Qwen)
|
||
```
|
||
**Стоимость: $0/мес**
|
||
|
||
2. **Добавьте дешёвый бэкап** только при необходимости:
|
||
```
|
||
4. glm/glm-4.7 ($0.6/1M токенов)
|
||
```
|
||
**Доп. стоимость:** Платите только за то, что фактически используете
|
||
|
||
3. **Используйте провайдеров подписки в последнюю очередь:**
|
||
- Только если они у вас уже есть
|
||
- 9Router помогает максимизировать их ценность через отслеживание квоты
|
||
|
||
**Результат:** Большинство пользователей могут работать за $0/мес, используя только бесплатные уровни!
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>📈 Что если моё использование внезапно вырастет?</b></summary>
|
||
|
||
Умный механизм резервирования 9Router предотвращает неожиданные расходы:
|
||
|
||
**Сценарий:** Вы в спринте кодинга и превышаете квоты
|
||
|
||
**Без 9Router:**
|
||
- ❌ Упёрлись в rate limit → Работа остановилась → Разочарование
|
||
- ❌ Или: Случайно накопили огромный счёт за API
|
||
|
||
**С 9Router:**
|
||
- ✅ Подписка упёрлась в лимит → Авторезервирование на дешёвый уровень
|
||
- ✅ Дешёвый уровень становится дорогим → Авторезервирование на бесплатный уровень
|
||
- ✅ Никогда не прекращаете кодить → Предсказуемая стоимость
|
||
|
||
**Вы контролируете:** Установите лимиты расходов на каждого провайдера в панели, и 9Router будет их соблюдать.
|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
## 📖 Руководство по настройке
|
||
|
||
<details>
|
||
<summary><b>🔐 Провайдеры подписки (Максимум ценности)</b></summary>
|
||
|
||
### Claude Code (Pro/Max)
|
||
|
||
```bash
|
||
Панель управления → Providers → Подключить Claude Code
|
||
→ Вход через OAuth → Авто-обновление токена
|
||
→ Отслеживание квоты 5 часов + еженедельно
|
||
|
||
Модели:
|
||
cc/claude-opus-4-6
|
||
cc/claude-sonnet-4-5-20250929
|
||
cc/claude-haiku-4-5-20251001
|
||
```
|
||
|
||
**Профи-совет:** Используйте Opus для сложных задач, Sonnet для скорости. 9Router отслеживает квоту для каждой модели!
|
||
|
||
### OpenAI Codex (Plus/Pro)
|
||
|
||
```bash
|
||
Панель управления → Providers → Подключить Codex
|
||
→ Вход через OAuth (порт 1455)
|
||
→ Сброс 5 часов + еженедельно
|
||
|
||
Модели:
|
||
cx/gpt-5.2-codex
|
||
cx/gpt-5.1-codex-max
|
||
```
|
||
|
||
### Gemini CLI (БЕСПЛАТНО 180K/мес!)
|
||
|
||
```bash
|
||
Панель управления → Providers → Подключить Gemini CLI
|
||
→ Google OAuth
|
||
→ 180K запросов/мес + 1K/день
|
||
|
||
Модели:
|
||
gc/gemini-3-flash-preview
|
||
gc/gemini-2.5-pro
|
||
```
|
||
|
||
**Лучшая ценность:** Огромный бесплатный уровень! Используйте его перед платными уровнями.
|
||
|
||
### GitHub Copilot
|
||
|
||
```bash
|
||
Панель управления → Providers → Подключить GitHub
|
||
→ OAuth через GitHub
|
||
→ Ежемесячный сброс (1-го числа месяца)
|
||
|
||
Модели:
|
||
gh/gpt-5
|
||
gh/claude-4.5-sonnet
|
||
gh/gemini-3-pro
|
||
```
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>💰 Дешёвые провайдеры (Бэкап)</b></summary>
|
||
|
||
### GLM-4.7 (Ежедневный сброс, $0.6/1M)
|
||
|
||
1. Регистрация: [Zhipu AI](https://open.bigmodel.cn/)
|
||
2. Получите API key из Coding Plan
|
||
3. Панель управления → Добавить API Key:
|
||
- Провайдер: `glm`
|
||
- API Key: `your-key`
|
||
|
||
**Использование:** `glm/glm-4.7`
|
||
|
||
**Профи-совет:** Coding Plan даёт втрое больше квоты за 1/7 стоимости! Сброс ежедневно в 10:00.
|
||
|
||
### MiniMax M2.1 (Сброс 5ч, $0.20/1M)
|
||
|
||
1. Регистрация: [MiniMax](https://www.minimax.io/)
|
||
2. Получите API key
|
||
3. Панель управления → Добавить API Key
|
||
|
||
**Использование:** `minimax/MiniMax-M2.1`
|
||
|
||
**Профи-совет:** Самый дешёвый вариант для длинного контекста (1M)!
|
||
|
||
### Kimi K2 ($9/мес фиксированно)
|
||
|
||
1. Регистрация: [Moonshot AI](https://platform.moonshot.ai/)
|
||
2. Получите API key
|
||
3. Панель управления → Добавить API Key
|
||
|
||
**Использование:** `kimi/kimi-latest`
|
||
|
||
**Профи-совет:** Фиксированные $9/мес за 10M токенов = реальная стоимость $0.90/1M!
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>🆓 БЕСПЛАТНЫЕ провайдеры (Аварийное резервирование)</b></summary>
|
||
|
||
### iFlow (8 БЕСПЛАТНЫХ моделей)
|
||
|
||
```bash
|
||
Панель управления → Подключить iFlow
|
||
→ Вход через OAuth iFlow
|
||
→ Безлимитное использование
|
||
|
||
Модели:
|
||
if/kimi-k2-thinking
|
||
if/qwen3-coder-plus
|
||
if/glm-4.7
|
||
if/minimax-m2
|
||
if/deepseek-r1
|
||
```
|
||
|
||
### Qwen (3 БЕСПЛАТНЫЕ модели)
|
||
|
||
```bash
|
||
Панель управления → Подключить Qwen
|
||
→ Авторизация по коду устройства
|
||
→ Безлимитное использование
|
||
|
||
Модели:
|
||
qw/qwen3-coder-plus
|
||
qw/qwen3-coder-flash
|
||
```
|
||
|
||
### Kiro (БЕСПЛАТНЫЙ Claude)
|
||
|
||
```bash
|
||
Панель управления → Подключить Kiro
|
||
→ AWS Builder ID или Google/GitHub
|
||
→ Безлимитное использование
|
||
|
||
Модели:
|
||
kr/claude-sonnet-4.5
|
||
kr/claude-haiku-4.5
|
||
```
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>🎨 Создание комбо</b></summary>
|
||
|
||
### Пример 1: Максимум из подписки → Дешёвый бэкап
|
||
|
||
```
|
||
Панель управления → Combos → Создать новое
|
||
|
||
Имя: premium-coding
|
||
Модели:
|
||
1. cc/claude-opus-4-6 (Основная подписка)
|
||
2. glm/glm-4.7 (Дешёвый бэкап, $0.6/1M)
|
||
3. minimax/MiniMax-M2.1 (Самое дешёвое резервирование, $0.20/1M)
|
||
|
||
Использование в CLI: premium-coding
|
||
|
||
Пример месячной стоимости (100M токенов):
|
||
80M через Claude (подписка): $0 дополнительно
|
||
15M через GLM: $9
|
||
5M через MiniMax: $1
|
||
Итого: $10 + ваша подписка
|
||
```
|
||
|
||
### Пример 2: Только бесплатно (Нулевая стоимость)
|
||
|
||
```
|
||
Имя: free-combo
|
||
Модели:
|
||
1. gc/gemini-3-flash-preview (180K бесплатно/мес)
|
||
2. if/kimi-k2-thinking (без ограничений)
|
||
3. qw/qwen3-coder-plus (без ограничений)
|
||
|
||
Стоимость: $0 навсегда!
|
||
```
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>🔧 Интеграция CLI</b></summary>
|
||
|
||
### Cursor IDE
|
||
|
||
```
|
||
Settings → Models → Advanced:
|
||
OpenAI API Base URL: http://localhost:20128/v1
|
||
OpenAI API Key: [из панели управления 9router]
|
||
Model: cc/claude-opus-4-6
|
||
```
|
||
|
||
Или используйте комбо: `premium-coding`
|
||
|
||
### Claude Code
|
||
|
||
Отредактируйте `~/.claude/config.json`:
|
||
|
||
```json
|
||
{
|
||
"anthropic_api_base": "http://localhost:20128/v1",
|
||
"anthropic_api_key": "your-9router-api-key"
|
||
}
|
||
```
|
||
|
||
### Codex CLI
|
||
|
||
```bash
|
||
export OPENAI_BASE_URL="http://localhost:20128"
|
||
export OPENAI_API_KEY="your-9router-api-key"
|
||
|
||
codex "ваш промпт"
|
||
```
|
||
|
||
### OpenClaw
|
||
|
||
**Вариант 1 — Панель управления (рекомендуется):**
|
||
|
||
```
|
||
Панель управления → CLI Tools → OpenClaw → Выбрать модель → Применить
|
||
```
|
||
|
||
**Вариант 2 — Вручную:** Отредактируйте `~/.openclaw/openclaw.json`:
|
||
|
||
```json
|
||
{
|
||
"agents": {
|
||
"defaults": {
|
||
"model": {
|
||
"primary": "9router/if/glm-4.7"
|
||
}
|
||
}
|
||
},
|
||
"models": {
|
||
"providers": {
|
||
"9router": {
|
||
"baseUrl": "http://127.0.0.1:20128/v1",
|
||
"apiKey": "sk_9router",
|
||
"api": "openai-completions",
|
||
"models": [
|
||
{
|
||
"id": "if/glm-4.7",
|
||
"name": "glm-4.7"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
> **Примечание:** OpenClaw работает только с локальным 9Router. Используйте `127.0.0.1` вместо `localhost`, чтобы избежать проблем с разрешением имён.
|
||
|
||
### Cline / Continue / RooCode
|
||
|
||
```
|
||
Provider: OpenAI Compatible
|
||
Base URL: http://localhost:20128/v1
|
||
API Key: [из панели управления]
|
||
Model: cc/claude-opus-4-6
|
||
```
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary><b>🚀 Развёртывание</b></summary>
|
||
|
||
### Развёртывание на VPS
|
||
|
||
```bash
|
||
# Clone and install
|
||
git clone https://github.com/decolua/9router.git
|
||
cd 9router
|
||
npm install
|
||
npm run build
|
||
|
||
# Configure
|
||
export JWT="your-secure-secret-change-this"
|
||
export INITIAL_PASSWORD="your-password"
|
||
export DATA_DIR="/var/lib/9router"
|
||
export PORT="20128"
|
||
export HOSTNAME="0.0.0.0"
|
||
export NODE_ENV="production"
|
||
export NEXT_PUBLIC_BASE_URL="http://localhost:20128"
|
||
export NEXT_PUBLIC_CLOUD_URL="https://9router.com"
|
||
export API_KEY_SECRET="endpoint-proxy-api-key-secret"
|
||
export MACHINE_ID_SALT="endpoint-proxy-salt"
|
||
|
||
# Start
|
||
npm run start
|
||
|
||
# Or use PM2
|
||
npm install -g pm2
|
||
pm2 start --name 9router -- start
|
||
pm2 save
|
||
pm2 startup
|
||
```
|
||
|
||
### Docker
|
||
|
||
```bash
|
||
# Build image (from repository root)
|
||
docker build -t 9router .
|
||
|
||
# Run container (command used in current setup)
|
||
docker run -d \
|
||
--name 9router \
|
||
-p 20128:20128 \
|
||
--env-file /root/dev/9router/.env \
|
||
-v 9router-data:/app/data \
|
||
-v 9router-usage:/root/.9router \
|
||
9router
|
||
```
|
||
|
||
Портативная команда (если вы уже в корне репозитория):
|
||
|
||
```bash
|
||
docker run -d \
|
||
--name 9router \
|
||
-p 20128:20128 \
|
||
--env-file ./.env \
|
||
-v 9router-data:/app/data \
|
||
-v 9router-usage:/root/.9router \
|
||
9router
|
||
```
|
||
|
||
Значения по умолчанию контейнера:
|
||
- `PORT=20128`
|
||
- `HOSTNAME=0.0.0.0`
|
||
|
||
Полезные команды:
|
||
|
||
```bash
|
||
docker logs -f 9router
|
||
docker restart 9router
|
||
docker stop 9router && docker rm 9router
|
||
```
|
||
|
||
### Переменные окружения
|
||
|
||
| Переменная | По умолчанию | Описание |
|
||
|----------|---------|-------------|
|
||
| `JWT_SECRET` | Автогенерация (`~/.9router/jwt-secret`) | Секрет подписи JWT для cookie аутентификации панели (задайте для общего доступа между инстансами) |
|
||
| `INITIAL_PASSWORD` | `123456` | Пароль первого входа при отсутствии сохранённого хеша |
|
||
| `DATA_DIR` | `~/.9router` | Расположение основной БД приложения (`db.json`) |
|
||
| `PORT` | framework default | Порт сервиса (`20128` в примерах) |
|
||
| `HOSTNAME` | framework default | Bind host (Docker по умолчанию `0.0.0.0`) |
|
||
| `NODE_ENV` | runtime default | Установите `production` для развёртывания |
|
||
| `BASE_URL` | `http://localhost:20128` | Внутренний серверный базовый URL для задач облачной синхронизации |
|
||
| `CLOUD_URL` | `https://9router.com` | Серверный базовый URL эндпоинта облачной синхронизации |
|
||
| `NEXT_PUBLIC_BASE_URL` | `http://localhost:3000` | Обратно совместимый/публичный базовый URL (приоритет `BASE_URL` для серверного рантайма) |
|
||
| `NEXT_PUBLIC_CLOUD_URL` | `https://9router.com` | Обратно совместимый/публичный облачный URL (приоритет `CLOUD_URL` для серверного рантайма) |
|
||
| `API_KEY_SECRET` | `endpoint-proxy-api-key-secret` | HMAC-секрет для генерируемых API-ключей |
|
||
| `MACHINE_ID_SALT` | `endpoint-proxy-salt` | Соль для стабильного хеширования ID машины |
|
||
| `ENABLE_REQUEST_LOGS` | `false` | Включить лог запросов/ответов в `logs/` |
|
||
| `AUTH_COOKIE_SECURE` | `false` | Принудительный `Secure` cookie аутентификации (задайте `true` за HTTPS reverse proxy) |
|
||
| `REQUIRE_API_KEY` | `false` | Требовать Bearer API key на маршрутах `/v1/*` (рекомендуется для развёртываний с выходом в интернет) |
|
||
| `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, `NO_PROXY` | empty | Опциональный исходящий прокси для вызовов к провайдерам |
|
||
|
||
Примечания:
|
||
- Прокси-переменные в нижнем регистре также поддерживаются: `http_proxy`, `https_proxy`, `all_proxy`, `no_proxy`.
|
||
- `.env` не запекается в Docker-образ (`.dockerignore`); подавайте runtime-конфигурацию через `--env-file` или `-e`.
|
||
- В Windows для разрешения путей локального хранилища может использоваться `APPDATA`.
|
||
- `INSTANCE_NAME` встречается в старых docs/env-шаблонах, но сейчас в рантайме не используется.
|
||
|
||
### Runtime-файлы и хранилище
|
||
|
||
- Основное состояние приложения: `${DATA_DIR}/db.json` (провайдеры, комбо, alias, ключи, настройки), управляется `src/lib/localDb.js`.
|
||
- История использования и логи: `~/.9router/usage.json` и `~/.9router/log.txt`, управляется `src/lib/usageDb.js`.
|
||
- Опциональные логи запросов/транслятора: `<repo>/logs/...` при `ENABLE_REQUEST_LOGS=true`.
|
||
- Хранилище использования следует логике пути `~/.9router` и независимо от `DATA_DIR`.
|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
## 📊 Доступные модели
|
||
|
||
<details>
|
||
<summary><b>Показать все доступные модели</b></summary>
|
||
|
||
**Claude Code (`cc/`)** - Pro/Max:
|
||
- `cc/claude-opus-4-6`
|
||
- `cc/claude-sonnet-4-5-20250929`
|
||
- `cc/claude-haiku-4-5-20251001`
|
||
|
||
**Codex (`cx/`)** - Plus/Pro:
|
||
- `cx/gpt-5.2-codex`
|
||
- `cx/gpt-5.1-codex-max`
|
||
|
||
**Gemini CLI (`gc/`)** - БЕСПЛАТНО:
|
||
- `gc/gemini-3-flash-preview`
|
||
- `gc/gemini-2.5-pro`
|
||
|
||
**GitHub Copilot (`gh/`)**:
|
||
- `gh/gpt-5`
|
||
- `gh/claude-4.5-sonnet`
|
||
|
||
**GLM (`glm/`)** - $0.6/1M:
|
||
- `glm/glm-4.7`
|
||
|
||
**MiniMax (`minimax/`)** - $0.2/1M:
|
||
- `minimax/MiniMax-M2.1`
|
||
|
||
**iFlow (`if/`)** - БЕСПЛАТНО:
|
||
- `if/kimi-k2-thinking`
|
||
- `if/qwen3-coder-plus`
|
||
- `if/deepseek-r1`
|
||
|
||
**Qwen (`qw/`)** - БЕСПЛАТНО:
|
||
- `qw/qwen3-coder-plus`
|
||
- `qw/qwen3-coder-flash`
|
||
|
||
**Kiro (`kr/`)** - БЕСПЛАТНО:
|
||
- `kr/claude-sonnet-4.5`
|
||
- `kr/claude-haiku-4.5`
|
||
|
||
</details>
|
||
|
||
---
|
||
|
||
## 🐛 Устранение неполадок
|
||
|
||
**"Language model did not provide messages"**
|
||
- Исчерпана квота провайдера → Проверьте трекер квоты на панели
|
||
- Решение: Используйте резервирование комбо или переключитесь на более дешёвый уровень
|
||
|
||
**Ограничение скорости (Rate limiting)**
|
||
- Исчерпана квота подписки → Резервирование на GLM/MiniMax
|
||
- Добавьте комбо: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
|
||
|
||
**OAuth-токен истёк**
|
||
- Автообновление 9Router
|
||
- Если проблема сохраняется: Панель управления → Провайдеры → Переподключить
|
||
|
||
**Высокие затраты**
|
||
- Проверьте статистику использования в панели
|
||
- Переключите основную модель на GLM/MiniMax
|
||
- Используйте бесплатные уровни (Gemini CLI, iFlow) для некритичных задач
|
||
|
||
**Панель открывается на неверном порту**
|
||
- Установите `PORT=20128` и `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
|
||
|
||
**Ошибки облачной синхронизации**
|
||
- Убедитесь, что `BASE_URL` указывает на ваш работающий инстанс (например, `http://localhost:20128`)
|
||
- Убедитесь, что `CLOUD_URL` указывает на ожидаемый облачный эндпоинт (например, `https://9router.com`)
|
||
- По возможности держите значения `NEXT_PUBLIC_*` согласованными с серверными значениями.
|
||
|
||
**Облачный эндпоинт `stream=false` возвращает 500 (`Unexpected token 'd'...`)**
|
||
- Симптом обычно появляется на публичном облачном эндпоинте (`https://9router.com/v1`) для непотоковых (non-streaming) вызовов.
|
||
- Корневая причина: upstream возвращает SSE-payload (`data: ...`), тогда как клиент ожидает JSON.
|
||
- Обходное решение: используйте `stream=true` для прямых вызовов в облако.
|
||
- Локальный рантайм 9Router включает резервирование SSE→JSON для непотоковых вызовов, когда upstream возвращает `text/event-stream`.
|
||
|
||
**Облако сообщает о подключении, но запрос всё равно падает с `Invalid API key`**
|
||
- Создайте новый ключ в локальной панели (`/api/keys`) и запустите облачную синхронизацию (`Enable Cloud`, затем `Sync Now`).
|
||
- Старые/несинхронизированные ключи могут возвращать `401` в облаке, даже если локальный эндпоинт работает.
|
||
|
||
**Первый вход не работает**
|
||
- Проверьте `INITIAL_PASSWORD` в `.env`
|
||
- Если не задан, резервный пароль — `123456`
|
||
|
||
**Нет логов запросов в `logs/`**
|
||
- Установите `ENABLE_REQUEST_LOGS=true`
|
||
|
||
---
|
||
|
||
## 🛠️ Tech Stack
|
||
|
||
- **Runtime**: Node.js 20+
|
||
- **Framework**: Next.js 16
|
||
- **UI**: React 19 + Tailwind 4
|
||
- **Database**: LowDB (на основе JSON-файлов)
|
||
- **Streaming**: Server-Sent Events (SSE)
|
||
- **Auth**: OAuth 2.0 (PKCE) + JWT + API Keys
|
||
|
||
---
|
||
|
||
## 📝 Справочник по API
|
||
|
||
### Chat Completions
|
||
|
||
```bash
|
||
POST http://localhost:20128/v1/chat/completions
|
||
Authorization: Bearer your-api-key
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"model": "cc/claude-opus-4-6",
|
||
"messages": [
|
||
{"role": "user", "content": "Напиши функцию для..."}
|
||
],
|
||
"stream": true
|
||
}
|
||
```
|
||
|
||
### Список моделей
|
||
|
||
```bash
|
||
GET http://localhost:20128/v1/models
|
||
Authorization: Bearer your-api-key
|
||
|
||
→ Возвращает все модели + комбо в формате OpenAI
|
||
```
|
||
|
||
### Совместимые эндпоинты
|
||
|
||
- `POST /v1/chat/completions`
|
||
- `POST /v1/messages`
|
||
- `POST /v1/responses`
|
||
- `GET /v1/models`
|
||
- `POST /v1/messages/count_tokens`
|
||
- `GET /v1beta/models`
|
||
- `POST /v1beta/models/{...path}` (Gemini-style `generateContent`)
|
||
- `POST /v1/api/chat` (путь конвертации в стиле Ollama)
|
||
|
||
### Скрипты облачной аутентификации
|
||
|
||
Добавлены тестовые скрипты в `tester/security/`:
|
||
|
||
- `tester/security/test-docker-hardening.sh`
|
||
- Собирает Docker-образ и проверяет hardening-проверки (`/api/cloud/auth` auth guard, `REQUIRE_API_KEY`, безопасное поведение cookie аутентификации).
|
||
- `tester/security/test-cloud-openai-compatible.sh`
|
||
- Отправляет OpenAI-совместимый запрос напрямую на облачный эндпоинт (`https://9router.com/v1/chat/completions`) с указанной моделью/ключом.
|
||
- `tester/security/test-cloud-sync-and-call.sh`
|
||
- End-to-end процесс: создание локального ключа → включение/синхронизация облака → вызов облачного эндпоинта с повтором.
|
||
- Включает резервную проверку с `stream=true`, чтобы отличить ошибки аутентификации от проблем разбора потока.
|
||
|
||
Заметки по безопасности для облачных тестовых скриптов:
|
||
|
||
- Никогда не хардкодьте реальные API-ключи в скриптах/коммитах.
|
||
- Передавайте ключи только через переменные окружения:
|
||
- `API_KEY`, `CLOUD_API_KEY` или `OPENAI_API_KEY` (поддерживается `test-cloud-openai-compatible.sh`)
|
||
- Пример:
|
||
|
||
```bash
|
||
OPENAI_API_KEY="your-cloud-key" bash tester/security/test-cloud-openai-compatible.sh
|
||
```
|
||
|
||
Ожидаемое поведение по результатам недавней проверки:
|
||
|
||
- Локально (`http://127.0.0.1:20128/v1/chat/completions`): работает с `stream=false` и `stream=true`.
|
||
- Docker-рантайм (тот же API-путь, экспонируемый контейнером): hardening-проверки проходят, cloud auth guard работает, строгий режим API-ключа работает при включении.
|
||
- Публичный облачный эндпоинт (`https://9router.com/v1/chat/completions`):
|
||
- `stream=true`: ожидается успех (возвращает SSE-чанки).
|
||
- `stream=false`: может падать с `500` + ошибкой разбора (`Unexpected token 'd'`), когда upstream возвращает SSE-контент для непотокового клиентского пути.
|
||
|
||
### API управления и панели
|
||
|
||
- Аутентификация/настройки: `/api/auth/login`, `/api/auth/logout`, `/api/settings`, `/api/settings/require-login`
|
||
- Управление провайдерами: `/api/providers`, `/api/providers/[id]`, `/api/providers/[id]/test`, `/api/providers/[id]/models`, `/api/providers/validate`, `/api/provider-n*`
|
||
- OAuth-потоки: `/api/oauth/[provider]/[action]` (+ специфичные для провайдеров импорты, такие как Cursor/Kiro)
|
||
- Конфигурация маршрутизации: `/api/models/alias`, `/api/combos*`, `/api/keys*`, `/api/pricing`
|
||
- Использование/логи: `/api/usage/history`, `/api/usage/logs`, `/api/usage/request-logs`, `/api/usage/[connectionId]`
|
||
- Облачная синхронизация: `/api/sync/cloud`, `/api/sync/initialize`, `/api/cloud/*`
|
||
- Помощники CLI: `/api/cli-tools/claude-settings`, `/api/cli-tools/codex-settings`, `/api/cli-tools/droid-settings`, `/api/cli-tools/openclaw-settings`
|
||
|
||
### Поведение аутентификации
|
||
|
||
- Маршруты панели (`/dashboard/*`) используют защиту cookie `auth_token`.
|
||
- Вход использует сохранённый хеш пароля при наличии; иначе откатывается к `INITIAL_PASSWORD`.
|
||
- `requireLogin` можно переключить через `/api/settings/require-login`.
|
||
|
||
### Обработка запросов (высокоуровнево)
|
||
|
||
1. Клиент отправляет запрос на `/v1/*`.
|
||
2. Обработчик маршрута вызывает `handleChat` (`src/sse/handlers/chat.js`).
|
||
3. Модель разрешается (прямой провайдер/модель или разрешение alias/combo).
|
||
4. Учётные данные выбираются из локальной БД с фильтром доступности аккаунта.
|
||
5. `handleChatCore` (`open-sse/handlers/chatCore.js`) определяет формат и транслирует запрос.
|
||
6. Исполнитель провайдера отправляет upstream-запрос.
|
||
7. Поток при необходимости транслируется обратно в клиентский формат.
|
||
8. Использование/логи записываются (`src/lib/usageDb.js`).
|
||
9. Резервирование применяется при ошибках провайдера/аккаунта/модели по правилам комбо.
|
||
|
||
Полный справочник по архитектуре: [`docs/ARCHITECTURE.md`](../docs/ARCHITECTURE.md)
|
||
|
||
---
|
||
|
||
## 📧 Поддержка
|
||
|
||
- **Сайт**: [9router.com](https://9router.com)
|
||
- **GitHub**: [github.com/decolua/9router](https://github.com/decolua/9router)
|
||
- **Issues**: [github.com/decolua/9router/issues](https://github.com/decolua/9router/issues)
|
||
|
||
---
|
||
|
||
## 👥 Контрибьюторы
|
||
|
||
Спасибо всем, кто помогает делать 9Router лучше!
|
||
|
||
[](https://github.com/decolua/9router/graphs/contributors)
|
||
|
||
---
|
||
|
||
## 📊 Star Chart
|
||
|
||
[](https://starchart.cc/decolua/9router)
|
||
|
||
### Как внести вклад
|
||
|
||
1. Сделайте форк репозитория
|
||
2. Создайте свою feature-ветку (`git checkout -b feature/amazing-feature`)
|
||
3. Закоммитьте изменения (`git commit -m 'Add amazing feature'`)
|
||
4. Запушьте в ветку (`git push origin feature/amazing-feature`)
|
||
5. Откройте Pull Request
|
||
|
||
См. [Pull Requests](https://github.com/decolua/9router/pulls) для подробных инструкций.
|
||
|
||
---
|
||
|
||
## 🔀 Форки
|
||
|
||
**[OmniRoute](https://github.com/diegosouzapw/OmniRoute)** — Полнофункциональный TypeScript-форк 9Router. Добавляет 36+ провайдеров, авторезервирование на 4 уровнях, мультимодальный API (изображения, embedding, аудио, TTS), circuit breaker, семантическое кеширование, оценку LLM и доработанную панель. 368+ юнит-тестов. Доступен через npm.
|
||
|
||
---
|
||
|
||
## 🙏 Благодарности
|
||
|
||
Особая благодарность **CLIProxyAPI** — оригинальной Go-реализации, вдохновившей этот JavaScript-порт.
|
||
|
||
---
|
||
|
||
## 📄 Лицензия
|
||
|
||
Лицензия MIT — см. [LICENSE](../LICENSE) для деталей.
|
||
|
||
---
|
||
|
||
<div align="center">
|
||
<sub>Создано с ❤️ для разработчиков, которые кодят 24/7</sub>
|
||
</div>
|