रात तीन बजे बिना किसी की निगरानी के काम करने वाला एजेंट उतना ही काम का है, जितना आप बाद में यह दोबारा जोड़ पाएँ कि उसने क्या किया। “रात भर में 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 endpoint चाहिए, और NAT प्लान पर बाहर जाने वाला पता आपका अपना नहीं होता और बाहर से केवल SSH पोर्ट तक पहुँचा जा सकता है। अगर एजेंट इसी सर्वर पर चलते हैं, तो Langfuse को इंटरनेट की ओर खुलने की ज़रूरत ही नहीं: आज़माने के लिए NAT वाला Medium ($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 फ़ाइल इसे web कंटेनर तक नहीं पहुँचाती, इसलिए 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 आपके फ़ंक्शनों को रैप करता है, और नेस्टेड कॉल नेस्टेड span बन जाती हैं:
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 के क्लाउड पर भेज देता है, आपकी कुंजियाँ वहाँ नहीं होतीं और आप ख़ाली डैशबोर्ड देखते रह जाते हैं।
टर्मिनल से जाँचें कि span पहुँच गए:
curl -s -u "$LANGFUSE_PUBLIC_KEY:$LANGFUSE_SECRET_KEY" \
"$LANGFUSE_BASE_URL/api/public/v2/observations?limit=5"
v4 में पुराना endpoint /api/public/traces events-only मोड के बारे में एरर लौटाता है। यह अपेक्षित है, इंस्टॉलेशन टूटा नहीं है। असली एजेंट में आप LLM कॉल और हर टूल को इसी तरह रैप करते हैं; साथ ही Langfuse में लोकप्रिय LLM SDK और एजेंट फ़्रेमवर्क के इंटीग्रेशन हैं, इसलिए अक्सर हर जगह डेकोरेटर लगाने के बजाय एक import बदलना काफ़ी होता है।
किन चीज़ों पर नज़र रखें
- डिस्क। ClickHouse और MinIO आपका भेजा सब कुछ रखते हैं। जगह कहाँ गई, यह
docker system df -vदिखाता है। अगर आप लंबे प्रॉम्प्ट और जवाब ट्रेस करते हैं, तो Medium-IP की 45 GB डिस्क सालों में नहीं, हफ़्तों में भर जाती है। महीने में एक बार जाँचें; जगह कम पड़े तो 400 GB या उससे ज़्यादा वाला Pro प्लान अनुरोध पर मिलता है। - अपडेट। compose फ़ाइल मेजर वर्शन (
:4) को पिन करती है।docker compose pull && docker compose up -dउसी के भीतर के फ़िक्स लाता है। मेजर वर्शन बदलने से पहले changelog पढ़ें: ट्रेस वाला endpoint ठीक v4 में ही ग़ायब हुआ। - बैकअप। जो मायने रखता है, वह Docker वॉल्यूम में है: Postgres में यूज़र, प्रोजेक्ट और कुंजियाँ; ClickHouse और MinIO में ख़ुद ट्रेस। इन्हें तय समय पर सर्वर से बाहर कॉपी करें।
क्या यह $20 महीने का है? अगर आपके एजेंट टोकन पर इससे ज़्यादा ख़र्च करते हैं — और ज़्यादातर बिना निगरानी वाले एजेंट करते हैं — तो टोकन कहाँ गए यह जानना पहली ही बार में वसूल हो जाता है, जब कोई लूप बेक़ाबू होता है। दिन में एक बार चलने वाले एक छोटे एजेंट को इसकी ज़रूरत नहीं: एक लॉग फ़ाइल और टोकन काउंटर काफ़ी है।
संबंधित
- AI एजेंटों के लिए VPS: जहाँ ख़ुद एजेंट चलते हैं
- मल्टी-एजेंट सिस्टम के लिए VPS: पूरे बेड़े के लिए संसाधनों का अनुमान
- LiteLLM प्रॉक्सी के लिए VPS: सभी मॉडल कुंजियों के लिए एक गेटवे, ख़र्च की सीमा के साथ
- अनुरोध पर Pro प्लान: एजेंटों के बेड़े के लिए 32 से 80 GB RAM
- ufw फ़ायरवॉल कैसे सेट करें
टिप्पणियाँ
अभी तक कोई टिप्पणी नहीं। पहले बनें।