Перейти к основному содержанию

Documentation Index

Fetch the complete documentation index at: https://speshu.ai/docs/llms.txt

Use this file to discover all available pages before exploring further.

В этом разделе вы узнаете, как отправлять запросы к текстовым моделям через SpeShu.AI и получать ответы.
Подробное описание endpoint — в API Reference.

Endpoint

POST https://speshu.ai/api/v1/chat/completions
Этот метод принимает историю диалога и возвращает ответ модели.

Основные параметры

ПараметрОписание
modelID модели (например, openai/gpt-5.5)
messagesмассив сообщений диалога
promptстрока с текстом (можно использовать вместо messages)
temperatureвлияет на вариативность ответа (по умолчанию 1.0)
max_tokensограничение длины ответа
streamвключает потоковую выдачу
Нужно передать либо messages, либо prompt. Если используется prompt, он автоматически превращается в сообщение от пользователя.

Дополнительные настройки

ПараметрОписание
max_completion_tokensаналог max_tokens
top_pпараметр выборки токенов
frequency_penaltyснижает повторения
presence_penaltyпоощряет новые темы
response_formatзадаёт структуру ответа
tools и tool_choiceработа с функциями
reasoningпараметры reasoning
web_search_optionsвстроенный поиск
providerвыбор провайдера
userидентификатор пользователя

Формат messages

Каждое сообщение содержит роль и содержимое:
ПолеОписание
roleкто отправил сообщение
contentтекст или массив частей

Роли

РольОписание
systemзадаёт поведение модели
developerдополнительные инструкции
userзапрос пользователя
assistantответ модели
toolрезультат работы инструмента

Примеры content

// обычный текст
{ "role": "user", "content": "Привет!" }

// с медиа
{
  "role": "user",
  "content": [
    { "type": "text", "text": "Что изображено?" },
    { "type": "image_url", "image_url": { "url": "https://example.com/img.jpg" } }
  ]
}
Подробнее о передаче медиа — в гайде Передача медиа на вход.

Простой пример

import OpenAI from 'openai';

const openai = new OpenAI({
  baseURL: 'https://speshu.ai/api/v1',
  apiKey: '<SPESHU_AI_API_KEY>'
});

const completion = await openai.chat.completions.create({
  model: 'openai/gpt-5.5',
  messages: [
    { role: 'system', content: 'Ты полезный ассистент.' },
    { role: 'user', content: 'Напиши хайку о программировании' }
  ],
  temperature: 0.7,
  max_tokens: 100
});

console.log(completion.choices[0].message.content);

Структура ответа

{
  "id": "gen_581761234567890123",
  "object": "chat.completion",
  "created": 1703001234,
  "model": "openai/gpt-5.5",
  "provider": "openai-direct",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Код течёт рекой\nБаги тают на рассвете\nРелиз близко..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 20,
    "total_tokens": 45,
    "cost_rub": 0.15,
    "cost": 0.15
  }
}

Что в ответе

ПолеОписание
idидентификатор запроса
providerкто обработал запрос
choices[0].message.contentтекст ответа
finish_reasonпочему завершилась генерация
usageстатистика токенов и стоимость

Значения finish_reason

ЗначениеОписание
stopгенерация завершена
lengthдостигнут лимит
tool_callsмодель хочет вызвать функцию
content_filterответ отфильтрован

Стриминг

Для получения ответа по мере генерации установите stream: true. Ответ приходит в формате Server-Sent Events (SSE):
const stream = await openai.chat.completions.create({
  model: 'openai/gpt-5.5',
  messages: [{ role: 'user', content: 'Напиши короткую историю' }],
  stream: true
});

for await (const chunk of stream) {
  const content = chunk.choices[0]?.delta?.content;
  if (content) {
    process.stdout.write(content);
  }
}

Пример диалога

Для ведения диалога передавайте историю сообщений:
import OpenAI from 'openai';

const openai = new OpenAI({
  baseURL: 'https://speshu.ai/api/v1',
  apiKey: '<SPESHU_AI_API_KEY>'
});

const messages = [
  { role: 'system', content: 'Ты помощник по программированию.' },
  { role: 'user', content: 'Как создать массив в JavaScript?' },
  { role: 'assistant', content: 'В JavaScript массив создаётся так: const arr = [1, 2, 3];' },
  { role: 'user', content: 'А как добавить элемент?' }
];

const completion = await openai.chat.completions.create({
  model: 'openai/gpt-5.5',
  messages: messages
});

// Модель ответит с учётом контекста диалога
console.log(completion.choices[0].message.content);

Стриминг

Если нужен ответ по частям, включите stream: true:
const stream = await openai.chat.completions.create({
  model: 'openai/gpt-5.5',
  messages: [{ role: 'user', content: 'Напиши короткую историю' }],
  stream: true
});

for await (const chunk of stream) {
  const content = chunk.choices[0]?.delta?.content;
  if (content) {
    process.stdout.write(content);
  }
}

Диалог

Чтобы модель учитывала предыдущие сообщения, передавайте их вместе:
const messages = [
  { role: 'system', content: 'Ты помощник по программированию.' },
  { role: 'user', content: 'Как создать массив в JavaScript?' },
  { role: 'assistant', content: 'const arr = [1, 2, 3];' },
  { role: 'user', content: 'Как добавить элемент?' }
];

const completion = await openai.chat.completions.create({
  model: 'openai/gpt-5.5',
  messages
});

console.log(completion.choices[0].message.content);

Практические моменты

System-сообщение

Через него задаётся стиль и формат ответа. Например: указать язык, длину ответа или формат.

Temperature

ЗначениеРезультат
0.0–0.3точные ответы
0.5–0.7баланс
0.8+более свободная генерация

Ограничение длины

max_tokens помогает контролировать размер ответа и расходы.