Tutorial Weave: Observabilitas dan Evaluasi Aplikasi LLM dengan Weights & Biases
Membangun aplikasi berbasis Large Language Model (LLM) semakin mudah, tetapi memantau, men-debug, dan mengevaluasi kualitas output-nya tetap menjadi tantangan besar. Bagaimana Anda tahu apakah prompt yang baru memberikan hasil yang lebih baik? Bagaimana melacak setiap panggilan LLM di production? Di sinilah Weave dari Weights & Biases hadir sebagai solusi.
Weave adalah framework open-source untuk tracing, evaluasi, dan monitoring aplikasi LLM. Berbeda dengan W&B tradisional yang fokus pada experiment tracking untuk training model, Weave dirancang khusus untuk siklus hidup aplikasi LLM mulai dari development hingga production.
Dalam tutorial ini, kita akan mempelajari cara menggunakan Weave untuk melacak panggilan LLM, membuat evaluasi otomatis, mengelola dataset, dan memantau aplikasi LLM di production.
Instalasi dan Setup
Instalasi Weave
pip install weave openai
Weave mendukung Python 3.9+ dan terintegrasi dengan berbagai provider LLM seperti OpenAI, Anthropic, Google, Mistral, dan lainnya.
Konfigurasi API Key
Anda memerlukan akun Weights & Biases. Daftar gratis di wandb.ai, lalu dapatkan API key Anda.
export WANDBAPIKEY="your-api-key-here"
export OPENAIAPIKEY="your-openai-key-here"
Inisialisasi Project
import weave
weave.init("my-llm-project")
Setelah inisialisasi, semua operasi yang di-trace akan muncul di dashboard Weave pada platform W&B.
Basic Usage: Tracing LLM Calls
Auto-Tracing dengan Integrasi Built-in
Weave secara otomatis melacak panggilan ke provider LLM populer tanpa perlu kode tambahan.
import weave
from openai import OpenAI
weave.init("tracing-demo")
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "Kamu adalah asisten yang membantu."},
{"role": "user", "content": "Jelaskan apa itu machine learning dalam 2 kalimat."}
]
)
print(response.choices[0].message.content)
Hanya dengan menambahkan weave.init(), setiap panggilan OpenAI secara otomatis di-trace. Anda bisa melihat input, output, latency, token usage, dan cost di dashboard Weave.
Custom Tracing dengan Decorator @weave.op
Untuk fungsi kustom Anda sendiri, gunakan decorator @weave.op:
import weave
import json
from openai import OpenAI
weave.init("custom-tracing")
client = OpenAI()
@weave.op
def extractentities(text: str) -> dict:
"""Ekstrak entitas dari teks menggunakan LLM."""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "system",
"content": "Ekstrak entitas (orang, tempat, organisasi) dari teks. Kembalikan dalam format JSON."
},
{"role": "user", "content": text}
],
responseformat={"type": "jsonobject"}
)
return json.loads(response.choices[0].message.content)
@weave.op
def processdocument(document: str) -> dict:
"""Proses dokumen: ekstrak entitas dan buat ringkasan."""
entities = extractentities(document)
return {
"entities": entities,
"entitycount": sum(len(v) for v in entities.values() if isinstance(v, list))
}
result = processdocument(
"Joko Widodo bertemu dengan Joe Biden di Jakarta untuk membahas "
"kerjasama ASEAN dan investasi di Indonesia."
)
print(json.dumps(result, indent=2, ensureascii=False))
Decorator @weave.op membuat hierarchical trace, sehingga Anda bisa melihat bagaimana processdocument memanggil extractentities, lengkap dengan input/output di setiap level.
Tracing dengan Metadata Tambahan
Anda bisa menambahkan atribut kustom ke trace untuk mempermudah filtering dan analisis:
import weave
weave.init("metadata-demo")
@weave.op
def classifysentiment(text: str, language: str = "id") -> dict:
response = client.chat.completions.create(