news 2026/4/29 2:47:39

.NET+AI | Agent | 自定义 Agent (19)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
.NET+AI | Agent | 自定义 Agent (19)

自定义 Agent 实现:构建企业级智能体

一句话简介

通过继承 AIAgent 抽象类,实现 FAQ 自动回复、审批工作流、数据查询等企业级自定义 Agent,实现成本优化和业务控制。


🎯 何时需要自定义 Agent

场景

说明

收益

FAQ 自动回复

高频问题用规则匹配

成本降低 90%,响应提升 60 倍

遗留系统集成

包装 ERP/CRM 为 Agent

无缝集成,数据安全可控

测试模拟

返回固定测试数据

零成本,确定性输出

混合模式

规则优先,AI 降级

平衡成本与效果


📝 AIAgent 核心接口

public abstract class AIAgent { public abstract string? Name { get; } public abstract AgentThread GetNewThread(); public abstract AgentThread DeserializeThread(JsonElement serializedThread, ...); public abstract Task<AgentRunResponse> RunAsync( IEnumerable<ChatMessage> messages, AgentThread? thread = null, ...); public abstract IAsyncEnumerable<AgentRunResponseUpdate> RunStreamingAsync( IEnumerable<ChatMessage> messages, ...); }

💻 实战 1:FAQ Agent

零成本、毫秒级响应的 FAQ 自动回复

