Locust
Это инструмент для нагрузочного тестирования, который позволяет имитировать одновременные запросы пользователей к API и анализировать производительность сервиса.
Шаг 1. Откройте Locust и нажмите «Получить доступ»
Шаг 2. Подтверждение создания учетной записи
Что выдает Alem Plus:
- Ссылка
По этой ссылке Вы увидете веб-интерфейс Locust, развернутый на удалённом сервере. Через данный интерфейс можно наблюдать результаты нагрузочного тестирования: количество запросов, ошибки, время ответа и RPS. Чтобы проверить работу моделей Alem Plus локально, можно выполнить простой запрос к API. Пример запроса к модели kazllm на Python:
from locust import HttpUser, task, between
API_KEY = "YOUR_ALEM_API_KEY"
class KazLLMUser(HttpUser):
wait_time = between(1, 3)
host = "https://llm.alem.ai"
@task
def chat_completion(self):
payload = {
"model": "kazllm",
"messages": [
{
"role": "user",
"content": "Сәлем! Қазақстан туралы қысқаша айтып бер."
}
]
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
with self.client.post(
"/v1/chat/completions",
json=payload,
headers=headers,
catch_response=True,
name="kazllm_chat_completion"
) as response:
if response.status_code == 200:
try:
data = response.json()
if "choices" in data:
response.success()
else:
response.failure(f"Unexpected response format: {data}")
except Exception as e:
response.failure(f"JSON parse error: {e}")
else:
response.failure(f"HTTP {response.status_code}: {response.text}")
const axios = require("axios");
const API_KEY = "YOUR_API_KEY";
const URL = "https://llm.alem.ai/v1/chat/completions";
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function sendRequest() {
try {
const response = await axios.post(
URL,
{
model: "kazllm",
messages: [
{
role: "user",
content: "Сәлем! Қазақстан туралы қысқаша айтып бер."
}
]
},
{
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json"
}
}
);
console.log("Ответ:", response.data.choices[0].message.content);
} catch (err) {
console.error("Ошибка:", err.response?.data || err.message);
}
}
async function runLoadTest() {
while (true) {
await sendRequest();
await sleep(Math.random() * 2000 + 1000); // 1-3 секунды
}
}
runLoadTest();
<?php
$apiKey = "YOUR_API_KEY";
$url = "https://llm.alem.ai/v1/chat/completions";
function sendRequest($apiKey, $url) {
$payload = [
"model" => "kazllm",
"messages" => [
[
"role" => "user",
"content" => "Сәлем! Қазақстан туралы қысқаша айтып бер."
]
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $apiKey,
"Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload, JSON_UNESCAPED_UNICODE));
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo "Ошибка: " . curl_error($ch) . PHP_EOL;
} else {
$data = json_decode($response, true);
echo "Ответ: " . ($data["choices"][0]["message"]["content"] ?? "Ошибка") . PHP_EOL;
}
curl_close($ch);
}
while (true) {
sendRequest($apiKey, $url);
sleep(rand(1, 3)); // пауза 1-3 сек
}
Запуск локального интерфейса Locust
Для запуска веб-интерфейса Locust необходимо установить библиотеку Locust. Затем запустить locust -f filename.py. После запуска открыть адрес в браузере.
Интерпретация результатов Locust
- Type — тип запроса (GET/POST)
- Name — имя запроса (endpoint или задача)
- Requests — общее количество запросов
- Fails — количество ошибок
- Median (ms) — медианное время ответа
- 95%ile (ms) — время, быстрее которого выполняется 95% запросов
- 99%ile (ms) — время для самых медленных запросов
- Average (ms) — среднее время ответа
- Min (ms) — минимальное время
- Max (ms) — максимальное время
- Average size (bytes) — средний размер ответа
- Current RPS — запросов в секунду
- Current Failures/s — ошибок в секунду