Урок курса
Langsmith
LangChain 1.0.x: c нуля до продакшн LLM-приложений🔹 Что такое LangSmith?
LangSmith — полноценная DevOps‑платформа от LangChain для мониторинга и наблюдаемости LLM‑приложений. Она автоматически отслеживает все шаги выполнения ваших LangChain и LangGraph приложений.
Основные возможности LangSmith:
- Трассировка каждого шага выполнения агента
- Мониторинг производительности и затрат
- Отладка и анализ ошибок
- Оценка качества ответов
- Визуализация сложных агентных workflow
🔸 Регистрация и настройка LangSmith
Шаг 1: Регистрация
Зарегистрируйтесь на smith.langchain.com (обязательной привязки карты нет). Вы можете войти через Google или GitHub.
Шаг 2: Получение API‑ключа
Перейдите в раздел Tracing Projects → + New Project.
Шаг 3: Создание проекта
Откроется меню создания проекта. В нём нажмите Generate API Key.
В поле Configure environment вы увидите свой API‑ключ и название проекта (название можно изменить позже). Если вы используете dotenv, то эти строки нужно прописать в файле .env, как и ключ вашего LLM‑провайдера, либо использовать иной способ хранения ключей.
Шаг 4: Первое использование
После загрузки окружения Langsmith автоматически начнёт работать.
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
load_dotenv()
MODEL = os.getenv("OPENAI_MODEL", "gpt-5")
model = ChatOpenAI(model_name=MODEL)
def get_weather(city: str) -> str:
"""Показывает погоду в выбранном городе"""
return f"В {city} всегда солнечно!"
agent = create_agent(
model=model,
tools=[get_weather],
system_prompt="Ты полезный ассистент",
)
if os.getenv("LANGSMITH_TRACING") == "true":
print(f"✅ LangSmith трассировка включена")
print(f"📊 Проект: {os.getenv('LANGSMITH_PROJECT')}")
else:
print("⚠️ LangSmith трассировка отключена")
response = agent.invoke(
{"messages": [{"role": "user", "content": "Какая погода в Лос-Анджелесе?"}]}
)
print(response['messages'][-1].content)
На странице вы увидите, что ваш проект активировался и начнёте видеть трасировку сообщений.
🔸 Проекты и API‑ключи
В дальнейшем новые проекты будут создаваться автоматически, если вы будете менять переменную окружения LANGSMITH_PROJECT. Можно просто задать название в начале проекта.
import os
os.environ["LANGSMITH_PROJECT"] = "new_project_name"
Ключи можно управлять в разделе Settings → API Keys на сайте. По сути, можно создать ключ и начать его использовать, но при создании первого проекта удобнее сделать это через + New Project, скопировав все переменные за раз.
🔸 Отключение
Если захотите отключить LangSmith, замените в файле .env строку LANGSMITH_TRACING=true на false.
Или временно в коде:
import os
os.environ["LANGSMITH_TRACING"] = "false" # Отключить
os.environ["LANGSMITH_TRACING"] = "true" # Включить
💡 LangSmith предлагает бесплатный план Developer с 5000 трейсов в месяц. Этого достаточно для разработки и тестирования. Подробнее о платных тарифах и актуальные цены вы можете найти в личном кабинете Settings → Billing and usage.
🔹 Просмотр и анализ трейсов
После того как вы запустили приложение с включенной трассировкой, самое время посмотреть, что именно LangSmith записал.
🔸 Что можно отслеживать в трейсах
- Откройте https://smith.langchain.com
- Перейдите к вашему проекту (например, "my-local-model-project")
- Увидите список всех запусков (runs)
LangSmith логирует практически все аспекты работы LLM: метрики вроде задержки (latency), количество токенов, стоимость выполнения и все виды метаданных.
Основная информация в трейсе:
Общая информация
- Время выполнения (latency) – сколько времени заняло выполнение
- Количество токенов – входных и выходных
- Стоимость – если используете платный API
- Статус – успех или ошибка
- Метаданные – теги,
user_id,session_idи т.д.
Детали выполнения
- Входные данные (inputs) – что вы отправили
- Выходные данные (outputs) – что получили
- Промежуточные шаги – все узлы графа
- Иерархия вызовов – дерево выполнения
🔸 Пример детального трейса
Запустим тестовый запрос через граф, разбив его на два подзапроса через узлы: анализ и суммаризация.
import os
from typing import TypedDict
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, START, END
from langchain_core.runnables import RunnableConfig
load_dotenv()
MODEL = os.getenv("OPENAI_MODEL", "gpt-5")
model = ChatOpenAI(model_name=MODEL)
class State(TypedDict):
query: str
analysis: str
summary: str
def analyze_node(state: State) -> State:
"""Анализ запроса"""
response = model.invoke(f"Проанализируй: {state['query']}")
return {"query": state["query"], "analysis": response.content, "summary": ""}
def summarize_node(state: State) -> State:
"""Суммаризация"""
response = model.invoke(f"Кратко суммаризуй: {state['analysis']}")
return {
"query": state["query"],
"analysis": state["analysis"],
"summary": response.content
}
# Создаём граф
workflow = StateGraph(State)
workflow.add_node("analyze", analyze_node)
workflow.add_node("summarize", summarize_node)
workflow.add_edge(START, "analyze")
workflow.add_edge("analyze", "summarize")
workflow.add_edge("summarize", END)
app = workflow.compile()
# Запуск с метаданными для удобного поиска
result = app.invoke(
{"query": "Что такое квантовые вычисления?"},
config=RunnableConfig(
tags=["quantum", "research"],
metadata={
"user_id": "user_42",
"session": "morning_research",
"priority": "high"
}
)
)
print(result["summary"])
В LangSmith UI вы увидите:
- Окно проекта – в нём отображается список запросов.
- Trace – детальное отображение запроса с деревом этапов:
- Анализ
- Суммаризация
- Содержание сообщений в запросе.
Соотношение и последовательность этапов удобно отслеживать в режиме Waterfall.
Фильтрация и поиск
Веб‑интерфейс позволяет быстро фильтровать запуски по проценту ошибок, задержке, дате или даже по текстовому содержимому, используя естественный язык.
Пример добавления тегов и метаданных для последующей фильтрации:
config = RunnableConfig(
tags=["production", "user-facing", "v2"],
metadata={
"feature": "search",
"experiment": "new_prompt_v2"
}
)
Затем в UI:
- Фильтр по тегу:
production - Фильтр по ошибкам: только неудачные запуски
- Фильтр по времени: запуски > 2 секунды
- Поиск по контенту: найти все запуски, где упоминается «квантовая физика».
Отладка ошибок
Когда что-то пошло не так, LangSmith показывает, в чём ошибка. Допустим, проблема соединения, закончился баланс на счёте или другие ошибки:
🔹 Prompt Engineering в LangSmith
LangSmith — это не только логирование. Платформа предлагает так же инструменты для разработки и тестирования, такие как хранение промптов. В модуле 2 мы разбирали как хранить промпты в отдельном файле YAML, так вот langsmith предоставляет альтернативу и может быть хабом для промптов и площадкой их тестирования.
🔸 Playground
Интерактивная среда Playground позволяет редактировать входные данные, менять модель и температуру, а также настраивать другие параметры.
Что можно делать в Playground:
- Открыть любой трейс в Playground
- Кликните на трейс → кнопка Open in Playground
- Промпт и настройки автоматически загрузятся.
- Экспериментировать с промптами
- Исходный промпт:
Проанализируй: {query} - Можно попробовать:
Детально проанализируй с примерами: {query}Как эксперт, объясни простым языком: {query}Критически оцени и найди слабые места в: {query}
- Исходный промпт:
- Сравнивать модели. Теперь можно сравнивать несколько промптов и конфигураций моделей бок о бок в Playground LangSmith
- Модель A: gpt-5
- Модель B: gpt-4o
- Модель C: claude-sonnet-4.5
💡 Для тестирования моделей нужно указать API‑ключ от них. Если у вас нет подписки Anthropic, а есть только OpenAI, то сравнивать можно лишь модели от OpenAI.
🔸 Prompts
В LangSmith также возможно хранить шаблоны промптов. В песочнице вы можете сохранять и использовать их в своём проекте.
from langsmith import Client
client = Client()
prompt = client.pull_prompt("ch") # указываем имя промпта при сохранении
chain = prompt | model
result = chain.invoke({"question": "Привет"})
print(result.content) # 你好!有什么可以帮助你的吗?
💡 Аргумент
include_model=Trueу методаpull_prompt()позволяет подключить в шаблоне модель, указанную вами в Playground.
Задача 1
Какой URL использовать для доступа к UI LangSmith?
Задача 2
Сопоставьте переменную окружения и её предназначение
Сопоставьте элементы
Задача 3
Какой из следующих шагов НЕ входит в процесс регистрации и настройки LangSmith?
Задача 4
Что произойдет, если в переменной LANGSMITH_TRACING true заменить на false?
Задача 5
🔹 Задание: Подключение LangSmith
В этом задании вам нужно подключить и использовать LangSmith
🔸Техническое задание
- Зарегистрируйтесь на smith.langchain.com и создайте новый проект.
- Возьмите граф из прошлого урока и добавьте в начало файла загрузку окружения
- Выполните несколько запросов через ваш граф с разными входными данными.
- Откройте детальные трейсы разных запусков и проанализируйте:
- Общее время выполнения
- Количество токенов
- Иерархию узлов графа
- Содержание входных и выходных данных
- Сделайте скриншот полученных трейсов в LangSmith
- Оформите краткий отчёт с аналитикой полученных метрик в
.ipynbноутбуке со скриншотами и своими комментариями
🔸 Кросс-рецензирование
Это задание предполагает кросс-рецензирование: другие студенты будут проверять вашу работу, а вам предстоит анализировать примеры одногруппников. После подготовки ноутбука добавьте его в репозиторий проекта (на GitHub) и пришлите ссылку на этот файл.
Продолжить с сохранением прогресса
Перейдите к уроку в учебном кабинете.
