Интеграция≈ 6 мин чтения

LangChain + NeuroAPI: ChatOpenAI и embeddings

LangChain на Python и TypeScript поверх NeuroAPI: ChatOpenAI с base_url, эмбеддинги для RAG и проверка совместимости функций модели.

Короткий ответ

Краткий ответ

LangChain с NeuroAPI: ChatOpenAI с base_url, OpenAIEmbeddings для RAG, JS/TS @langchain/openai. Примеры кода, tools, стриминг и разбор ошибок.

98

моделей в каталоге

Публичный каталог /price на 18.10.2026; часть моделей поддерживает tools, часть — нет.

/v1

базовый адрес

https://neuroapi.host/v1 — значение base_url для ChatOpenAI и OpenAIEmbeddings.

3

тарифа доступа

Пилот, Смарт и Оптимальный выбираются при создании API-ключа.

/docs

документация

Ключ, форматы и ошибки — neuroapi.host/docs (проверено 19.10.2026).

ChatOpenAI c base_url

Python-класс ChatOpenAI принимает base_url, api_key и model — этого достаточно для NeuroAPI.

Эмбеддинги отдельно

Для RAG нужна embedding-модель: в каталоге есть text-embedding-3-small и text-embedding-3-large.

JS/TS через configuration

В @langchain/openai кастомный адрес задаётся через configuration.baseURL; проверьте поле для своей версии.

Официальная спецификация

ChatOpenAI ориентирован на стандартные поля OpenAI API: нестандартные поля провайдера могут быть не видны в ответе.

Как подключить LangChain к NeuroAPI за 4 шага

  1. 1

    Создайте ключ и выберите модели

    В кабинете NeuroAPI создайте ключ и выберите тариф. В /price скопируйте ID чат-модели и embedding-модели, если планируете RAG.

  2. 2

    Установите пакеты

    Для Python установите langchain-openai и langchain; для JS/TS — @langchain/openai. Версии фиксируйте в зависимостях проекта.

  3. 3

    Настройте ChatOpenAI

    Создайте ChatOpenAI с model, base_url https://neuroapi.host/v1 и api_key. Для RAG добавьте OpenAIEmbeddings с тем же base_url и выбранной embedding-моделью.

  4. 4

    Проверьте цепочку и ошибки

    Выполните invoke и stream, при необходимости добавьте bind_tools. Проверьте коды 401, 404, 429 и сохраните usage для сверки расхода.

Шаги и их текст совпадают с HowTo-разметкой. Параметры ChatOpenAI и OpenAIEmbeddings сверены с документацией langchain-openai 19.10.2026; в JS-пакете названия полей зависят от версии.

Подготовка: ключ, модели и пакеты

LangChain — фреймворк для приложений на LLM: цепочки, агенты, RAG и инструменты. Интеграция с NeuroAPI идёт через пакет langchain-openai, который использует официальный OpenAI SDK, поэтому достаточно заменить base_url и ключ. Сначала создайте ключ в кабинете NeuroAPI и выберите тариф, затем выпишите ID чат-модели и embedding-модели из /price.

Установите пакет langchain-openai (и langchain, если строите цепочки). Для RAG понадобится embedding-модель: в каталоге на 19.10.2026 доступны text-embedding-3-small и text-embedding-3-large — точный список и цены проверяйте в /price и /docs/embeddings.

  • pip install langchain-openai langchain
  • Ключ NeuroAPI — в переменной окружения.
  • ID чат-модели и embedding-модели — из каталога.
  • Для RAG документы и запросы кодируются одной embedding-моделью.

ChatOpenAI: чат, стриминг и инструменты

Базовый вызов выглядит так: ChatOpenAI(model=<ID>, base_url="https://neuroapi.host/v1", api_key=<ключ>), затем model.invoke(messages) или model.stream(...) для потокового ответа. Поля base_url и api_key относятся к клиенту OpenAI SDK, поэтому работают так же, как с официальным API, но с другим адресом.

Инструменты подключаются через bind_tools, но их реальная поддержка зависит от модели: если модель не умеет function calling, вызов инструментов не сработает. Структурированный вывод тоже зависит от модели. Проверяйте флаги в карточке модели и тестируйте на простом примере до того, как строить сложного агента.

  • ChatOpenAI(model=..., base_url=..., api_key=...).
  • model.invoke() — обычный вызов, model.stream() — стриминг.
  • bind_tools работает только с моделями, поддерживающими tools.
  • Структурированный вывод зависит от возможностей модели.

OpenAIEmbeddings и RAG

Для эмбеддингов используется OpenAIEmbeddings с параметрами base_url, api_key и model. Модель указывается та же, что и для индексации: документы и поисковые запросы должны кодироваться одной моделью и с одной размерностью, иначе близость векторов теряет смысл.

При смене embedding-модели индекс приходится перестраивать: старые векторы несопоставимы с новыми. Стоимость эмбеддингов зависит от объёма текста, поэтому большие корпуса стоит индексировать партиями и проверять размерность на небольшом наборе до полной загрузки.

  • OpenAIEmbeddings(model=..., base_url=..., api_key=...).
  • Одна модель для документов и запросов.
  • Смена модели — повод переиндексировать корпус.
  • Проверяйте размерность векторов до полной индексации.

