ChatGPT
Приложение
HarmonyAI подключается к ChatGPT как приложение: ChatGPT сам зовёт HarmonyAI,
когда вопрос про музыку — сольфеджио, гармонию, аккорды, гаммы. Работает в
браузере и на компьютере; на телефоне появится после подключения.
-
Включите режим разработчика
ChatGPT → Настройки → Приложения и коннекторы → Расширенные настройки → включите Режим разработчика. Нужен платный тариф ChatGPT (Plus, Pro, Business).
-
Создайте приложение
В тех же настройках нажмите Создать и заполните поля:
| Название | HarmonyAI |
| URL MCP-сервера | адрес из поля выше |
| Аутентификация | Без аутентификации — ключ уже в адресе |
Отметьте, что доверяете приложению, и нажмите Создать.
-
Спросите в чате
В новом чате нажмите + → Ещё → HarmonyAI и задайте вопрос. Или просто напишите «Спроси HarmonyAI, что такое септаккорд».
Оплата и модели. Каждый ответ списывается с баланса API так же, как запрос к
/v1/messages. По умолчанию отвечает adan; попросите
ChatGPT использовать dynatos для сложных задач (нужна Pro-подписка).
Адрес с ключом — это пароль: не публикуйте его. Если он утёк, отзовите ключ в кабинете.
Claude Code
CLI
Самый короткий путь: агент читает адрес сервера и ключ из переменных окружения,
переделывать ничего не нужно.
-
Установите Claude Code
Нужен Node.js 18 или новее.
npm install -g @anthropic-ai/claude-code
-
Укажите адрес и ключ
macOS и Linux
export ANTHROPIC_BASE_URL="https://api.harmonyai.ru"
export ANTHROPIC_AUTH_TOKEN="sk-h-ваш-ключ"
export ANTHROPIC_MODEL="dynatos"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="adan"
Windows, PowerShell
$env:ANTHROPIC_BASE_URL="https://api.harmonyai.ru"
$env:ANTHROPIC_AUTH_TOKEN="sk-h-ваш-ключ"
$env:ANTHROPIC_MODEL="dynatos"
$env:ANTHROPIC_DEFAULT_HAIKU_MODEL="adan"
-
Запустите
Модель на ходу переключает флаг --model или команда /model.
-
Чтобы не задавать переменные каждый раз
Перенесите их в ~/.claude/settings.json — файл сильнее оболочки.
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.harmonyai.ru",
"ANTHROPIC_AUTH_TOKEN": "sk-h-ваш-ключ",
"ANTHROPIC_MODEL": "dynatos",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "adan",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "dynatos",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "dynatos"
}
}
Зачем «лишние» переменные. Часть служебных задач Claude Code выполняет
«дешёвой» моделью и запрашивает её по имени из семейства Haiku. Такой модели у нас нет,
поэтому без ANTHROPIC_DEFAULT_HAIKU_MODEL в ответ придёт ошибка 404.
По той же причине полезны ANTHROPIC_DEFAULT_SONNET_MODEL и
ANTHROPIC_DEFAULT_OPUS_MODEL.
Про ANTHROPIC_AUTH_TOKEN. Его значение уходит в заголовок
Authorization: Bearer — как и ждёт шлюз. Переменная
ANTHROPIC_API_KEY отправляется в x-api-key; он тоже принимается,
но для ключей sk-h-… первый вариант привычнее.
Claude App Desktop
Приложение
Настольное приложение Claude Code для macOS и Windows берёт настройки из того же файла,
что и CLI, — достаточно прописать адрес шлюза и перезапустить программу.
-
Откройте файл настроек
macOS и Linux
Windows
%USERPROFILE%\.claude\settings.json
Если файла нет — создайте его.
-
Впишите блок
env
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.harmonyai.ru",
"ANTHROPIC_AUTH_TOKEN": "sk-h-ваш-ключ",
"ANTHROPIC_MODEL": "dynatos",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "adan",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "dynatos",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "dynatos"
}
}
-
Полностью закройте и снова откройте приложение
Файл настроек читается при запуске: пока окно не перезапущено, программа
продолжает обращаться к прежнему серверу.
Не путайте с приложением-чатом. Обычный клиент Claude для переписки
привязан к аккаунту Anthropic и сменить адрес сервера не позволяет — ключ
sk-h-… в него вставить некуда. Через HarmonyAI работают только клиенты,
у которых базовый URL настраивается: Claude Code (CLI и настольное приложение),
расширения редакторов и собственный код.
Cursor
Редактор
Встроенные модели Cursor к чужому адресу не переключаются, зато редактор понимает
расширения VS Code — подключаемся через Cline или Roo Code.
-
Установите расширение
Ctrl/Cmd + Shift + X → найдите Cline
(или Roo Code — настройки те же) → Install.
-
Откройте настройки расширения
Значок шестерёнки на его панели.
-
Заполните три поля
| API Provider | Anthropic |
| Use custom base URL | включить → https://api.harmonyai.ru |
| API Key | sk-h-ваш-ключ |
-
Выберите модель
dynatos для сложных задач, adan для быстрых.
Если список предлагает только официальные названия — введите идентификатор вручную.
Второй рабочий путь. Откройте встроенный терминал Cursor
(Ctrl/Cmd + `) и запустите там Claude Code с нашими переменными — редактор
для этого настраивать не нужно. Шаги — во вкладке «Claude Code».
Поле Override OpenAI Base URL в настройках самого Cursor не подойдёт:
оно ждёт формат OpenAI, а шлюз говорит на формате Anthropic.
OpenCode
CLI
OpenCode умеет добавлять свои провайдеры. Описываем HarmonyAI как провайдер
формата Anthropic — и обе модели появляются в общем списке.
-
Откройте файл настроек
Общий для всех проектов — ~/.config/opencode/opencode.json.
Только для текущего — opencode.json в корне проекта.
-
Добавьте провайдер
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"harmony": {
"npm": "@ai-sdk/anthropic",
"name": "HarmonyAI",
"options": {
"baseURL": "https://api.harmonyai.ru/v1",
"apiKey": "sk-h-ваш-ключ"
},
"models": {
"dynatos": { "name": "Dynatos" },
"adan": { "name": "Adan" }
}
}
}
}
-
Выберите модель в интерфейсе
Команда /models → раздел HarmonyAI.
Обратите внимание на /v1. Здесь адрес указывается вместе
с ним — https://api.harmonyai.ru/v1, потому что библиотека дописывает
к нему только /messages. В Claude Code, наоборот, /v1 нужно
опустить: он добавляет его сам.
API — cURL и SDK
HTTP
Прямые запросы к шлюзу. Формат — Anthropic Messages API, так что подходит любая
библиотека, которая умеет его отправлять.
| Адрес | https://api.harmonyai.ru |
| Эндпоинты | /v1/messages, /v1/messages/count_tokens, /v1/models |
| Авторизация | Authorization: Bearer sk-h-… или x-api-key: sk-h-… |
| Версия | anthropic-version: 2023-06-01 |
| Модели | dynatos, adan |
-
Обычный запрос
curl https://api.harmonyai.ru/v1/messages \
-H "Authorization: Bearer $HARMONY_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "adan",
"max_tokens": 1024,
"messages": [
{ "role": "user", "content": "Объясни, что такое SSE" }
]
}'
-
Потоковый ответ
Добавьте "stream": true и флаг -N, чтобы cURL не буферизовал вывод.
curl -N https://api.harmonyai.ru/v1/messages \
-H "Authorization: Bearer $HARMONY_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "dynatos",
"max_tokens": 2048,
"stream": true,
"messages": [{ "role": "user", "content": "Напиши хайку про кэш" }]
}'
-
Официальный SDK — TypeScript и JavaScript
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({
baseURL: 'https://api.harmonyai.ru',
apiKey: process.env.HARMONY_API_KEY,
});
const stream = await client.messages.stream({
model: 'adan',
max_tokens: 1024,
messages: [{ role: 'user', content: 'Напиши регулярку для e-mail' }],
});
for await (const event of stream) {
if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
process.stdout.write(event.delta.text);
}
}
-
Список моделей и подсчёт токенов
curl https://api.harmonyai.ru/v1/models \
-H "Authorization: Bearer $HARMONY_API_KEY"
Сколько токенов займёт запрос — до его отправки и без списания:
curl https://api.harmonyai.ru/v1/messages/count_tokens \
-H "Authorization: Bearer $HARMONY_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "dynatos",
"messages": [{ "role": "user", "content": "Длинный текст…" }]
}'
Формат OpenAI не поддерживается. Эндпоинта
/v1/chat/completions у шлюза нет, и клиенты, умеющие говорить только
на этом формате, к нему не подключатся. Нужен провайдер anthropic
с настраиваемым базовым адресом.
Python
SDK
Официальная библиотека anthropic работает со шлюзом без изменений —
достаточно передать base_url.
-
Установите библиотеку
-
Положите ключ в переменную окружения
macOS и Linux
export HARMONY_API_KEY="sk-h-ваш-ключ"
Windows, PowerShell
$env:HARMONY_API_KEY="sk-h-ваш-ключ"
-
Потоковый ответ
import os
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.harmonyai.ru",
api_key=os.environ["HARMONY_API_KEY"],
)
with client.messages.stream(
model="dynatos",
max_tokens=2048,
messages=[{"role": "user", "content": "Разбери этот SQL-запрос"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
-
Обычный ответ и расход токенов
msg = client.messages.create(
model="adan",
max_tokens=512,
messages=[{"role": "user", "content": "Привет!"}],
)
print(msg.content[0].text)
print(msg.usage.input_tokens, msg.usage.output_tokens)
Библиотека отправляет ключ в заголовке x-api-key — шлюз принимает и его,
и Authorization: Bearer. Поле usage в ответе показывает
фактический расход, по которому списывается баланс.
PowerShell
Windows
Запрос из Invoke-RestMethod, без сторонних модулей.
-
Сохраните ключ
Только на текущую сессию:
$env:HARMONY_API_KEY = "sk-h-ваш-ключ"
Навсегда — для своей учётной записи:
[Environment]::SetEnvironmentVariable(
"HARMONY_API_KEY", "sk-h-ваш-ключ", "User")
-
Отправьте запрос
$body = @{
model = "adan"
max_tokens = 512
messages = @(@{ role = "user"; content = "Привет! Ответь одним предложением." })
} | ConvertTo-Json -Depth 5
$res = Invoke-RestMethod -Method Post `
-Uri "https://api.harmonyai.ru/v1/messages" `
-Headers @{
"Authorization" = "Bearer $env:HARMONY_API_KEY"
"anthropic-version" = "2023-06-01"
} `
-ContentType "application/json" `
-Body ([Text.Encoding]::UTF8.GetBytes($body))
$res.content[0].text
-
Claude Code в том же окне
$env:ANTHROPIC_BASE_URL = "https://api.harmonyai.ru"
$env:ANTHROPIC_AUTH_TOKEN = "sk-h-ваш-ключ"
$env:ANTHROPIC_MODEL = "dynatos"
$env:ANTHROPIC_DEFAULT_HAIKU_MODEL = "adan"
claude
Про русский текст. Тело запроса передаётся байтами в UTF-8
([Text.Encoding]::UTF8.GetBytes) — иначе Windows PowerShell 5.1
отправит кириллицу в кодировке системы, и вместо букв придут вопросительные знаки.
В PowerShell 7 это уже не нужно, но и не мешает.
Терминал
bash, zsh
Ключ хранится в отдельном файле, а не в истории команд, — и любой запрос
становится одной строкой.
-
Положите ключ в файл и закройте доступ другим
printf '%s' 'sk-h-ваш-ключ' > ~/.harmony-key
chmod 600 ~/.harmony-key
-
Подключите его к оболочке
Строка для ~/.zshrc или ~/.bashrc:
export HARMONY_API_KEY="$(cat ~/.harmony-key)"
Применить сразу, не открывая новое окно: source ~/.zshrc.
-
Спросите что-нибудь одной командой
Ответ разбираем через jq, чтобы не читать JSON глазами.
ask() {
curl -s https://api.harmonyai.ru/v1/messages \
-H "Authorization: Bearer $HARMONY_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d "$(jq -n --arg q "$*" '{
model: "adan",
max_tokens: 1024,
messages: [{ role: "user", content: $q }]
}')" | jq -r '.content[0].text'
}
ask "Чем tar отличается от zip?"
-
Claude Code в этой же оболочке
export ANTHROPIC_BASE_URL="https://api.harmonyai.ru"
export ANTHROPIC_AUTH_TOKEN="$HARMONY_API_KEY"
export ANTHROPIC_MODEL="dynatos"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="adan"
claude
Почему не вписать ключ прямо в команду. Всё, что набрано в оболочке,
попадает в ~/.zsh_history или ~/.bash_history и остаётся
там надолго. Файл с правами 600 читает только владелец, а в истории
видно лишь имя переменной.