mirror of
https://github.com/Direct-Dev-Ru/go-lcg.git
synced 2025-11-16 09:39:56 +00:00
260 lines
6.6 KiB
Markdown
260 lines
6.6 KiB
Markdown
# API Guide - Linux Command GPT
|
||
|
||
## Обзор
|
||
|
||
API позволяет выполнять запросы к Linux Command GPT через HTTP POST запросы с помощью curl. API принимает только запросы от curl (проверка User-Agent).
|
||
|
||
## Endpoint
|
||
|
||
``` curl
|
||
POST /execute
|
||
```
|
||
|
||
## Запуск сервера
|
||
|
||
```bash
|
||
# Запуск сервера
|
||
lcg serve
|
||
|
||
# Запуск на другом порту
|
||
lcg serve --port 9000
|
||
|
||
# Запуск с автоматическим открытием браузера
|
||
lcg serve --browser
|
||
```
|
||
|
||
## Структура запроса
|
||
|
||
### JSON Payload
|
||
|
||
```json
|
||
{
|
||
"prompt": "создать директорию test",
|
||
"system_id": 1,
|
||
"system": "альтернативный системный промпт",
|
||
"verbose": "vv",
|
||
"timeout": 120
|
||
}
|
||
```
|
||
|
||
### Поля запроса
|
||
|
||
| Поле | Тип | Обязательное | Описание |
|
||
|------|-----|--------------|----------|
|
||
| `prompt` | string | ✅ | Пользовательский запрос |
|
||
| `system_id` | int | ❌ | ID системного промпта (1-5) |
|
||
| `system` | string | ❌ | Текст системного промпта (альтернатива system_id) |
|
||
| `verbose` | string | ❌ | Степень подробности: "v", "vv", "vvv" |
|
||
| `timeout` | int | ❌ | Таймаут в секундах (по умолчанию: 120) |
|
||
|
||
### Структура ответа
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"command": "mkdir test",
|
||
"explanation": "Команда mkdir создает новую директорию...",
|
||
"model": "hf.co/yandex/YandexGPT-5-Lite-8B-instruct-GGUF:Q4_K_M",
|
||
"elapsed": 2.34
|
||
}
|
||
```
|
||
|
||
## Примеры использования
|
||
|
||
### 1. Базовый запрос
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/execute \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"prompt": "создать директорию test"
|
||
}'
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"command": "mkdir test",
|
||
"model": "hf.co/yandex/YandexGPT-5-Lite-8B-instruct-GGUF:Q4_K_M",
|
||
"elapsed": 1.23
|
||
}
|
||
```
|
||
|
||
### 2. Запрос с системным промптом по ID
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/execute \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"prompt": "найти все файлы .txt",
|
||
"system_id": 2
|
||
}'
|
||
```
|
||
|
||
### 3. Запрос с кастомным системным промптом
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/execute \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"prompt": "показать использование памяти",
|
||
"system": "Ты эксперт по Linux. Отвечай только командами без объяснений."
|
||
}'
|
||
```
|
||
|
||
### 4. Запрос с подробным объяснением
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/execute \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"prompt": "архивировать папку documents",
|
||
"verbose": "vv",
|
||
"timeout": 180
|
||
}'
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"command": "tar -czf documents.tar.gz documents/",
|
||
"explanation": "Команда tar создает архив в формате gzip...",
|
||
"model": "hf.co/yandex/YandexGPT-5-Lite-8B-instruct-GGUF:Q4_K_M",
|
||
"elapsed": 3.45
|
||
}
|
||
```
|
||
|
||
### 5. Запрос с максимальной подробностью
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8080/execute \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"prompt": "настроить SSH сервер",
|
||
"system_id": 3,
|
||
"verbose": "vvv",
|
||
"timeout": 300
|
||
}'
|
||
```
|
||
|
||
## Системные промпты
|
||
|
||
| ID | Название | Описание |
|
||
|----|----------|----------|
|
||
| 1 | basic | Базовые команды Linux |
|
||
| 2 | advanced | Продвинутые команды |
|
||
| 3 | system | Системное администрирование |
|
||
| 4 | network | Сетевые команды |
|
||
| 5 | security | Безопасность |
|
||
|
||
## Степени подробности
|
||
|
||
| Уровень | Описание |
|
||
|---------|----------|
|
||
| `v` | Краткое объяснение |
|
||
| `vv` | Подробное объяснение с альтернативами |
|
||
| `vvv` | Максимально подробное объяснение с примерами |
|
||
|
||
## Обработка ошибок
|
||
|
||
### Ошибка валидации
|
||
|
||
```json
|
||
{
|
||
"success": false,
|
||
"error": "Prompt is required"
|
||
}
|
||
```
|
||
|
||
### Ошибка AI
|
||
|
||
```json
|
||
{
|
||
"success": false,
|
||
"error": "Failed to get response from AI"
|
||
}
|
||
```
|
||
|
||
### Ошибка доступа
|
||
|
||
``` text
|
||
HTTP 403 Forbidden
|
||
Only curl requests are allowed
|
||
```
|
||
|
||
## Переменные окружения
|
||
|
||
Убедитесь, что настроены необходимые переменные:
|
||
|
||
```bash
|
||
# Основные настройки
|
||
export LCG_PROVIDER="ollama"
|
||
export LCG_HOST="http://localhost:11434"
|
||
export LCG_MODEL="hf.co/yandex/YandexGPT-5-Lite-8B-instruct-GGUF:Q4_K_M"
|
||
|
||
# Для proxy провайдера
|
||
export LCG_PROVIDER="proxy"
|
||
export LCG_HOST="https://your-proxy-server.com"
|
||
export LCG_JWT_TOKEN="your-jwt-token"
|
||
```
|
||
|
||
## Безопасность
|
||
|
||
- ✅ **Только curl**: API принимает только запросы от curl
|
||
- ✅ **POST только**: Только POST запросы к `/execute`
|
||
- ✅ **JSON валидация**: Строгая проверка входных данных
|
||
- ✅ **Таймауты**: Ограничение времени выполнения запросов
|
||
|
||
## Примеры скриптов
|
||
|
||
### Bash скрипт для автоматизации
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
|
||
API_URL="http://localhost:8080/execute"
|
||
|
||
# Функция для выполнения запроса
|
||
execute_command() {
|
||
local prompt="$1"
|
||
local verbose="${2:-}"
|
||
|
||
curl -s -X POST "$API_URL" \
|
||
-H "Content-Type: application/json" \
|
||
-d "{\"prompt\": \"$prompt\", \"verbose\": \"$verbose\"}" | \
|
||
jq -r '.command'
|
||
}
|
||
|
||
# Использование
|
||
echo "Команда: $(execute_command "создать директорию backup")"
|
||
```
|
||
|
||
### Python скрипт
|
||
|
||
```python
|
||
import requests
|
||
import json
|
||
|
||
def execute_command(prompt, system_id=None, verbose=None):
|
||
url = "http://localhost:8080/execute"
|
||
payload = {"prompt": prompt}
|
||
|
||
if system_id:
|
||
payload["system_id"] = system_id
|
||
if verbose:
|
||
payload["verbose"] = verbose
|
||
|
||
response = requests.post(url, json=payload)
|
||
return response.json()
|
||
|
||
# Использование
|
||
result = execute_command("показать использование диска", verbose="vv")
|
||
print(f"Команда: {result['command']}")
|
||
if 'explanation' in result:
|
||
print(f"Объяснение: {result['explanation']}")
|
||
```
|