JS/TS: @langchain/openai

В JavaScript и TypeScript используется пакет @langchain/openai. Класс ChatOpenAI принимает model и apiKey, а кастомный адрес задаётся через объект configuration с полем baseURL. Названия полей в разных версиях пакета могут отличаться, поэтому сверяйте их с документацией установленной версии.

Если приложение на JS использует стриминг, проверьте, что выбранная модель поддерживает потоковый режим, а обработчик корректно завершает поток. Для embeddings в JS используется OpenAIEmbeddings из того же пакета с теми же параметрами адреса и ключа.

  • npm install @langchain/openai
  • model: ID из каталога, apiKey: ключ NeuroAPI.
  • configuration.baseURL — кастомный адрес API.
  • Проверяйте стриминг и завершение потока отдельно.

Ошибки, совместимость и стоимость

Типовые коды: 401 — неверный ключ, 404 — опечатка в ID модели или адресе, 429 — превышение лимитов. Для 429 и 5xx допустимы повторы с задержкой; для 401 и 404 повтор не поможет. Логируйте usage из ответов, чтобы сверять расход с балансом.

Документация langchain-openai предупреждает: ChatOpenAI ориентирован на официальную спецификацию OpenAI, и нестандартные поля ответа могут быть недоступны. Это важно для провайдеров с расширениями: держитесь стандартных полей чата и не полагайтесь на недокументированные свойства. Баланс NeuroAPI предоплаченный, тариф выбирается на уровне ключа.

Для нескольких разработчиков разумно завести отдельные ключи NeuroAPI: расход по проектам будет виден отдельно, а инцидент с одним ключом не заблокирует остальных. base_url при этом остаётся общим, поэтому переключение окружений сводится к смене ключа.

Зафиксируйте в проекте список допустимых моделей и требования к совместимости: tools, стриминг и структурированный вывод зависят от модели. Это избавит от ситуации, когда код проверен на одной модели, а на другой не работает агентный сценарий или инструменты. Для CI полезно завести отдельный ключ с ограниченным бюджетом: тесты не должны упираться в общий баланс разработки. Держите базовый набор smoke-тестов на одной модели, чтобы быстрые проверки не зависели от доступности всего каталога. Отдельно фиксируйте, какие функции модели проверяет каждый тест: вызов инструментов, стриминг, структурированный вывод.

  • 401 — ключ, 404 — ID модели, 429 — лимиты.
  • Повторы — только для 429 и 5xx.
  • Сохраняйте usage для сверки расходов.
  • Опирайтесь на стандартные поля OpenAI-совместимого ответа.
  • Отдельные ключи для окружений и проектов.
  • Список допустимых моделей — в документации проекта.
  • Проверяйте tools и стриминг на каждой модели.
  • Логируйте usage, не сохраняя чувствительный текст.

Мини-скелет RAG на LangChain

Для RAG понадобятся загрузчик документов, сплиттер и векторное хранилище. Документы разбиваются на фрагменты, кодируются OpenAIEmbeddings и сохраняются в хранилище; при вопросе кодируется запрос, находятся ближайшие фрагменты и передаются в ChatOpenAI вместе с вопросом.

Начните с небольшого набора документов и проверьте релевантность поиска до того, как добавлять сложные цепочки и агентов. Размер фрагмента и их число влияют и на качество ответа, и на объём контекста, а значит, и на стоимость запроса к модели.

  • Загрузчик → сплиттер → эмбеддинги → хранилище.
  • Одна embedding-модель для документов и запросов.
  • Сначала проверьте поиск, потом усложняйте цепочку.
  • Контролируйте число фрагментов в контексте.

Python: ChatOpenAI и OpenAIEmbeddings

python
import os

from langchain_openai import ChatOpenAI, OpenAIEmbeddings

chat = ChatOpenAI(
    model="<MODEL_ID_ИЗ_PRICE>",
    base_url="https://neuroapi.host/v1",
    api_key=os.environ["NEUROAPI_API_KEY"],
)

print(chat.invoke("Объясни, что такое RAG, в двух предложениях.").content)

embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small",
    base_url="https://neuroapi.host/v1",
    api_key=os.environ["NEUROAPI_API_KEY"],
)

print(len(embeddings.embed_query("проверка размерности")))

JS/TS: @langchain/openai

typescript
import { ChatOpenAI } from "@langchain/openai";

const model = new ChatOpenAI({
  model: "<MODEL_ID_ИЗ_PRICE>",
  apiKey: process.env.NEUROAPI_API_KEY,
  configuration: { baseURL: "https://neuroapi.host/v1" },
});

const response = await model.invoke("Привет!");
console.log(response.content);

Соберите первую цепочку на NeuroAPI

Ключ NeuroAPI работает с OpenAI-совместимым base_url, а каталог моделей показывает цены в рублях. Начните с одного вызова ChatOpenAI, затем добавьте эмбеддинги и RAG.

Каталог проверен 18.10.2026; параметры интеграции — по документации langchain-openai на 19.10.2026.