🚀 RAG System API

📌 Общие параметры:
Все запросы принимают параметры service и action.
Поддерживаются методы: GET, POST, DELETE.
Данные можно передавать как JSON, так и form-data.
ENDPOINT https://rag.kilip.ru/api.php

📁 Сервис: rag_manager (Управление RAG базами)

GET /api.php?service=rag_manager&action=list

Получить список всех векторных хранилищ

curl -X GET "https://rag.kilip.ru/api.php?service=rag_manager&action=list"
<?php
$ch = curl_init('https://rag.kilip.ru/api.php?service=rag_manager&action=list');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
fetch('/api.php?service=rag_manager&action=list')
  .then(res => res.json())
  .then(data => console.log(data));
{
    "success": true,
    "data": [
        {
            "name": "neuron-docs",
            "description": "Документация Neuron AI",
            "document_count": 150,
            "created_at": "2026-01-15 10:30:00",
            "embedding_model": "text-embedding-ada-002",
            "has_prompt": true
        }
    ]
}
POST /api.php?service=rag_manager&action=add_chunk

Добавить чанк в хранилище (пакетная загрузка)

Параметры:

Параметр Тип Описание
store_name string Название хранилища (латиница, тире)
chunk_text string Текст чанка
chunk_index int Индекс чанка
total_chunks int Общее количество чанков
embedding_provider string gpttunnel / openrouter
embedding_model string Модель эмбеддингов
system_prompt string Системный промт для базы
GET /api.php?service=rag_manager&action=get_prompt&store={store_name}

Получить системный промт хранилища

POST /api.php?service=rag_manager&action=save_prompt

Сохранить системный промт для хранилища

curl -X POST "https://rag.kilip.ru/api.php" \
  -H "Content-Type: application/json" \
  -d '{
    "service": "rag_manager",
    "action": "save_prompt",
    "store_name": "neuron-docs",
    "prompt": "Ты эксперт по документации Neuron AI"
  }'
<?php
$ch = curl_init('https://rag.kilip.ru/api.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'service' => 'rag_manager',
    'action' => 'save_prompt',
    'store_name' => 'neuron-docs',
    'prompt' => 'Ты эксперт по документации Neuron AI'
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
fetch('/api.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        service: 'rag_manager',
        action: 'save_prompt',
        store_name: 'neuron-docs',
        prompt: 'Ты эксперт по документации Neuron AI'
    })
})
.then(res => res.json())
.then(data => console.log(data));
DELETE /api.php?service=rag_manager&action=delete

Удалить хранилище

curl -X DELETE "https://rag.kilip.ru/api.php" \
  -H "Content-Type: application/json" \
  -d '{"service":"rag_manager","action":"delete","store_name":"neuron-docs"}'
<?php
$ch = curl_init('https://rag.kilip.ru/api.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'service' => 'rag_manager',
    'action' => 'delete',
    'store_name' => 'neuron-docs'
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
fetch('/api.php', {
    method: 'DELETE',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        service: 'rag_manager',
        action: 'delete',
        store_name: 'neuron-docs'
    })
})
.then(res => res.json())
.then(data => console.log(data));

🧠 Сервис: rag (RAG Чат)

POST /api.php?service=rag&action=chat

Отправить сообщение в RAG чат

Параметры:

Параметр Тип Описание
store string Название хранилища
message string Текст сообщения
provider string gpttunnel / openrouter
model string ID модели
session_id string ID сессии (опционально)
curl -X POST "https://rag.kilip.ru/api.php" \
  -H "Content-Type: application/json" \
  -d '{
    "service": "rag",
    "action": "chat",
    "store": "neuron-docs",
    "message": "Что такое RAG?",
    "provider": "openrouter",
    "model": "openai/gpt-4o"
  }'
