工程级参考答案(带完整注释):
// 生产级 Agent Confirmation 实现
type ActionSeverity = 'safe' | 'warning' | 'danger';
interface ActionPolicy {
requiresConfirmation: boolean;
severity: ActionSeverity;
confirmationMessage: string;
rollbackable: boolean;
}
class ProductionAgent {
private actionPolicies: Map;
private auditLog: Array<{ timestamp: Date; action: string; confirmed: boolean; result: any }> = [];
constructor() {
this.actionPolicies = new Map([
['delete', { requiresConfirmation: true, severity: 'danger', confirmationMessage: '此操作无法撤销', rollbackable: false }],
['transfer', { requiresConfirmation: true, severity: 'danger', confirmationMessage: '确认转账金额无误?', rollbackable: false }],
['send', { requiresConfirmation: true, severity: 'warning', confirmationMessage: '消息发送后无法编辑', rollbackable: false }],
['search', { requiresConfirmation: false, severity: 'safe', confirmationMessage: '', rollbackable: true }],
]);
}
async execute(action: string, params: any & { confirmed?: boolean } = {}): Promise {
const { confirmed = false, ...actionParams } = params;
const policy = this.actionPolicies.get(action);
if (!policy) {
throw new Error(`Unknown action: ${action}`);
}
if (policy.requiresConfirmation && !confirmed) {
throw new ConfirmationRequired({
action,
message: policy.confirmationMessage,
severity: policy.severity,
});
}
try {
const result = await this.performAction(action, actionParams);
this.auditLog.push({
timestamp: new Date(),
action,
confirmed,
result,
});
return result;
} catch (err) {
// 如果操作失败且可回滚,尝试回滚
if (policy.rollbackable) {
await this.rollback(action, actionParams);
}
throw err;
}
}
private async performAction(action: string, params: any): Promise {
// 实现实际的业务逻辑
return { success: true, action };
}
private async rollback(action: string, params: any): Promise {
console.log(`回滚 ${action}...`);
}
getAuditLog() {
return this.auditLog;
}
}