Агент, който работи в три през нощта без надзор, струва точно толкова, колкото можете после да възстановите какво е правил. „За една нощ изгори токени за $38“ е лоша сутрин. „Изгори $38, защото инструментът за търсене върна празна страница, а планировчикът опита отново 400 пъти“ е бъг, който оправяте преди обяд. За второто изречение трябват следи.
Langfuse записва всяко извикване на LLM, промпт, стъпка на инструмент, брой токени и закъснение като дърво, по което можете да кликате. Когато е на ваш сървър, тези промптове и отговори — в тях обикновено има данни на клиенти, отговори от API и понякога забравена тайна — остават при вас, а не в чужд панел.
Колко струва да работи
Langfuse v4 не е един малък бинарен файл, а шест контейнера: уеб приложението, фонов worker, Postgres, ClickHouse за събитията, Redis и MinIO за файловете. Сложихме го на тестов сървър и измерихме около 3,5 GB заета RAM при празен проект. Расте ClickHouse — там попада всеки span, който изпращате.
| Натоварване | План |
|---|---|
| Няколко агента, следи за седмици | Medium-IP: 6 vCPU, 6 GB, 45 GB ($20/месец) |
| Флот агенти, история за месеци | Планове Pro, от 32 GB RAM нагоре — по заявка |
На по-малки планове ще се инсталира, но после ще се задъхва, щом ClickHouse и worker-ът поискат памет едновременно. Под 6 GB не бих слизал.
Къде живеят агентите? Ако работят на други машини, вземете план със собствен 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, за да остане reverse proxy единственият вход:
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 обвива функциите ви, а вложените извиквания стават вложени spans:
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, ключовете ви ги няма там и гледате празен панел.
Проверка от конзолата, че spans са пристигнали:
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 и рамки за агенти, така че често е достатъчно да смените един import, вместо да слагате декоратори навсякъде.
За какво да следите
- Диск. ClickHouse и MinIO пазят всичко изпратено. Къде е отишло мястото, ще покаже
docker system df -v. Ако следите дълги промптове и отговори, 45 GB на Medium-IP ще се напълнят за седмици, не за години. Проверявайте веднъж месечно; когато стане тясно, план Pro с 400 GB и повече е по заявка. - Обновления. Compose файлът фиксира основната версия (
:4).docker compose pull && docker compose up -dдърпа поправките в нейните рамки. Преди смяна на основна версия четете changelog: точно във v4 изчезна ендпойнтът за следи. - Резервни копия. Всичко ценно е в томовете на Docker: в Postgres са потребителите, проектите и ключовете, в ClickHouse и MinIO — самите следи. Копирайте ги извън сървъра по график.
Струва ли си $20 на месец? Ако агентите ви харчат за токени повече — а агентите без надзор обикновено харчат, — знанието къде са отишли токените се изплаща още първия път, когато някой цикъл излезе от контрол. На един малък агент, пускан веднъж дневно, нищо от това не му трябва: стигат лог файл и брояч на токени.
Свързано
- VPS за AI агенти — къде работят самите агенти
- VPS за мултиагентни системи — как да оразмерите цял флот
- VPS за LiteLLM прокси — един шлюз за всички ключове на модели, с лимити на разходите
- Планове Pro по заявка — от 32 до 80 GB RAM за флот агенти
- Как да настроите защитна стена ufw
Коментари
Още няма коментари. Бъди първият.