Step 5 of 16
Protect risky function calls with approval requests, durable pending state, policy, and audit controls.
วาง approval หน้า side effect และใช้ middleware ดูแล policy ที่ agents หลายตัวใช้ร่วมกันครับ
Level: Advanced
Tool ที่ส่ง email, ลบข้อมูล, เปลี่ยนสิทธิ์ หรือสร้างค่าใช้จ่ายควรหยุดรอผู้ใช้ครับ Agent Framework ใช้ ApprovalRequiredAIFunction ครอบ function และคืน ToolApprovalRequestContent ให้ application ตัดสินใจ
เพิ่ม write tool ที่หยุดรอ approval, persist pending request และ execute ได้ครั้งเดียวหลังตรวจสิทธิ์ซ้ำครับ
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
AITool publishTool = new ApprovalRequiredAIFunction(
AIFunctionFactory.Create(PublishAnnouncementAsync));
AIAgent agent = projectClient.AsAIAgent(
model: model,
instructions: "Draft first. Publish only after approval.",
tools: [publishTool]);
หลัง run ให้ดึง approval requests จาก response:
AgentSession session = await agent.CreateSessionAsync();
AgentResponse response = await agent.RunAsync(
"Publish the deployment notice.", session);
var requests = response.Messages
.SelectMany(message => message.Contents)
.OfType<ToolApprovalRequestContent>()
.ToList();
UI ควรแสดง tool name, sanitized arguments, ผู้ขอ, ผลกระทบ และเวลาหมดอายุ จากนั้นส่ง request.CreateResponse(approved) กลับเข้า session เดิมครับ Persist pending request ก่อนรอ input และใช้ request ID ป้องกันการ approve ซ้ำ
Middleware เหมาะกับ concern ที่ใช้กับหลาย agents เช่น logging, redaction, policy และ timing ไม่ควรใส่ business decision ทั้งหมดไว้ใน prompt เพราะแก้ยากและตรวจสอบย้อนหลังลำบาก
ลำดับที่แนะนำ:
Approval คือ control หนึ่งชั้นครับ Tool handler ยังต้องตรวจ authorization อีกครั้งตอน execute เพราะสิทธิ์ของ user อาจเปลี่ยนระหว่างรอ
เพิ่ม test สำหรับ reject, timeout, duplicate approval, process restart และ argument tampering ก่อนต่อ tool เข้ากับ production service
ใช้ integration test จำลอง flow request -> pending -> approve -> execute และ request -> reject จากนั้น restart process ตอน pending แล้ว resume ด้วย session เดิมครับ ตรวจว่า duplicate approval คืนผลเดิมโดยไม่ทำ side effect รอบสอง
Approval record ต้องมี immutable tool name, argument hash, requester, approver, expiry, policy version และ idempotency key ผู้อนุมัติต้องเห็น sanitized arguments ที่จะ execute และระบบต้อง reject เมื่อ arguments เปลี่ยนหลัง approval
ส่ง approval store, API endpoints สำหรับ approve/reject, idempotent write tool, audit events และ failure tests