public classFaqAgent : AIAgent { privatereadonly Dictionary<string, string> _faqDatabase = new() { ["营业时间"] = "周一至周五 9:00-18:00", ["退货"] = "请登录账户 → 订单详情 → 申请退货", ["配送"] = "同城 24 小时,省内 2-3 天", }; publicoverridestring? Name => "FaqAgent"; public override async Task<AgentRunResponse> RunAsync( IEnumerable<ChatMessage> messages, ...) { var userText = messages.LastOrDefault()?.Text ?? ""; // 关键词匹配 var answer = _faqDatabase.FirstOrDefault( kvp => userText.Contains(kvp.Key)).Value; var responseText = answer ?? "抱歉,未找到相关 FAQ"; var responseMessage = new ChatMessage(ChatRole.Assistant, responseText) { AuthorName = this.DisplayName, MessageId = Guid.NewGuid().ToString("N") }; await thread.MessageStore.AddMessageAsync(messages.Concat([responseMessage]), ct); returnnew AgentRunResponse { Messages = [responseMessage] }; } }

效果对比:

指标

传统 AI Agent

FaqAgent

响应时间

1-3 秒

< 50 毫秒

单次成本

¥0.005

¥0

日处理 10 万次

¥500

¥0


💻 实战 2:审批工作流 Agent

多轮对话 + 规则引擎

public classApprovalAgent : AIAgent { privatereadonly List<ApprovalRule> _rules = new() { new() { Type = "请假", MaxDays = 3, Result = "自动通过" }, new() { Type = "请假", MaxDays = 7, Result = "需要主管审批" }, new() { Type = "报销", MaxAmount = 1000, Result = "自动通过" }, }; // 自定义 Thread 存储对话状态 public override AgentThread GetNewThread() => new ApprovalAgentThread(); private string ProcessConversation(ApprovalAgentThread thread, string userInput) { var state = thread.State; // 步骤 1: 识别审批类型 if (!state.HasType) { /* 询问类型 */ } // 步骤 2: 收集金额或天数 if (!state.HasAmount) { /* 询问数值 */ } // 步骤 3: 执行规则匹配 var rule = MatchRule(state.Type, state.Amount); return$"审批结果: {rule.Result}"; } }

💻 实战 3:混合模式 Agent

智能路由 + 降级策略

public classHybridAgent : AIAgent { privatereadonly FaqAgent _faqAgent = new(); privatereadonly DataQueryAgent _dataQueryAgent = new(); privatereadonly IChatClient _aiClient; public override async Task<AgentRunResponse> RunAsync(...) { var intent = ClassifyIntent(userText); // 意图识别 if (intent == "faq") { var response = await _faqAgent.RunAsync(userText); if (IsSuccessful(response)) return response; } if (intent == "data") { var response = await _dataQueryAgent.RunAsync(userText); if (IsSuccessful(response)) return response; } // 降级到 AI returnawait CallAI(userText); } }

成本优化效果:

  • 60% FAQ → ¥0

  • 30% 数据查询 → ¥0

  • 10% AI → 正常费用

  • 年度节省:¥16.2 万(日 10 万次)


🏢 RunAsync 实现检查清单

public override async Task<AgentRunResponse> RunAsync(...) { // ✅ 1. 确保线程存在 thread ??= GetNewThread(); // ✅ 2. 提取用户消息 var userText = messages.LastOrDefault()?.Text ?? ""; // ✅ 3. 执行业务逻辑 var responseText = ProcessLogic(userText); // ✅ 4. 设置消息属性 var responseMessage = new ChatMessage(ChatRole.Assistant, responseText) { AuthorName = this.DisplayName, MessageId = Guid.NewGuid().ToString("N") }; // ✅ 5. 通知线程(关键!) await thread.MessageStore.AddMessagesAsync(messages.Concat([responseMessage]), ct); // ✅ 6. 返回响应 returnnew AgentRunResponse { Messages = [responseMessage] }; }

🎯 总结

  • 5 个必须实现的方法:Name、GetNewThread、DeserializeThread、RunAsync、RunStreamingAsync

  • FAQ Agent:成本降低 100%,响应提升 60 倍

  • 审批 Agent:多轮对话 + 规则引擎 + 状态持久化

  • 混合 Agent:智能路由 + 降级策略,年节省 16 万


如需获取文章配套完整代码,可扫码咨询领取。👇

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:20:44

电子电路基础完整指南:串联与并联电路深度剖析

电子电路的“双生子”&#xff1a;串联与并联&#xff0c;从原理到实战全解析你有没有遇到过这样的情况&#xff1f;明明用了一模一样的两个电阻&#xff0c;接上电源后却发现电流不一样&#xff1b;或者LED灯串中一个不亮&#xff0c;整排都熄了——这背后其实藏着最基础、也最…

作者头像 李华
网站建设 2026/4/23 3:51:05

接手3个失败提示工程项目后,我总结出架构师必备的风险管理清单(附模板)

接手3个失败项目后,我总结出架构师必备的风险管理清单(附模板) 引言:那些年,我踩过的“风险坑” 去年一年,我先后接手了3个中途崩掉的项目: 电商项目大促期间,分布式事务失败导致1200笔订单“已支付但库存未扣减”,赔偿50万+丢失核心客户; 企业ERP项目因“过度设计…

作者头像 李华
网站建设 2026/4/23 5:17:32

生日贺卡语音化:让祝福更加真挚动人

生日贺卡语音化&#xff1a;让祝福更加真挚动人 在数字时代&#xff0c;我们早已习惯了用一句“生日快乐”配上表情包来传递祝福。但当亲人的生日到来时&#xff0c;你是否也曾想过——如果这张电子贺卡里传出的是你自己的声音&#xff0c;带着熟悉的语调和温柔的情绪&#xf…

作者头像 李华
网站建设 2026/4/27 4:42:54

Windows沙盒环境下Visual C++运行库部署全攻略

Windows沙盒环境下Visual C运行库部署全攻略 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 引言&#xff1a;隔离环境中的运行库困境 在现代化软件开发与测试流…

作者头像 李华
网站建设 2026/4/23 5:16:15

终极窗口尺寸调整指南:Window Resizer完整使用教程

终极窗口尺寸调整指南&#xff1a;Window Resizer完整使用教程 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否曾经遇到过某些应用程序窗口无法按照你的意愿调整大小&#x…

作者头像 李华
网站建设 2026/4/26 23:35:16

黑苹果实战指南:从零打造完美macOS系统体验

黑苹果实战指南&#xff1a;从零打造完美macOS系统体验 【免费下载链接】Hackintosh 国光的黑苹果安装教程&#xff1a;手把手教你配置 OpenCore 项目地址: https://gitcode.com/gh_mirrors/hac/Hackintosh 想要在普通PC上体验苹果系统的优雅与高效&#xff1f;黑苹果技…

作者头像 李华