Оформление
OpenAI-совместимый API
Внешний API платформы: какие адреса есть, как авторизоваться, что поддерживается и чего в нём принципиально нет.
Для чего он нужен
Внешний API позволяет подключить EVA к готовым приложениям, которые умеют работать с OpenAI. Приложение указывает адрес платформы вместо адреса OpenAI и свой ключ EVA, после чего может обращаться к моделям, разрешённым в платформе.
Смысл этого API в том, чтобы скрыть ключи провайдеров. Приложение получает ключ EVA, а настоящий ключ провайдера остаётся внутри платформы.
Адреса
| Метод | Адрес | Что делает |
|---|---|---|
GET | /v1/models | Возвращает список включённых моделей включённых провайдеров |
POST | /v1/chat/completions | Передаёт запрос выбранному провайдеру и возвращает ответ |
Авторизация
Заголовок Authorization: Bearer <ключ>. Подходит и ключ API платформы, и обычный токен входа.
Для списка моделей нужно право на чтение моделей или на создание запусков. Для обращения к модели нужно право на создание запусков.
Что поддерживается в запросе
Из тела запроса платформа использует только четыре поля:
| Поле | Примечание |
|---|---|
model | Идентификатор модели или её внешний идентификатор |
messages | Только роли system, user и assistant. Сообщения с ролями инструментов отбрасываются |
stream | Потоковый режим поддерживается |
temperature | Передаётся провайдеру |
Всё остальное из тела запроса игнорируется. В запросе обязательно должно быть хотя бы одно непустое сообщение пользователя.
Что возвращается
В обычном режиме приходит ответ формата chat.completion с одним вариантом и причиной завершения stop.
В потоковом режиме поток провайдера передаётся построчно, платформа подменяет в нём только идентификатор модели и идентификатор ответа, а в конце гарантированно отправляет завершающую строку.
Чего в этом API нет
| Нет | Пояснение |
|---|---|
| Сведений о расходе токенов | Поле usage в ответе не заполняется |
| Вызова инструментов | Ни tools, ни function_call |
| Нескольких вариантов ответа | Значение n больше единицы не поддерживается |
Полей stop, max_tokens, response_format | Игнорируются |
| Изображений и звука | Не поддерживаются |
Адресов /v1/completions, /v1/embeddings, /v1/responses | Не реализованы |
Важное отличие от работы в интерфейсе
Обращение через /v1 это прямая передача запроса провайдеру. По этому пути платформа:
- не создаёт чат;
- не создаёт запуск;
- не пишет запись в журнал расхода;
- не обращается к Runtime, к инструментам MCP и к файлам чата;
- не маскирует персональные данные.
Персональные данные
Маскирование работает только в чатах платформы. Запросы через /v1 уходят провайдеру в том виде, в котором их отправило внешнее приложение.
Из счётчиков по этому пути ведутся только внутренние: сколько запросов выполняется сейчас, сколько выполнено всего, когда был последний и какая модель использовалась. Их показывает раздел администрирования на странице Рантайм.
Если нужны инструменты
Внешнему приложению, которому нужен полноценный агент с инструментами, нужно использовать не /v1, а либо обычный адрес отправки сообщения в чат, либо шлюз /mcp.