Используйте Claude API с LangChain
Claude API работает с LangChain из коробки, и ChatAnthropic принимает кастомный URL API — ваши цепочки и агенты заработают на Claude через apiToken.sale после правки в две строки. Тот же пакет langchain-anthropic, те же ID моделей, тот же стриминг и вызов инструментов; меняются только эндпоинт и цена за токен.
·
Направьте ChatAnthropic на router.apitoken.sale
Интеграция Anthropic в LangChain принимает кастомный URL API, поэтому подключение Claude API к LangChain через apiToken.sale — это ровно два аргумента конструктора: anthropic_api_url и anthropic_api_key. Промпты, парсеры вывода, колбэки и логика ретраев в существующих цепочках остаются нетронутыми.
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(
model="claude-opus-4-8",
anthropic_api_url="https://router.apitoken.sale",
anthropic_api_key="sk-pool-•••",
)
print(llm.invoke("Hello").content)Передавайте корень роутера ровно как показано: без завершающего слэша и без суффикса /v1. Вложенный Anthropic-клиент сам добавляет /v1/messages, и удвоенный путь — самая частая причина 404 при в остальном верной настройке.
Один аргумент стоит задать явно — max_tokens. По умолчанию ChatAnthropic ограничивает ответ 1024 токенами и молча обрезает длинные ответы; увеличьте лимит для цепочек суммаризации или генерации кода. Параметры семплирования вроде temperature и top_p проходят без изменений, как и системные промпты и стоп-последовательности.
Читайте также: Направьте Anthropic SDK на apiToken.sale
Задайте один раз через переменные окружения
Если кодовую базу вы делите с теми, кто сидит на официальном эндпоинте, — или работаете в ноутбуках, где править исходники неудобно, — обойдитесь вообще без аргументов конструктора. ChatAnthropic читает оба значения из окружения, так что зачекиненный проект не требует ни одной правки кода.
export ANTHROPIC_API_URL=https://router.apitoken.sale export ANTHROPIC_API_KEY=sk-pool-•••
- 01Установите пакет интеграции: pip install -U langchain-anthropic. Поддержку Anthropic LangChain поставляет именно там, а не в langchain-core.
- 02Сгенерируйте ключ в дашборде apiToken.sale — он начинается с sk-pool- и работает с поддерживаемыми моделями Claude, GPT, Gemini и Kimi.
- 03Экспортируйте ANTHROPIC_API_URL и ANTHROPIC_API_KEY, как показано выше (или положите их в .env-файл, который подхватывает ваш раннер).
- 04Создайте ChatAnthropic(model="claude-sonnet-5") без других аргументов и выполните один invoke(), чтобы убедиться в нормальном ответе.
Явные аргументы конструктора побеждают переменные окружения, поэтому локальный оверрайд никогда не протечёт в общую конфигурацию. Подход через env также держит ключ вне истории git — обращайтесь со sk-pool-… как с любым секретом: .env не коммитим, а в CI значение приходит из хранилища секретов.
Стриминг, вызов инструментов и LangGraph остаются на месте
Шлюз отдаёт стандартный Anthropic Messages API, и LangChain общается с ним через официальный клиент. Всё, что построено на этом протоколе, — SSE-стриминг, блоки tool use, структурированный вывод — ведёт себя ровно так же, как против api.anthropic.com. Сюда входят и with_structured_output(), который LangChain реализует поверх вызова инструментов, и .astream_events() для потокенных колбэков в асинхронных приложениях.
from langchain_anthropic import ChatAnthropic
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""Return the current weather for a city."""
return f"Sunny in {city}"
llm = ChatAnthropic(model="claude-sonnet-5") # env vars supply URL and key
llm_with_tools = llm.bind_tools([get_weather])
for chunk in llm_with_tools.stream("What is the weather in Paris?"):
print(chunk.content, end="")LangGraph-агенты наследуют ту же настройку: узел графа просто вызывает чат-модель. Направьте модель на роутер один раз — и каждый агент, супервизор и субграф, построенные на ней, последуют за ней. Никакой LangGraph-специфичной конфигурации переделывать не нужно.
Учёт токенов тоже продолжает работать: каждый AIMessage по-прежнему несёт usage_metadata с количеством входных и выходных токенов, потому что шлюз возвращает стандартный объект usage от Anthropic. Трейсы LangSmith и кастомные колбэки, читающие usage_metadata, правок не требуют.
Что меняется, а что нет
Перед миграцией продакшн-приложения полезно увидеть всю дельту в одном месте. Коротко: ваш код, ваши модели и ваши возможности LangChain остаются на месте — движущихся частей только три: эндпоинт, ключ и цена за токен.
| Вопрос | Через apiToken.sale |
|---|---|
| ID моделей | Без изменений — claude-opus-4-8, claude-sonnet-5, claude-haiku-4-5 и остальной каталог |
| Протокол | Без изменений — Anthropic Messages API через официальный клиент |
| Стриминг и вызов инструментов | Без изменений — SSE-чанки и блоки tool use как обычно |
| Цепочки, агенты, LangGraph | Без изменений — правок кода, кроме URL и ключа, нет |
| Цена за токен | На 50% меньше на тех же моделях |
| API-ключ | Один ключ sk-pool-… для поддерживаемых моделей Claude, GPT, Gemini и Kimi |
| Биллинг | Предоплаченный баланс с детализацией расхода и токенов по каждому ключу в дашборде |
Посмотрите полный список поддерживаемых моделей Claude и цены →
Выберите правильную модель Claude для каждого узла
Раз смена модели — это правка одного аргумента, воспринимайте выбор модели как решение по узлам, а не глобальное. Цепочке-роутеру, которая классифицирует намерение, не нужен тот же уровень, что узлу, пишущему финальный ответ.
- claude-haiku-4-5 — быстрый и недорогой уровень: классификация, маршрутизация, извлечение и другие высокообъёмные шаги.
- claude-sonnet-5 — сбалансированный дефолт для большинства продакшн-цепочек, RAG-пайплайнов и кодовых агентов.
- claude-opus-4-8 — верхний уровень рассуждений; приберегите его для сложного анализа, длинных документов и шагов планирования агентов.
from langchain_anthropic import ChatAnthropic fast = ChatAnthropic(model="claude-haiku-4-5") # routing, extraction balanced = ChatAnthropic(model="claude-sonnet-5") # default nodes deep = ChatAnthropic(model="claude-opus-4-8") # planning, hard analysis router_chain = router_prompt | fast answer_chain = answer_prompt | balanced | StrOutputParser()
Все три экземпляра делят один URL и ключ из окружения, и каждый вызов списывается с единого предоплаченного баланса. Это делает эксперименты с уровнями дешёвыми: поменяйте строку модели, прогоните оценочный набор, оставьте победителя.
Прототипируйте на Sonnet, затем понижайте простые узлы до Haiku и повышайте до Opus только сложные. При предоплатном помтокенном биллинге смешанная цепочка стоит заметно дешевле, чем весь прогон на флагмане.
Оцените цепочку со смешанными моделями в калькуляторе стоимости →
Диагностика подключения
Меняются только эндпоинт и ключ, поэтому почти любой сбой — одна из трёх ошибок конфигурации, а не проблема LangChain. Пройдите их по порядку, прежде чем трогать код цепочек.
- 401 Unauthorized — ключ отсутствует или введён с опечаткой, либо переменная окружения не дошла до процесса. Распечатайте os.environ в том же интерпретаторе, чтобы убедиться, и помните: аргументы конструктора перекрывают env.
- 404 Not Found — в URL затесался лишний /v1 или завершающий путь. Используйте чистый корень роутера https://router.apitoken.sale.
- Model not found — сверьте ID с каталогом на /models; здесь используются те же ID, что публикует Anthropic.
Если непонятно, виноват шлюз или ваша цепочка, верните URL на официальный эндпоинт на один прогон. Одинаковое поведение означает баг в цепочке; различие сужает поиск до конфигурации.
Для временных 429 или 5xx не нужна собственная логика: ChatAnthropic по умолчанию повторяет запрос дважды с backoff'ом (настраивается через max_retries). Долгоживущим агентам всё же стоит задавать явный таймаут в секундах, а не полагаться на дефолт клиента.
Частые вопросы
Работает ли LangChain с кастомным эндпоинтом Claude API?
Да. ChatAnthropic принимает anthropic_api_url (или переменную окружения ANTHROPIC_API_URL), поэтому его можно направить на https://router.apitoken.sale и оставить всё остальное — пакет, ID моделей, код цепочек — без изменений.
Как задать базовый URL Anthropic для LangChain, не меняя код?
Экспортируйте ANTHROPIC_API_URL=https://router.apitoken.sale и ANTHROPIC_API_KEY=sk-pool-… перед запуском скрипта. ChatAnthropic подхватывает оба автоматически, поэтому общие репозитории не требуют правок вообще.
Продолжают ли работать стриминг и вызов инструментов через apiToken.sale?
Да. Шлюз отдаёт стандартный Anthropic Messages API, поэтому .stream(), bind_tools(), структурированный вывод и LangGraph-агенты ведут себя ровно как с официальным эндпоинтом.
Какие модели Claude можно вызывать из LangChain?
Все поддерживаемые модели Claude — claude-opus-4-8, claude-sonnet-5, claude-haiku-4-5 и другие — на одном ключе и предоплаченном балансе, на 50% дешевле за токен.
Можно ли использовать ChatOpenAI вместо ChatAnthropic для Claude?
Да. Роутер также предоставляет OpenAI-совместимую линию на https://router.apitoken.sale/v1, так что ChatOpenAI(base_url="https://router.apitoken.sale/v1", api_key="sk-pool-•••") достаёт те же модели Claude тем же ключом — удобно, когда фреймворк говорит только по протоколу OpenAI.
Нужен ли отдельный ключ для GPT, Gemini или Kimi в LangChain?
Нет. Тот же ключ sk-pool-… работает с поддерживаемыми моделями Claude, GPT, Gemini и Kimi, поэтому мультипровайдерное приложение на LangChain может делить один ключ и один предоплаченный баланс.
Проверьте до оплаты: новые аккаунты через Google/GitHub получают бонус $5 на баланс платформы.