Настройка инструментов

Используйте 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-•••
  1. 01Установите пакет интеграции: pip install -U langchain-anthropic. Поддержку Anthropic LangChain поставляет именно там, а не в langchain-core.
  2. 02Сгенерируйте ключ в дашборде apiToken.sale — он начинается с sk-pool- и работает с поддерживаемыми моделями Claude, GPT, Gemini и Kimi.
  3. 03Экспортируйте ANTHROPIC_API_URL и ANTHROPIC_API_KEY, как показано выше (или положите их в .env-файл, который подхватывает ваш раннер).
  4. 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 на баланс платформы.