Files
Dushnilin 6dd085b777 feat(ai-doctor): supercharge AI Doctor with multi-fix, log context, history, and 13 quick fix codes
Backend (runtime.uc, agent_api.uc, tachyon CLI):
- Enrich AI Doctor LLM context with Watchdog state (OOM, streaks, active repairs) and last 15 critical log lines
- Support multi-fix parsing (quick_fixes array) and comma-separated FIX tags
- Add persistent history saving to /tmp/ai_doctor_last.json and ai_doctor_last endpoint
- Expand quick fix codes from 9 to 13 (added clear_dns_cache, update_subscriptions, reset_firewall, restart_network)
- Implement apply_quick_fix CLI command and REST API endpoint

Frontend (fe-app-tachyon, LuCI main.js):
- Add AI Doctor action button in Diagnostics tab
- Add shell methods aiDoctor, aiDoctorLast, applyQuickFix
- Render AI Doctor modal with Multi-Fix buttons and 'Fix All' option
- Integrate toast notifications and state updates
2026-08-11 16:06:19 +03:00

174 lines
10 KiB
Markdown

# Tachyon AI & Agent API Integration
Tachyon предоставляет встроенные инструменты интеграции с искусственным интеллектом:
1. **AI Doctor** — автоматическая диагностика системы с участием LLM (OpenAI, Anthropic, DeepSeek или локальные/кастомные модели), обогащенная логами Watchdog, и поддержка цепочек быстрого исправления (Multi-Fix).
2. **HTTP REST Agent API & CLI** — программный интерфейс для внешних ИИ-агентов (Claude, GPT, Open-WebUI, Cursor, AutoGPT и т.д.).
3. **Автономный Watchdog** — работающая из коробки система самодиагностики и самовосстановления без внешних зависимостей.
---
## 1. AI Doctor (Встроенная LLM-диагностика)
AI Doctor собирает снимок состояния роутера (проверки sing-box, nftables, DNS, WAN, памяти, uptime, активные сбои Watchdog и 15 последних критических строк системного лога), передаёт его в выбранную LLM и выдаёт вердикт на русском языке. При наличии проблем AI Doctor генерирует цепочку кодов авто-исправления (`FIX: код1, код2`). Результат сохраняется в `/tmp/ai_doctor_last.json`.
### 1.1. Настройка AI Doctor
Настройка выполняется в LuCI Web UI (**Настройки → Дополнительные → AI Doctor**) или через UCI CLI:
```sh
# 1. Включить модуль AI Doctor
uci set tachyon.settings.enable_ai_doctor='1'
# 2. Выбрать провайдера: openai | anthropic | deepseek | custom
uci set tachyon.settings.ai_doctor_provider='openai'
# 3. Выказать модель (опционально - если пустое, используется дефолт провайдера)
uci set tachyon.settings.ai_doctor_model='gpt-4o-mini'
# 4. Указать API Key
uci set tachyon.settings.ai_doctor_api_key='sk-proj-...'
# 5. Для custom-провайдера (опционально)
uci set tachyon.settings.ai_doctor_custom_url='https://openrouter.ai/api/v1/chat/completions'
# Сохранить изменения
uci commit tachyon
```
### 1.2. Поддерживаемые провайдеры и модели
| Провайдер | UCI `ai_doctor_provider` | Модель по умолчанию | Примеры моделей (`ai_doctor_model`) |
|---|---|---|---|
| **OpenAI** | `openai` | `gpt-4o-mini` | `gpt-4o`, `gpt-4.1-mini`, `o4-mini` |
| **Anthropic** | `anthropic` | `claude-3-5-haiku-20241022` | `claude-3-5-sonnet-20241022`, `claude-3-7-sonnet-20250219` |
| **DeepSeek** | `deepseek` | `deepseek-chat` | `deepseek-reasoner` |
| **Custom API** | `custom` | `gpt-4o-mini` | Любая модель вашего сервера (`llama-3.3-70b`, `qwen-2.5-72b`) |
### 1.3. Коды быстрого исправления (Quick Fix Codes — 13 кодов)
AI Doctor может вернуть один или несколько кодов быстрого исправления через запятую:
1. `start_singbox` — перезапуск упавшего сервиса sing-box
2. `rebuild_rules` — пересборка и сброс nftables-правил фильтрации
3. `fix_dnsmasq` — перезапуск и восстановление службы dnsmasq
4. `fix_resolv_symlink` — исправление повреждённого символического звена `/etc/resolv.conf`
5. `start_watchdog` — перезапуск службы Watchdog
6. `restart_singbox_dns` — перезапуск DNS-модуля sing-box при сбое ответов
7. `fix_uci_config` — восстановление конфигурации Tachyon из бэкапа
8. `fix_wan_interface` — перезапуск сетевого интерфейса WAN (`ifup wan`)
9. `fix_gateway` — перезапуск сетевого стека для восстановления системного шлюза
10. `clear_dns_cache` — очистка кэша DNS и база данных sing-box `cache.db`
11. `update_subscriptions` — принудительный запуск обновления прокси-подписок
12. `reset_firewall` — полный перезапуск фаервола роутера (`/etc/init.d/firewall restart`)
13. `restart_network` — полный перезапуск сетевой службы (`/etc/init.d/network restart`)
Применение кодов из CLI:
```sh
tachyon apply_quick_fix clear_dns_cache,start_singbox
```
---
## 2. Автономная самодиагностика и Watchdog
Watchdog Tachyon работает автономно на роутере каждые 5–15 секунд без использования внешних API.
### Полезные CLI-команды:
```sh
tachyon ai_doctor # запуск анализа AI Doctor (вызывает LLM и сохраняет в /tmp/ai_doctor_last.json)
tachyon ai_doctor_last # получение последнего сохраненного отчета AI Doctor
tachyon apply_quick_fix # выполнение кода(ов) быстрого исправления
tachyon ai_heal # ручной запуск полного цикла авто-починки Watchdog
tachyon ai_status # краткий JSON-статус Watchdog
tachyon ai_status_full # полный JSON-статус с метриками и таймерами
tachyon doctor # текстовый отчёт встроенного доктора (без LLM)
tachyon diagnose_json # структурированный JSON отчёт для сторонних агентов
```
---
## 3. HTTP REST Agent API (для внешних ИИ-агентов)
Для работы внешних ИИ-агентов (Cursor, Open-WebUI, Claude Desktop, AutoGPT) Tachyon поднимает CGI эндпоинт через `uhttpd`:
```
http://<ip-роутера>/cgi-bin/tachyon-agent/<endpoint>
```
### 3.1. Настройка токена доступа (Agent API Token)
WRITE-операции (изменение настроек, перезапуск сервисов, применение фиксов) требуют Bearer-авторизации:
```sh
uci set tachyon.settings.agent_api_token='СЕКРЕТНЫЙ_ТОКЕН_АГЕНТА'
uci commit tachyon
```
### 3.2. Эндпоинты API
#### READ (Без авторизации в LAN):
| Метод | Путь | Описание |
|---|---|---|
| GET | `/cgi-bin/tachyon-agent/health` | Быстрая проверка работоспособности служб |
| GET | `/cgi-bin/tachyon-agent/snapshot` | Полный снимок системы для LLM |
| GET | `/cgi-bin/tachyon-agent/diagnose` | Результаты диагностики + предложения по ремонту |
| GET | `/cgi-bin/tachyon-agent/logs` | Последние 100 строк системного лога Tachyon |
| GET | `/cgi-bin/tachyon-agent/config` | Конфигурация UCI (секреты скрыты) |
| GET | `/cgi-bin/tachyon-agent/tools` | Схема инструментов в формате OpenAI Function Calling / MCP |
| GET | `/cgi-bin/tachyon-agent/ai-doctor/last` | Последний отчёт AI Doctor с меткой времени |
#### WRITE (Обязателен заголовок `Authorization: Bearer <токен>`):
| Метод | Путь | Тело запроса | Описание |
|---|---|---|---|
| POST | `/cgi-bin/tachyon-agent/heal` | `{}` | Принудительный запуск авто-ремонта |
| POST | `/cgi-bin/tachyon-agent/ai-doctor/fix` | `{"fix":"clear_dns_cache,start_singbox"}` | Применение кодов исправления |
| POST | `/cgi-bin/tachyon-agent/restart` | `{"service":"singbox"}` | Перезапуск службы (`singbox`, `watchdog`, `dnsmasq`) |
| POST | `/cgi-bin/tachyon-agent/reload` | `{}` | Перезагрузка правил и конфигурации |
| POST | `/cgi-bin/tachyon-agent/config/set` | `{"section":"settings","option":"dns_type","value":"doh"}` | Изменение параметров UCI |
| POST | `/cgi-bin/tachyon-agent/section/toggle` | `{"section":"имя_секции"}` | Включение / выключение правил обхода |
| POST | `/cgi-bin/tachyon-agent/domain/add` | `{"section":"имя_секции","domain":"example.com"}` | Добавление домена в списки |
---
## 4. Примеры вызовов и интеграции
### 4.1. Примеры cURL
```sh
# Проверка здоровья
curl http://192.168.1.1/cgi-bin/tachyon-agent/health
# Получение последнего отчёта AI Doctor
curl http://192.168.1.1/cgi-bin/tachyon-agent/ai-doctor/last | jq .
# Применение исправления от ИИ с токеном
curl -X POST \
-H "Authorization: Bearer СЕКРЕТНЫЙ_ТОКЕН_АГЕНТА" \
-H "Content-Type: application/json" \
-d '{"fix":"clear_dns_cache,start_singbox"}' \
http://192.168.1.1/cgi-bin/tachyon-agent/ai-doctor/fix
```
### 4.2. CLI вызовы через SSH
```sh
# Вызов AI Doctor
tachyon ai_doctor
# Вызов последнего отчета
tachyon ai_doctor_last
# Выполнение фиксов
tachyon apply_quick_fix clear_dns_cache
```
---
## 5. Безопасность
- **READ-эндпоинты** не передают пароли, приватные ключи подписчиков и бот-токены.
- **WRITE-эндпоинты** всегда блокируются без валидного Bearer-токена.
- **По умолчанию WAN-доступ к HTTP API закрыт** брандмауэром OpenWrt.