0Pricing
AI Agents · บทเรียน

เครื่องมือแบบทำซ้ำได้อย่างปลอดภัยและผลข้างเคียง

เอเจนต์อาจลองใหม่ได้ จึงควรออกแบบเครื่องมือไม่ให้การเรียกใช้ซ้ำทำให้เรียกเก็บเงินหรือส่งอีเมลซ้ำ

เครื่องมือแบบทำซ้ำได้อย่างปลอดภัยและผลข้างเคียง เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดไอดอมโพเทนซีจึงสำคัญ

ลูปของเอเจนต์อาจลองใหม่ หากเครื่องมือส่งอีเมลหรือเรียกเก็บเงินจากบัตรเครดิต การลองใหม่จะทำให้การกระทำนั้นเกิดซ้ำ ไอดอมโพเทนซีทำให้การ "ทำ X อีกครั้ง" ไม่ก่อให้เกิดผลใด ๆ เมื่อ X เกิดขึ้นแล้ว

ไอดอมโพเทนซีคืออะไร

การดำเนินการเป็น ไอดอมโพเทนต์ หากเรียกใช้ N ครั้งแล้วให้ผลเหมือนกับการเรียกใช้เพียงครั้งเดียว ตัวอย่างเช่น:

  • "ตั้งสถานะผู้ใช้เป็นใช้งานอยู่" — เป็นไอดอมโพเทนต์ (การตั้งเป็นใช้งานอยู่อีกครั้งไม่ทำอะไรเพิ่มเติม)
  • "เพิ่มค่าตัวนับทีละ 1" — ไม่ใช่ไอดอมโพเทนต์ (แต่ละครั้งจะเพิ่มอีก 1)

คีย์ไอดอมโพเทนซี

สำหรับการดำเนินการที่ไม่เป็นไอดอมโพเทนต์ เช่น การชำระเงินและอีเมล ให้ใช้คีย์ไอดอมโพเทนซี:

import uuid

def create_payment(amount, idempotency_key):
    # Stripe accepts this header — returns the existing payment if key was used
    return stripe.Charge.create(
        amount=amount,
        currency='usd',
        source=token,
        idempotency_key=idempotency_key
    )

สร้างคีย์จากเจตนา

ใช้แฮชของ (ชื่อเครื่องมือ อาร์กิวเมนต์ รหัสการทำงาน) เพื่อให้การลองใหม่ที่เหมือนกันใช้คีย์เดิม:

import hashlib, json

def intent_key(tool_name, args, run_id):
    payload = json.dumps([tool_name, args, run_id], sort_keys=True)
    return hashlib.sha256(payload.encode()).hexdigest()

print(intent_key('transfer_money', {'to': 'acc2', 'amount': 100}, 'run-1'))

รายการผลข้างเคียง

ระบุว่าเครื่องมือใดมีผลข้างเคียง:

  • SEND อีเมล / SMS
  • CHARGE / คืนเงิน
  • CREATE / DELETE แถวในฐานข้อมูล
  • POST ไปยัง API ภายนอกที่เปลี่ยนแปลงสถานะ

เครื่องมือที่อ่านอย่างเดียวเป็นไอดอมโพเทนต์โดยธรรมชาติ ให้เน้นการเขียนข้อมูล

ห่อหุ้มเครื่องมือที่มีผลข้างเคียง

เพิ่มชั้นไอดอมโพเทนซีไว้ในการนำเครื่องมือไปใช้:

def send_email(to, subject, body, run_id):
    key = intent_key('send_email', {'to': to, 'subject': subject, 'body': body}, run_id)
    if redis.set(f'sent:{key}', 1, nx=True, ex=86400):
        smtp.send(to, subject, body)
        return {'sent': True}
    return {'sent': False, 'reason': 'already-sent'}

ยืนยันก่อนดำเนินการ

สำหรับการดำเนินการที่มีความเสี่ยงสูง ให้เพิ่มขั้นตอนการยืนยัน:

