การบันทึกการเรียกใช้เครื่องมือและข้อมูลเข้า/ออก
เรียนรู้ว่าควรบันทึกอะไรในแต่ละขั้นตอน: ชื่อเครื่องมือ อาร์กิวเมนต์ข้อมูลเข้า ผลลัพธ์ เวลาแฝง ข้อผิดพลาด และรหัสช่วงหลัก
การบันทึกการเรียกใช้เครื่องมือและข้อมูลเข้า/ออก เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
สิ่งที่ควรบันทึกในแต่ละขั้นตอน
สำหรับแต่ละ span ให้บันทึกข้อมูลต่อไปนี้
- ชื่อขั้นตอน (llm_call, tool_call, retrieve)
- ข้อมูลนำเข้า (ข้อความ อาร์กิวเมนต์ของเครื่องมือ และ query)
- ข้อมูลส่งออก (คำตอบ และผลลัพธ์ของเครื่องมือ)
- ข้อมูลเมตา (โมเดล เวลาแฝง จำนวนโทเค็น และค่าใช้จ่าย)
- ข้อมูลข้อผิดพลาดหากทำงานล้มเหลว
ตัวช่วย span แบบเขียนเอง
หากไม่มีเฟรมเวิร์ก ตัวช่วยขั้นต่ำอาจมีลักษณะดังนี้
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การซ้อน span
ส่ง parent_id ต่อไปยังขั้นตอนถัดไป เพื่อให้ span ก่อตัวเป็นต้นไม้
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']):
...การบันทึกการเรียกใช้เครื่องมือ
โดยเฉพาะสำหรับการเรียกใช้เครื่องมือ ให้บันทึกข้อมูลต่อไปนี้
- ชื่อเครื่องมือ
- อาร์กิวเมนต์ (JSON)
- ผลลัพธ์ (JSON ซึ่งอาจถูกตัดทอน)
- เวลาแฝง
- ข้อผิดพลาด (ถ้ามี)
ตัดทอนข้อมูลขนาดใหญ่
ผลลัพธ์ของเครื่องมือบางรายการมีขนาดใหญ่มาก (HTML ขนาด 200KB) ให้ตัดทอนก่อนจัดเก็บ
def safe_payload(obj, max_chars=8000):
s = json.dumps(obj)
return s if len(s) <= max_chars else s[:max_chars] + '...[truncated]'การลบข้อมูล PII
ลบข้อมูลส่วนบุคคลก่อนจัดเก็บ:
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."))
ผลลัพธ์บันทึกแบบมีโครงสร้าง
สร้างระเบียน JSON หนึ่งรายการต่อ span — ส่งต่อไปยัง ELK, Loki, Datadog หรือ 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))
เชื่อมโยงกับเซสชันผู้ใช้
รวม session_id และ user_id ไว้ในทุก span เพื่อให้ภายหลังสามารถกรอง trace ตามผู้ใช้ได้
การสุ่มตัวอย่าง
สำหรับเอเจนต์ที่มีปริมาณการใช้งานสูง ให้สุ่มตัวอย่างดังนี้:
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)")
เล่นซ้ำจาก trace
บันทึกข้อมูลนำเข้าทั้งหมด (ข้อความ เครื่องมือ อาร์กิวเมนต์) เพื่อให้สามารถรัน trace ซ้ำด้วยพรอมต์ใหม่เพื่อทดสอบการปรับปรุงได้ นี่คือรากฐานของการพัฒนาที่ขับเคลื่อนด้วยการประเมิน
ตัดทอนข้อมูลขนาดใหญ่หรือไม่
เหตุใดจึงตัดทอนผลลัพธ์ขนาดใหญ่ของเครื่องมือในบันทึกการทำงาน
สรุป
ทุกขั้นตอน ข้อมูลนำเข้าทุกส่วน และผลลัพธ์ทุกอย่าง — มีโครงสร้าง ซ้อนกัน และผ่านการสุ่มตัวอย่าง นี่คือวัตถุดิบสำหรับทุกสิ่งในระบบการสังเกตการณ์
คำถามที่พบบ่อย
บทเรียน “การบันทึกการเรียกใช้เครื่องมือและข้อมูลเข้า/ออก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การบันทึกการเรียกใช้เครื่องมือและข้อมูลเข้า/ออก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การบันทึกการเรียกใช้เครื่องมือและข้อมูลเข้า/ออก”
เรียนรู้ว่าควรบันทึกอะไรในแต่ละขั้นตอน: ชื่อเครื่องมือ อาร์กิวเมนต์ข้อมูลเข้า ผลลัพธ์ เวลาแฝง ข้อผิดพลาด และรหัสช่วงหลัก คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การบันทึกการเรียกใช้เครื่องมือและข้อมูลเข้า/ออก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดเอเจนต์จึงต้องมีการติดตามร่องรอย
- การบันทึกการเรียกใช้เครื่องมือและข้อมูลเข้า/ออก
- เวลาแฝงและต้นทุนในแต่ละขั้นตอน
- การแสดงการทำงานของเอเจนต์ด้วยภาพ (Langfuse, LangSmith)