Nighthawks项目揭秘:构建AI智能任务调度系统
- 🤖 AI驱动的调度:集成OpenAI GPT和Graphiti知识图谱,将自然语言转换为Cron表达式。
- 🧠 上下文感知执行:任务执行保留历史模式;系统根据上下文进行优化。
- 🏗️ 企业级架构:基于FastAPI构建,采用微服务设计,支持Docker和Kubernetes进行高可用、可扩展的生产环境部署。
- 📊 全面可观测性:深度集成Prometheus和Grafana,提供从应用到系统的全方位监控。
- 🔒 多层安全防护:提供JWT、API密钥、角色权限控制。
系统架构
Nighthawks遵循高可用、可扩展、安全可靠的设计原则。下面是其分层架构的概览。
+--------------------------------+
| 用户界面与接入层 |
| +-----------+ +-----------+ |
| | Web界面 |-->| RESTful API | |
| +-----------+ +-----------+ |
+--------------------------------+
|
v
+--------------------------------+
| 应用服务层 (FastAPI) |
| +-----------+ |
| | 主应用 |-----------------+
| +-----------+ |
| | | | | |
| v v v v |
| [认证][调度器][NLP][指标] |
+--------------------------------+
| | | |
| | | +------>[Prometheus]-->[Grafana]
| | |
| | +------------->[AI智能层: OpenAI, Graphiti]
| |
| +--------------------->[AI Agent]
| +--------------------->[执行日志]
|
+---------------------------->[数据存储: PostgreSQL, Redis]
关键模块
自然语言处理模块 (NLP)
该模块将用户意图解析为可执行的调度指令。当用户输入"每周五下午5点生成并发送销售报告"时,NLP模块调用OpenAI GPT模型,同时提取Cron表达式 0 17 * * 5 和核心任务"生成并发送销售报告"作为AI Agent的执行指令。解析准确率超过95%。
AI Agent与知识图谱
每个任务都由一个独立的AI Agent负责执行。Agent在执行前会查询Graphiti知识图谱,获取与该任务相关的历史信息、用户偏好或上下文数据。例如,如果之前的报告因数据源延迟而失败,Agent可能会在执行前先检查数据源状态。这种反馈循环使系统能够根据历史失败进行持续改进。
任务调度器 (APScheduler)
APScheduler作为底层执行引擎,提供稳定可靠的分布式任务调度能力。AI层负责"决定做什么和什么时候做",调度器则负责"准时执行"。
数据模型 (SQLModel)
SQLModel结合了Pydantic和SQLAlchemy的优点,提供类型安全的ORM操作,极大地提升开发效率和代码健壮性。
技术栈
| 层级 | 技术选型 | 说明 |
|---|---|---|
| Web框架 | FastAPI | 异步、高性能的API框架。 |
| AI引擎 | OpenAI GPT + Graphiti | GPT负责理解意图,Graphiti保存上下文知识。 |
| 任务调度 | APScheduler | 成熟、稳定,支持多种触发器和分布式部署。 |
| 容器化 | Docker + Kubernetes | 标准化的部署和管理,通过HPA实现自动扩展。 |
| 监控 | Prometheus + Grafana | 实时掌握系统状态和性能情况。 |
使用示例
1. 用户输入自然语言指令:
curl -X POST http://localhost:9527/api/v1/nlp/parse \
-d '{"text": "每个工作日的早上9点,检查服务器健康状况并发送邮件通知"}'
2. Nighthawks进行解析:
系统返回结构化的任务定义:
{
"success": true,
"task_name": "服务器健康检查",
"cron_expression": "0 9 * * 1-5",
"agent_prompt": "检查服务器健康状况,并将结果通过邮件发送给管理员。",
"confidence": 0.98
}
3. 创建并调度任务:
用户确认后,该任务被持久化到数据库,并由APScheduler进行调度。
4. 任务执行:
在每个工作日的早上9点,调度器触发对应的AI Agent。Agent首先查询知识图谱,可能会发现"上周的服务器B在9点时CPU占用率很高",于是它会优先检查服务器B。执行完健康检查后,它会生成报告并通过邮件发送。所有执行细节,包括Token消耗和执行时长,都会被记录用于未来的优化。