Агент, який працює о третій ночі без нагляду, рівно настільки хороший, наскільки ви потім можете відновити, що він робив. «За ніч спалив токенів на $38» — поганий ранок. «Спалив $38, бо інструмент пошуку повернув порожню сторінку, а планувальник повторив запит 400 разів» — баг, який лагодиться до обіду. Для другої фрази потрібні трасування.
Langfuse записує кожен виклик LLM, промпт, крок інструменту, кількість токенів і затримку у вигляді дерева, по якому можна клікати. Коли він стоїть на вашому сервері, усі ці промпти й відповіді — а в них зазвичай і дані клієнтів, і відповіді API, і часом випадковий секрет — лишаються у вас, а не в чужій панелі.
Скільки це коштує
Langfuse v4 — не один маленький бінарник, а шість контейнерів: веб-застосунок, фоновий воркер, Postgres, ClickHouse для подій, Redis і MinIO для файлів. Ми поставили його на тестовий сервер і заміряли: близько 3,5 ГБ RAM за порожнього проєкту. Рости буде ClickHouse — туди потрапляє кожен крок, який ви надсилаєте.
| Навантаження | Тариф |
|---|---|
| Кілька агентів, трасування за тижні | Medium-IP — 6 vCPU, 6 ГБ, 45 ГБ ($20/міс) |
| Флот агентів, історія за місяці | Тарифи Pro, від 32 ГБ RAM — за заявкою |
На менших тарифах він встановиться, а потім почне задихатися, щойно ClickHouse і воркеру одночасно знадобиться пам'ять. Менше ніж 6 ГБ я б не брав.
Де живуть агенти? Якщо на інших машинах — беріть тариф зі своєю IPv4: агентам потрібна HTTPS-адреса, а на тарифі NAT вихідна адреса не ваша власна і ззовні доступний лише SSH-порт. Якщо агенти працюють на цьому ж сервері, Langfuse взагалі не мусить дивитися в інтернет — для проби вистачить Medium на NAT за $12/міс. Локацій дві, Німеччина і Фінляндія; доступність видно під час замовлення. Обирайте ту, що ближче до агентів, а не до вас. Оплата сервера — криптою, без KYC.
Встановлення
На свіжому Ubuntu 24.04 або Debian 12, від root. Спочатку Docker:
curl -fsSL https://get.docker.com | sh
Потім сам Langfuse — зі справжніми секретами замість значень за замовчуванням із compose-файлу:
git clone --depth 1 https://github.com/langfuse/langfuse.git
cd langfuse
PG=$(openssl rand -hex 16); MINIO=$(openssl rand -hex 16)
cat > .env <<EOF
NEXTAUTH_URL=https://langfuse.example.com
NEXTAUTH_SECRET=$(openssl rand -hex 32)
SALT=$(openssl rand -hex 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
POSTGRES_PASSWORD=$PG
DATABASE_URL=postgresql://postgres:$PG@postgres:5432/postgres
CLICKHOUSE_PASSWORD=$(openssl rand -hex 16)
MINIO_ROOT_PASSWORD=$MINIO
LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY=$MINIO
LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY=$MINIO
LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY=$MINIO
REDIS_AUTH=$(openssl rand -hex 16)
TELEMETRY_ENABLED=false
EOF
chmod 600 .env
У двох паролів є пари: пароль Postgres сидить ще й усередині DATABASE_URL, а пароль MinIO має збігатися з трьома рядками S3_..._SECRET_ACCESS_KEY. Тому кожен береться з однієї змінної.
Тепер пастка. Compose-файл публікує веб-застосунок на порту 3000, а MinIO на 9090 — на всіх інтерфейсах одразу, і порти, які публікує Docker, проходять повз ufw. Прив'яжіть обидва до localhost, щоб єдиним входом лишився зворотний проксі:
sed -i 's/- 3000:3000/- 127.0.0.1:3000:3000/; s/- 9090:9000/- 127.0.0.1:9090:9000/' docker-compose.yml
docker compose up -d
curl -s http://127.0.0.1:3000/api/public/health
Остання команда має вивести {"status":"OK", ...}. Перший запуск проганяє міграції бази; у нас перевірка пройшла приблизно через 15 секунд після того, як піднялися контейнери.
HTTPS спереду
Спрямуйте langfuse.example.com на IP сервера, потім:
apt install -y caddy
cat > /etc/caddy/Caddyfile <<'EOF'
langfuse.example.com {
reverse_proxy 127.0.0.1:3000
}
EOF
systemctl reload caddy
ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp && ufw enable
Сертифікат Caddy отримає сам. Відкрийте сайт, створіть акаунт — він стане першою організацією, — заведіть проєкт і скопіюйте його публічний і секретний ключі.
І зачиніть за собою двері. Langfuse розуміє AUTH_DISABLE_SIGNUP, але стандартний compose-файл не передає його у веб-контейнер, тому потрібен один рядок у розділі langfuse-web:
sed -i 's|^ NEXTAUTH_SECRET: \(.*\)$| NEXTAUTH_SECRET: \1\n AUTH_DISABLE_SIGNUP: ${AUTH_DISABLE_SIGNUP:-false}|' docker-compose.yml
echo "AUTH_DISABLE_SIGNUP=true" >> .env
docker compose up -d
Тепер спроба реєстрації отримує «Sign up is disabled». Колег додавайте зсередини проєкту.
Як агенту надсилати трасування
Python SDK обгортає ваші функції, а вкладені виклики перетворюються на вкладені кроки:
python3 -m venv venv && . venv/bin/activate
pip install langfuse
export LANGFUSE_PUBLIC_KEY=pk-lf-...
export LANGFUSE_SECRET_KEY=sk-lf-...
export LANGFUSE_BASE_URL=https://langfuse.example.com
from langfuse import get_client, observe
langfuse = get_client() # читає змінні LANGFUSE_*
@observe(name="fetch-prices")
def fetch_prices(pair: str) -> dict:
return {"pair": pair, "bid": 64210.5}
@observe(name="nightly-agent-run")
def run() -> str:
data = fetch_prices("BTC/USDT")
return f"done: {data['pair']}"
print(run())
langfuse.flush() # короткі скрипти завершуються раніше, ніж фонове надсилання
Не пропускайте LANGFUSE_BASE_URL. Без нього SDK мовчки шле все в хмару самого Langfuse, ваших ключів там немає — і ви дивитеся на порожню панель.
Перевірити з консолі, що кроки дійшли:
curl -s -u "$LANGFUSE_PUBLIC_KEY:$LANGFUSE_SECRET_KEY" \
"$LANGFUSE_BASE_URL/api/public/v2/observations?limit=5"
У v4 старий ендпоінт /api/public/traces відповідає помилкою про режим events-only. Так і має бути, встановлення тут ні до чого. У справжньому агенті так само обгортаються виклик LLM і кожен інструмент; до того ж у Langfuse є інтеграції з популярними SDK для LLM і фреймворками агентів, тож найчастіше вистачає змінити імпорт, а не розставляти декоратори всюди.
За чим стежити
- Диск. ClickHouse і MinIO зберігають усе, що ви надіслали. Куди пішло місце, покаже
docker system df -v. Якщо трасувати довгі промпти й відповіді, 45 ГБ на Medium-IP закінчаться за тижні, а не за роки. Перевіряйте раз на місяць; коли впретеся, тариф Pro на 400 ГБ і більше — за заявкою. - Оновлення. Compose-файл закріплює мажорну версію (
:4).docker compose pull && docker compose up -dпідтягне виправлення всередині неї. Перед зміною мажорної версії читайте changelog: якраз у v4 зник ендпоінт трасувань. - Бекапи. Усе цінне лежить у томах Docker: у Postgres — користувачі, проєкти й ключі, у ClickHouse і MinIO — самі трасування. Копіюйте їх із сервера за розкладом.
Чи варте це $20 на місяць? Якщо ваші агенти витрачають на токени більше — а агенти без нагляду зазвичай витрачають, — то знання, куди пішли токени, окупиться першої ж ночі, коли якийсь цикл піде врознос. Одному маленькому агенту, що запускається раз на день, усе це не потрібно: вистачить лог-файлу й лічильника токенів.
За темою
- VPS для AI-агентів — де працюють самі агенти
- VPS для мультиагентних систем — як прикинути ресурси під цілий флот
- VPS для проксі LiteLLM — один шлюз для всіх ключів моделей, з лімітами витрат
- Тарифи Pro за заявкою — від 32 до 80 ГБ RAM для флоту агентів
- Як налаштувати файрвол ufw
Коментарі
Поки немає коментарів. Будьте першим.