RU ▾
Получить API-ключ

GetAiApiKeyЧек-лист API искусственного интеллекта для продакшена

Как установить LLM в Python: локально или через API

Вы можете запустить модель на своей машине или установить один небольшой Python-пакет и вызвать хостинговую модель по HTTP. На этой странице описаны оба варианта, затем мы пошагово разберём путь через API.

Обновлено

Иллюстрация кабеля, соединяющего скрипт Python с светящимся кубом модели в облаке, демонстрирующая подключение по API

Ключевые моменты

  1. Локальная установка требует весов модели и достаточного объёма памяти; через API нужен только пакет openai и ключ.
  2. Установите базовый URL в https://api.getaiapikey.com/v1, а модель — в uncensored.
  3. Потоковая передача, вызов функций и JSON-режим работают через стандартный клиент OpenAI.
  4. Обрабатывайте HTTP 429 короткой повторной попыткой и держите параллельные вызовы на уровне 8 или ниже.

Два способа установки LLM

Когда люди спрашивают, как установить llm в python, они обычно имеют в виду одно из двух. Первое — запуск модели локально: скачивание весов и их загрузка с помощью библиотеки на вашем собственном CPU или GPU. Второе — установка клиентской библиотеки, чтобы ваш Python-код мог общаться с моделью, которая работает где-то в другом месте. Оба варианта допустимы, и правильный зависит от вашего оборудования и того, что вы хотите построить.

Путь через API гораздо короче. Вы запускаете pip install openai, указываете клиенту базовый URL и вызываете модель. Никаких весов, никаких драйверов GPU, никакого планирования памяти. В остальной части этой страницы приведены шаги и код для этого пути, с кратким разделом о локальной установке, чтобы вы могли сравнить.

Локальная установка или хостинг API: как выбрать

ВопросЛокальная установкаХостинговое API
Что вы устанавливаетеБиблиотека для инференса плюс веса моделиПакет openai
ОборудованиеПамять и обычно GPU, подходящий для моделиЛюбая машина, способная выполнять HTTPS-вызовы
СтоимостьВаше оборудование и электричествоЗа токен, из предоплаченного баланса
Работает автономноДаНет
Время до первого ответаСкачивание, настройка, тонкая настройкаНесколько минут

Локальная установка имеет смысл, если вы должны хранить всё на одной машине, работать офлайн или хотите экспериментировать с самими весами. Библиотеки вроде llama.cpp или Hugging Face transformers являются обычными отправными точками; проверьте их документацию по требованиям к оборудованию, так как они зависят от выбранного размера модели.

API имеет смысл, если вам нужен рабочий результат быстро, ноутбук не может удержать большую модель или вашему приложению нужно обслуживать множество пользователей. Вы платите за каждый токен, а не покупаете оборудование. За эту услугу тариф составляет $0,15 за 1M входных токенов и $0,50 за 1M выходных токенов, без подписки. На странице цен указаны подробности.

Шаг 1: создайте виртуальное окружение и установите пакет

Используйте виртуальное окружение, чтобы установка оставалась чистой. Любая недавняя версия Python 3 работает с пакетом openai.

python3 -m venv .venv
source .venv/bin/activate
pip install openai

Далее нужен ключ. Зарегистрируйтесь на странице API-ключей через Google или по email и паролю. Новые пользователи могут получить $0,50 пробного баланса в один клик на 7 дней без привязки карты. Сохраните ключ в переменную окружения, а не в файл с исходным кодом:

export API_KEY="paste-your-key-here"

Шаг 2: сделайте свой первый вызов

Сервис совместим с OpenAI, поэтому единственные изменения по сравнению со стандартным скриптом OpenAI — это базовый URL и идентификатор модели. Идентификатор модели — uncensored.

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.getaiapikey.com/v1",
    api_key=os.environ["API_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain what a context window is in two sentences."},
    ],
    temperature=0.7,
    max_tokens=200,
)

print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

Если это выводит ответ и два подсчёта токенов, установка завершена. Чтобы проверить, работает ли ваш ключ, и увидеть идентификатор модели, вы также можете вызвать GET /v1/models:

for m in client.models.list():
    print(m.id)

Тот же запрос из оболочки без Python — это один вызов curl к https://api.getaiapikey.com/v1/chat/completions с заголовком Authorization: Bearer и вашим ключом. Начало работы в документации показывает это полностью.

Шаг 3: потоковая передача токенов по мере их поступления

Ожидание завершения длинного ответа перед выводом чего-либо кажется медленным. Установите stream=True, и сервер отправляет токены через серверные события (SSE). Вы можете запросить сводку об использовании в последнем чанке с помощью stream_options.

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a short scene set in a lighthouse."}],
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage.total_tokens, "tokens")

Одна деталь важна для продакшена: потоковый запрос удерживает слот параллельных вызовов до конца потока. Полный ключ позволяет 8 параллельных запросов, поэтому если ваше приложение открывает много длинных потоков, закрывайте их, когда пользователь отключается.

Шаг 4: JSON-режим и вызов функций

Для структурированного вывода установите response_format в JSON-объект. Также укажите модели в промпте, чтобы она отвечала в JSON, так как настройка гарантирует корректный синтаксис JSON, но не имена полей, которые вы хотите.

import json

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Reply only with JSON: {\"title\": string, \"tags\": [string]}"},
        {"role": "user", "content": "Give me a title and tags for a post about slow travel."},
    ],
    response_format={"type": "json_object"},
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])

Вызов функций следует стандартному шаблону. Вы описываете функцию, модель может попросить её вызвать, вы запускаете её самостоятельно и отправляете результат обратно с role: "tool".

