.Net基于NetCoreKevin框架 AI 与 Hangfire 集成:实现AI智能自动任务调度
.Net基于NetCoreKevin框架 AI 与 Hangfire 集成实现AI智能自动任务调度效果图参考源代码 NetCoreKevin框架下的kevin.AI.AgentFramework中的IKevinAITasksService模块基于.NET构建的企业级SaaSAI智能体应用架构采用前后端分离设计具备以下核心特性AI智能体框架RAG检索增强AI知识库AI智能体技能集成项目地址githubhttps://github.com/junkai-li/NetCoreKevinGitee: https://gitee.com/netkevin-li/NetCoreKevin1. 概述NetCoreKevin 是一个 AI Agent 框架内置了丰富的工具如 HTTP 请求、Python 执行、Shell 命令等。通过集成 Hangfire 分布式任务调度库AI 能够自主创建、管理和触发周期性自动任务让智能体不仅能实时响应还能按预定计划自动完成日常工作如定时生成报告、数据同步、内容总结等。本文将详细介绍如何在 NetCoreKevin 中实现 AI 与 Hangfire 的完美结合。2. 架构说明整体架构分为三层AI 工具层(KevinAIAllTools) 负责将服务接口中的方法注册为 AI 可调用的函数工具。任务服务接口(IKevinAITasksService) 定义了定时任务的增删改查及手动触发操作。任务执行层(KevinAITasksService) 基于 Hangfire 的IRecurringJobManager实现任务的持久化调度并通过RunTask方法真正执行任务内容可接入 AI 处理逻辑。调用流程用户自然语言指令 → AI Agent 解析 → 调用对应工具函数 → 操作 Hangfire 任务 → 定时/手动触发RunTask→ 执行实际任务可调用 AI 或其他服务。3. 环境与依赖3.1 安装 Hangfire需安装以下 NuGet 包根据存储后端选择相应包dotnetaddpackage Hangfire.Core dotnetaddpackage Hangfire.SqlServer# 以 SQL Server 为例也可选 Redis/PostgreSQL 等3.2 配置服务注册在Startup.cs或Program.cs中注册 Hangfire 服务、任务服务以及框架所需的其他服务services.AddHangfire(config{config.UseSqlServerStorage(YourConnectionString);});services.AddHangfireServer();// 启动 Hangfire 后台处理服务器// 注册自定义任务服务生命周期需与 Hangfire 匹配建议 Scoped 或 Singletonservices.AddScopedIKevinAITasksService,KevinAITasksService();// 确保 IHttpContextAccessor 已注入BaseService 依赖services.AddHttpContextAccessor();KevinAITasksService的构造函数注入了IRecurringJobManager和JobStorage这些由 Hangfire 自动提供。4. 核心代码解析4.1 任务服务接口IKevinAITasksService/// summary/// 用于给AI使用的自动任务服务接口提供自动任务相关的功能和操作/// 你可以让它在每天、每周、每月或者某个固定时间自动运行帮助你完成常见的日常工作。/// /summarypublicinterfaceIKevinAITasksService{/// summary/// 创建或更新一个周期性自动任务/// /summaryTaskstringAddOrUpdateCronTask([Description(任务名称不可为空)]stringname,[Description(任务内容不可为空)]stringcontent,[Description(Cron 表达式定义执行周期)]stringcronExpression);/// summary/// 移除周期性任务/// /summaryTaskstringRemoveCronTask([Description(任务名称)]stringname);/// summary/// 立即触发某个周期性任务一次/// /summaryTaskstringTriggerCronTask([Description(任务名称)]stringname);/// summary/// 获取当前用户的所有周期性任务列表/// /summaryTaskListstringGetTaskList();/// summary/// 执行具体的任务内容由 Hangfire 调度调用/// /summaryTaskstringRunTask(stringtaskName,stringtaskContent);}4.2 任务服务实现KevinAITasksService该实现通过 Hangfire 的IRecurringJobManager完成周期性任务的管理并用CurrentUser.UserId作为任务 ID 前缀实现用户隔离。publicclassKevinAITasksService:BaseService,IKevinAITasksService{privatereadonlyIRecurringJobManager_recurringJobManager;privatereadonlyJobStorage_jobStorage;publicKevinAITasksService(IHttpContextAccessorhttpContextAccessor,IRecurringJobManagerrecurringJobManager,JobStoragejobStorage):base(httpContextAccessor){_recurringJobManagerrecurringJobManager;_jobStoragejobStorage;}publicTaskstringAddOrUpdateCronTask(stringname,stringcontent,stringcronExpression){_recurringJobManager.AddOrUpdateIKevinAITasksService(recurringJobId:CurrentUser.UserIdname,// 用户隔离methodCall:ss.RunTask(name,content),cronExpression:cronExpression,options:newRecurringJobOptions{TimeZoneTimeZoneInfo.Local});returnTask.FromResult($添加或更新定时任务成功{name}-{content});}publicTaskListstringGetTaskList(){varstorage_jobStorage??JobStorage.Current;varconnectionstorage.GetConnection();varrecurringJobsconnection.GetRecurringJobs();varresultrecurringJobs.Where(tt.Id.StartsWith(CurrentUser.UserId.ToString())).Select(r$name:{r.Id}| Cron:{r.Cron}| Next:{r.NextExecution?.ToLocalTime():u}| Last:{r.LastExecution?.ToLocalTime():u}).ToList();returnTask.FromResult(result);}publicTaskstringRemoveCronTask(stringname){_recurringJobManager.RemoveIfExists(CurrentUser.UserIdname);returnTask.FromResult($移除定时任务成功{name});}publicTaskstringTriggerCronTask(stringname){_recurringJobManager.Trigger(CurrentUser.UserIdname);returnTask.FromResult($手动触发任务成功{name});}publicTaskstringRunTask(stringtaskName,stringtaskContent){// 此处可接入真实的 AI 处理逻辑例如// var aiService GetRequiredServiceIMyAIService();// string result await aiService.ProcessTaskAsync(taskContent);Console.WriteLine($[{CurrentUser.UserId}] 执行任务{taskName}内容{taskContent});returnTask.FromResult($任务已执行{taskName});}}注意RunTask方法是任务真正执行的入口可以根据项目需求注入其他服务如 AI 对话客户端、数据库操作等来完成复杂工作。4.3 AI 工具注册KevinAIAllTools在框架的工具聚合类中通过依赖注入获取IKevinAITasksService实例并将其方法注册为 AI 可识别的工具函数。publicclassKevinAIAllTools{publicasyncTaskListAIToolGetKevinAIAllTools(IServiceProviderserviceProvider){vartoolsnewListAITool{// ... 其他工具HTTP、Shell、Python 等};// 如果服务容器中存在 IKevinAITasksService注册任务相关工具vartaskServiceserviceProvider.GetServiceIKevinAITasksService();if(taskService!null){tools.Add(AIFunctionFactory.Create(taskService.AddOrUpdateCronTask,newAIFunctionFactoryOptions{NameAddOrUpdateCronTask,Description创建或更新一个周期性自动任务}));tools.Add(AIFunctionFactory.Create(taskService.RemoveCronTask,newAIFunctionFactoryOptions{NameRemoveCronTask,Description移除周期性任务}));tools.Add(AIFunctionFactory.Create(taskService.TriggerCronTask,newAIFunctionFactoryOptions{NameTriggerCronTask,Description立即触发某个周期性任务一次}));tools.Add(AIFunctionFactory.Create(taskService.GetTaskList,newAIFunctionFactoryOptions{NameGetTaskList,Description获取我的所有周期性任务列表}));}returntools;}}这样当 AI Agent 初始化时就会自动加载这些定时任务管理工具。5. AI 调用流程示例5.1 用户下达自然语言指令用户“帮我创建一个任务每天早上8点总结前一天的AI领域新闻并将结果保存到桌面。”5.2 AI Agent 内部处理识别意图创建周期性任务。提取参数任务名称每日AI新闻总结任务内容搜索并总结过去24小时AI领域的重要新闻生成简报并保存为桌面文件执行周期0 0 8 * * ?每天8点调用工具AddOrUpdateCronTask(name, content, cronExpression)底层通过 Hangfire 创建循环作业。5.3 Hangfire 定时触发当时间到达时Hangfire 会自动调用IKevinAITasksService.RunTask(每日AI新闻总结, 搜索并总结过去24小时...)。你可以在RunTask方法中实现真正的业务逻辑例如调用 OpenAI 接口生成总结再利用WriteTextToDesktop工具写入文件。5.4 其他管理操作查看任务用户说“我有哪些定时任务” → AI 调用GetTaskList返回列表。删除任务用户说“删除每日AI新闻总结” → AI 调用RemoveCronTask(每日AI新闻总结)。立即执行一次用户说“马上执行一下新闻总结任务” → AI 调用TriggerCronTask(每日AI新闻总结)。6. 用户隔离与安全用户 ID 前缀所有 Hangfire 循环作业的 ID 均采用CurrentUser.UserId name的形式确保不同用户的任务互不干扰。GetTaskList也通过过滤 ID 前缀返回当前用户的任务。Cron 表达式校验虽然代码未显式校验但建议在AddOrUpdateCronTask中增加格式检查防止非法表达式导致异常。权限控制KevinAITasksService依赖于当前登录用户通过IHttpContextAccessor确保任务管理限制在用户自身范围内。7. 总结与扩展通过 NetCoreKevin 框架与 Hangfire 的集成AI 智能体获得了“计划未来”的能力从被动的对话交互升级为能主动按计划执行任务的智能代理。你可以轻松扩展以下能力任务内容模板化将常用任务如周报生成、数据备份封装为固定流程由 AI 自动填充参数。任务链一个任务完成后触发另一个任务实现复杂工作流。失败重试利用 Hangfire 自带的重试机制保证任务可靠性。通知提醒执行完毕后通过邮件、消息等方式通知用户。这种设计极大地提升了 AI Agent 的实用性和自动化水平适用于个人助理、运维监控、数据分析等多种场景。

相关新闻

最新新闻

日新闻

周新闻

月新闻