−25%

Windows รายปี ถึง 31 ต.ค. ดูแพ็กเกจ

EQVPS
เริ่มต้นใช้งาน

VPS สำหรับ Langfuse: ดูว่า AI agent ของคุณทำอะไรไป

โฮสต์ Langfuse เองและติดตามทุกการเรียก LLM และทุกขั้นของ tool จาก agent ที่ทำงานโดยไม่มีคนเฝ้า Docker Compose ที่ทดสอบแล้ว ตัวเลข RAM จริง และแพ็กเกจที่เหมาะ

agent ที่ทำงานตอนตีสามโดยไม่มีใครเฝ้า มีค่าเท่ากับความสามารถของคุณในการย้อนดูภายหลังว่ามันทำอะไรไป “เผาค่า token ไป 38 $ ในคืนเดียว” คือเช้าที่แย่ “เผาไป 38 $ เพราะ tool ค้นหาคืนหน้าว่าง แล้ว planner ลองใหม่ 400 ครั้ง” คือบั๊กที่คุณแก้เสร็จก่อนมื้อเที่ยง ประโยคที่สองต้องอาศัย trace

Langfuse บันทึกทุกการเรียก LLM ทั้ง prompt ขั้นของ tool จำนวน token และ latency ในรูปต้นไม้ที่คลิกไล่ดูได้ เมื่อคุณโฮสต์เอง prompt และคำตอบเหล่านั้น ซึ่งมักมีข้อมูลลูกค้า ผลลัพธ์จาก API และบางครั้งก็มีความลับหลุดเข้ามา จะอยู่บนเซิร์ฟเวอร์ที่คุณควบคุม ไม่ใช่ในแดชบอร์ดของคนอื่น

ต้นทุนในการรันไว้

Langfuse v4 ไม่ใช่ไบนารีเล็ก ๆ ตัวเดียว แต่เป็นหกคอนเทนเนอร์ ได้แก่ เว็บแอป worker เบื้องหลัง Postgres, ClickHouse สำหรับ event, Redis และ MinIO สำหรับไฟล์ เราติดตั้งบนเซิร์ฟเวอร์ทดสอบและวัดได้ว่าใช้ RAM ราว 3.5 GB กับโปรเจกต์ว่าง ส่วนที่โตขึ้นคือ ClickHouse เพราะทุก span ที่คุณส่งจะไปอยู่ที่นั่น

ภาระงานแพ็กเกจ
agent ไม่กี่ตัว trace หลายสัปดาห์Medium-IP: 6 vCPU, 6 GB, 45 GB ($20/เดือน)
ฝูง agent ประวัติหลายเดือนแพ็กเกจ Pro ตั้งแต่ RAM 32 GB ขึ้นไป — ตามคำขอ

บนแพ็กเกจที่เล็กกว่านี้ติดตั้งได้ แต่จะเริ่มอืดทันทีที่ ClickHouse กับ worker ต้องการหน่วยความจำพร้อมกัน ฉันจะไม่เลือกต่ำกว่า 6 GB

agent อยู่ที่ไหน? ถ้ารันบนเครื่องอื่น ให้เลือกแพ็กเกจที่มี IPv4 ของตัวเอง เพราะต้องมี endpoint แบบ HTTPS ส่วนบนแพ็กเกจ NAT ที่อยู่ขาออกไม่ใช่ของคุณเอง และจากภายนอกเข้าได้แค่พอร์ต SSH ถ้า agent รันบนเซิร์ฟเวอร์นี้เอง Langfuse ก็ไม่ต้องหันหน้าออกอินเทอร์เน็ตเลย สำหรับลองใช้ Medium แบบ NAT ($12/เดือน) ก็พอ มีสองตำแหน่งคือเยอรมนีและฟินแลนด์ ดูได้ว่าว่างหรือไม่ตอนสั่งซื้อ เลือกที่ใกล้ agent ที่สุด ไม่ใช่ใกล้คุณ เซิร์ฟเวอร์ชำระด้วยคริปโต ไม่ต้องทำ 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", ...} การเริ่มครั้งแรกจะรัน migration ของฐานข้อมูล ในการทดสอบของเรา health check ผ่านประมาณ 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» ส่วนเพื่อนร่วมทีมให้เพิ่มจากภายในโปรเจกต์

ส่ง trace จาก agent

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 ตอบกลับเป็น error เรื่องโหมด events-only ซึ่งเป็นพฤติกรรมปกติ ไม่ใช่การติดตั้งพัง ใน agent จริงคุณห่อการเรียก LLM และทุก tool ด้วยวิธีเดียวกัน นอกจากนี้ Langfuse ยังมี integration สำหรับ LLM SDK และ framework ของ agent ที่นิยม หลายครั้งจึงแค่เปลี่ยน import บรรทัดเดียว แทนที่จะโรย decorator ไปทั่ว

