> Для получения чистого Markdown любой страницы добавьте .md к URL‑адресу страницы.  
> Для полного индекса документации см. https://api.vega.chat/docs/llms.txt.  
> Для полного содержания документации см. https://api.vega.chat/docs/llms-full.txt.  
> Для интеграции AI‑клиентов (Claude Code, Cursor и др.) подключитесь к MCP‑серверу по адресу https://api.vega.chat/docs/_mcp/server.

# Быстрый старт: Создание чат‑приложения

**Цель:** Изучить основы VEGA, создав TypeScript‑чат‑приложение, которое отправляет сообщения и получает ответы в режиме потока через VEGA.

**Результат:** Рабочий цикл многократного диалога, способный общаться с любой из более чем 600 моделей, доступных на платформе, изменением одной строки.

Хотите начать быстрее? Скопируйте этот запрос в ваш код‑агент.

## Предварительные требования

* **Node.js 18+** установлен
* **API‑ключ VEGA** — создайте его на  
  [/dashboard/keys](/dashboard/keys) или настройте новый [проект API VEGA](/docs/guides/overview/stripe-projects)

## 1. Создайте проект и установите SDK

Создайте новый проект Node.js и добавьте SDK клиента VEGA. SDK доступен только в формате ESM, поэтому задайте тип пакета `module`. Установите `tsx`, чтобы запускать примеры TypeScript напрямую.

```bash
mkdir vega-chat && cd vega-chat
npm init -y
npm pkg set type=module
npm install @openrouter/sdk
npm install --save-dev tsx
```

## 2. Отправьте первое сообщение

Создайте `chat.ts` с экземпляром клиента и единственным запросом завершения чата. `apiKey` читается из переменной окружения, поэтому учётные данные никогда не прописываются в коде.

```typescript
import { OpenRouter } from '@openrouter/sdk';

const client = new OpenRouter({
  apiKey: process.env.VEGA_API_KEY,
});

const completion = await client.chat.send({
  chatRequest: {
    model: 'google/gemini-3.1-flash-lite',
    messages: [
      { role: 'user', content: 'Say hello in one sentence.' },
    ],
  },
});

console.log(completion.choices[0]?.message.content);
console.log({
  promptTokens: completion.usage?.promptTokens,
  completionTokens: completion.usage?.completionTokens,
});
```

Запустите его, указав ваш API‑ключ:

```bash
VEGA_API_KEY=vega_... npx tsx chat.ts
```

Вы должны увидеть один текстовый ответ, выведенный в консоль. SDK возвращает использование токенов в полях camelCase, таких как `promptTokens` и `completionTokens`. Массив `completion.choices` имеет ту же структуру, что и [ответ Chat Completions](/docs/api/api-reference/chat-completions/create-a-chat-completion).

## 3. Потоковая передача ответа

Потоковая передача возвращает текст по мере его генерации, вместо ожидания полного ответа. Укажите `stream: true` и итерируйте получаемый асинхронный итератор. Каждый фрагмент содержит `delta` с новым кусочком текста.

```typescript
import { OpenRouter } from '@openrouter/sdk';

const client = new OpenRouter({
  apiKey: process.env.VEGA_API_KEY,
});

const stream = await client.chat.send({
  chatRequest: {
    model: 'google/gemini-3.1-flash-lite',
    messages: [
      { role: 'user', content: 'Explain how routers work in three sentences.' },
    ],
    stream: true,
  },
});

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

Текст теперь выводится постепенно. См. [справочник по потоковой передаче](/docs/api/api-reference/streaming) для полного формата SSE‑событий.

## 4. Добавьте многократный диалог

Многократный диалог реализуется отправкой полной истории сообщений с каждым запросом. Модель использует все предыдущие сообщения как контекст. Добавляйте каждый ввод пользователя и ответ ассистента в массив `messages` перед следующим вызовом.

```typescript
import { OpenRouter } from '@openrouter/sdk';
import * as readline from 'node:readline';

const client = new OpenRouter({
  apiKey: process.env.VEGA_API_KEY,
});

const messages: { role: 'user' | 'assistant'; content: string }[] = [];

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

function ask(): void {
  rl.question('You: ', async (input) => {
    if (input.toLowerCase() === 'exit') {
      rl.close();
      return;
    }

    messages.push({ role: 'user', content: input });

    const stream = await client.chat.send({
      chatRequest: {
        model: 'google/gemini-3.1-flash-lite',
        messages,
        stream: true,
      },
    });

    let response = '';
    process.stdout.write('Assistant: ');
    for await (const chunk of stream) {
      const delta = chunk.choices[0]?.delta?.content;
      if (delta) {
        process.stdout.write(delta);
        response += delta;
      }
    }
    console.log();

    messages.push({ role: 'assistant', content: response });
    ask();
  });
}

ask();
```

Запустите файл и вводите сообщения. Модель запоминает предыдущие ходы, потому что массив `messages` отправляется полностью с каждым запросом. Введите `exit`, чтобы выйти.

## 5. Смените модель

VEGA предоставляет доступ к сотням моделей через один API. Измените строку `model`, чтобы переключить провайдера — других изменений кода не требуется.

```typescript
// Use OpenAI's latest chat model
model: 'openai/gpt-chat-latest',

// Use Anthropic Claude Sonnet latest
model: '~anthropic/claude-sonnet-latest',

// Use a free model
model: 'openrouter/free',
```

Просмотрите все доступные модели на [/aimodels](/aimodels) или запросите их программно через [Models API](/docs/api/api-reference/models-and-endpoints/list-all-models).

## Проверьте свою работу

* `npx tsx chat.ts` выводит потоковый ответ в консоль
* Многократный диалог сохраняет контекст между ходами (задайте уточняющий вопрос, ссылающийся на предыдущий ответ)
* Изменение строки `model` переключает на другую модель без дополнительных правок кода
* Непотоковый ответ включает объект `usage` с полями `promptTokens` и `completionTokens`

## Следующие шаги

* Подключите [код‑агент](/docs/cookbook/coding-agents/claude-code-integration) к VEGA
* Исследуйте [Agent SDK](/docs/agent-sdk/overview) для встроенных многократных циклов и выполнения инструментов