0Pricing
AI Agents · Pelajaran

Mencatat Panggilan Alat dan Masukan/Keluaran

Ketahui hal yang perlu dicatat pada setiap langkah: nama alat, argumen masukan, keluaran, latensi, galat, dan id rentang induk.

Mencatat Panggilan Alat dan Masukan/Keluaran adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

Yang Dicatat pada Setiap Langkah

Untuk setiap span, catat:

  • Nama langkah (llm_call, tool_call, retrieve)
  • Masukan (pesan, argumen alat, query)
  • Keluaran (respons, hasil alat)
  • Metadata (model, latensi, jumlah token, biaya)
  • Informasi kesalahan jika gagal

Pembantu span Buatan Sendiri

Tanpa kerangka kerja, gunakan pembantu minimal:

from contextlib import contextmanager
import time, uuid

@contextmanager
def span(name, trace_id, parent_id=None):
    span_id = str(uuid.uuid4())
    start = time.time()
    record = {'trace_id': trace_id, 'span_id': span_id, 'parent_id': parent_id, 'name': name, 'start': start}
    try:
        yield record
    except Exception as e:
        record['error'] = str(e)
        raise
    finally:
        record['duration_ms'] = (time.time() - start) * 1000
        save_span(record)

Using It

trace_id = str(uuid.uuid4())
with span('llm_call_planner', trace_id) as s:
    s['model'] = 'gpt-4o-mini'
    s['messages_in'] = messages
    response = client.chat.completions.create(model='gpt-4o-mini', messages=messages)
    s['response'] = response.choices[0].message.content
    s['tokens_in'] = response.usage.prompt_tokens
    s['tokens_out'] = response.usage.completion_tokens

Penyusunan span Bertingkat

Teruskan parent_id agar span membentuk pohon:

with span('agent_step', trace_id) as parent:
    with span('llm_call', trace_id, parent_id=parent['span_id']):
        ...
    with span('tool_call:search', trace_id, parent_id=parent['span_id']):
        ...

Pencatatan Pemanggilan Alat

Khusus untuk pemanggilan alat, catat:

  • Nama alat
  • Argumen (JSON)
  • Hasil (JSON, mungkin dipotong)
  • Latensi
  • Kesalahan (jika ada)

Potong Payload Besar

Beberapa hasil alat berukuran sangat besar (HTML 200 KB). Potong sebelum disimpan:

def safe_payload(obj, max_chars=8000):
    s = json.dumps(obj)
    return s if len(s) <= max_chars else s[:max_chars] + '...[truncated]'

Penyuntingan PII

Hapus informasi pribadi sebelum menyimpannya:

import re
EMAIL_RE = re.compile(r'[\w\.-]+@[\w\.-]+')

def redact(text):
    return EMAIL_RE.sub('[email]', text)

print(redact("Contact me at alice@example.com for details."))

Keluaran Log Terstruktur

Keluarkan satu catatan JSON untuk setiap span — teruskan ke ELK, Loki, Datadog, atau BigQuery:

import json
import sys

def save_span(record):
    print(json.dumps(record), file=sys.stderr, flush=True)

demo_record = {'span': 'call_llm', 'duration_ms': 120, 'ok': True}
save_span(demo_record)
print("Logged span:", json.dumps(demo_record))

Kaitkan dengan Sesi Pengguna

Sertakan session_id dan user_id dalam setiap span agar Anda dapat memfilter trace berdasarkan pengguna nanti.

Pengambilan Sampel

Untuk agen dengan volume tinggi, ambil sampel:

import random

def should_trace(user_id):
    return random.random() < 0.10  # 10% of traces
# Always trace errors and slow runs.

random.seed(42)
sampled = sum(should_trace(i) for i in range(1000))
print(f"Traced {sampled} out of 1000 calls (~10% target)")

Putar Ulang dari Trace

Simpan input lengkap (pesan, alat, argumen) agar Anda dapat menjalankan kembali sebuah trace dengan instruksi baru untuk menguji perbaikan. Ini adalah dasar pengembangan yang berfokus pada evaluasi.

Potong Muatan Data Besar?

Mengapa keluaran alat yang besar perlu dipotong dalam log?

Ringkasan

Setiap langkah, setiap input, setiap output — terstruktur, bertingkat, dan diambil sampelnya. Inilah bahan mentah untuk semua hal lain dalam observabilitas.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mencatat Panggilan Alat dan Masukan/Keluaran” gratis?

Ya — teks lengkap “Mencatat Panggilan Alat dan Masukan/Keluaran” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mencatat Panggilan Alat dan Masukan/Keluaran”?

Ketahui hal yang perlu dicatat pada setiap langkah: nama alat, argumen masukan, keluaran, latensi, galat, dan id rentang induk. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Mencatat Panggilan Alat dan Masukan/Keluaran” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Agen Memerlukan Pelacakan
  2. Mencatat Panggilan Alat dan Masukan/Keluaran
  3. Latensi dan Biaya per Langkah
  4. Memvisualisasikan Eksekusi Agen (Langfuse, LangSmith)
← Kembali ke AI Agents