LangSmith — зачем и как используете?

Краткий тезис

LangSmith — это облачная платформа для отладки, тестирования и мониторинга LLM-приложений, разработанная той же командой, что и LangChain. Она обеспечивает сквозную наблюдаемость (observability) цепочек вызовов, позволяет создавать датасеты для регрессионного тестирования, проводить A/B-сравнение промптов и моделей, а также отслеживать метрики в production (латентность, потребление токенов, ошибки). Для инженеров, работающих с агентами, LangSmith — незаменимый инструмент, так как визуализация каждого шага (мышление, вызов инструмента, ответ) многократно ускоряет дебаг и оптимизацию.


1. Что такое LangSmith?

LangSmith — это платформа, входящая в экосистему LangChain, но совместимая и с другими фреймворками (LlamaIndex, DSPy, собственные реализации). Она решает три ключевые задачи:

  • Отладка (debugging)трейсинг каждого шага цепочки или действия агента.
  • Тестирование (testing) – создание датасетов, запуск регрессионных тестов, оценка качества.
  • Мониторинг (monitoring) – наблюдение за работой приложения в реальном времени, сбор метрик.

Платформа предоставляет веб-интерфейс, API и SDK для интеграции. Основной принцип – запись всех вызовов LLM, ретриверов, инструментов и объединение их в трейсы (traces) с возможностью фильтрации, поиска и сравнения.

2. Ключевые термины

  • Трейс (trace) — полный путь выполнения одного запроса: от входа до ответа. Содержит спаны (spans) для каждого шага.
  • Спан (span) — отдельный этап (например, LLM-вызов, поиск в векторной БД, вызов внешнего API).
  • Датасет (dataset) — набор пар «вход → ожидаемый выход» для регрессионного тестирования.
  • Эксперимент (experiment) — запуск тестового прогона на датасете с записью результатов и метрик.
  • Промпт (prompt) — шаблон, версионируемый в LangSmith для A/B-тестирования.
  • Feedback (обратная связь) — метрики, которые можно прикрепить к трейсу (оценка от пользователя, LLM-as-judge, кастомная функция).
  • Монитор (monitor) — панель с агрегированными метриками по production-трафику.

3. Трейсинг (Tracing) — зачем и как

Зачем:

  • Визуализация цепочки – вы видите не только итоговый ответ, но и каждый вызов LLM, каждый шаг агента (какое действие выбрал, какой инструмент использовал, какой промежуточный ответ получил).
  • Поиск узких мест – можно увидеть, какой шаг занимает больше всего времени или потребляет много токенов.
  • Дебаг ошибок – если агент ушёл в бесконечный цикл или вернул мусор, вы видите точную траекторию.

Как подключить (пример на Python с LangChain):

import os
from langchain_community.callbacks import LangSmithTracer
from langchain.agents import create_react_agent, AgentExecutor
from langchain_openai import ChatOpenAI

os.environ["LANGCHAIN_TRACING_V2"] = "true"  # включает трейсинг
os.environ["LANGCHAIN_API_KEY"] = "ls_..."
os.environ["LANGCHAIN_PROJECT"] = "my_agent_project"

llm = ChatOpenAI(temperature=0)
agent = create_react_agent(llm, tools=[...], prompt=...)
agent_executor = AgentExecutor(agent=agent, tools=[...])

# Всё, каждый вызов автоматически записывается в LangSmith
agent_executor.invoke({"input": "какая погода в Москве?"})

После запуска в веб-интерфейсе появится трейс с драконовским деревом этапов.

4. Датасеты и регрессионное тестирование

Датасеты в LangSmith позволяют зафиксировать «золотые» ответы (или ожидаемые результаты) для набора запросов. Затем можно запускать регрессионные тесты, чтобы удостовериться, что изменения (новый промпт, другая модель, другой чанкинг) не ухудшили качество.

Как создать датасет (через UI или API):

from langsmith import Client

client = Client()
dataset = client.create_dataset(
    dataset_name="my_rag_questions",
    description="Тестовые вопросы для RAG-системы"
)
client.create_examples(
    inputs=[{"question": "Столица Франции?"}],
    outputs=[{"answer": "Париж"}],
    dataset_id=dataset.id
)

После этого можно запустить эксперимент: приложение прогоняется по всем примерам, и результаты сравниваются с ожидаемыми. Система покажет таблицу совпадений, метрики (accuracy, exact match, или кастомные).

5. Мониторинг в production

Для production-нагрузки LangSmith предоставляет:

  • Латентность (p50, p95, p99) по всем запросам.
  • Потребление токенов (входных, выходных, суммарно).
  • Частота ошибок (вызовы LLM с ошибками, таймауты).
  • Количество запросов во времени.
  • Фильтрация по проектам, пользователям, тегам.

Настраивается через SDK или при запуске приложения. Можно также передавать фидбек от пользователей (лайки/дизлайки) и строить графики корреляции с метриками.

6. A/B тесты промптов (Prompt Playground)

LangSmith включает встроенный Playground – среду для экспериментов с промптами прямо в UI. Вы можете:

  • Загрузить существующий промпт из репозитория.
  • Изменить шаблон, добавить few-shot примеры.
  • Сравнить сразу несколько версий (например, v1 vs v2) на одном и том же входе.
  • Увидеть разницу в ответах, затратах токенов, задержке.

