88API88API
AI-приложенияAPIПомощь и поддержка

Модуль журнала

Описание функции

Префикс интерфейса унифицирован как http(s)://<your-domain>

В производственных средах следует использовать HTTPS, чтобы гарантировать токены аутентификации. HTTP рекомендуется только для сред разработки.

Иерархическая система запросов к журналам позволяет администраторам просматривать журналы всего сайта, а пользователям — просматривать личные журналы. Обеспечивает статистику в реальном времени (RPM/TPM), многомерную фильтрацию, очистку исторических данных и другие функции. Интерфейс запроса токена, поддерживающий CORS, облегчает интеграцию сторонних разработчиков.

🔐 Аутентификация не требуется

Журналы запросов на основе токена

  • Имя интерфейса: журналы запросов на основе токена.
  • Метод HTTP: GET
  • Путь: /api/log/token
  • Требования аутентификации: общедоступно.
  • Введение в функцию: запросы к записям журнала с помощью ключа токена, поддержка междоменного доступа.

💡Пример запроса:

const response = await fetch('/api/log/token?key=`<TOKEN_PLACEHOLDER>`', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "",
  "data": [
    {
      "id": 1,
      "type": 2,
      "content": "APIВызов успешен",
      "model_name": "gpt-4",
      "quota": 1000,
      "created_at": 1640995000
    }
  ]
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "TokenНе существует или не имеет разрешения"
}

🧾 Описание поля:

key (строка): обязательный ключ токена.

🔐 Аутентификация пользователя

Статистика моего журнала

  • Имя интерфейса: статистика моего журнала.
  • Метод HTTP: GET
  • Путь: key
  • Требования аутентификации: Пользователь
  • Введение в функцию: получение статистики журнала текущего пользователя, включая потребление квоты, частоту запросов и использование токенов.

💡Пример запроса:

const response = await fetch('/api/log/self/stat?type=2&start_timestamp=1640908800&end_timestamp=1640995200&token_name=api_token&model_name=gpt-4&group=default', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "",
  "data": {
    "quota": 50000,
    "rpm": 10,
    "tpm": 1500
  }
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "Не удалось получить статистику"
}

🧾 Описание поля:

  • type (число): тип журнала, дополнительные значения: 1=перезарядка, 2=потребление, 3=управление, 4=ошибка, 5=система
  • type (число): временная метка начала
  • type (число): отметка времени окончания.
  • type (строка): фильтр имени токена.
  • type (строка): фильтр названия модели.
  • type (строка): групповая фильтрация.
  • type (число): общее использование квоты в течение указанного диапазона времени.
  • type (число): количество запросов в минуту (последние 60 секунд).
  • type (число): количество токенов в минуту (последние 60 секунд)

Получите мой журнал

  • Имя интерфейса: получить мои журналы.
  • Метод HTTP: GET
  • Путь: type
  • Требования аутентификации: Пользователь
  • Введение в функцию: получение записей журнала текущего пользователя на страницах с поддержкой нескольких условий фильтрации.

💡Пример запроса:

const response = await fetch('/api/log/self?p=1&page_size=20&type=2&start_timestamp=1640908800&end_timestamp=1640995200&token_name=api_token&model_name=gpt-4&group=default', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "",
  "data": {
    "items": [
      {
        "id": 1,
        "user_id": 1,
        "created_at": 1640995000,
        "type": 2,
        "content": "APIВызов успешен",
        "token_name": "api_token",
        "model_name": "gpt-4",
        "quota": 1000,
        "prompt_tokens": 50,
        "completion_tokens": 100
      }
    ],
    "total": 25,
    "page": 1,
    "page_size": 20
  }
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "Не удалось получить журнал"
}

🧾 Описание поля:

Параметры запроса такие же, как и у интерфейса получения всех журналов, но возвращаются только записи журнала текущего пользователя.

Искать в моих журналах

  • Имя интерфейса: поиск в моих журналах.
  • Метод HTTP: GET
  • Путь: /api/log/self/search
  • Требования аутентификации: Пользователь
  • Введение в функцию: поиск записей журнала текущего пользователя по ключевым словам.

💡Пример запроса:

const response = await fetch('/api/log/self/search?keyword=gpt-4', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "",
  "data": [
    {
      "id": 1,
      "type": 2,
      "content": "GPT-4Вызов успешен",
      "model_name": "gpt-4",
      "created_at": 1640995000
    }
  ]
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "Журнал поиска не удался"
}

🧾 Описание поля:

keyword (строка): ключевые слова для поиска, соответствующие типу журнала текущего пользователя.

🔐 Аутентификация администратора

Получить все журналы

  • Имя интерфейса: получить все журналы.
  • Метод HTTP: GET
  • Путь: keyword
  • Требования аутентификации: Администратор.
  • Введение в функцию: получение всех записей журнала в системе в разбиении по страницам, поддержка нескольких условий фильтрации и фильтрации по типам журналов.

💡Пример запроса:

const response = await fetch('/api/log/?p=1&page_size=20&type=2&start_timestamp=1640908800&end_timestamp=1640995200&username=testuser&token_name=api_token&model_name=gpt-4&channel=1&group=default', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "",
  "data": {
    "items": [
      {
        "id": 1,
        "user_id": 1,
        "created_at": 1640995000,
        "type": 2,
        "content": "APIВызов успешен",
        "username": "testuser",
        "token_name": "api_token",
        "model_name": "gpt-4",
        "quota": 1000,
        "prompt_tokens": 50,
        "completion_tokens": 100,
        "use_time": 2,
        "is_stream": false,
        "channel_id": 1,
        "channel_name": "OpenAIканал",
        "token_id": 1,
        "group": "default",
        "ip": "192.168.1.1",
        "other": "{\"model_ratio\":15.0}"
      }
    ],
    "total": 100,
    "page": 1,
    "page_size": 20
  }
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "Не удалось получить журнал"
}

🧾 Описание поля:

  • p (номер): номер страницы, по умолчанию — 1.
  • p (номер): количество на странице, по умолчанию — 20.
  • p (число): тип журнала, дополнительные значения: 1=перезарядка, 2=потребление, 3=управление, 4=ошибка, 5=системный журнал.go: 41-48
  • p (число): временная метка начала
  • p (число): отметка времени окончания.
  • p (строка): фильтрация имени пользователя.
  • p (строка): фильтр имени токена.
  • p (строка): фильтр названия модели.
  • p (числовой): фильтрация идентификатора канала.
  • p (строка): групповая фильтрация.

Удалить исторические журналы

  • Имя интерфейса: удалить исторические журналы.
  • Метод HTTP: УДАЛИТЬ
  • Путь: p
  • Требования аутентификации: Администратор.
  • Введение в функцию: пакетное удаление записей журнала до указанной отметки времени, поддержка пакетного удаления во избежание чрезмерной нагрузки на базу данных.

💡Пример запроса:

const response = await fetch('/api/log/?target_timestamp=1640908800', {
  method: 'DELETE',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "",
  "data": 1500
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "target timestamp is required"
}

🧾 Описание поля:

  • target_timestamp (число): целевая временная метка, необходимо удалить все журналы до этого времени.
  • target_timestamp (число): количество успешно удаленных журналов.

Журнал статистики

  • Имя интерфейса: статистика журнала.
  • Метод HTTP: GET
  • Путь: target_timestamp
  • Требования аутентификации: Администратор.
  • Введение в функцию: получение статистики журнала в указанном диапазоне времени и условиях, включая потребление квоты, частоту запросов и использование токенов.

💡Пример запроса:

const response = await fetch('/api/log/stat?type=2&start_timestamp=1640908800&end_timestamp=1640995200&username=testuser&token_name=api_token&model_name=gpt-4&channel=1&group=default', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "",
  "data": {
    "quota": 150000,
    "rpm": 25,
    "tpm": 3500
  }
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "Не удалось получить статистику"
}

🧾 Описание поля:

  • Параметры запроса такие же, как и интерфейс получения всех логов
  • quota (число): общее использование квоты в течение указанного диапазона времени.
  • quota (число): запросов в минуту (последние 60 секунд) log.go: 357
  • quota (число): количество токенов в минуту (сумма Prompt_tokens + Complete_Tokens за последние 60 секунд)

Искать во всех журналах

  • Имя интерфейса: поиск по всем журналам.
  • Метод HTTP: GET
  • Путь: quota
  • Требования аутентификации: Администратор.
  • Введение в функцию: поиск по всем записям журнала в системе по ключевым словам.

💡Пример запроса:

const response = await fetch('/api/log/search?keyword=error', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "",
  "data": [
    {
      "id": 1,
      "type": 4,
      "content": "APIОшибка звонка",
      "username": "testuser",
      "created_at": 1640995000
    }
  ]
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "Журнал поиска не удался"
}

🧾 Описание поля:

keyword (строка): ключевое слово поиска, которое может соответствовать типу или содержимому журнала.