סוכן שעובד בשלוש לפנות בוקר בלי שאיש מסתכל שווה בדיוק כמו היכולת שלכם לשחזר אחר כך מה הוא עשה. „שרף בלילה טוקנים ב-38 $” זה בוקר רע. „שרף 38 $ כי כלי החיפוש החזיר עמוד ריק והמתכנן ניסה שוב 400 פעמים” זה באג שמתקנים לפני ארוחת הצהריים. בשביל המשפט השני צריך עקבות.
Langfuse מתעד כל קריאת LLM, כל prompt, צעד כלי, מספר טוקנים וזמן תגובה כעץ שאפשר לטייל בו בלחיצות. כשאתם מארחים אותו בעצמכם, ה-prompts והתשובות האלה — שלעיתים קרובות יש בהם נתוני לקוחות, פלט 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 שמגיע כברירת מחדל לא מעביר אותו לקונטיינר ה-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». עמיתים מוסיפים מתוך הפרויקט.
שליחת עקבות מסוכן
ה-SDK של Python עוטף את הפונקציות שלכם, וקריאות מקוננות הופכות ל-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מראה לאן הלך המקום. אם אתם עוקבים אחרי prompts ותשובות ארוכים, ה-45 GB של Medium-IP יתמלאו בתוך שבועות, לא שנים. בדקו פעם בחודש; כשנהיה צפוף, תוכנית Pro עם 400 GB ומעלה זמינה לפי בקשה. - עדכונים. קובץ ה-compose מקבע את הגרסה הראשית (
:4). docker compose pull && docker compose up -dמביא תיקונים בתוכה. קראו את ה-changelog לפני מעבר לגרסה ראשית אחרת: בדיוק ב-v4 נעלמה נקודת הקצה של העקבות. - גיבויים. מה שחשוב יושב ב-volumes של Docker: Postgres מחזיק משתמשים, פרויקטים ומפתחות, ClickHouse ו-MinIO את העקבות עצמם. העתיקו אותם אל מחוץ לשרת לפי לוח זמנים.
האם זה שווה $20 בחודש? אם הסוכנים שלכם מוציאים על טוקנים יותר מזה — ורוב הסוכנים שרצים בלי השגחה מוציאים — הידיעה לאן הלכו הטוקנים מחזירה את עצמה בפעם הראשונה שלולאה יוצאת משליטה. סוכן קטן שרץ פעם ביום לא צריך שום דבר מזה: מספיקים קובץ לוג ומונה טוקנים.
קשור
- שרת VPS לסוכני AI: איפה שהסוכנים עצמם רצים
- שרת VPS למערכות רב-סוכניות: הערכת משאבים לצי שלם
- שרת VPS לפרוקסי LiteLLM: שער אחד לכל מפתחות המודלים, עם תקרות הוצאה
- תוכניות Pro לפי בקשה: בין 32 ל-80 GB RAM לצי סוכנים
- איך להגדיר חומת אש ufw
תגובות
אין עדיין תגובות. היו הראשונים.