เครื่องมือแบบทำซ้ำได้อย่างปลอดภัยและผลข้างเคียง
เอเจนต์อาจลองใหม่ได้ จึงควรออกแบบเครื่องมือไม่ให้การเรียกใช้ซ้ำทำให้เรียกเก็บเงินหรือส่งอีเมลซ้ำ
เครื่องมือแบบทำซ้ำได้อย่างปลอดภัยและผลข้างเคียง เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เครื่องมือแบบทำซ้ำได้อย่างปลอดภัยและผลข้างเคียง
- การลองใหม่ด้วยการหน่วงแบบทวีคูณ
- หมดเวลาและตัวตัดวงจร
- การตรวจสอบผลลัพธ์เครื่องมือ (Pydantic)