tools = [{
    "type": "function",
    "function": {
        "name": "get_time",
        "description": "Return the current time for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

messages = [{"role": "user", "content": "What time is it in Lisbon?"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)

msg = first.choices[0].message
if msg.tool_calls:
    call = msg.tool_calls[0]
    messages.append(msg)
    messages.append({
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps({"time": "14:05"}),
    })
    final = client.chat.completions.create(
        model="uncensored", messages=messages, tools=tools
    )
    print(final.choices[0].message.content)

Протестируйте вызовы функций на нескольких промптах, прежде чем полагаться на них. Любая модель может выбрать неверную функцию или плохо заполнить аргумент, поэтому проверяйте аргументы в своём коде перед запуском чего-либо с побочными эффектами.

Шаг 5: обработка лимитов и ошибок

Полные ключи позволяют 8 параллельных запросов и 300 запросов в минуту. Пробные ключи позволяют 2 и 60. Превысив эти лимиты, вы получите HTTP 429. Код ошибки rate_limited означает слишком много запросов в минуту, а concurrency — слишком много одновременно. При временной перегрузке API также возвращает 429 с заголовком Retry-After: 5.

Клиент OpenAI для Python самостоятельно повторяет попытки при некоторых сбоях, но явная обёртка сохраняет поведение очевидным:

import time
from openai import RateLimitError

def ask(messages, tries=4):
    for attempt in range(tries):
        try:
            return client.chat.completions.create(model="uncensored", messages=messages)
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited after retries")

Каждый ответ содержит X-Request-Id, X-Balance-USD и заголовки лимитов, которые вы можете логировать. Включите идентификатор запроса, если свяжетесь с поддержкой. Неудачные или отклонённые запросы не оплачиваются, поэтому повторные попытки не стоят дополнительных денег.

Также учитывайте ограничения по размеру. Контекстное окно составляет 100 000 токенов, промпт плюс завершение, а максимальный размер тела запроса — 8 МБ. Длинные истории чатов следует обрезать или сокращать до краткого пересказа, прежде чем они достигнут этих значений.

Когда вызов не работает

Большинство проблем при первом запуске возникают из-за нескольких ошибок. Проверьте их по порядку, прежде чем подозревать что-то ещё.

  • Базовый URL без пути версии. Значение должно заканчиваться на /v1. Клиент добавляет к нему /chat/completions, поэтому отсутствие /v1 отправит запрос не по тому маршруту.
  • Неверный или отсутствующий ключ. Ключ идёт в заголовок Authorization: Bearer, который клиент строит из api_key. Если переменная окружения пуста, клиент либо выдаст ошибку при запуске, либо отправит пустой ключ. Выведите bool(os.environ.get("API_KEY")), чтобы проверить.
  • Имя модели из другого сервиса. Единственный идентификатор модели здесь — uncensored. Имена, как в других руководствах, не совпадут.
  • Нет баланса. Посмотрите на заголовок X-Balance-USD. Пробному балансу, истёкшему после 7 дней, или потраченному балансу нужно пополнение от $20.
  • Старый пакет. Если пример использует OpenAI( и Python говорит, что не может импортировать это имя, у вас пакет до версии 1.0. Запустите pip install --upgrade openai.

Чтобы увидеть сырой ответ, включая заголовки, используйте обёртку raw-response клиента:

raw = client.chat.completions.with_raw_response.create(
    model="uncensored",
    messages=[{"role": "user", "content": "ping"}],
    max_tokens=5,
)
print(raw.headers.get("x-request-id"), raw.headers.get("x-balance-usd"))
completion = raw.parse()
print(completion.choices[0].message.content)

Это выводит идентификатор запроса и ваш оставшийся баланс рядом с ответом, что является быстрой проверкой работоспособности, которую можно запустить из cron-задачи или скрипта запуска.

Использование из других инструментов

Поскольку эндпоинт следует формату OpenAI, другие библиотеки Python могут использовать его с теми же двумя настройками. Фреймворки, принимающие пользовательский базовый URL OpenAI, нуждаются только в base_url и api_key. Для Node официальный пакет openai принимает те же поля:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.getaiapikey.com/v1",
  apiKey: process.env.API_KEY,
});

const r = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Say hello in five words." }],
});
console.log(r.choices[0].message.content);

Это сервис только для текста: нет генерации изображений или аудио, нет эмбеддингов и нет тонкой настройки. Если вашему проекту это нужно, подключите к этому API другой инструмент для этой части. Модель — это модель с открытыми весами от независимого провайдера, настроенная на ответы без отказов по контенту для законного использования взрослыми. Сексуальный контент с участием несовершеннолетних всегда запрещён.

Вопросы и ответы

Нужен ли вам GPU, чтобы использовать LLM в Python таким образом?

Нет. Модель работает на стороне провайдера. Вашей машине нужен только Python и подключение к интернету для вызова эндпоинта.

Какой пакет установить?

Установите официальный пакет openai через pip. Затем укажите базовый URL https://api.getaiapikey.com/v1 и модель uncensored.

Есть ли бесплатный способ попробовать?

Новые пользователи могут одним кликом получить $0,50 пробного баланса после регистрации. Он действует 7 дней, не требует привязки карты и доступен один раз на человека.

Сколько стоит запрос?

Запрос с 2 000 входными токенами и 500 выходными токенами стоит $0,00055 по тарифу $0,15 и $0,50 за 1 млн токенов. Вы платите только за успешные запросы.

Поддерживает ли он потоковую передачу и вызов функций?

Да. Потоковая передача через SSE, вызов функций и JSON-режим работают через стандартный клиент OpenAI.

Ваш ключ — всего в одной форме отсюда

Создайте аккаунт, скопируйте ключ, измените базовый URL. Это вся настройка.