01
Базовый LLM-вызов
Начало

Отправляем запрос в LLM, получаем ответ. Просто чтобы убедиться что всё работает.

Мы будем использовать OpenRouter — универсальный прокси ко всем LLM-провайдерам (Anthropic, OpenAI, Google, Meta и др.). А библиотека openai совместима с любым API, который поддерживает OpenAI-формат — достаточно поменять baseURL. Один клиент, один формат, доступ к любой модели.

Сначала создаём проект и ставим зависимости:

mkdir simple-agent && cd simple-agent && npm init -y && npm install openai typescript tsx @types/node dotenv

Создай папку src и добавь .gitignore, чтобы случайно не закоммитить ключ:

mkdir src
.gitignore
node_modules
.env

Теперь создай файл .env с ключом от OpenRouter:

.env
OPENROUTER_API_KEY=sk-or-v1-ваш-ключ-от-openrouter

Теперь — первый вызов:

src/01-basic-call.ts
// src/01-basic-call.ts
import OpenAI from "openai";
import dotenv from "dotenv";

dotenv.config();

const client = new OpenAI({
    baseURL: "https://openrouter.ai/api/v1",
    apiKey: process.env.OPENROUTER_API_KEY ?? "",
});

async function main() {
    const response = await client.chat.completions.create({
        model: "anthropic/claude-sonnet-4.5",
        messages: [
            { role: "user", content: "Сколько будет 2 + 2?" }
        ],
    });

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

main();
npx tsx src/01-basic-call.ts
Демо в формате диалога
1/1
Пример вывода. У тебя может быть иначе — это нормально.
✅ Что должно получиться
В терминале появляется ответ модели (обычно «4») без ошибок.
🧯 Если не работает
Проверь OPENROUTER_API_KEY в .env, наличие интернета и версии node/npm.
💡 Что произошло: Мы отправили запрос через OpenRouter (универсальный прокси ко всем LLM-провайдерам), получили ответ. Используем библиотеку openai — она совместима с любым API, поддерживающим OpenAI-формат.