• [案例共创] 【案例共创】【第 10 期】华为云码道(CodeArts)代码智能体 + SKILL + FunctionGraph 构建多任务定时调度与管理工作流
    案例介绍一、概述本案例基于华为云码道(CodeArts)代码智能体,通过原创 SKILL快速构建一套多任务定时调度与管理工作流,结合华为云 FunctionGraph的事件驱动能力,实现定时任务的云端托管、统一管理和弹性执行。1.11 背景与痛点在企业日常运维和开发工作中,定时任务是不可或缺的基础能力,常见场景包括:每日凌晨自动备份数据库每小时统计业务数据并生成报表每周清理系统日志和临时文件每月自动发送账单和提醒邮件传统的定时任务解决方案存在以下痛点:单点故障风险:单机部署的 Cron 任务一旦服务器宕机,任务将全部中断缺乏统一管理:任务分散在不同服务器,难以集中监控和管理运维成本高:需要手动编写脚本、配置服务器、排查问题弹性不足:无法根据任务负载自动扩缩容1.2 适用对象企业开发者个人开发者高校学生1.3 案例时间本案例总时长预计45分钟。1.4 案例流程┌─────────────────────────────────────────────────────────┐│ Web管理界面 ││ 任务创建/编辑/删除 | 任务状态监控 | 执行日志查看 ││ 本地存储任务配置 | 本地缓存执行日志 │└───────────────────────────┬─────────────────────────────┘ │ HTTP API调用┌───────────────────────────▼─────────────────────────────┐│ 华为云FunctionGraph ││ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ││ │ 定时触发器 │ │ API触发器 │ │ 事件触发器 │ ││ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ ││ │ │ │ ││ ┌──────▼────────────────▼────────────────▼──────┐ ││ │ 任务调度与执行函数 │ ││ └───────────────┬───────────────────────────────┘ ││ │ ││ ┌───────────────▼───────────────┐ ││ │ 任务执行日志函数 │ ││ └───────────────────────────────┘ │└─────────────────────────────────────────────────────────┘1.5 开发环境准备注册并实名认证华为云账号:cid:link_8开通华为云 FunctionGraph 服务:cid:link_4下载并安装华为云码道 AI IDE:cid:link_3登录码道 AI IDE,配置华为云账号凭证这里以主账号用户举例,详情请见下方获取详情标题九本地安装 Node.js 16 + 和 npm 8+(用于前端开发)1.6 资源总览本案例预计花费0到+∞。体验完成后请及时释放资源,避免产生多余的费用。资源名称规格单价(元)华为云 FunctionGraph【必需】系统标配每月前100万次调用免费华为云码道(CodeArts)代码智能体【必需】通用体验版免费华为云 API 网关服务(APIG)【可选】按需计费最低4.75/小时三、多任务定时调度系统3.1 创建SKILL并部署到项目技能中1、核心 SKILL 设计与实现:2、将生成的SKILL技能部署到项目技能中进行使用3、使用技能开发多任务定时调度与管理工作流 3.2 部署项目代码1)项目级skill项目结构说明:【根据以上操作配置】.codeartsdoer/skills/├── function_creator/ # 函数创建实现SKILL│ ├── SKILL.md ├── trigger_creator/ # 触发器配置SKILL│ ├── SKILL.md ├── web_generator/ # Web界面生成实现SKILL│ ├── SKILL.md ├── workflow_deployer/ # 工作流部署实现SKILL│ ├── SKILL.md 2)生成的SKILL及py项目结构说明:FunctionGraph_SKILL2/ ├── function_creator/ # SKILL 1: 函数创建 │ ├── SKILL.md # SKILL说明文档 │ └── create_function.py # 函数创建实现 ├── trigger_creator/ # SKILL 2: 触发器配置 │ ├── SKILL.md # SKILL说明文档 │ └── create_trigger.py # 触发器配置实现 ├── web_generator/ # SKILL 3: Web界面生成 │ ├── SKILL.md # SKILL说明文档 │ └── generate_web.py # Web界面生成实现 ├── workflow_deployer/ # SKILL 4: 工作流一键部署 │ ├── SKILL.md # SKILL说明文档 │ └── deploy_workflow.py # 工作流部署实现 └── README.md # 项目说明3)多任务定时调度系统项目结构说明: functiongraph-scheduler/├── backend/ # 后端代码│ ├── config.py # 华为云配置│ ├── task_executor.py # 任务执行器│ ├── scheduler_manager.py # 调度管理器│ ├── api_handler.py # API处理函数│ ├── deploy.py # 部署脚本│ ├── deployment_config.json # 部署配置│ ├── requirements.txt # Python依赖│ └── tests/ # 测试用例│ └── test_tasks.py├── frontend/ # 前端代码│ ├── src/│ │ ├── views/ # 页面组件│ │ ├── components/ # UI组件│ │ ├── stores/ # 状态管理│ │ ├── utils/ # 工具函数│ │ ├── types/ # 类型定义│ │ └── api/ # API接口│ ├── package.json│ └── vite.config.ts└── README.md功能特性1. 后端功能任务执行器: 接收任务配置,执行对应类型的任务调度管理器: 定时检查任务调度时间,触发到期任务API处理函数: 处理来自Web前端的HTTP请求2. 前端功能任务管理: 添加、编辑、删除、启用/禁用任务Cron编辑器: 可视化选择和编辑Cron表达式执行日志: 本地展示任务执行历史和日志数据统计: 展示任务执行统计信息配置导入导出: 支持配置的导入导出3. 支持的任务类型数据库备份: 定时备份数据库数据统计: 定时统计数据指标日志清理: 定时清理过期日志报告生成: 定时生成报告数据同步: 定时同步数据4)下载源码通过git下载源码到本地,本案例共设计 4 个原创 SKILL,SKILL及项目代码全部上传至 GitCode项目中,代码仓地址:cid:link_2四. 工作流整体流程Web端配置任务 → 定时/API事件触发 → 任务调度函数执行 → 返回执行结果 → Web端展示日志4.1 详细步骤操作步骤 1:创建任务调度函数登录华为云 FunctionGraph 控制台点击 “创建函数”,选择 “空白函数”函数名称:task_executor,运行时:Python 3.10代码输入方式:在线编辑,粘贴 backend/task_scheduler.py 代码配置函数执行超时时间:300 秒配置函数内存:128MB点击 “创建函数”步骤 2:配置定时触发器在函数详情页,点击 “触发器” 标签点击 “创建触发器”,触发器类型:“定时触发器”触发器名称:every-minute-triggerCron 表达式:0 */5 * * * ?(每五分钟执行一次)点击 “确定”步骤 3【可选】:配置 API 触发器#架构流程前端 → API网关 → api-handler函数 → 后端处理点击 “创建触发器”,触发器类型:“API 网关 (APIG)”选择 “新建 API”请求方法:POST,认证方式:无认证(测试用,生产环境建议使用 IAM 认证)开启 “跨域资源共享 (CORS)”点击 “确定”,记录 API 调用地址注意!不配置时受影响的功能:Web 端无法手动触发任务Web 端无法实时获取任务执行结果和日志Web 端无法动态修改任务配置(只能在代码或控制台修改)注意!:生产环境中建议配置,这样即可在我们生成的Web进行触发任务,测试可不配置,但是Web端实用功能会受影响目前后端已通过华为云SDK及凭证配置,后期拓展可通过后端转发处理,也可达到同样的效果步骤 4:Web 端任务配置示例在 Web 管理界面中添加以下测试任务:{ "tasks": [ { "id": "db-backup", "name": "数据库每日备份", "cron": "0 0 2 * * ?", "command": "python backup_db.py", "enabled": true, "lastExecutionTime": "", "nextExecutionTime": "2026-04-14 02:00:00", "status": "待执行" }, { "id": "data-statistics", "name": "每小时数据统计", "cron": "0 0 * * * ?", "command": "python statistics.py", "enabled": true, "lastExecutionTime": "", "nextExecutionTime": "2026-04-13 15:00:00", "status": "待执行" }, { "id": "log-cleanup", "name": "每周日志清理", "cron": "0 0 0 ? * SUN", "command": "python cleanup_logs.py", "enabled": true, "lastExecutionTime": "", "nextExecutionTime": "2026-04-20 00:00:00", "status": "待执行" } ]}五、Web 管理界面实现5.1 界面功能任务管理:创建、编辑、删除、启用 / 禁用定时任务任务监控:查看任务的执行状态、上次执行时间、下次执行时间日志查看:查看任务的执行日志和错误信息手动触发:支持手动立即执行指定任务本地存储:所有任务配置和执行日志存储在浏览器 localStorage 中5.2 后端部署函数步骤在 backend 目录执行 pip install -r requirements.txt 安装依赖配置访问凭证到系统环境变量或者 backend\config.py ,建议优先配置到系统环境变量在 backend 目录运行 python deploy.py5.3 前端部署步骤在 frontend 目录执行 npm install 安装依赖修改 src/api/task.ts 文件,配置 API 网关地址执行 npm run dev 本地运行测试执行 npm run build 打包前端代码将 dist 目录下的文件部署到任意静态网站托管服务或本地运行六、效果展示6.1 任务管理界面6.2 任务执行日志6.3 FunctionGraph 控制台七、拓展建议7.1 接入华为云 APIG 实现Web功能联动如果需要实现 Web 端与云端定时任务的实时交互(手动触发任务、动态修改配置、实时获取执行日志),可以按照以下流程接入华为云 API 网关服务:开通华为云 API 网关服务:cid:link_5在 FunctionGraph 函数详情页建议创建 API 网关服务专享服务 (APIG)(华为云API网关共享版已于2025年04月30日00:00(北京时间)在中国站正式退市) 触发器,选择 “无认证” 安全方式、POST 请求方法并开启跨域资源共享 (CORS)修改对应函数,添加跨域响应头处理,支持解析 HTTP 请求体中的任务配置参数修改 Web 管理界面,配置 API 调用地址,添加手动触发任务、实时拉取日志、云端同步任务配置功能7.2 接入华为云 SMN 告警通知如果需要实现任务失败时的邮件 / 短信告警通知,可以按照以下流程接入华为云 SMN 服务:开通华为云 SMN 服务:cid:link_6创建 SMN 主题,添加邮件 / 短信订阅者创建task-alerter函数,通过码道智能体实现 SMN 消息发送功能任务执行失败时,调用task-alerter函数发送告警通知7.3 接入华为云 OBS 持久化存储如果需要持久化存储任务配置和执行日志,可以按照以下流程接入华为云 OBS 服务:开通华为云 OBS 服务:cid:link_7创建 OBS 存储桶,配置访问权限修改task_executor,通过码道智能体将数据写入 OBS通过码道智能体修改 Web 管理界面,从 OBS 读取任务配置和执行日志八、总结与展望本案例基于华为云码道代码智能体和 SKILL 技术,快速构建了一套完整的多任务定时调度与管理工作流,充分发挥了 FunctionGraph 事件驱动、按需供给的优势。相比传统的定时任务解决方案,本方案具有以下优势:高可用:云端托管,无单点故障风险易管理:统一的 Web 管理界面,集中监控和管理低成本:按需付费【每月前100万次调用免费】,只有任务执行时才产生费用易扩展:支持添加任意数量的任务和触发器快速部署:通过 SKILL 一键部署完整工作流未来可以进一步扩展的功能:支持更多类型的触发器(如消息队列触发器、数据库触发器)支持任务依赖和工作流编排支持任务执行历史统计和可视化支持多租户和权限管理九、主账号获取 AK/SK/区域项目ID登录华为云控制台访问华为云官网:cid:link_8点击右上角 “登录” 按钮,输入账号密码完成登录华为云进入 “我的凭证” 页面登录后,将鼠标移至页面右上角的用户名处,在下拉列表中选择 "我的凭证"华为云管理访问密钥在 “我的凭证” 页面,点击 “访问密钥” 页签点击 “新增访问密钥” 按钮华为云身份验证输入登录密码和短信验证码(如开启了操作保护)点击 “确定” 按钮华为云下载密钥文件浏览器会自动下载credentials.csv文件(Excel 格式)重要提示:SK 仅在下载的文件中可见,控制台无法再次查看,务必妥善保存华为云查看 AK/SK打开下载的 CSV 文件,即可获取完整的Access Key (AK) 和 Secret Key (SK)查看区域项目ID十、活动链接【案例共创】【第 10 期】华为云码道(CodeArts)代码智能体 + SKILL 完成应用开发 / 调试实践cid:link_1附件:完整项目代码及SKILL 文件:cid:link_2十一、释放资源如果涉及云资源或者付费资源,需要在对应资源处进行释放
  • [区域初赛赛题问题] 求助:为啥每次提交都是328800?是哪里没有考虑到吗?
    力竭了,前前后后改了好多版,结果就只是328800,求大佬指点迷津
  • [区域初赛赛题问题] 输出结果问题
    我设置了8位小数但是为什么交互器还是只输出5位小数呢?
  • [问题求助] MatePad Edge 装不了
    今天客服说codearts,不支持matepad edge。为啥自家电脑都不支持?
  • [区域初赛赛题问题] 标准答案是最短向量使得平移后重叠面积小于 1e-8 还是完全不重叠
    如题,按照两种标准来做,向量长度偏差可以超过 1e-4,想问一下标准答案是满足哪种标准的
  • [区域初赛赛题问题] 正式赛数据规模是否会改变
    Q&A提到:单个样例需所有测试点全部正确方可计分,否则该样本得分为0。那请问正式赛单个样例的询问次数还是现在的 10000 个的规模吗,还是会因为评分规则改变而缩小
  • [区域初赛赛题问题] 数据范围
    数据范围都不给这合理吗
  • [区域初赛赛题问题] .out数据问题
    请问.out文件不下发吗?没有.out文件的话,demo好像也无法运行?
  • 报错
    $ npm install @sap/hana-client && exit 0 npm error code 255 npm error path /storage/Users/currentUser/.local/share/vscode-sqltools/node_modules/@sap/hana-client npm error command failed npm error command sh -c node checkbuild.js npm error FATAL ERROR: A fatal error occurred during install. npm error The "path" argument must be of type string. Received null npm error /storage/Users/currentUser/.local/share/vscode-sqltools/node_modules/@sap/hana-client/lib/index.js:648 npm error db.__stopAllWork(); npm error ^ npm error npm error TypeError: Cannot read properties of null (reading '__stopAllWork') npm error at process.<anonymous> (/storage/Users/currentUser/.local/share/vscode-sqltools/node_modules/@sap/hana-client/lib/index.js:648:8) npm error at process.emit (node:events:508:28) npm error at process.exit (node:internal/process/per_thread:236:15) npm error at Object.<anonymous> (/storage/Users/currentUser/.local/share/vscode-sqltools/node_modules/@sap/hana-client/checkbuild.js:30:13) npm error at Module._compile (node:internal/modules/cjs/loader:1761:14) npm error at Module._extensions..js (node:internal/modules/cjs/loader:1893:10) npm error at Module.load (node:internal/modules/cjs/loader:1481:32) npm error at Module._load (node:internal/modules/cjs/loader:1300:12) npm error at TracingChannel.traceSync (node:diagnostics_channel:328:14) npm error at wrapModuleLoad (node:internal/modules/cjs/loader:245:24) npm error npm error Node.js v24.11.1 npm error A complete log of this run can be found in: /storage/Users/currentUser/.npm/_logs/2026-01-23T01_57_11_695Z-debug-0.log
  • [互动交流] 无法使用和运行python和jupyter notebook
    无法使用和运行python和jupyter notebook,折叠电脑
  • [问题求助] AppCube新建高级页面拖入组件失败
    AppCube新建高级页面拖入组件失败
  • [问题求助] appcube的这个修改方法,怎么对isAgree进行修改,这样写法是错的
    let cccc = sys.invokeSimpleBO("Person", "updatePerson", {            "id": '0I05000001EP99pvfQGG',            "personAttribute": [                {                    "action": "UPDATE",                    "attributeCode": "isAgree",                    "attributeValue": "是"                }            ]        }, "0.1.0")
  • [问题求助] appcube向钉钉推送消息怎么做到这种样式
    appcube向钉钉推送消息怎么做到这种样式
  • [问题求助] Appcude的脚本有分页插件吗
    Appcude的脚本有分页插件吗
  • [问题求助] appcude怎么实现RSA加密算法
    链接,https://e-cloudstore.com/doc.html?appId=af09c25938714c26b9736f535ca20fc9#1%E3%80%81%E5%BC%95%E5%85%A5RSA%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95%E5%B7%A5%E5%85%B7jar%E5%8C%85%E5%88%B0%E5%BC%82%E6%9E%84%E7%B3%BB%E7%BB%9F