Для автоматизации можно использовать хуки – при пуше новой версии промпта запускается эксперимент на датасете.

7. Сравнение с альтернативами

В таблице ниже приведены основные альтернативы LangSmith:

ИнструментТипОткрытый исходникОсновные фичи
LangSmithCloud / Self-hosted✗ (закрытый)Трейсинг, датасеты, мониторинг, Playground, интеграция с LangChain/LlamaIndex
LangFuseCloud / Self-hosted✔ Open-sourceТрейсинг, датасеты, кэширование, метрики, интеграция с LangChain, Python SDK
Arize AICloud / Self-hosted✔ (Open-source SDK)Мониторинг LLM, дрифт эмбеддингов, explainability, поддержка различных фреймворков
HeliconeCloud✗ (проприетарный)Прокси-мониторинг, кэширование, алерты, поддержка любых LLM-провайдеров
Weights & Biases (WandB)Cloud✔ (клиенты)Эксперименты, трекинг LLM, датасеты, пайплайны, но нет специализированного LLM-мониторинга

Выбор зависит от требований к безопасности (self-hosted), объёму трафика, бюджету и необходимости интеграции с конкретным фреймворком.

8. Интеграция с фреймворками

LangSmith «из коробки» работает с LangChain – достаточно установить переменные окружения. Но также есть SDK для:

  • LlamaIndex – через CallbackManager.
  • DSPy – через интеграцию с трейсингом.
  • Собственные реализации – можно отправлять спаны вручную через langsmith.run_trees.

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

from langsmith import traceable
import openai

@traceable(name="my_custom_call")
def answer_question(question: str) -> str:
    response = openai.chat.completions.create(...)
    return response.choices[0].message.content

answer_question("Что такое LangSmith?")

9. Практический пример: отладка агента

Рассмотрим типичную проблему: агент на ReAct зацикливается. LangSmith позволяет увидеть последовательность вызовов:

  1. Пользователь спрашивает «Какая температура в Токио?»
  2. Агент решает вызвать search_weather с аргументом «Токио».
  3. Инструмент возвращает «10°C».
  4. Агент снова вызывает search_weather – уже с аргументом «какая температура в Токио».
  5. Повторяется до лимита шагов.

В UI вы видите 10+ одинаковых спанов, понимаете, что агент неправильно парсит результат инструмента или забывает его запомнить. Исправляете промпт – запускаете эксперимент на датасете заново.

10. Лимиты, стоимость и самодельные решения

  • LangSmith имеет бесплатный тариф (ограниченное количество трейсов и датасетов).
  • Для production-команд — платные планы (по количеству запросов или фиксированная подписка).
  • Самодельное решение: можно построить свой трейсер на базе OpenTelemetry + ELK (Elasticsearch, Logstash, Kibana) или использовать Prometheus + Grafana, но это потребует много времени на разработку и не даст готового Playground и датасетов.

11. Резюме: когда стоит использовать LangSmith

  • Вы разрабатываете агентов (ReAct, мульти-агенты) – нужна детальная визуализация шагов.
  • Вы часто меняете промпты – хотите быстро тестировать и откатываться.
  • У вас есть production-система – хотите мониторить latency и ошибки.
  • Вы используете LangChain – интеграция занимает минуты.

Если же команда маленькая и бюджет ограничен – стоит рассмотреть LangFuse (open-source) или самописные трейсы для отладки.


Пет-проект для закрепления

Задача Создать простого агента-помощника для ответов на вопросы по заданному документу (RAG + tool use). Подключить LangSmith для полной наблюдаемости.

Инструменты

Шаги:

  1. Настройте аккаунт LangSmith (бесплатный). Получите LANGCHAIN_API_KEY.
  2. Напишите скрипт, который загружает PDF (например, статью о LangSmith), разбивает на чанки через RecursiveCharacterTextSplitter, индексирует в FAISS.
  3. Создайте create_react_agent с инструментами: retrieve_docs (из FAISS) и web_search (например, DuckDuckGo).
  4. Установите переменные окружения для трейсинга (LANGCHAIN_TRACING_V2=true, LANGCHAIN_PROJECT=my_agent_demo).
  5. Запустите несколько запросов (например, «Что такое трейс в LangSmith?», «Какая сегодня погода?»).
  6. Зайдите в UI LangSmith, найдите трейсы, изучите дерево спанов.
  7. Создайте датасет «test_questions» с 5 парами (вопрос → ожидаемый ответ из документа).
  8. Запустите эксперимент на этом датасете, посмотрите, сколько ответов совпало.
  9. Измените промпт агента (например, добавьте инструкцию «всегда сначала ищи в документах»), снова запустите эксперимент – сравните метрики.

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


Связь с другими вопросами

ВопросТема
51LangChain: архитектура, компоненты, как использовать
53LangGraph: графовые состояния для агентов
54Мониторинг LLM-приложений (метрики, алерты)
55Оценка (Evaluation) LLM: метрики, тесты
50Паттерны проектирования агентов (ReAct, MRKL)

Навигация