惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
爱范儿
爱范儿
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
P
Palo Alto Networks Blog
博客园 - 司徒正美
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
罗磊的独立博客
阮一峰的网络日志
阮一峰的网络日志
The Register - Security
The Register - Security
D
DataBreaches.Net
A
Arctic Wolf
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Privacy & Cybersecurity Law Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog
V
Vulnerabilities – Threatpost
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
T
Tor Project blog
GbyAI
GbyAI
Recent Announcements
Recent Announcements
T
The Blog of Author Tim Ferriss
Simon Willison's Weblog
Simon Willison's Weblog
Cyberwarzone
Cyberwarzone
C
Cisco Blogs
G
GRAHAM CLULEY
宝玉的分享
宝玉的分享
T
Threat Research - Cisco Blogs
C
Check Point Blog
W
WeLiveSecurity
F
Fortinet All Blogs
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
月光博客
月光博客
Project Zero
Project Zero
Know Your Adversary
Know Your Adversary
V
Visual Studio Blog
H
Help Net Security
H
Hacker News: Front Page
Webroot Blog
Webroot Blog
S
Securelist
酷 壳 – CoolShell
酷 壳 – CoolShell
O
OpenAI News
The Cloudflare Blog
Attack and Defense Labs
Attack and Defense Labs

博客园 - 「圣杰」

.NET+AI | Harness | MAF 1.4 发布,Harness Engineering 如约而至,智能体工程化更进一步 Microsoft Agent Framework 1.0 正式发布:Agent Skills 补齐后,.NET AI Agent 开发真正进入工程化时代 .NET+AI | Workflow | 核心概念速通(1) .NET+AI | 基于 Microsoft Agent Framework 一步步集成 Agent Skills,让你的 AI Agent 更智能 未来已来 | 写给 .NET 开发者的 2025 年度总结 从 MCP 到 Agent Skills,AI Ready 的 .NET 10 正当时 .NET+AI | MEAI | 自定义中间件(8) .NET+AI | MEAI | 上下文压缩(7) .NET+AI | MEAI | 会话缓存(6) .NET+AI | MEAI | ChatOptions 详解(5) AI 时代,.NET 开发者是向左还是向右? .NET+AI | MEAI | Function Caling 实操(4) .NET+AI | MEAI | Function Calling 基础(3) .NET+AI | MEAI | 提示工程基础(2) .NET+AI | MEAI | .NET 平台的 AI 底座 (1) .NET 搞 AI 不行? ​微软 AI Agent三剑客:AutoGen、Semantic Kernel与MEAI的协同演进 .NET+AI | eShopSupport 知多少 .NET + AI | Semantic Kernel vs Microsoft.Extensions.AI 极客时间上新 .NET + AI 体系课
.NET+AI | Agent | 人机协作(9)
「圣杰」 · 2025-12-03 · via 博客园 - 「圣杰」

MAF 审批 Agent 实战

一句话简介

通过 ApprovalRequiredAIFunction 为敏感工具加上人工审批环节,快速构建符合企业合规要求的 MAF 人机协作智能体。

🎯 核心收获

  • ✅ 区分高/低风险工具,一键套上审批保护层
  • ✅ 用 UserInputRequests + FunctionApprovalRequestContent 驱动审批循环
  • ✅ 同时兼容同步调用与流式响应,审批后继续执行原线程
  • ✅ 混合工具集成案例:IT 运维、银行转账、内容发布等

🧠 审批机制一图看懂

🛠️ 实现步骤

1. 标记敏感工具

普通工具函数(如资金转账、账户删除)先用 AIFunctionFactory.Create() 注册,随后再决定是否需要审批。

2. 添加审批包装

对高风险函数使用 new ApprovalRequiredAIFunction(innerFunction),Agent 仍像普通工具一样调用,但框架会在真正执行前抛出审批请求。

3. 处理审批循环

每次 RunAsyncRunAsync(messages, thread) 后,检查 response.UserInputRequests

  1. OfType<FunctionApprovalRequestContent>() 获取所有待批项目。
  2. 展示 FunctionCall.NameArguments,让人工做出决策。
  3. CreateResponse(bool approved) 生成审批结果,并封装为 ChatMessage
  4. 将这些消息回传给 Agent,直到没有新的审批请求为止。

4. 流式场景

流式接口使用 await agent.RunStreamingAsync(...).ToListAsync() 收集全部 ChatResponseUpdate,再从中提取审批请求;审批结束后再次流式调用即可继续输出。

💻 关键代码

// 1. 定义并包装敏感工具
var transferTool = AIFunctionFactory.Create(TransferMoney);
var approvalTool = new ApprovalRequiredAIFunction(transferTool);

// 2. 创建 Agent
var agent = chatClient.CreateAIAgent(
    instructions: "执行转账前必须获得用户确认",
    name: "BankAssistant",
    tools: [approvalTool]);

// 3. 审批循环
var thread = agent.GetNewThread();
var response = await agent.RunAsync(userRequest, thread);
var pending = response.UserInputRequests.ToList();

while (pending.Count > 0)
{
    var approvals = pending.OfType<FunctionApprovalRequestContent>();
    var replies = approvals
        .Select(req => req.CreateResponse(approved: true))
        .Select(content => new ChatMessage(ChatRole.User, [content]))
        .ToList();

    response = await agent.RunAsync(replies, thread);
    pending = response.UserInputRequests.ToList();
}

提示:在真实系统中应将 approved 由管理员输入决定,并记录审计日志。

🏢 企业级场景

场景 审批策略
💰 银行助手:转账、退款 所有资金操作默认要求审批;查询余额可直接返回
🏢 IT 助手:服务器操作 查询/诊断无需审批;RestartServerDeleteUser 必须人工确认
📢 内容发布:公告推送 发布、上线、群发均需审批;草稿保存与预览无需审批

混合工具技巧: 低风险工具直接注册,高风险工具使用 ApprovalRequiredAIFunction 包装即可共存。

✅ 最佳实践清单

  • 🛡️ 风险分级:仅对高风险函数引入审批,避免过度打扰
  • 🔁 while 循环:永远用循环处理 UserInputRequests,确保批量审批场景的完整性
  • 🧾 审计可追溯:保存函数名、参数、审批人、时间戳,满足合规要求
  • 🔄 线程持久化:审批可能跨小时甚至跨天,记得序列化 AgentThread 以便恢复上下文
  • 📡 流式收集:流式接口必须 ToListAsync() 后再解析审批内容

🎯 总结

  • ✅ ApprovalRequiredAIFunction 让敏感工具一键升级为“人机协同”模式
  • UserInputRequests + CreateResponse() 构成审批闭环,兼容同步与流式调用
  • ✅ 分类注册工具 + 审批循环 + 审计记录,才是企业可落地的整体解决方案