Langfuse: как видеть prompts, tool calls, стоимость и ошибки Claude, Codex и LLM-агентов
Когда AI-приложение состоит из одного вызова модели, обычного log-файла ещё может хватать. Но агент с retrieval, tools, subagents, retries и несколькими LLM быстро превращается в «чёрный ящик». Langfuse показывает всю цепочку: входной prompt, model generation, tool calls, токены, стоимость, latency, ошибки, scores, prompt version и результат каждой сессии.
Langfuse — это не model gateway и не agent framework
Langfuse находится рядом с вашим AI-приложением и получает telemetry. Он не обязан маршрутизировать запросы и не заменяет OpenAI, Ollama, LiteLLM, Claude Code или Codex. Его задача — сделать их поведение наблюдаемым и измеримым.
Показывает, из каких шагов состоял один запрос или agent turn.
Хранит версии prompts отдельно от application code.
Позволяет сравнивать модели и prompts на фиксированном dataset.
Помогает увидеть, какой step съедает токены, деньги или latency.
Один пользовательский запрос можно разложить до конкретного tool call
Если итог плохой, можно определить, где именно возникла ошибка: retrieval не нашёл данные, tool вернул плохой результат, модель выбрала неверный action или prompt был слишком слабым.
Минимальная трассировка приложения
Актуальный Python SDK — 4.15.4. Он был полностью переписан на OpenTelemetry в 2026 году.
Старые примеры с Langfuse().trace() уже считаются legacy.
pip install langfuse==4.15.4
LANGFUSE_PUBLIC_KEY=pk-lf-...
LANGFUSE_SECRET_KEY=sk-lf-...
LANGFUSE_BASE_URL=https://your-langfuse.example.com
from langfuse import get_client
langfuse = get_client()
with langfuse.start_as_current_observation(
as_type="span",
name="process-request"
) as span:
span.update(input={"question": "Почему упал agent?"})
with langfuse.start_as_current_observation(
as_type="generation",
name="llm-response",
model="YOUR_MODEL"
) as generation:
result = "LLM response"
generation.update(output=result)
span.update(output={"status": "done"})
langfuse.flush()
flush().
SDK буферизует telemetry, поэтому процесс может завершиться раньше отправки событий.
Langfuse Codex Observability Plugin превращает Codex CLI из «чёрного ящика» в trace tree
Отдельный repository langfuse/codex-observability-plugin
создан специально для Codex. Plugin читает rollout transcript после turn
и отправляет структуру сессии в Langfuse.
Каждый Codex turn становится отдельным trace.
Включая reasoning, assistant text, model и token usage.
В trace видно input, output и error status каждого action.
Subagent turns прикрепляются к родительскому turn.
codex plugin marketplace add langfuse/codex-observability-plugin
Tracing plugin включается в ~/.codex/config.toml
либо в project-local .codex/config.toml.
Текущая package-версия — 0.1.0; требуется Node.js 22+ и Codex 0.143+.
Shell output, prompts, tool arguments и subagent text могут содержать секреты.
Для OpenCode есть отдельный observability plugin
{
"experimental": {
"openTelemetry": true
},
"plugin": [
"@langfuse/opencode-observability-plugin@latest"
]
}
Plugin трассирует user turns, assistant generations, tool calls, retries, reasoning, compaction и failed generation steps. Актуальная package line на момент проверки — 0.3.0.
Langfuse v4 строится вокруг OTel, а не собственного закрытого tracing protocol
Актуальные SDK используют OpenTelemetry. Это позволяет подключать существующую instrumentation ecosystem, объединять LLM spans с обычными application traces и не привязывать код к одному vendor-specific формату.
OTel-based tracing и native Langfuse helpers.
Текущая JavaScript/TypeScript линия.
Можно отправлять traces без специального Langfuse SDK.
Langfuse можно встроить в существующий observability pipeline.
Можно увидеть, какой конкретно шаг съел бюджет
Сколько контекста отправили модели.
Сколько сгенерировала модель.
Видны повторные reasoning/tool loops.
Можно сравнивать execution paths.
Prompt можно версионировать отдельно от кода и связывать с traces
Можно сравнить качество до и после изменения instructions.
Переключать активную версию без изменения application code.
У trace сохраняется связь с конкретной prompt version.
SDK кеширует prompts локально.
Datasets + Experiments позволяют проверять модель и prompt на одинаковом наборе задач
Dataset — это набор inputs и expected outputs. Один и тот же dataset можно прогнать через несколько моделей, prompts или версий application logic и сравнить scores.
Regression tests на фиксированном dataset.
Оценивать реальные пользовательские запросы.
Эксперт вручную оценивает ответ.
Автоматическая проверка больших выборок.
Новый prompt может быть лучше на двух примерах и хуже на остальных сорока восьми.
Langfuse можно держать полностью на своей инфраструктуре
git clone --depth=1 https://github.com/langfuse/langfuse.git
cd langfuse
docker compose up
UI и API.
Асинхронная обработка events.
Transactional data.
Traces, observations и analytics.
Queue/cache.
Events, multimodal data и exports.
Для production нужно планировать backups, updates и monitoring каждого storage component.
Core Langfuse — MIT, но repository содержит отдельный enterprise-код
Всё вне enterprise directories доступно по MIT, а содержимое
ee/, web/src/ee/ и worker/src/ee/
использует отдельную Enterprise License.
Core features доступны self-hosted.
Audit logs, data retention policies, project-level RBAC и management APIs.
Langfuse нужно защищать не слабее основной application database
Не логировать passwords, tokens, cookies и API keys.
Не смешивать test и production traces без причины.
Ключи Langfuse хранить в env/secrets store.
Security policy рекомендует latest version.
HTTPS, access control и private network.
Не хранить бесконечно traces, которые больше не нужны.
В апреле 2026 года был исправлен access-control issue, где project member мог заставить систему отправить сохранённый provider API key на attacker-controlled endpoint. Уязвимы были старые версии 3.68.0–3.166.x, исправление — 3.167.0. Текущая 4.39.0 существенно новее.
Langfuse не заменяет LiteLLM, OpenHands или Mem0
Observability не исправляет agent автоматически
Без instrumentation UI будет пустым.
Postgres, ClickHouse, Redis и object storage требуют обслуживания.
Логи иногда опаснее основной business database.
Evaluator тоже модель, а не абсолютная истина.
Self-hosted модели могут требовать собственных cost rules.
Причину плохого trace всё равно нужно анализировать.
Где Langfuse особенно полезен
Понять лишние tool calls и расход tokens.
Отделить проблемы retrieval от проблем модели.
Сравнить prompt version на dataset до deployment.
Найти самый дорогой step внутри agent loop.
Следить за latency, failures и score trends.
Сравнить quality/cost/latency разных providers.
Langfuse: server, SDK, Codex plugin, self-host и security
Server — 4.39.0, Python SDK — 4.15.4, core — MIT/open core.
Langfuse нужен тогда, когда одного log-файла уже недостаточно объяснить поведение AI
Для простого локального чата observability platform может быть лишней. Но когда появляются tools, RAG, retries, subagents, несколько моделей и реальные пользователи, trace tree начинает экономить часы диагностики.
Особенно интересна свежая интеграция с Codex: можно увидеть, какой model call предшествовал действию, какую команду агент запустил, сколько tokens потратил и где именно возникла ошибка.
Частые вопросы о Langfuse
Что такое Langfuse простыми словами?
Платформа наблюдаемости и evaluation для LLM-приложений: traces, model calls, tools, tokens, cost, prompts и scores.
Langfuse работает с Codex?
Да. Есть официальный Codex observability plugin.
Можно ли self-host Langfuse?
Да. Docker Compose — для local/single-VM, Kubernetes/Helm — для production.
Langfuse open source?
Core — MIT. Отдельные enterprise directories используют коммерческую Enterprise License.
Можно ли использовать Langfuse с Ollama?
Да. Backend-модель может быть локальной Ollama, LM Studio, vLLM или облачным provider.
Чем Langfuse отличается от LiteLLM?
LiteLLM маршрутизирует LLM requests. Langfuse трассирует, анализирует и оценивает работу приложения.
Что использовать в новом Python-коде?
Python SDK v4 с get_client(), @observe и start_as_current_observation().
Какие версии актуальны?
На 21 сентября 2026 года server — 4.39.0, Python SDK — 4.15.4.
Нужно понять, куда уходят токены и почему AI-agent делает лишние шаги?
Можно построить tracing, cost tracking и regression datasets для локальной или облачной AI-системы.
