Логин и пароль
Пожалуйста, подождите…
Имена попадают в metadata.rag_db в Qdrant. Удаление из списка не удаляет векторы.
Индексация использует выбранную базу данных в шапке (поле metadata.rag_db).
Режим «Все базы» — чанки без привязки; они видны только при том же режиме в чате и в списке документов.
Задачи сохраняются на диске и продолжаются после перезапуска сервера. Отмена доступна только для статуса «ожидание».
Пары вопрос–ответ, присланные интеграциями (/chat/knowledge/qa, /api/v1/chat/knowledge/qa),
попадают сюда до индексации. Добавление из панели, MongoDB и Google Docs идёт в RAG без проверки.
—
—
Для выбранной в шапке базы. По умолчанию выключено. Фоновая синхронизация с RAG — каждые 2 часа (без кнопки).
Креативность: 0 = детерминировано, 1 = максимально случайно
Ядро выборки: меньше = более сфокусированные ответы
Максимальная длина ответа
Штрафы за повторения (положительные) или поощрения (отрицательные)
Сколько документов искать изначально перед reranking
Минимальная косинусная схожесть (0–1). 0 = отключить фильтр
Сколько лучших документов оставить после reranking
Минимальный скор после rerank. 0 = отключить фильтр
Сколько соседних чанков добавлять к найденному (0 = только найденный)
Размер чанка в токенах/символах
Перекрытие между чанками для сохранения контекста
Сколько последних сообщений хранить в контексте диалога
Запасной лимит символов на ответ (если tiktoken недоступен). Обычно история для переписывания запроса ограничивается токенами окна модели.
65536
Задаётся переменной окружения LLM_CONTEXT_TOKENS в launcher.bat / launcher.sh (по умолчанию 65536). При переполнении история и контекст обрезаются; иначе — ошибка 413.
Настройки хранятся в SQLite (./app_data.sqlite3, путь задаётся APP_SQLITE_PATH).
Менять можно через эту панель; при первом запуске данные подтягиваются из старого config.json, если он был.
Изменения применяются мгновенно без перезапуска сервера.
Базовая инструкция для всех ответов нейросети
Журнал событий и расход токенов LLM
Чат, очередь RAG, промпт, ключи и др. Пагинация и фильтр по типу.
| # | Время | Тип | Ключ / пользователь | Сводка | Чат / пайплайн |
|---|
Input/output токены по вызовам LLM (tiktoken / API). Фильтры, графики, CSV.
| Пользователь / ключ | Вызовов | Input | Output | Всего |
|---|
| # | Время | Этап | Пользователь | Input | Output | Всего | RAG | мс |
|---|
Учётные записи для входа в панель (кроме администратора из ADMIN_LOGIN).
Создание и удаление — только у администратора.
Один и тот же логин и пароль могут одновременно использоваться с разных компьютеров: сессии не привязаны к устройству, каждый клиент получает свой JWT.
Логин и пароль (минимум 6 символов)
Учётные записи в базе панели
Ключи доступа, привязка к базам RAG и описание эндпоинтов.
ADMIN_LOGIN). Привязку RAG-баз к любому ключу может менять любой авторизованный пользователь панели (кнопка «Базы RAG…»).
Имя задаётся один раз при создании и не меняется. Секрет генерируется на сервере и показывается один раз. Базы выбирайте из реестра RAG (имена должны быть заранее добавлены в управлении базами).
Доступные базы для этого ключа (пустой список = для API без rag_db — поиск по всем базам):
Текущая панель использует: —
Интеграции (боты, скрипты): заголовок X-API-Key — только выданный ключ из раздела «Ключи» (создаёт администратор панели).
X-API-Key: <секрет>
Веб-панель: после POST /auth/login передавайте JWT и обязательно X-RAG-Panel: 1 (выбор базы в UI).
Authorization: Bearer <jwt> X-RAG-Panel: 1
Обязательно задайте JWT_SECRET в окружении (в продакшене — длинная случайная строка). Без неё используется небезопасное значение по умолчанию.
POST /auth/login — JSON {"login":"...","password":"..."}. Ответ: token, is_admin, login. Администратор — только пара ADMIN_LOGIN / ADMIN_PASSWORD.
GET /auth/check — те же заголовки, что и для запросов панели (Bearer + X-RAG-Panel) или только X-API-Key. Ответ: ok, is_admin, user, либо для ключа — master, key_id.
X-RAG-Panel: 1. В этом режиме приоритет у выбора в выпадающем списке базы сверху: конкретная база или «все базы» — как раньше, без ограничений по привязке ключа.X-RAG-Panel: действуют привязки RAG к этому ключу (см. ниже). Отдельного «мастер-ключа» из окружения нет.X-RAG-Panel): если к ключу ничего не привязано, чтение/запись без rag_db идёт по всем базам. Если привязаны базы — без rag_db чтение по ним (OR); указанный rag_db должен быть среди привязанных.rag_db): выборка объединяет все привязанные базы (OR). Если rag_db указан — только эта база (должна быть в привязках).rag_db можно не указывать; при нескольких — обязателен (из списка привязанных). Если привязок нет — можно указывать любую целевую rag_db по правилам реестра баз.POST /chat — JSON: обязательное question; опционально session_id (продолжить диалог — сохраняйте session_id из ответа для следующих реплик), variants (1–5), filter, rag_db (можно не передавать: при API-ключе с привязками — поиск по всем привязанным базам OR; одна привязка — та же база), extra_context.GET /chat/list — список сессий: id, title, last_used, feedback (true / false / null).POST /chat/create — пустая сессия, в ответе id.POST /chat/feedback — оценка: session_id, helpful (true / false). Ответ: ok, feedback.POST /chat/knowledge/qa — пара для RAG (не fine-tune): question, answer; опционально rag_db (не указывать, если у ключа ровно одна привязанная база — подставится автоматически; при нескольких — обязателен), ticket_id (необязательно — ID тикета из вашей системы поддержки: CRM, Helpdesk, Jira и т.д.; сервер его не выдаёт), metadata. Ответ: status: queued, job_id.Коды ошибок detail (JSON):
400 — empty_question, empty_session_id, empty_qa403 — moderation_blocked404 — session_not_found413 — context_overflow (превышено окно модели даже после обрезки)422 — no_rag_context (нет данных в базе — LLM не вызывается)429 — chat_frozen (+ retry_after_sec)502 — empty_llm_responseПример из бота (Python, выданный API-ключ, одна база support):
import requests
API = "https://your-host"
KEY = "rk_...." # выданный секрет
r = requests.post(
f"{API}/chat",
headers={"X-API-Key": KEY, "Content-Type": "application/json"},
json={
"question": "Как оформить возврат?",
"session_id": "user-12345", # опционально: тот же id для цепочки сообщений
"rag_db": "support", # опционально: если у ключа несколько баз — лучше указать. Иначе будут использованы те, которые привязаны к апи-ключу
"extra_context": "...", # опционально: доп. контекст
},
timeout=120,
)
r.raise_for_status()
data = r.json()
print(data["answer"])
print("session_id:", data["session_id"])
print("feedback:", data.get("feedback")) # true | false | None
Несколько вариантов ответа (variants: 3):
curl -sS -X POST "$API/chat" \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"question":"Как вернуть товар?","variants":3,"rag_db":"support"}'
# Ответ: answer (первый вариант), answers[{variant, query_used, rag_query, answer}], feedback
Оценка и Q&A от саппорта:
curl -sS -X POST "$API/chat/feedback" \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"session_id":"SESSION_UUID","helpful":true}'
curl -sS -X POST "$API/chat/knowledge/qa" \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"question":"Срок возврата?","answer":"14 дней","rag_db":"support"}'
# Ответ API: status "pending_review" + pending_id (модерация в панели → вкладка «На проверке»).
# То же для POST /api/v1/chat/knowledge/qa
# ticket_id — по желанию, например "48291" из вашей CRM:
# -d '{"question":"...","answer":"...","rag_db":"support","ticket_id":"48291"}'
Пример через curl:
curl -sS -X POST "$API/chat" \
-H "X-API-Key: $KEY" \
-H "Content-Type: application/json" \
-d '{"question":"Привет","rag_db":"support","extra_context":"Баланс: 1000, статус: verified"}'
Ответ POST /chat: session_id, answer, feedback (последняя оценка или null); при variants > 1 — также answers[].
POST /rag/add, /rag/add_qa, /rag/add_from_url, /rag/add_from_mongo, /rag/uploadPOST /rag/search — поиск по коллекцииPOST /rag/delete, DELETE /rag/delete_document/{id}, PUT /rag/updateGET /rag/list, /rag/count, /rag/databasesGET /rag/queue?page=1&limit=25 — пагинация: jobs, total, pagesPOST /rag/databases — зарегистрировать имя базы; DELETE /rag/databases/{name}DELETE /rag/queue/{job_id}, POST /rag/queue/{job_id}/retryGET /rag/pending-qa, /rag/pending-qa/count — модерация Q/A из API (только JWT + X-RAG-Panel: 1)POST /rag/pending-qa/{id}/approve, /reject — после approve пара уходит в очередь индексацииGET / POST /config, POST /config/resetGET / POST /prompt (тело — plain text)GET / DELETE /memory/{session_id}GET /logs?page=1&limit=50&kind=chat — пагинация; kind: chat, moderation, chat_feedback, …GET /api/keys — список: id, name, rag_databasesPOST /api/keys — JSON {"name":"...","rag_databases":["db1","db2"]}. Ответ: одноразовое поле key. Только JWT администратора (Bearer).PUT /api/keys/{id}/rag-databases — любой авторизованный актёр (JWT панели или любой валидный X-API-Key) может менять привязку баз у любого ключаDELETE /api/keys/{id} — только JWT администратораPOST /mongo/list — тело skip, limit, опционально rag_db (для импорта в RAG действуют те же правила, что и для записи)