<?php
$ch = curl_init('https://rag.kilip.ru/api.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'service' => 'rag',
    'action' => 'chat',
    'store' => 'neuron-docs',
    'message' => 'Что такое RAG?',
    'provider' => 'openrouter',
    'model' => 'openai/gpt-4o'
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
echo $data['response'] ?? $data['error'];
?>
fetch('/api.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        service: 'rag',
        action: 'chat',
        store: 'neuron-docs',
        message: 'Что такое RAG?',
        provider: 'openrouter',
        model: 'openai/gpt-4o'
    })
})
.then(res => res.json())
.then(data => console.log(data.response));
{
    "success": true,
    "response": "Ответ AI на основе базы знаний...",
    "session_id": "abc123",
    "store": "neuron-docs",
    "provider": "openrouter",
    "model": "openai/gpt-4o",
    "usage": {
        "prompt_tokens": 150,
        "completion_tokens": 80,
        "total_tokens": 230
    },
    "cost": {
        "cost_total": 0.000488,
        "cost_total_rub": 0.0439,
        "currency": "USD"
    },
    "formatted_cost": "₽0.0439 (230 токенов)",
    "response_time_ms": 1250
}

🤖 Сервис: ai (Универсальный AI Чат)

POST /api.php?service=ai&action=get_providers

Получить список доступных AI провайдеров

{
    "success": true,
    "providers": {
        "gpttunnel": {...},
        "openrouter": {...}
    }
}
POST /api.php?service=ai&action=get_models

Получить список моделей для указанного провайдера кэшируется 1 час

Параметры:

Параметр Тип Описание
provider string gpttunnel, openrouter
POST /api.php?service=ai&action=chat

Отправить сообщение AI через указанного провайдера и модель

curl -X POST "https://rag.kilip.ru/api.php" \
  -H "Content-Type: application/json" \
  -d '{
    "service": "ai",
    "action": "chat",
    "provider": "openrouter",
    "model": "openai/gpt-4o",
    "message": "Привет!",
    "temperature": 0.7,
    "max_tokens": 1000
  }'
<?php
$ch = curl_init('https://rag.kilip.ru/api.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'service' => 'ai',
    'action' => 'chat',
    'provider' => 'openrouter',
    'model' => 'openai/gpt-4o',
    'message' => 'Привет!',
    'temperature' => 0.7,
    'max_tokens' => 1000
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
echo "Ответ: " . ($data['response'] ?? $data['error']) . "\n";
echo "Стоимость: " . ($data['formatted_cost'] ?? 'N/A') . "\n";
?>
fetch('/api.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        service: 'ai',
        action: 'chat',
        provider: 'openrouter',
        model: 'openai/gpt-4o',
        message: 'Привет!',
        temperature: 0.7,
        max_tokens: 1000
    })
})
.then(res => res.json())
.then(data => {
    console.log('Ответ:', data.response);
    console.log('Стоимость:', data.formatted_cost);
});
POST /api.php?service=ai&action=stream

Потоковая передача ответа (Server-Sent Events)

curl -X POST "https://rag.kilip.ru/api.php" \
  -H "Content-Type: application/json" \
  -N \
  -d '{
    "service": "ai",
    "action": "stream",
    "provider": "gpttunnel",
    "model": "deepseek-v3.2",
    "message": "Расскажи шутку"
  }'
async function streamChat() {
    const response = await fetch('/api.php', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
            service: 'ai',
            action: 'stream',
            provider: 'gpttunnel',
            model: 'deepseek-v3.2',
            message: 'Расскажи шутку'
        })
    });
    
    const reader = response.body.getReader();
    const decoder = new TextDecoder();
    
    while (true) {
        const { done, value } = await reader.read();
        if (done) break;
        const chunk = decoder.decode(value);
        console.log(chunk);
    }
}
streamChat();

❤️ Сервис: health (Проверка статуса)

GET /api.php?service=health
{
    "success": true,
    "status": "ok",
    "timestamp": "2026-01-15 10:30:00",
    "services": ["rag_manager", "rag", "ai"],
    "providers": ["gpttunnel", "openrouter"],
    "php_version": "8.4.6",
    "memory_limit": "2G"
}
📌 Коды ответов:
- 200: Успешный ответ
- 400: Ошибка в запросе
- 500: Внутренняя ошибка сервера

📌 Кэширование моделей:
Модели кэшируются на 1 час. Для принудительного обновления используйте refresh_models.

📌 Стоимость запросов:
Все ответы содержат информацию о количестве использованных токенов и стоимости в рублях (с учётом наценки из .env).