สิ่งที่ต้องคอยดู

  • ดิสก์ ClickHouse และ MinIO เก็บทุกอย่างที่คุณส่ง docker system df -v บอกได้ว่าพื้นที่หายไปไหน ถ้าคุณ trace prompt และคำตอบยาว ๆ ดิสก์ 45 GB ของ Medium-IP จะเต็มในไม่กี่สัปดาห์ ไม่ใช่หลายปี ตรวจเดือนละครั้ง เมื่อเริ่มแน่น แพ็กเกจ Pro ตั้งแต่ 400 GB ขึ้นไปมีให้ ตามคำขอ
  • การอัปเดต ไฟล์ compose ตรึงเวอร์ชันหลักไว้ (:4) docker compose pull && docker compose up -d จะดึงการแก้ไขภายในเวอร์ชันนั้น อ่าน changelog ก่อนเปลี่ยนเวอร์ชันหลัก เพราะ endpoint ของ trace หายไปใน v4 นี่เอง
  • สำรองข้อมูล สิ่งสำคัญอยู่ใน volume ของ Docker: Postgres เก็บผู้ใช้ โปรเจกต์ และคีย์ ส่วน ClickHouse และ MinIO เก็บตัว trace คัดลอกออกนอกเซิร์ฟเวอร์ตามกำหนดเวลา

คุ้มกับ $20 ต่อเดือนไหม? ถ้า agent ของคุณใช้ค่า token มากกว่านั้น ซึ่ง agent ที่ไม่มีคนเฝ้าส่วนใหญ่ก็เป็นอย่างนั้น การรู้ว่า token หายไปไหนจะคืนทุนตั้งแต่ครั้งแรกที่ลูปหลุดการควบคุม agent ตัวเล็กที่รันวันละครั้งไม่ต้องใช้สิ่งเหล่านี้เลย แค่ไฟล์ log กับตัวนับ token ก็พอ

ที่เกี่ยวข้อง

พร้อม deploy แล้วหรือยัง? จ่ายด้วยคริปโต ไม่ต้อง KYC — ใช้งานได้ในราวหนึ่งนาที

Deploy เลย →

FAQ

Langfuse ที่โฮสต์เองใช้ RAM เท่าไร?

บนเซิร์ฟเวอร์ทดสอบของเรา Langfuse v4 ทำงานเป็นหกคอนเทนเนอร์ ได้แก่ web, worker, Postgres, ClickHouse, Redis และ MinIO และใช้ RAM ราว 3.5 GB กับโปรเจกต์ว่าง ClickHouse จะโตขึ้นตามทุก span ที่คุณส่ง Medium-IP (RAM 6 GB ดิสก์ 45 GB) รองรับ agent ไม่กี่ตัวได้สบาย ส่วนฝูง agent ทั้งชุดที่เก็บประวัติหลายเดือนต้องใช้แพ็กเกจ Pro ซึ่งมีให้ตามคำขอ

Langfuse ต้องมี IP ของตัวเองไหม?

เฉพาะเมื่อ agent ทำงานอยู่ที่อื่นและส่ง trace ผ่านอินเทอร์เน็ต เพราะต้องมี endpoint แบบ HTTPS ขณะที่แพ็กเกจ NAT รับจากภายนอกได้เพียงพอร์ต SSH ของคุณ ถ้า agent อยู่บนเซิร์ฟเวอร์เดียวกัน Langfuse ก็อยู่บน localhost ได้ และเปิดแดชบอร์ดผ่าน SSH tunnel ในกรณีนี้แพ็กเกจ Medium แบบ NAT ก็เพียงพอ

โค้ดรันได้ แต่แดชบอร์ดยังว่างเปล่า เพราะอะไร?

เกือบทุกครั้งเป็นเพราะไม่ได้ตั้ง LANGFUSE_BASE_URL ถ้าไม่มีตัวแปรนี้ SDK จะส่งทุกอย่างไปที่คลาวด์ของ Langfuse เอง คีย์จากอินสแตนซ์ของคุณไม่มีอยู่ที่นั่น และไม่มีอะไรมาถึงเซิร์ฟเวอร์ของคุณเลย ใส่ที่อยู่ของคุณเองลงในตัวแปร

endpoint /api/public/traces ตอบกลับเป็น error การติดตั้งพังหรือเปล่า?

ไม่ Langfuse v4 ทำงานในโหมด events-only ซึ่งปิด endpoint นี้ไว้ ให้อ่านข้อมูลผ่าน /api/public/v2/observations เราใช้การเรียกนี้ยืนยันว่า span ทดสอบของเรามาถึงแล้ว

จะกันคนแปลกหน้าไม่ให้สมัครเข้าอินสแตนซ์ของฉันได้อย่างไร?

Langfuse อ่าน AUTH_DISABLE_SIGNUP แต่ docker-compose.yml ที่ให้มาไม่ส่งตัวแปรนี้เข้าคอนเทนเนอร์ web การใส่ไว้ใน .env อย่างเดียวจึงไม่มีผล ให้เพิ่มหนึ่งบรรทัดใน environment ของ langfuse-web (คำสั่งอยู่ด้านล่าง) ตั้งเป็น true หลังสร้างบัญชีของคุณเสร็จ แล้วการสมัครครั้งต่อไปจะได้รับ «Sign up is disabled»

ความคิดเห็น

ยังไม่มีความคิดเห็น เป็นคนแรกสิ

แสดงความคิดเห็น

ความคิดเห็นจะถูกตรวจสอบก่อนแสดง