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

การควบคุมการเข้าถึงเครื่องมือ

เครื่องมือต้องตรวจสอบว่าผู้ใช้ (ไม่ใช่แค่เอเจนต์) มีสิทธิ์ใช้งาน — เอเจนต์ไม่ใช่ผู้มีสิทธิ์โดยตรง

การควบคุมการเข้าถึงเครื่องมือ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การป้องกันการแทรกคำสั่ง
  2. การกรองผลลัพธ์ (Llama Guard, NeMo)
  3. การเรียกใช้โค้ดของเอเจนต์ในสภาพแวดล้อมแยก
  4. การควบคุมการเข้าถึงเครื่องมือ
← กลับไปที่ AI Agents