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

ГлавнаяРуководство

API-ключ AnythingLLM: подключение кастомного эндпоинта OpenAI

Чтобы использовать API-ключ AnythingLLM с кастомным эндпоинтом, выберите провайдера Generic OpenAI и введите базовый URL, ключ и идентификатор модели. Шаги и тесты приведены ниже.

Какой именно API-ключ вы имеете в виду

Пользователи, которые ищут anything llm api key, обычно имеют в виду одно из двух, и эти два понятия легко перепутать. Первое — это ключ, который AnythingLLM отправляет провайдеру модели для генерации ответов. Второе — это API-ключ разработчика, который создает само AnythingLLM, чтобы другие программы могли обращаться к API AnythingLLM. Это разные ключи с разными задачами.

Эта статья о первом варианте: предоставление AnythingLLM API-ключа и эндпоинта для OpenAI-совместимого чат-API. Вы возьмёте ключ на странице API-ключ, вставите его в AnythingLLM вместе с базовым URL https://api.llmapisource.com/v1 и укажете идентификатор модели uncensored. Если же вам нужно вызывать AnythingLLM из собственного кода, сгенерируйте ключ в настройках AnythingLLM; он не связан с ключом этого провайдера.

Перед началом: протестируйте ключ вне AnythingLLM

Половина вопросов в поддержку по поводу кастомных эндпоинтов оказывается вызванной неверным ключом или опечаткой в URL. Тест за тридцать секунд с помощью curl позволяет разделить «эндпоинт неверен» и «приложение настроено неверно». Сначала выведите список моделей:

curl https://api.llmapisource.com/v1/models \
  -H "Authorization: Bearer YOUR_KEY" | grep uncensored

Вы должны увидеть строку, содержащую uncensored. Затем отправьте один чат-запрос:

curl https://api.llmapisource.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "Reply with the word ready."}],
    "max_tokens": 20
  }'

Если оба вызова работают, ключ и URL верны, и любая последующая ошибка связана с настройками приложения. Если у вас еще нет ключа, зарегистрируйтесь через Google или по электронной почте и паролю. Новые пользователи могут одним кликом на странице ключей получить $0,50 пробного кредита, для которого не нужна карта и который действителен в течение 7 дней. Этого хватит, чтобы завершить всю настройку и протестировать её.

Настройка в AnythingLLM

AnythingLLM поддерживает несколько LLM-провайдеров, и один из них — универсальный вариант OpenAI-совместимого провайдера. Названия в меню могут меняться в разных версиях, поэтому воспринимайте приведенные ниже названия как руководство, а не как точный сценарий.

  1. Откройте настройки AnythingLLM и найдите параметр LLM (иногда он помечен как поставщик LLM).
  2. Выберите Generic OpenAI из списка провайдеров.
  3. Установите Base URL в значение https://api.llmapisource.com/v1. Включите /v1 и не добавляйте в конец /chat/completions; приложение добавит этот путь самостоятельно.
  4. Вставьте свой ключ в поле API Key. Приложение отправляет его как Authorization: Bearer, что соответствует ожиданиям этого API.
  5. Установите Chat Model Name в значение uncensored.
  6. Установите Token context window равным 100000. Окно модели составляет 100 000 токенов (промпт плюс генерация), и низкое значение здесь заставит AnythingLLM обрезать вашу историю раньше, чем это необходимо.
  7. Оставьте поле max tokens пустым или установите предел, который вас устраивает. На стороне API это необязательный параметр.
  8. Сохраните настройки, откройте рабочее пространство и отправьте сообщение.

Если в рабочем пространстве есть собственные настройки чата, убедитесь, что используется провайдер по умолчанию, а не старое переопределение. Фиксация рабочего пространства за предыдущим провайдером — частая причина, при которой изменения кажутся неэффективными.

Эмбеддинги и документы требуют отдельного компонента

AnythingLLM выполняет две функции. Оно общается с моделью и индексирует ваши документы, чтобы модель могла отвечать на их основе. Вторая функция использует модель эмбеддингов, а этот API не предоставляет эмбеддинги. Он предоставляет POST /v1/chat/completions и GET /v1/models, с текстом на входе и текстом на выходе.

Это не мешает вам. AnythingLLM позволяет выбрать эмбеддер отдельно от чат-модели, и он может использовать встроенный локальный эмбеддер или другого провайдера, которого вы настроите. Установите эмбеддер в значение, отличное от этого эндпоинта, и используйте этот эндпоинт только для чат-модели. То же самое относится к функциям изображений или аудио: модель работает только с текстом, без генерации изображений, аудио или видео и без тонкой настройки.

При общении с документами извлеченные фрагменты вставляются в промпт, поэтому количество входных токенов растет. При стоимости $0,15 за 1 млн входных токенов промпт из 6 000 токенов с 500 токенами вывода стоит 6 000 x $0,15 / 1 000 000 = $0,0009 за входные данные плюс 500 x $0,50 / 1 000 000 = $0,00025 за вывод, или $0,00115 за вопрос. Рабочие пространства с большим объемом документов обходятся дороже, чем обычный чат, но все еще составляют долю цента за вопрос.

Проверка потоковой передачи, инструментов и JSON-режима

AnythingLLM потоково передаёт ответы, а API поддерживает потоковые события сервера с параметром stream: true, завершаясь блоком использования. Если ваши ответы появляются сразу целиком, а не по токену, проблема обычно заключается в прокси-сервере перед приложением, который буферизует ответы, а не в эндпоинте. Вы можете проверить потоковую передачу из скрипта с помощью Python SDK от OpenAI:

