การควบคุมการเข้าถึงเครื่องมือ
เครื่องมือต้องตรวจสอบว่าผู้ใช้ (ไม่ใช่แค่เอเจนต์) มีสิทธิ์ใช้งาน — เอเจนต์ไม่ใช่ผู้มีสิทธิ์โดยตรง
การควบคุมการเข้าถึงเครื่องมือ เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
เครื่องมือไม่ใช่ผู้มีสิทธิ์หลัก
โมเดล "เรียกใช้เครื่องมือ" แต่ ACTION จริงดำเนินการโดยโค้ดของคุณ ผู้ใช้ — ไม่ใช่เอเจนต์ — คือผู้มีสิทธิ์หลักซึ่งต้องนำสิทธิ์ของเขามาพิจารณา
อนุญาตโดยอิงจากตัวตนของ USER เท่านั้น ไม่ใช่เพียงเพราะ "เอเจนต์ตัดสินใจแล้ว"
Authorise at the Tool Boundary
def refund_order(order_id, *, user):
order = db.get_order(order_id)
if order.customer_id != user.id and not user.is_staff:
raise PermissionError(f'User {user.id} cannot refund order {order_id}')
return stripe.refund(order.payment_id)ส่งต่อบริบทผู้ใช้
ส่งออบเจ็กต์ผู้ใช้เข้าไปในการเรียกใช้เครื่องมือทุกครั้ง:
def dispatch(tool_call, user):
args = json.loads(tool_call.function.arguments)
fn = TOOLS[tool_call.function.name]
return fn(**args, user=user)สิทธิ์แยกตามเครื่องมือ
กำหนดว่าแต่ละบทบาทสามารถใช้เครื่องมือใดได้บ้าง:
ROLE_TOOLS = {
'customer': ['search_orders', 'open_ticket'],
'support': ['search_orders', 'refund_order', 'cancel_order'],
'admin': ['*']
}
visible_tools = [t for t in ALL_TOOLS if t.name in ROLE_TOOLS[user.role] or 'admin' in ROLE_TOOLS[user.role]]กำหนดขอบเขตการเข้าถึงข้อมูล
เครื่องมือที่ค้นหาข้อมูลในฐานข้อมูลต้องกำหนดขอบเขตตามผู้ใช้โดยอัตโนมัติ:
def search_orders(query, user):
# NEVER let the model bypass this WHERE clause
return db.query('SELECT * FROM orders WHERE customer_id = %s AND ...', (user.id,))ตรวจสอบการเรียกใช้เครื่องมือทุกครั้ง
บันทึกว่าใครทำอะไร เมื่อไร พร้อมอาร์กิวเมนต์ใด และได้ผลลัพธ์อะไร นี่คือร่องรอยทางนิติวิทยาศาสตร์ของคุณเมื่อเกิดข้อผิดพลาด:
audit_log({
'user_id': user.id,
'tool': tool_name,
'args': args,
'result_status': result.status,
'timestamp': now()
})ยืนยันการกระทำที่ทำลายข้อมูล
แม้เป็นผู้ใช้ที่ได้รับอนุญาต ก็ควรตรวจสอบการดำเนินการที่ทำลายข้อมูลซ้ำอีกครั้ง:
def delete_account(user_id, confirmed=False, user=None):
if not confirmed:
return {'requires_confirmation': True, 'msg': 'Confirm deletion of account.'}
db.execute('DELETE ...', (user_id,))เครื่องมือที่จำกัดขอบเขตด้วย OAuth / โทเค็น
สำหรับเอเจนต์ที่ดำเนินการแทนผู้ใช้ในบริการภายนอก ควรจำกัดขอบเขตของโทเค็น OAuth ให้แคบที่สุด:
# Token only has gmail.send scope, not gmail.read
send_email = build_with_token(user_token_scoped_send)ขอบเขตของบัญชีบริการ
บัญชีบริการของเอเจนต์เองควรมีสิทธิ์เท่าที่จำเป็นขั้นต่ำ:
- ผู้ใช้ฐานข้อมูลแบบอ่านอย่างเดียวสำหรับเครื่องมือวิเคราะห์
- บัคเก็ต S3 แยกตามลูกค้าแต่ละราย
- เครือข่ายที่แยกด้วย VPC
Rate Limits Per Tool
def ratelimit(key, per_user_per_day=10):
counts = {}
def decorator(func):
def wrapper(user_id, *args, **kwargs):
counts.setdefault(user_id, 0)
if counts[user_id] >= per_user_per_day:
print(f'{key}: user {user_id} rate limited')
return None
counts[user_id] += 1
return func(user_id, *args, **kwargs)
return wrapper
return decorator
@ratelimit(key='tool:refund', per_user_per_day=2)
def refund_order(user_id, order_id):
print(f'refunding order {order_id} for user {user_id}')
return True
for i in range(3):
refund_order('user1', f'order{i}')
ส่วนติดต่อผู้ใช้สำหรับจัดการสิทธิ์
แสดงให้ผู้ใช้เห็นว่าเอเจนต์สามารถทำอะไรแทนเขาได้บ้าง ให้ผู้ใช้เพิกถอนสิทธิ์ของเครื่องมือแต่ละรายการได้ เรื่องนี้สำคัญอย่างยิ่งต่อความไว้วางใจ
ยืนยันตัวตนใหม่สำหรับการดำเนินการสำคัญ
กำหนดให้เครื่องมือที่มีความอ่อนไหวต้องยืนยันตัวตนใหม่เสมอ (เข้าสู่ระบบครั้งล่าสุดไม่เกิน 5 นาที):
if tool.is_sensitive and user.last_auth_age_seconds > 300:
raise StaleAuthError('Please re-authenticate to perform this action.')ทดสอบการกำหนดสิทธิ์เช่นเดียวกับโค้ด
เขียน tests เพื่อยืนยันว่า "ผู้ใช้ A ไม่สามารถคืนเงินสำหรับคำสั่งซื้อของผู้ใช้ B ได้" — อย่าคิดไปเองว่าการควบคุมการเข้าถึงทำงานถูกต้อง เพราะสิ่งเหล่านี้เป็นแหล่งที่มาของบั๊กด้านความปลอดภัยของเอเจนต์อันดับหนึ่ง
หลักการตรวจสอบสิทธิ์
มีการตรวจสอบสิทธิ์ของใครเมื่อเอเจนต์เรียกใช้เครื่องมือ
สรุปทบทวน
ผู้ใช้คือผู้มีสิทธิ์หลัก ส่งต่อตัวตนของผู้ใช้ไปยังเครื่องมือทุกตัว กำหนดขอบเขตข้อมูลตามผู้ใช้ ตรวจสอบการเรียกใช้ทุกครั้ง ยืนยันการดำเนินการที่ทำลายข้อมูล และทดสอบการตรวจสอบสิทธิ์เช่นเดียวกับที่คุณทดสอบโค้ด
คำถามที่พบบ่อย
บทเรียน “การควบคุมการเข้าถึงเครื่องมือ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การควบคุมการเข้าถึงเครื่องมือ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การควบคุมการเข้าถึงเครื่องมือ”
เครื่องมือต้องตรวจสอบว่าผู้ใช้ (ไม่ใช่แค่เอเจนต์) มีสิทธิ์ใช้งาน — เอเจนต์ไม่ใช่ผู้มีสิทธิ์โดยตรง คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การควบคุมการเข้าถึงเครื่องมือ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การป้องกันการแทรกคำสั่ง
- การกรองผลลัพธ์ (Llama Guard, NeMo)
- การเรียกใช้โค้ดของเอเจนต์ในสภาพแวดล้อมแยก
- การควบคุมการเข้าถึงเครื่องมือ