OpenRouter это сервис единого окна к различным поставщикам ИИ моделей - ChatGPT, Claude и др. Google не работает в России, у OpenAI тоже сложности с оплатой Российскими картами и нужен VPN для работы. LLAMA предоставляется в виде исходных файлов и надо ее самому где-то запускать. Опенроутер решает эти проблемы собирая у себя различных вендоров и модели в единое окно через единый API, который работает в России без VPN и может быть оплачен разными способами, в том числе из России криптой. Как оплачивать - в конце статьи.
Эта платформа разработана для упрощения интеграции различных моделей искусственного интеллекта в приложения и проекты. Основная цель OpenRouter — предоставить централизованный доступ к множеству языковых моделей от различных поставщиков, таких как OpenAI, Anthropic, Google и других. Это позволяет легко переключаться между моделями, сравнивать их возможности и выбирать оптимальные решения без необходимости взаимодействия с каждым поставщиком отдельно. Такой подход значительно сокращает время и усилия, затрачиваемые на интеграцию и управление различными моделями ИИ.
Среди ключевых особенностей OpenRouter можно выделить:
Интеграция с OpenRouter через API осуществляется в несколько шагов:
Опенроутер поддерживает стандарт OpenAI - можно работать с любой размещенной у них моделью тем же кодом, которым вы подключаетесь к ChatGPT.
# код на python3
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="<OPENROUTER_API_KEY>",
)
completion = client.chat.completions.create(
extra_headers={
"HTTP-Referer": "<YOUR_SITE_URL>", # Optional. Site URL for rankings on openrouter.ai.
"X-Title": "<YOUR_SITE_NAME>", # Optional. Site title for rankings on openrouter.ai.
},
model="openai/gpt-4o",
messages=[
{
"role": "user",
"content": "What is the meaning of life?"
}
]
)
print(completion.choices[0].message.content)
А можно подключаться к произвольной доступной модели без лишних зависимостей, просто через HTTP запросы
# код на python3
# Подключение к дипсику на бесплатном токене опен роутера
import requests
import json
model = 'deepseek/deepseek-r1:free'
response = requests.post(
url="https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {KEY}",
"HTTP-Referer": "test-app", # Optional. Site URL for rankings on openrouter.ai.
"X-Title": "test-app", # Optional. Site title for rankings on openrouter.ai.
},
data=json.dumps({
"model": model,
"messages": [
{
"role": "user",
"content": "В чем смысл жизни, вселенной и всего?"
}
],
"max_tokens": 2000
})
)
res = response.json()
print(json.dumps(res, ensure_ascii=False, indent=2))
И в ответ нам приходит прекрасный json с ответом модели, а для некоторых моделей и с лог-пробами - те по сути с вероятностями для каждого сгенерироанного токена в последовательности, что пригодится для различных техник анализа на галлюцинации ответа.
res:
{
"id": "gen-1739635486-tcoJYQDUjeSAxyybXMxH",
"provider": "Targon",
"model": "deepseek/deepseek-r1",
"object": "chat.completion",
"created": 1739635486,
"choices": [
{
"logprobs": {
"content": [
{
"token": "token_id:24907",
"logprob": -0.31749793887138367,
"bytes": [
208,
165
],
"top_logprobs": []
},
{
"token": "token_id:102415",
"logprob": -4.466393947601318,
"bytes": [
208,
188,
208,
188
],
"top_logprobs": []
},
<...>
<...>
<...>
{
"token": "token_id:846",
"logprob": -0.6804654002189636,
"bytes": [
32,
208,
191
],
"top_logprobs": []
}
],
"refusal": []
},
"index": 0,
"message": {
"role": "assistant",
"content": "Хмм, пользователь задает вопрос о смысле жизни, вселенной и всего. Это довольно глубокий и философский вопрос. Думаю, первое, что приходит в голову, это шутка из \"Автостопом по галактике\", где ответ был 42. Наверное, пользователь может ожидать подобного юмористического ответа. Но также возможно, что он ищет более серьезный или развернутый ответ. Нужно понять, на каком уровне дать ответ.\n\nВозможно, стоит сначала упомянуть известную отсылку к 42, чтобы показать, что понял культовый момент, а затем перейти к реальным философским подходам. Важно не быть слишком поверхностным, но и не углубляться слишком глубоко, чтобы ответ оставался доступным. Стоит рассмотреть различные аспекты: научный взгляд, религиозные версии, философские теории. Надо также помнить, что вопрос может быть риторическим или провокационным, и пользователь хочет увидеть, как ИИ справляется с такими сложными темами.\n\nНадо проверить, нет ли здесь какого-то подвоха. Может быть, пользователь просто хочет получить краткий ответ в стиле книги, а не подробное объяснение. Но в любом случае стоит быть вежливым и предложить разные точки зрения. Возможно, упомянуть экзистенциализм, нигилизм, религиозные подходы, и заключить, что ответ индивидуален. Важно подчеркнуть, что вопрос остается открытым и каждый ищет свой смысл. Нельзя давать единственно верный ответ, так как это субъективно.\n\nТакже стоит убедиться, что язык ответа не слишком сложный, поддерживать дружелюбный тон. Возможно, пользователь впервые задумался над этим вопросом и ищет направления для размышлений. Тогда перечисление школ философии может помочь ему самостоятельно исследовать тему дальше. Важно не навязывать какую-то точку зрения, а оставаться нейтральным и информативным.\nВопрос о смысле жизни, вселенной и всего сущего веками будоражит умы философов, учёных и мечтателей. Если говорить в духе юмора Дугласа Адамса и его книги «Автостопом по Галактике», то **«ответ — 42»** — загадочное число, которое оказывается одновременно абсурдным и глубоким, подчёркивая, что сама погоня за смыслом может быть важнее конечного ответа. \n\nСерьёзно же подходы разнятся: \n1️⃣ **Научный взгляд** — жизнь и вселенная возникают из законов физики, химии и биологии, а их «смысл» сводится к эволюции, выживанию и передаче генетической информации. \n2️⃣ **Философия** — от экзистенциализма («смысл создаёт сам человек») до нигилизма («объективного смысла нет»). \n3️⃣ **Религия и духовность** — поиск связи с высшей силой, выполнение предначертанной роли или достижение просветления. \n4️⃣ **Субъективный подход** — смысл определяется личными ценностями: любовь, творчество, помощь другим, познание мира. \n\nВозможно, главное здесь — не готовый ответ, а вопрос, который заставляет нас размышлять, расти и находить свой уникальный путь.",
"refusal": null
}
}
],
"usage": {
"prompt_tokens": 18,
"completion_tokens": 738,
"total_tokens": 756
}
}
Или тот же запрос, только заменена в запросе одна строчка с именем модели. И мы получаем ответ от бесплатной предоставленной dolphin3.0-r1-mistral-24b - тоже рассуждающая модель. Тут уже логпробы нам не отдали, но в общем-то не очень они и нужны в большинстве случаев.
{
"id": "gen-1739651411-yfiHktg0XFJAeJ98ghjH",
"provider": "Chutes",
"model": "cognitivecomputations/dolphin3.0-r1-mistral-24b",
"object": "chat.completion",
"created": 1739651411,
"choices": [
{
"logprobs": null,
"finish_reason": "stop",
"native_finish_reason": "stop",
"index": 0,
"message": {
"role": "assistant",
"content": "<think>\nХорошо, пользователь задал вопрос: \"В чем смысл жизни, вселенной и всего?\" Это глубокий философский вопрос, который предполагает не только ответ, но и взаимодействие. Сначала нужно понять, как подойти к такому вопросу. Возможно, стоит начать с разбора ключевых концепций: жизнь, вселенная, смысл.\n\nВ Sections 1-3 of the original answer, автор обучает, что смысл жизни индивидуален, определяется целями и ценностями. Затем в sections 4-6 говорится о космологическом смысле через существование самого космоса. В sections 7-9 рассуждается о философских и научных различиях между людьми и другими формами жизни, подчеркивая ценность сознательного существования. В concluding sections 10-12 автор призывает искать смысл в взаимодействии с окружающим миром и принятии изменений.\n\nТеперь нужно переложить это на русский язык, сохранив структуру и основные идеи, но сделав его более связным и естественным. При этом стоит учесть, что пользователь может искать не только ответ, но и утешение, возможно, переживает экзистенциальный кризис. Важно сохранить баланс между философскими рассуждениями и психологической поддержкой.\n\nНужно проверить, нет ли в оригинале неявных аспектов, которые стоит учитывать. Например, автор упоминает, что смысл может быть найден в любви, саморазвитии, поддержке других. Это важно сохранить. Также стоит обратить внимание на научно-философские различия, возможно, пользователь интересуется как научный взгляд сочетается с философским.\n\nПеревод нужно выполнить так, чтобы сохранить глубину, но сохранить естественность. Возможно, некоторые термины потребуется адаптировать. Например, \"безграничная ткань пространства-времени\" можно оставить как есть, но убедиться, что это понятно. Если нет, может, заменить на более простой аналог, но лучше оставить научные термины, если они корректно передают смысл.\n\nТакже важно сохранить вдохновляющий тон заключения, подчеркивающий, что смысл можно найти самостоятельно, через свой путь. Возможно, добавить примеры или метафоры, чтобы усилить эффект. Но оригинал не содержит их, поэтому, наверное, лучше придерживаться структуры автора.\n\nНужно проверить, нет ли в переводе ошибок или искажений. Например, в оригинале говорится о \"свободном и сознательном существовании\" — это ключевая фраза. Перевод должен точно передать это. Также важно отметить, что смысл не универсален, что каждый определяет его самостоятельно, что помогает избежать давления универсальных ответов.\n\nВ заключении стоит подчеркнуть, что ответ не конечен, а вечный поиск, что важно для пользователя, возможно, ищущего контентментализм. Например, добавить фразу о том, что это личный путь каждый выбирает свой смысл.\n\nТеперь объединить все эти мысли и перевести структурированно, сохраняя смысл и добавляя драматические паузы для лучшей восприятия. Возможно, разбить на небольшие абзацы, как в оригинале, но сделать их более плавными.\n\nПроверить, нет ли избыточных слов или повторений. Например, \"вселенной и всего\" в вопросе и ответе. Можно использовать синонимы или убрать часть для разнообразия. Но в целом, структура должна быть понятной.\n\nУбедиться, что перевод точно отражает оригинальные идеи, но в自然ном русском стиле. Например, \"каждый сам создаёт свой собственный смысл\" вместо дословного перевода, который может звучать неестественно.\n\nВозможно, пользователь ищет ответ, который даст ему силы или утешение, поэтому важно сохранить позитивный настрой даже в рассуждениях о неопределённости жизни.\n\nПосле перевода добавить завершающий раздел с призывом искать смысл в настоящем, interact with the world, что может помочь пользователю почувствовать empowerment.\n\nПроверить все цитаты и примеры на точное соответствие оригиналу. Например, \"для некоторых это служба другим\" должно быть переведено корректно.\n\nВ итоге получить структурированный, понятный и вдохновляющий ответ, который отвечает на глубокий вопрос пользователя.\n</think>\n\n**Ответ на вопрос: \"В чем смысл жизни, вселенной и всего?\"**\n\n---\n\n### 1. **Смысл жизни — этоindividualный выбор.** \nКаждый человек находит смысл не в готовых ответах, а в том, что сознательно выбирает. Будь то творчество, любовь, борьба за справедливость или просто осознанное дыхание. Это не предел, заданный внешними силами, а личный путь, который каждый прходит через действия, мысли и чувства.\n\n### 2. **Вселенная — это пространство для поиска смыслов.** \nКосмос есть бескрайняя ткань, где время и пространство связаны. Его огромность не означает, что жизнь бессмысленна. Напротив, именно в преодолении ограничений мелкого мира люди открывают глубину своего существования. Как astronaut, взглянувший на Землю из космоса, вдруг осознал ценность синего сквозного воздушного — так и мы научимся находить смысл в том, что есть — даже в провоцирающем беспокойстве мира.\n\n### 3. **Жизнь — не конечная цель, а процесс.** \nНельзя «достичь» смысла, как будто он — 관계ся с кем-то. Смысл возникает в движении: в разговоре с близким, в ошибке, от которой мягнеешь, в том, как солнце отражается в луже после дождя. Он не фиксирован, а постоянно перефокусируется через новые впечатления.\n\n---\n\n### 4. **Почему это не наука?** \nНаука изучает «что есть», а философия — «почему это есть». Например, физика объяснит, как свет скорость электромагнитных волн, но не сможет ответить, зачем человеку нужен рассвет. Здесь важны оба языка: наука дает факты, а философия — контекст для их понимания.\n\n---\n\n### 5. **Почему мы вообще задаем этот вопрос?** \nВопрос о смысле — не в биологической потребности, а в сознательной. Он возникает, когда мы осознаем, что жизнь не限чива включённым вещами, а превышает их. Это как тихий голос внутри: «Ты — не только частица allленной, но и сами自身. Динамика перемен и эмоций — твой уникальный дар».\n\n---\n\n### 6. **Путь — не цель, а процесс осознанности.** \nВсё, что мы можем предложить — не ответит на вопрос, а уведомит: смысл — в любви, в refusing бояться неизвестности, в не откладывать «с пожалением» на завтра. Также как дерево не боится гнуть под ветром, так и человек учится существовать, сгибаясь, но не ломаясь.\n\n---\n\n**P.S.** Все нашо размышления — лишь способ успокоить тревогу ума. Но позвольте заметить: даже вопрос «Зачем?» — уже ответ: ты тут, и вот этот момент — уже мир, который стоит исследовать.",
"refusal": null
}
}
],
"usage": {
"prompt_tokens": 21,
"completion_tokens": 1818,
"total_tokens": 1839
}
}
Из доступных сейчас (15.02.2025) на сервисе моделей - есть в общем-то почти все сильные и необходимые для работы модели.
Рейтинг используемых на сервисе моделей вы можете посмотреть тут https://openrouter.ai/rankings
Рис. 1. Недельный рейтинг LLM на OpenRouter
Как видно на скрине, там есть бесплатные модели. Те такие, которые их поставщик предоставляет по API через площадку OpenRouter бесплатно. Список беспланых моделей достаточно внушительный.
Но бесплатные модели работают и менее стабильно - из-за того что любители халявы активно ими пользуются, время ответа может гулять, АПИ может возвращать ошибку 500 или 429 и т.д. В целом бесплатные модели могут работать нестабильно.
Вы сами можете стать поставщиком модели на площадку OpenRouter и подключить свой АПИ сервис с моделью на площадку в качестве вендора.
Но помните, все что вы отправите в опен роутер - достанется опен роутеру, поставщику модели и в общем-то может оказаться потом в каком угодно датасете и быть использовано в любых целях. Это есть благо и это есть неизбежное зло всех подобных прокси сервисов.
Как оплачивать для использования платные модели?
Возможна оплата в крипте и для России это самый простой способ.
Вариант оплаты криптой (работает на январь 2025)
Для зарубежных карт - тоже проблемы нет, оплата через stripe, который позволяет множество зарубежных способов оплаты, включая банковские карты.
Как работать с моделями, которые не работают с Россией, типа OpenAI.
Google Gemini, Antrhropic Claude и другие работают спокойно без прокси и ВПН. Но некоторые модели, при запросе через Российский IP все же ругаются. Т.к. опенроутер передает вендору с какого IP пришел к ним запрос, и Open AI согласно своей политике российские IP отбивает с ошибкой.
Если вы отправите запрос к моделям от OpenAI кодом как выше, то получите ошибку
{
"error": {
"message": "Provider returned error",
"code": 403,
"metadata": {
"raw": "{\"error\":{\"code\":\"unsupported_country_region_territory\",\"message\":\"Country, region, or territory not supported\",\"param\":null,\"type\":\"request_forbidden\"}}",
"provider_name": "OpenAI"
}
},
"user_id": "user_<...>"
}
Но вы можете использовать обычный прокси сервер, который арендуется примерно по 100 руб в месяц. Загуглите аренда прокси - вы найдете много предложений с оплатой Российскими картами.
И когда вы имеете прокси, то обычный запрос с прокси уже проходит спокойно.
# код на python3
proxies = {'http': 'socks5://user:pass@host:port', 'https': 'socks5://user:pass@host:port'}
model = 'openai/o3-mini-high'
# model = 'openai/chatgpt-4o-latest'
response = requests.post(
url="https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {KEY}",
"HTTP-Referer": "test-app", # Optional. Site URL for rankings on openrouter.ai.
"X-Title": "test-app", # Optional. Site title for rankings on openrouter.ai.
},
data=json.dumps({
"model": model,
"messages": [
{
"role": "user",
"content": "В чем смысл жизни, вселенной и всего?"
}
],
"max_tokens": 2000
}),
proxies=proxies
)
res = response.json()
Удачной вам работы!
Используйте лучшие модели, делайте прикольные применения ИИ.