• [互动交流] AI 画图,我们给的是可编辑矢量图——不是一张像素图
    AI 画图,我们给的是可编辑矢量图——不是一张像素图引言:「AI 画图」正在说两件完全不同的事2024 年以来,「用 AI 画图」几乎成了默认表述。但打开不同产品,你得到的可能是 三种完全不同的东西:一张 1024×1024 的 PNG——节点文字改不了,线条调不了,放大发糊;这是 AI 文生图;一块 通用白板或设计 Canvas——Figma、Miro、Excalidraw、甚至 HTML5 <canvas>:能画、能拖,但 AI 往往只帮你「出一张 SVG/截图」,不懂你的图在表达什么结构(哪是顶点、哪条边、拓扑对不对);或者一套 图结构文档里的矢量对象——每个节点、每条边、每段标注都是带 ID 的独立元素,拖得动、改得动、导出后仍是矢量,且 AI 改的是「结构」而不是「像素或笔迹」。DrawFig(drawfig)从第一天起,选择的永远是第三种。我们不是「AI 文生图」工具,也不是「再做一个空白 Canvas 让你自己拖」。我们提供的是:面向科研制图的结构化矢量文档 + AI 画布操作——你用自然语言描述拓扑与布局,AI 把意图编译成可执行的图操作(建点、连线、标号、对齐),落在 mxGraph 图模型上;你拿到的是 可编辑、可导出 TikZ、可反复改拓扑的图稿,而不是一张像素图,也不是一堆难以维护的松散路径。这篇文章想把这个区别讲透:为什么仅有「矢量 Canvas」还不够;DrawFig 真正的差异化在哪里;以及它和文生图、通用白板、纯手动 draw.io 分别差在哪一步。一、先分清:矢量图 vs 像素图,差别不只是「清不清楚」1.1 像素图(Raster):好看,但往往是「死图」像素图由固定分辨率的色点阵列构成——PNG、JPEG、WebP,以及大多数「AI 文生图」模型的默认输出,都属于这一类。优点: 表现力强,照片、插画、复杂光影可以一步到位。对学术场景的核心问题:问题具体表现不可结构化编辑想把节点 B 改成 C?通常只能重新生成整张图,或进 Photoshop 手抠缩放失真论文双栏放大、印刷 300 dpi 时,线条和文字边缘发虚与 LaTeX 字体不一致位图里的字体与正文 Computer Modern / Times 无法统一无法导出 TikZ审稿人要求矢量终稿时,位图需要整图重画版本迭代成本高导师说「加一条边、改一个标签」= 往往从头再来一句话:像素图适合「定稿后的展示」,不适合「还在改结构的科研制图」。1.2 矢量图(Vector):每个元素都有「身份」矢量图用数学描述几何——圆是圆心+半径,线段是端点坐标,文字是字体轮廓。SVG、PDF 矢量层、TikZ 代码、draw.io 的 .drawio 文件,本质都是矢量。对学术场景的核心价值:任意缩放不失真:投稿、答辩投影、海报打印,线条始终锐利;元素级编辑:移动一个节点,相连的边自动跟随;改标签不影响拓扑;与论文工作流对齐:可导出 TikZ,嵌入 LaTeX 与正文同编译;可 diff、可协作:图稿是结构化数据,不是一张 flatten 后的图片。DrawFig 的画布基于成熟的 draw.io 引擎,底层是 mxGraph 图结构模型:每个顶点(vertex)、边(edge)、文本(text)都是带 ID 的单元格(cell),边知道连的是哪两个点——这是「图文档」,不是一屏像素,也不是一堆互不关联的钢笔路径。1.3 一张表看懂:你真正需要哪一种?维度像素图 / AI 文生图通用 Canvas / 白板DrawFig 结构化图文档输出形态栅格图像(PNG 等)多为 SVG/JSON,结构语义弱图模型 + TikZ/SVG/PDFAI 的角色直接「画像素」常生成静态 SVG 或贴图理解拓扑,执行建点/连线/标号等 op改一个节点标签困难一般可以,但 AI 难增量改双击或 setVertexLabels改拓扑(加边/删点)困难手工为主,AI 易「重画一张」拖拽或自然语言 增量 op图论语义(K5、二分图…)无无专用表达graphBrief 等结构化描述论文 / LaTeX\includegraphics很少原生 TikZTikZ 双向导入导出适合场景插画、概念艺术设计稿、头脑风暴图论图、算法图、架构拓扑、论文插图仅有「矢量 Canvas」不够——科研制图还要「结构可解析、改稿可增量、终稿可进 LaTeX」。DrawFig 把这三件事和 AI 绑在一起,才是差异化所在。一点五、「Canvas」三个字,我们指的不是同一回事很多人听到 Canvas,会想到:大家说的 Canvas本质和 DrawFig 的关系HTML5 Canvas浏览器里的 像素位图 API,画完就是色点我们 不用 这条路出图Figma / Miro 白板设计协作 Canvas,对象可拖,但偏 UI/流程美学我们聚焦 论文级图论与拓扑,不是 UI 设计Excalidraw 等手绘 Canvas矢量笔迹,风格像手绘白板我们偏 精确节点/边/权重,并导出 TikZdraw.io 手动编辑器同款 mxGraph 矢量引擎,纯手拖DrawFig 在其上 加 AI 结构规划 + 学术导出DrawFig AI 画布自然语言 → 图操作计划 → mxGraph cell这是我们的产品层:AI 懂结构,不是懂像素所以:「有个 Canvas 就能画」不是护城河。 护城河是——图结构优先:存的是顶点、边、标签与连接关系,不是 flatten 后的外观;AI 操作的是语义:说「加一条 A→D 的边」会执行 insertShapes / 改 graphBrief,而不是重新 rasterize 一张图;学术闭环:同一文档可视觉编辑、可导出 TikZ、可再导入修改,与 LaTeX 字体与编译链对齐;图论原生:完全图、二分图、带权有向图、函数曲线等有 一等公民 的描述与展开,不是让 LLM 猜坐标。一句话:别人给你一块布;我们给你一份「可编译、可改拓扑、可进论文」的图结构文档,AI 是这份文档的协作者。二、DrawFig 的 AI:操作图结构,不是渲染像素、也不是「重画一张 SVG」这是最容易被误解的一点:DrawFig 与 Midjourney 等不同,也和「在通用 Canvas 里贴一张 AI 生成的 SVG」不同。2.1 「AI 画布」= 自然语言 → 图操作计划 → 图结构 cellDrawFig 的 AI 能力(AI 画布 / AI 操作)走的是 「规划—执行」 管线——AI 的输出是 操作列表或 graphBrief,不是图像文件:你在对话框里描述意图(中英文均可)例:「画一个有 6 个节点的有向图,A→B→C,A→D,使用层次布局。」AI 画布服务解析为结构化计划返回 actions(逐步操作)、graphBrief(图论/流程图/函数图等 带类型语义 的简图描述)、或完整的 draw.io XML。浏览器内插件在图文档上执行创建矩形网格图、插入形状、设置箭头模式、对齐顶点、修改标签……每一步都落在 mxGraph 的 vertex/edge cell 上,边仍绑定端点。你继续手工微调AI 出的是「80 分初稿」,剩下 20 分用拖拽、对齐、样式面板完成——没有「生成一张图然后结束」这一步,也没有「换 prompt 整图重抽」。和「通用 Canvas + AI」的典型差别:后者常把 LLM 输出当作 一整块 SVG/PNG 贴上去;DrawFig 让 LLM 输出 可审查、可单步撤销的图 op,与侧栏手工按钮同一套语义。技术栈上,ai-canvas-service 的 /v1/plan 负责规划 JSON;drawfigure-ai-canvas.js 负责执行——AI 说的「加边」和你点的「连线」改的是同一份图结构。2.2 AI 能做什么:结构化、可组合、可审查当前 AI 画布擅长的是 有明确结构的图,例如:类型示例描述AI 输出图论图完全图 K5、二分图 K(3,4)、带权有向图顶点 + 边 + 标签,可继续拖布局流程图开始→判断→两个分支→合并→结束flowchart 展开为形状与连线函数曲线y=sin(x),x 从 -π 到 π,带坐标系采样折线 + 坐标轴,仍是矢量示意图客户端→网关→三后端→数据库schematic 拓扑,节点可逐个改文案增量编辑「把选中的顶点标号改成 v1,v2,v3」setVertexLabels 等 op,不重建整图支持的操作包括(节选):创建图网格、插入形状、删除选中、设置样式、图论箭头模式、顶点对齐与分布、插入旁注文本、调用编辑器动作等。每一个 op 都对应图文档里真实 cell 的增删改,而不是对一张位图做滤镜,也不是替换整个 SVG 图层。2.3 AI 不做什么:我们不替你「文生图」以下需求 不是 DrawFig AI 画布的设计目标:「画一张赛博朋克风格的论文封面插画」→ 请用文生图工具;「生成一张看起来很像 Nature 配图的照片级细胞图」→ 请用 BioRender 等专业生物插画平台;「给我一张 4K 渲染的概念艺术图」→ 那是像素生成模型的工作。DrawFig 专注 结构可解析、元素可编辑、终稿可矢量导出 的学术与工程制图。把 AI 用在「理解拓扑与布局意图」,而不是「猜测像素颜色」,这是我们刻意的产品边界——也是与「AI 绘图 hype」划清界限的地方。三、为什么「可编辑」和「矢量」必须绑在一起?有人可能会问:AI 能不能先生成矢量 SVG,再导入编辑?理论上可以,但实践中科研用户要的是 端到端可控:3.1 从 AI 初稿到定稿:典型五步(全程矢量)自然语言描述 ↓ AI 画布生成矢量初稿(节点/边/标签均为独立对象) ↓ 可视化微调(拖拽、对齐、统一线宽与字体) ↓ 导出 TikZ / SVG / PDF(矢量路径保留) ↓ 嵌入 LaTeX 论文,与正文同编译任意一步都可以 回到图文档改结构,而不是「导出 PNG 后死路一条」。导师说「把节点 D 移到左边、加一条虚线边」——在 DrawFig 里这是分钟级操作;若起点是 AI 文生图的 PNG,往往意味着重抽或进 PS;若起点是「AI 贴一整张 SVG」,往往只能手工找路径改,拓扑一改就牵一发动全身。3.2 与 TikZ / LaTeX 工作流同频理工科论文大量用 LaTeX。TikZ 是事实上的矢量制图标准——代码即图形,编译即 PDF。DrawFig 提供 双向通道:导出 TikZ:画布样式映射为 \tikzpicture 代码,粘贴进论文;导入 TikZ:已有代码可反向载入编辑器可视化修改(文件 → 从 TikZ 代码导入),再导出——全程不经过位图中间态。这意味着:AI 帮你搭骨架,TikZ 帮你交终稿,中间没有「先 PNG 再 trace 回矢量」的损耗环节。3.3 位图输入也能回到矢量(img2graph)如果你手里只有 白板照片、扫描草图、截图,DrawFig 的 img2graph 路径会把位图 重建 为图文档里的 vertex/edge——目标仍是 可编辑图结构,不是「给你一张 traced PNG」。这与 AI 画布互补:img2graph:位图 → 图结构(重建拓扑)AI 画布:语言 → 图结构(从零或增量生成)手工编辑:图结构 → 图结构(精细控制)三条路径汇到 同一份 mxGraph 图文档,而不是三种互不相通的文件格式。四、和常见「AI 绘图」产品比:我们差在哪里,又强在哪里4.1 vs 通用 AI 文生图(Midjourney / SD / DALL·E 等)文生图DrawFig输出像素矢量对象改稿重 prompt / inpainting元素级编辑 + AI 增量指令论文可用性需高分辨率导出,字体难统一TikZ/SVG/PDF 矢量直出图论/精确拓扑弱,易 hallucinate 连线强,graphBrief / 图论专用 op我们强的不是「画得像不像照片」,而是「结构对不对、能不能改、能不能进 LaTeX」。4.2 vs 通用 Canvas / 白板(Figma、Miro、Excalidraw、部分「AI 画板」)通用 CanvasDrawFig对象模型形状/笔迹/Frame,语义因工具而异vertex / edge / label,拓扑一等公民AI 典型输出整图 SVG、截图、设计建议actions / graphBrief / drawioXml改拓扑手工拖;AI 常需整图重来增量 op,边随端点自动更新图论场景无 K5、二分图等原生描述graphBrief: graph / complete / grid…论文终稿很少 TikZTikZ 双向差异不在「能不能拖」,而在「AI 和你的图有没有共同语言——结构、拓扑、可导出代码」。4.3 vs 传统在线流程图工具(Visio / ProcessOn / draw.io 纯手动)纯手动工具DrawFig上手要会拖节点自然语言可生成初稿文档模型矢量(同类引擎)同类引擎 + 图论/学术扩展学术导出一般仅 PNG/PDFTikZ + 图论布局 + 函数图AI多数无或仅辅助AI 画布:结构级 op,与手工同语义DrawFig 不是取代 draw.io,而是在其 同一套图结构引擎 上叠加 学术场景 + AI 结构规划 + TikZ 闭环——格式仍兼容 .drawio,但产品心智是「论文图结构文档」,不是「又一个空白画布」。4.4 vs 「AI 生成后再 SVG」的中间方案有些工具声称「AI 生成 SVG」。但若 SVG 里是 <image> 嵌位图、或路径过复杂不可编辑,本质仍是「换壳的像素图」。DrawFig 的验收标准更简单:生成后,你能否单独选中一个节点、改它的文字、拖它的位置,并让相连的边正确跟随?能——才是我们说的「可编辑矢量 AI 制图」。不能——无论文件后缀是什么,对科研用户价值都有限。五、三个真实场景:图结构 + AI 如何串起来场景 A:算法论文里的有向加权图需求: Dijkstra 示例图,6 个节点、7 条带权有向边,节点标签 A–F,要进 LaTeX 双栏。像素文生图路径: prompt 多轮 → 得到 PNG → 文字 OCR 常错 → 放大糊 → 无法 TikZ → 导师打回。DrawFig 路径:对话:「节点 A–F,边 A→B(4) A→C(2) …,圆形节点,权重标在边上。」AI 画布生成矢量初稿,约 10 秒。手动微调对齐、统一线宽。导出 TikZ,粘贴进 figure 环境,与正文同编译。全程图结构可编辑,任意一步可回编辑器改拓扑。场景 B:系统架构图(答辩 PPT + 论文各要一版)需求: 客户端 → API 网关 → 三个微服务 → 两个数据库;答辩要彩色,论文要黑白。DrawFig 路径: AI 生成 schematic 拓扑 → 复制图层改配色 → 论文版导出黑白 TikZ,PPT 版导出 SVG。同一源文件,不是两张无关的 AI 出图。场景 C:白板草图进论文需求: 组会白板上拍的函数图像草图,要变成正式插图。DrawFig 路径: img2graph 重建曲线与坐标轴为图 cell → 编辑器里修正刻度与标签 → 导出 TikZ。输入可以是位图,工作态和终稿仍是结构化矢量。六、技术心智模型(给关心实现细节的读者)用一张简图概括 DrawFig 与「像素 AI 绘图」的数据流差异:【常见 AI 文生图】 文本 prompt → 扩散/自回归模型 → 像素矩阵 → PNG/JPEG (结构信息丢失,不可编辑) 【通用 Canvas + AI】 文本 prompt → LLM → 整段 SVG/PNG → 贴到白板 (拓扑语义弱,改结构常需重生成) 【DrawFig AI 画布】 文本 prompt → LLM 规划(JSON actions / graphBrief / drawioXml) → 浏览器执行 → mxGraph 图 cell(vertex/edge) → 用户编辑 → TikZ / SVG / PDF / .drawio (结构保留,增量可改,论文可导出)七、常见疑问(FAQ)Q1:DrawFig 完全不能出 PNG 吗?可以导出 PNG,但那是 从矢量渲染出来的快照,用于预览或必须位图投稿的场合。主路径始终是矢量;需要印刷或 LaTeX 时,请用 TikZ、SVG 或 PDF。Q2:AI 生成的图质量不如手画精细怎么办?预期就是如此:AI 负责 结构与初布局,精细排版(对齐、字体、线型、标注位置)交给编辑器。这比「AI 一张图定终身」更符合真实科研改稿节奏。Q3:和 ChatGPT「画个图」、或 Figma AI 有什么区别?ChatGPT 常给出 代码/ SVG 字符串/ 图片——你要自己粘贴、对齐、改拓扑。Figma AI 强在 界面设计,不保证图论语义与 TikZ 终稿。DrawFig 的 AI 直接写入 mxGraph 图文档,后续手工编辑、增量 op、TikZ 导出是 同一对象模型 上的连续操作。Q4:我已经会用 draw.io,为什么还要 DrawFig?引擎同源,但 DrawFig 补的是 draw.io 默认没有的 学术闭环:AI 结构规划(graphBrief / actions)、图论专用能力、TikZ 双向、img2graph 重建拓扑。若你只偶尔画一张简单框图,draw.io 足够;若论文里图多、改稿频、要 TikZ,DrawFig 省的是 结构与导出 上的重复劳动。Q5:免费吗?TikZ 导入也要积分吗?画布本身免费: 拖拽编辑、图论工具、SVG/PNG/PDF 等常见格式导出、本地保存——无需注册即可使用。以下需登录并按积分扣费(账户 每日自动赠送 30 积分,可累积;邀请好友注册另得 100 积分):操作积分TikZ 导入5 积分/次TikZ 导出3 积分/次AI 画布5 积分/次八、结语:别只比「有没有 Canvas」,要比「图结构能不能活过改稿」「AI 画图」正在变成泛滥的营销词;「矢量 Canvas」也几乎人手一块。对科研与工程用户,真正该问的是:这张图的 拓扑 AI 懂不懂、改不改得动?导师让改一个标签、加一条边,是 增量 op 还是 重画一整张?投期刊时,能不能 TikZ 进 LaTeX、与正文字体一致?半年后复现论文,打开的是 图结构源文件,还是一张旧 PNG?DrawFig 的回答:我们交付的是「图结构文档 + AI 结构协作者 + 论文级导出」——不是像素图,也不是一块空白 Canvas。每个节点、每条边、每段标注仍然独立、可拖、可改、导出后仍是矢量——但更重要的是:它们组成的是一份有拓扑语义的图,AI 操作的是这份结构,而不是在像素或松散 SVG 上再盖一层效果。欢迎打开 DrawFig,用一句话描述拓扑,在 图结构文档 里改到定稿,再一键导出 TikZ。结构用 AI,文档用图模型,定稿用 TikZ——这才是学术制图在 AI 时代该走的那条路。关于 DrawFigDrawFig面向科研与工程制图:在 draw.io 图结构引擎之上,提供 AI 结构规划、图论专用能力、TikZ 双向 与 img2graph 拓扑重建——不是文生图,也不是通用白板。画布编辑免费;TikZ 与 AI 按积分扣费(每日赠送 30 积分)。
  • [案例共创] 【案例共创】【第 10 期】华为云码道(CodeArts)代码智能体 + SKILL + FunctionGraph 构建多任务定时调度与管理工作流
    案例介绍一、概述本案例基于华为云码道(CodeArts)代码智能体,通过原创 SKILL快速构建一套多任务定时调度与管理工作流,结合华为云 FunctionGraph的事件驱动能力,实现定时任务的云端托管、统一管理和弹性执行。1.11 背景与痛点在企业日常运维和开发工作中,定时任务是不可或缺的基础能力,常见场景包括:每日凌晨自动备份数据库每小时统计业务数据并生成报表每周清理系统日志和临时文件每月自动发送账单和提醒邮件传统的定时任务解决方案存在以下痛点:单点故障风险:单机部署的 Cron 任务一旦服务器宕机,任务将全部中断缺乏统一管理:任务分散在不同服务器,难以集中监控和管理运维成本高:需要手动编写脚本、配置服务器、排查问题弹性不足:无法根据任务负载自动扩缩容1.2 适用对象企业开发者个人开发者高校学生1.3 案例时间本案例总时长预计45分钟。1.4 案例流程 1.5 开发环境准备注册并实名认证华为云账号:cid:link_7开通华为云 FunctionGraph 服务:cid:link_2下载并安装华为云码道 AI IDE:cid:link_6登录码道 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_1四. 工作流整体流程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_3在 FunctionGraph 函数详情页建议创建 API 网关服务专享服务 (APIG)(华为云API网关共享版已于2025年04月30日00:00(北京时间)在中国站正式退市) 触发器,选择 “无认证” 安全方式、POST 请求方法并开启跨域资源共享 (CORS)修改对应函数,添加跨域响应头处理,支持解析 HTTP 请求体中的任务配置参数修改 Web 管理界面,配置 API 调用地址,添加手动触发任务、实时拉取日志、云端同步任务配置功能7.2 接入华为云 SMN 告警通知如果需要实现任务失败时的邮件 / 短信告警通知,可以按照以下流程接入华为云 SMN 服务:开通华为云 SMN 服务:cid:link_4创建 SMN 主题,添加邮件 / 短信订阅者创建task-alerter函数,通过码道智能体实现 SMN 消息发送功能任务执行失败时,调用task-alerter函数发送告警通知7.3 接入华为云 OBS 持久化存储如果需要持久化存储任务配置和执行日志,可以按照以下流程接入华为云 OBS 服务:开通华为云 OBS 服务:cid:link_5创建 OBS 存储桶,配置访问权限修改task_executor,通过码道智能体将数据写入 OBS通过码道智能体修改 Web 管理界面,从 OBS 读取任务配置和执行日志八、总结与展望本案例基于华为云码道代码智能体和 SKILL 技术,快速构建了一套完整的多任务定时调度与管理工作流,充分发挥了 FunctionGraph 事件驱动、按需供给的优势。相比传统的定时任务解决方案,本方案具有以下优势:高可用:云端托管,无单点故障风险易管理:统一的 Web 管理界面,集中监控和管理低成本:按需付费【每月前100万次调用免费】,只有任务执行时才产生费用易扩展:支持添加任意数量的任务和触发器快速部署:通过 SKILL 一键部署完整工作流未来可以进一步扩展的功能:支持更多类型的触发器(如消息队列触发器、数据库触发器)支持任务依赖和工作流编排支持任务执行历史统计和可视化支持多租户和权限管理九、主账号获取 AK/SK/区域项目ID登录华为云控制台访问华为云官网:cid:link_7点击右上角 “登录” 按钮,输入账号密码完成登录华为云进入 “我的凭证” 页面登录后,将鼠标移至页面右上角的用户名处,在下拉列表中选择 "我的凭证"华为云管理访问密钥在 “我的凭证” 页面,点击 “访问密钥” 页签点击 “新增访问密钥” 按钮华为云身份验证输入登录密码和短信验证码(如开启了操作保护)点击 “确定” 按钮华为云下载密钥文件浏览器会自动下载credentials.csv文件(Excel 格式)重要提示:SK 仅在下载的文件中可见,控制台无法再次查看,务必妥善保存华为云查看 AK/SK打开下载的 CSV 文件,即可获取完整的Access Key (AK) 和 Secret Key (SK)查看区域项目ID十、活动链接【案例共创】【第 10 期】华为云码道(CodeArts)代码智能体 + SKILL 完成应用开发 / 调试实践cid:link_0附件:完整项目代码及SKILL 文件:cid:link_1十一、释放资源如果涉及云资源或者付费资源,需要在对应资源处进行释放
  • [区域初赛赛题问题] 求助:为啥每次提交都是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的脚本有分页插件吗
总条数:62 到第
上滑加载中