−25%

Windows-ის წლიურ გადახდაზე, 31 ოქტომბრამდე. ტარიფებზე

EQVPS
დაწყება

VPS Langfuse-ისთვის: ნახეთ, რა გააკეთეს AI აგენტებმა

საკუთარი Langfuse: დააკვირდით უზედამხედველოდ მომუშავე აგენტების ყოველ LLM-გამოძახებას და ინსტრუმენტის ნაბიჯს. შემოწმებული Docker Compose, რეალური RAM, ტარიფი.

აგენტი, რომელიც ღამის სამ საათზე უზედამხედველოდ მუშაობს, ზუსტად იმდენი ღირს, რამდენადაც შემდეგ შეგიძლიათ აღადგინოთ, რას აკეთებდა. „ღამით 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 თქვენს ფუნქციებს ახვევს, ჩადგმული გამოძახებები კი ჩადგმულ 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-ში ძველი ენდპოინტი /api/public/traces events-only რეჟიმზე შეცდომით პასუხობს. ასეც უნდა იყოს, ინსტალაცია არ არის გაფუჭებული. ნამდვილ აგენტში ასევე ახვევთ LLM-გამოძახებას და თითოეულ ინსტრუმენტს; ამასთან, Langfuse-ს აქვს ინტეგრაციები პოპულარულ LLM SDK-ებთან და აგენტების ფრეიმვორკებთან, ამიტომ ხშირად საკმარისია ერთი import-ის შეცვლა, ნაცვლად იმისა, რომ ყველგან დეკორატორები ჩასვათ.

რას უნდა ადევნოთ თვალი

  • დისკი. ClickHouse და MinIO ყველაფერს ინახავენ, რასაც აგზავნით. სად წავიდა ადგილი, docker system df -v გაჩვენებთ. თუ გრძელ პრომპტებსა და პასუხებს აკვირდებით, Medium-IP-ის 45 GB კვირებში შეივსება და არა წლებში. შეამოწმეთ თვეში ერთხელ; როცა ვიწრო გახდება, Pro ტარიფი 400 GB-ით ან მეტით ხელმისაწვდომია მოთხოვნით.
  • განახლებები. compose ფაილი ძირითად ვერსიას აფიქსირებს (:4). docker compose pull && docker compose up -d მის ფარგლებში შესწორებებს მოიტანს. ძირითადი ვერსიის შეცვლამდე წაიკითხეთ changelog: სწორედ v4-ში გაქრა კვალის ენდპოინტი.
  • სარეზერვო ასლები. ყველაფერი ღირებული Docker-ის ტომებშია: Postgres-ში — მომხმარებლები, პროექტები და გასაღებები, ClickHouse-სა და MinIO-ში — თავად კვალი. დააკოპირეთ ისინი სერვერის გარეთ განრიგით.

ღირს თუ არა ეს $20 თვეში? თუ თქვენი აგენტები ტოკენებზე ამაზე მეტს ხარჯავენ — და უზედამხედველო აგენტები ჩვეულებრივ ხარჯავენ, — ცოდნა, სად წავიდა ტოკენები, პირველივე გაუკონტროლებელ ციკლზე ამოიღებს ხარჯს. ერთ პატარა აგენტს, რომელიც დღეში ერთხელ ეშვება, ამათგან არაფერი სჭირდება: ლოგ-ფაილი და ტოკენების მრიცხველი საკმარისია.

დაკავშირებული

მზად ხართ განთავსებისთვის? გადაიხადეთ კრიპტოთი, KYC-ის გარეშე — ჩართული დაახლოებით წუთში.

განათავსეთ ახლა →

ხდკ

რამდენი RAM სჭირდება საკუთარ სერვერზე Langfuse-ს?

ჩვენს სატესტო სერვერზე Langfuse v4 ექვს კონტეინერად მუშაობდა — web, worker, Postgres, ClickHouse, Redis და MinIO — და ცარიელი პროექტით დაახლოებით 3,5 GB RAM-ს იყენებდა. ClickHouse იზრდება ყოველ გაგზავნილ span-თან ერთად. Medium-IP (6 GB RAM, 45 GB დისკი) რამდენიმე აგენტისთვის მას თავისუფლად ატარებს; თვეების ისტორიის მქონე მთელ ფლოტს კი Pro ტარიფი სჭირდება, რომელიც მოთხოვნით არის ხელმისაწვდომი.

სჭირდება თუ არა Langfuse-ს საკუთარი IP მისამართი?

მხოლოდ მაშინ, თუ აგენტები სხვაგან მუშაობენ და კვალს ინტერნეტით აგზავნიან: მათ HTTPS მისამართი სჭირდებათ, NAT ტარიფი კი გარედან მხოლოდ თქვენს SSH პორტს იღებს. თუ აგენტები იმავე სერვერზე ცხოვრობენ, Langfuse შეიძლება localhost-ზე დარჩეს, პანელს კი SSH გვირაბით გახსნით; ამისთვის NAT-იანი Medium ტარიფიც საკმარისია.

კოდი სრულდება, პანელი კი ცარიელია. რატომ?

თითქმის ყოველთვის LANGFUSE_BASE_URL აკლია. მის გარეშე SDK ყველაფერს თავად Langfuse-ის ღრუბელში აგზავნის, თქვენი გასაღებები იქ არ არსებობს და თქვენს სერვერამდე არაფერი აღწევს. ცვლადში საკუთარი მისამართი ჩაწერეთ.

ენდპოინტი /api/public/traces შეცდომას აბრუნებს. ინსტალაცია გაფუჭებულია?

არა. Langfuse v4 მუშაობს events-only რეჟიმში, სადაც ეს ენდპოინტი გამორთულია. მონაცემები /api/public/v2/observations-ით წაიკითხეთ — სწორედ ამ გამოძახებით შევამოწმეთ, რომ ჩვენი სატესტო span-ები მივიდა.

როგორ ავუკრძალო რეგისტრაცია უცნობებს?

Langfuse კითხულობს AUTH_DISABLE_SIGNUP-ს, მაგრამ სტანდარტული docker-compose.yml ამ ცვლადს ვებ-კონტეინერს არ გადასცემს, ამიტომ მხოლოდ .env-ში ჩაწერა არაფერს შველის. დაამატეთ ერთი ხაზი langfuse-web-ის გარემოში (ბრძანება ქვემოთაა), საკუთარი ანგარიშის შექმნის შემდეგ დააყენეთ true და შემდეგი რეგისტრაციები მიიღებენ «Sign up is disabled».

კომენტარები

ჯერ არ არის კომენტარები. იყავით პირველი.

დატოვეთ კომენტარი

კომენტარები მოდერირდება გამოჩენამდე.