from openai import OpenAI

client = OpenAI(
    base_url="https://api.llmapisource.com/v1",
    api_key="YOUR_KEY",
)

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "List three uses of a local knowledge base."}],
    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("\ntokens:", chunk.usage.prompt_tokens, chunk.usage.completion_tokens)

Вызов функций и JSON-режим работают через тот же чат-эндпоинт, что важно, если вы создаете агентов или потоки вокруг приложения. JSON-режим — это одно поле:

curl https://api.llmapisource.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "response_format": {"type": "json_object"},
    "messages": [
      {"role": "system", "content": "Return a JSON object with keys title and summary."},
      {"role": "user", "content": "Summarize: a notes app that works offline."}
    ]
  }'

Инструменты используют обычные поля tools и tool_choice, а результаты возвращаются как сообщения role: "tool". Доступность конкретной функции агента в AnythingLLM зависит от версии приложения, поэтому сначала протестируйте вызов в скрипте, а затем попробуйте функцию в приложении. В документации приведен полный пример вызова инструментов.

Исправление распространенных ошибок

СимптомВероятная причинаИсправление
Ошибка 401 или ошибка аутентификацииКлюч скопирован с пробелом или это старый ключСнова скопируйте ключ со страницы ключей и вставьте его без пробелов
404 или «не найдено»Отсутствует базовый URL с /v1 или в конце добавлен /chat/completionsИспользуйте ровно https://api.llmapisource.com/v1
Модель не найденаИмя модели введено иначеИспользуйте uncensored, строчными буквами, ничего лишнего
429 с rate_limitedБолее 300 запросов в минуту (60 на пробном ключе)Замедлите темп или уменьшите агрессивность пакетной обработки
429 с concurrencyБольше 8 запросов одновременно (2 на пробном ключе)Уменьшите количество параллельных рабочих пространств или агентов; потоковая передача удерживает свой слот до завершения
429 с заголовком Retry-After: 5Временная перегрузкаПодождите 5 секунд и повторите попытку
Ответы обрываются раноНизкий лимит максимального количества токенов в приложенииУвеличьте его или очистите

Заголовок X-Request-Id в каждом ответе поможет, если вы свяжетесь со поддержкой по поводу конкретного вызова. Баланс в заголовке X-Balance-USD также быстро подскажет, является ли сбой просто следствием пустого счета.

Получение более точных ответов из рабочего пространства

После того как соединение установлено, несколько привычек рабочего пространства дают заметный эффект. Напишите системный промпт для рабочего пространства, который указывает роль, тон и то, что делать, если в документах нет ответа. Без этой последней инструкции модель часто будет догадываться, а уверенная догадка хуже, чем простое «Я не смог найти это в документах».

Температура — другой рычаг. Для ответов на вопросы по вашим файлам низкое значение, например от 0,2 до 0,4, держит ответы ближе к извлеченному тексту. Для мозгового штурма или черновиков повысьте его до 0,8. API передает temperature, top_p, stop, seed и штрафы без изменений, поэтому то, что отправляет приложение, достигает модели в неизменном виде.

Следите за тем, сколько фрагментов рабочее пространство прикрепляет к каждому вопросу. Каждый дополнительный фрагмент — это больше входных токенов, и при окне в 100 000 токенов у вас есть место, но вы также платите за каждый из них на каждом шаге. Начните с малого количества фрагментов и увеличивайте его только тогда, когда ответы упускают релевантный материал.

Примечания о конфиденциальности и стоимости

Промпты, отправленные через API, не используются для обучения. Ваши документы всё равно передаются на эндпоинт внутри промптов, когда AnythingLLM извлекает фрагменты, поэтому решите, с какими рабочими пространствами вы готовы отправлять данные. Для материалов, которые никогда не должны покидать ваш компьютер, используйте локальную модель.

Оплата производится по факту использования из предоплаченного баланса: $0,15 за 1 млн входных токенов и $0,50 за 1 млн выходных токенов, пополнение от $20 до $500, с бонусами 5% от $50, 10% от $100 и 15% от $200. Баланс не сгорает, а неудачные или отклонённые запросы не оплачиваются. На странице с ценами указаны способы оплаты.

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

Какой вариант провайдера выбрать в AnythingLLM?

Выберите Generic OpenAI. Введите https://api.llmapisource.com/v1 как базовый URL, ваш ключ как API-ключ, а uncensored — как имя модели чата.

Какое контекстное окно токенов нужно ввести?

Используйте 100000, что соответствует контекстному окну модели на 100 000 токенов для промпта и генерации.

Могу ли я использовать этот эндпоинт для эмбеддингов в AnythingLLM?

Нет. API предоставляет только генерацию ответов в чате и список моделей. Выберите другой генератор эмбеддингов в AnythingLLM и используйте этот эндпоинт для модели чата.

Является ли API-ключ разработчика AnythingLLM тем же самым?

Нет. Этот ключ создаётся внутри AnythingLLM, чтобы другие программы могли вызывать приложение. Ключ от этого сервиса — это то, что AnythingLLM отправляет на эндпоинт чата.

Изометрическая сцена: блок приложения, соединённый с сервером светящимся кабелем и ключом, демонстрирующий подключение API-ключа