news 2026/9/3 8:17:48

自定义 Agent Executor:为 Agent 穿上“业务战甲

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自定义 Agent Executor:为 Agent 穿上“业务战甲

一句话简介

本文将教你构建自定义Executor,不仅能管理 Agent 的对话生命周期,还能集成结构化输出、路由分发和自定义事件,打造真正的智能业务单元。


🎯 为什么需要自定义 Agent Executor?

虽然WorkflowBuilder可以直接添加AIAgent,但在复杂的业务场景下,我们往往需要更多控制权。

需求场景

直接使用 Agent

自定义 Agent Executor

对话历史

❌ 单次调用无记忆

✅ 管理AgentThread保持上下文

多重输入

❌ 仅支持单一文本

✅ 通过路由处理多种消息类型

输出控制

❌ 自由文本

✅ 强制 JSON 结构化输出

业务逻辑

❌ 纯 LLM 生成

✅ 嵌入评分、循环、熔断逻辑

核心理念:将 Agent 封装在 Executor 内部,让 LLM 的智能与代码的确定性完美融合。


💻 核心实现三部曲

1. 结构化输出与状态管理

首先,定义强类型的数据模型,并在 Executor 中持有 Agent 和对话线程。

// 定义数据模型 publicclassSloganResult { publicstring Slogan { get; set; } } // 自定义 Executor publicclassWriterExecutor : Executor { privatereadonly AIAgent _agent; privatereadonly AgentThread _thread; // ✅ 保持对话记忆 public WriterExecutor(AIAgent agent) : base("Writer") { _agent = agent; _thread = new AgentThread(); // 每个实例拥有独立线程 } }

2. 配置多路路由 (RouteBuilder)

一个智能节点往往需要处理多种类型的输入。例如:初次生成任务(string)和后续修改意见(Feedback)。

protected override RouteBuilder ConfigureRoutes(RouteBuilder builder) => builder // 处理初始需求 .AddHandler<string, SloganResult>(HandleInitialTaskAsync) // 处理反馈意见 .AddHandler<FeedbackResult, SloganResult>(HandleFeedbackAsync);

3. 实现业务逻辑 Handlers

在 Handler 中调用 Agent,利用结构化输出能力,并将结果转化为强类型对象。

private async ValueTask<SloganResult> HandleInitialTaskAsync( string task, IWorkflowContext context, CancellationToken ct) { // 1. 添加用户消息到线程 await _thread.AddUserMessageAsync($"任务:{task}"); // 2. 调用 Agent 并强制 JSON 输出 var response = await _agent.RunAsync(_thread, new AgentOptions { ResponseFormat = typeof(SloganResult) }, ct); // 3. 反序列化 var result = JsonSerializer.Deserialize<SloganResult>(response.Content); // 4.发布业务事件 await context.AddEventAsync(new SloganGeneratedEvent(result), ct); return result; }

🏢 典型场景:循环优化工作流

利用自定义 Executor,我们可以实现经典的Generator-Critic(生成-评价)循环模式。

关键点:

  • CriticExecutor:负责打分并提出修改意见。

  • 循环机制FeedbackResult被路由回WriterExecutor

  • 记忆增强:Writer 的_thread保存了之前的尝试,能理解“请根据这个意见修改”的指令。


🎯 总结

自定义 Agent Executor 是构建高级 Agentic Workflow 的基石。

  • 封装性:将 Prompt、配置和逻辑封装在一个类中。

  • 记忆力:通过AgentThread实现多轮对话状态管理。

  • 灵活性:多路由机制让节点能响应不同的“刺激”。

下一步,掌握了这些积木,你就可以搭建能够自主迭代、自我修正的复杂 AI 系统了。

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

Llama3-8B如何导出模型?HuggingFace上传指南

Llama3-8B如何导出模型&#xff1f;HuggingFace上传指南 1. 为什么需要导出和上传Llama3-8B模型&#xff1f; 你可能已经用过 Meta-Llama-3-8B-Instruct&#xff0c;也跑通了本地推理&#xff0c;但真正想把它用起来、分享出去、或者集成进自己的系统时&#xff0c;会发现一个…

作者头像 李华
网站建设 2026/9/3 0:00:53

5个强力技巧:用LeagueAkari智能工具提升游戏效率

5个强力技巧&#xff1a;用LeagueAkari智能工具提升游戏效率 【免费下载链接】LeagueAkari ✨兴趣使然的&#xff0c;功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari LeagueAkari是…

作者头像 李华
网站建设 2026/9/3 2:19:39

华为OD技术面真题 - JAVA开发 - 2

文章目录 说说JAVA中的容器框架ArrayList和LinkedList的区别 说说JAVA中的容器框架 JAVA中容器本质上是用于存储和管理一组对象的类或接口&#xff0c;作用为&#xff1a; 统一管理对象集合提供通用、规范的操作接口提升开发效率和代码可读性 大体分为两类Collection和Map &a…

作者头像 李华
网站建设 2026/9/3 7:30:25

IQuest-Coder-V1镜像一键部署:VS Code插件集成实战教程

IQuest-Coder-V1镜像一键部署&#xff1a;VS Code插件集成实战教程 1. 为什么你需要这个教程——写给正在敲代码的你 你是不是也经历过这些时刻&#xff1a; 写完一段逻辑复杂的函数&#xff0c;反复调试却卡在某个边界条件上&#xff1b;面对一个陌生开源库的API文档&#…

作者头像 李华
网站建设 2026/9/3 2:52:40

服装加工管理系统是什么?主要解决哪些行业痛点?

服装加工管理系统的定义及重要性分析 服装加工管理系统是一种专为服装制造企业量身打造的综合管理工具&#xff0c;旨在提高生产效率和优化信息流通。通过整合各个业务环节&#xff0c;该系统能够实现精准的管理和监控&#xff0c;帮助企业应对在生产流程中常见的问题&#xff…

作者头像 李华
网站建设 2026/9/2 22:05:21

FSMN VAD车载环境测试:行驶中通话片段捕捉准确率

FSMN VAD车载环境测试&#xff1a;行驶中通话片段捕捉准确率 语音活动检测&#xff08;VAD&#xff09;是车载语音系统中最基础也最关键的环节——它决定了系统能否在复杂行车环境中“听清”用户真正想说的话。嘈杂的引擎声、风噪、鸣笛、空调气流&#xff0c;甚至乘客交谈&am…

作者头像 李华