def transfer_money(from_acc, to_acc, amount, confirmed=False):
    if not confirmed:
        return {'pending': True, 'msg': 'Call again with confirmed=True to proceed.'}
    return {'pending': False, 'msg': f'Transferred {amount} from {from_acc} to {to_acc}.'}

print(transfer_money('acc1', 'acc2', 100))
print(transfer_money('acc1', 'acc2', 100, confirmed=True))

เครื่องมือแบบสองระยะ

แยกเครื่องมือออกเป็นระยะ "ร่าง" และ "ยืนยันการดำเนินการ":

def draft_email(to, subject, body):
    draft_id = save_draft(to, subject, body)
    return {'draft_id': draft_id, 'preview': body[:200]}

def send_draft(draft_id):
    return smtp.send(load_draft(draft_id))

การดำเนินการชดเชย

หากไม่สามารถหลีกเลี่ยงผลข้างเคียงได้ ให้กำหนดเครื่องมือสำหรับ "ย้อนกลับ":

def refund_payment(payment_id):
    return stripe.Refund.create(payment=payment_id)
# Now an erroneous create_payment can be undone.

บันทึกการตรวจสอบ

เครื่องมือที่มีผลข้างเคียงทุกตัว MUST บันทึกว่าใครเป็นผู้เรียกใช้ ใช้อาร์กิวเมนต์ใด เมื่อใด และได้ผลลัพธ์อะไร ใช้บันทึกที่มีโครงสร้างซึ่งสามารถค้นหาได้ภายหลัง

งบประมาณผลข้างเคียงต่อการทำงาน

จำกัดจำนวนผลข้างเคียงต่อการทำงานแต่ละครั้งเพื่อเป็นมาตรการความปลอดภัย:

if state.side_effect_count >= 5:
    return {'error': 'Side-effect budget exhausted for this run.'}

โหมดทดลองการทำงาน

มีประโยชน์ในระหว่างการพัฒนา: เครื่องมือจะบันทึกสิ่งที่ WOULD ทำ แต่จะไม่ดำเนินการจริง:

import os
os.environ['DRY_RUN'] = '1'
DRY_RUN = os.getenv('DRY_RUN') == '1'

def send_email(to, subject, body):
    if DRY_RUN:
        print(f'would send email to {to}')
        return {'sent': False, 'dry_run': True}
    print(f'sending email to {to}')
    return {'sent': True, 'dry_run': False}

result = send_email('user@example.com', 'Hi', 'Hello there')
print(result)

คำจำกัดความ

คำว่า "ไอดอมโพเทนต์" หมายถึงอะไรสำหรับเครื่องมือ

สรุป

ระบุผลข้างเคียง ใช้คีย์ไอดอมโพเทนซี สร้างเครื่องมือแบบสองระยะและการดำเนินการชดเชย ตรวจสอบทุกอย่าง และใช้โหมดทดลองระหว่างพัฒนา

คำถามที่พบบ่อย

บทเรียน “เครื่องมือแบบทำซ้ำได้อย่างปลอดภัยและผลข้างเคียง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เครื่องมือแบบทำซ้ำได้อย่างปลอดภัยและผลข้างเคียง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เครื่องมือแบบทำซ้ำได้อย่างปลอดภัยและผลข้างเคียง”

เอเจนต์อาจลองใหม่ได้ จึงควรออกแบบเครื่องมือไม่ให้การเรียกใช้ซ้ำทำให้เรียกเก็บเงินหรือส่งอีเมลซ้ำ คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “เครื่องมือแบบทำซ้ำได้อย่างปลอดภัยและผลข้างเคียง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม

ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เครื่องมือแบบทำซ้ำได้อย่างปลอดภัยและผลข้างเคียง
  2. การลองใหม่ด้วยการหน่วงแบบทวีคูณ
  3. หมดเวลาและตัวตัดวงจร
  4. การตรวจสอบผลลัพธ์เครื่องมือ (Pydantic)
← กลับไปที่ AI Agents