(AI篇)OpenGL渲染与几何内核那点事-(二-1-(11):从“跑断腿”到“动动嘴”:一个工作流(Workflow)系统的进化史,也是一部程序员如何优雅“偷懒”的故事
@[TOC]((AI篇)OpenGL渲染与几何内核那点事-(二-1-(11):从“跑断腿”到“动动嘴”:一个工作流(Workflow)系统的进化史,也是一部程序员如何优雅“偷懒”的故事)
代码仓库入口:
系列文章规划:
- OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(7)-番外篇:点击的瞬间,发生了什么?
- OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(8)-番外篇:当你的 CAD 遇上“活”的零件)
- OpenGL渲染与几何内核那点事-项目实践理论补充(一-2-(1)-当你的CAD想“联网”时:从单机绘图到多人实时协作)
- OpenGL渲染与几何内核那点事-项目实践理论补充(一-2-(2)-当你的CAD需要处理“百万个螺栓”时:从内存爆炸到丝般顺滑)
- OpenGL渲染与几何内核那点事-项目实践理论补充(一-2-(3)-当你的协同CAD服务器面临“千人同屏”时:从单机优化到分布式高并发)
- OpenGL渲染与几何内核那点事-项目实践理论补充(二-1-(2):当你的CAD学会“听话”:从鼠标点击到自然语言命令)
- OpenGL渲染与几何内核那点事-项目实践理论补充(二-1-(4)-当你的CAD学会“听话”:从“按钮点击”到“自然语言诊断”的演进之路
- OpenGL渲染与几何内核那点事-项目实践理论补充(二-1-(4):在你的两个AI小宠物GEMINI与TRAE的交互下,帮你实现能听懂人话并诊断模型错误的小助手)
- OpenGL渲染与几何内核那点事-项目实践理论补充(二-1-(5):在你的GEMINI和TRAE 宠物帮助下,帮你实现能听懂人话并诊断模型错误的小助手-问题总结和解决篇)【重要提示:本文依旧按照之前的风格进行表达,如果你想看看具体如何通过你的电子宠物【gemini、trae等】相互之间的交互(包括提示词、反馈结果,如果根据结果继续向AI发起追问,直至拿到你想要的结果),完成你的需求和目标,可以看看如下的两篇:】
- (AI篇)OpenGL渲染与几何内核那点事-项目实践理论补充(二-1-(6):从“硬编码”到“AI语义”,你的开源项目听懂人话了吗?—— 一个图形程序的自然语言进化史)
- (AI篇)OpenGL渲染与几何内核那点事-项目实践理论补充(二-1-(8):当你的CAD学会了“接单”:(Agent的核心机制)AI函数调用从“鸡同鸭讲”到“心想事成”的进化史)
从“跑断腿”到“动动嘴”:一个工作流系统的进化史,也是一部程序员如何优雅“偷懒”的史诗
你的CAD终于发布了,但内部管理比代码还乱
你的CAD软件在经历无数次“内存爆炸”、“渲染卡死”、“多人协同冲突”之后,终于发布了第一个商业版本,用户反馈出乎意料的好。产品团队松了一口气,办公室洋溢着过年般的气氛。
但第二天,你发现真正的挑战才刚开始。
PM(产品经理)拿着小本本跑过来跟你说:“用户A反馈了一个严重bug——画NURBS曲面时,如果先旋转再裁剪,程序直接崩了。” 你说:“好,我看看。”“对了,”PM没走,“这个修复需要经过测试验证,然后让文档团队更新帮助手册,最后通知市场部在社交媒体上说明一下。千万别忘了,每一步都要让我确认。”
你看着他手里的纸质表格,上面密密麻麻画着从“开发”到“测试”到“发布”的框框和箭头。你倒吸一口凉气——比修复那个空指针bug还让人头大。
你看着这张“纸”,突然意识到一个残酷的事实:软件工程里的“工作流”管理,乱起来比代码还难搞。
V1.0 原始时代:纸质化与口头传达 —— 你的噩梦开始
场景:“张三,这份报销单你签完字,记得跑腿送给李四,李四签完再给财务。”
你们公司刚刚起步,总共就5个人。老板说:“代码写完了,叫测试的小王过来看一眼,没问题就发版。” 于是你起身,走到小王工位:“王哥,帮我看下这个bug修好了没。” 小王正在调试一个环境配置,头也不抬地说:“等10分钟。”
10分钟后,小王走过来,在你电脑上点了两下:“没问题。” 你回头喊了一声:“老板,可以发了!” 老板从另一个房间传来声音:“文档更新了吗?” 你拍脑门:“忘了。”
于是你又在群里发消息:“@文档-老李,XX功能修了个bug,帮更下文档。” 老李可能在开会,2小时后才回你:“什么bug?影响哪个版本?”
你的大脑就是那个“工作流引擎”。信息全靠吼,状态全靠问,流转全靠腿。
致命缺陷,痛彻心扉:
- 不可见:没有任何人知道一个“bug修复”任务当前到底“卡”在谁手里。是测试没测完?还是文档没更新?还是老板没批准发布?全凭猜测。
- 易丢失:某天你请假,群里消息刷了99+条,关于“bug修复”的那条早已沉入茫茫大海。第二天你来,小王说你没通知他,老李说没收到消息,老板问怎么还没发版。你背锅,但你冤枉。
- 效率极低:只要一个人不在工位,整个流程停摆。这叫单点故障,比你的服务器宕机还致命——因为这是“人肉服务器”宕机。
你崩溃了。这TM比写代码累多了。你决定,用程序员的方式解决这个问题。
V2.0 硬编码时代:代码里的“If-Else” —— 你的第一次“自动化”
改进逻辑:把流程写在代码里,让机器替你“跑腿”
你打开IDE,在项目管理工具里新建一个字段叫“状态”,然后开始写后端逻辑:
# 最初的“工作流”:一段写死在业务代码里的逻辑
def update_task_status(task_id, new_status):
task = get_task_by_id(task_id)
if new_status == "待审核":
if task.current_status == "已创建":
task.status = "待审核"
send_notification_to_leader(task)
else:
raise Exception("只有已创建的任务才能提交审核")
elif new_status == "审核通过":
if task.current_status == "待审核":
task.status = "审核通过"
send_notification_to_tester(task)
else:
raise Exception("只有待审核的任务才能通过")
elif new_status == "测试完成":
if task.current_status == "审核通过":
task.status = "测试完成"
send_notification_to_document_writer(task)
else:
raise Exception("必须先通过审核才能测试")
# ... 你写了300行if-else,涵盖了所有可能的路径
task.save()
测试了一下,完美!你甚至加了个小网页,每个人可以点按钮“通过”、“驳回”。你觉得这就是“自动化”了。你觉得自己简直是天才,用一段Python代码解决了5个人的沟通成本。
新发现的问题,直击灵魂:
1. 牵一发而动全身:老板的“小改动”
用了两周后,老板跑过来说:“现在规范一下,超过1000块的采购,要多加一个‘总监审批’环节。”
你打开代码,在if-else丛林里找到采购相关的逻辑,小心翼翼地插入一段:
elif new_status == "经理审批通过":
if task.type == "采购" and task.amount > 1000:
task.status = "待总监审批" # 新加的死节点
send_notification_to_director(task)
else:
task.status = "待财务打款"
改是改完了。但你需要在所有调用这个函数的地方确认,有没有其他地方也在处理“经理审批通过”的后续逻辑。改一处代码,要测整个系统。要重启服务。要发版。程序员最怕的三个字:改需求。以前是改代码功能,现在是改“流程代码”。你以为解决了问题,其实只是把纸质表格变成了代码里的迷宫。
2. 逻辑混乱:半年后,你自己也看不懂了
随着业务越来越多——bug修复流程、采购流程、请假流程、代码review流程、版本发布流程……你的update_task_status函数从300行膨胀到了3000行。里面是密密麻麻的if-else嵌套,有的地方因为“临时需求”甚至还加了个goto。
新加入的实习生问:“为什么请假超过3天,先要经过直接主管,然后进入一个while循环,判断是否跨周末再推送给人资?” 你沉默了很久,说:“那是去年春节前的临时需求,当时业务催得紧……”
你意识到:你把业务的流程复杂度,变成了代码的复杂度。 你最终还是要修改代码、重新编译、重新发布,才能改变一个“先通知A还是先通知B”的顺序问题。这比纸质的时代好了半点,但本质没变。
> 深度扩展:硬编码工作流的“技术债”本质
1. 状态机 (State Machine) 的简单实现:
- 你写的
if-else本质是一个最原始的状态机。一个状态(State)在满足条件(Guard)时,发生转换(Transition)到达下一个状态。- 这在逻辑简单的早期项目中还能应付,但它的核心问题是:转移逻辑(Transition Logic)和业务逻辑(Business Logic)耦合在一起。
- 你的代码既要关心“这个人是不是项目经理”(业务数据),又要关心“审核通过后下一步该发给谁”(流程数据)。两者混在一起,修改任何一个都会影响另一个。
2. 工作流模式 (Workflow Patterns):
- 学术上,工作流有21种经典控制流模式,比如:
- 顺序 (Sequence):A→B→C。
- 并行分支 (Parallel Split):A同时到B和C。
- 同步合并 (Synchronization):B和C都完成才到D。
- 排他选择 (Exclusive Choice):根据条件,A可能到B或C。
- 简单合并 (Simple Merge):不管B或C谁完成,都到D。
- 你的硬编码版本,只能实现最简单的几种模式。一旦出现复杂的并行、合并、嵌套子流程,代码就会彻底失控。
3. 技术债务 (Technical Debt):
- 这种硬编码的流程代码,是典型的技术债务。它交付快,但后续维护成本呈指数级增长。
- 修改一个流程步骤,开发人员需要深入代码,了解全局上下文,稍有不慎就会引入bug。这违反了软件工程中的开闭原则(Open/Closed Principle):对扩展开放,对修改关闭。你应该能通过“添加新代码”来扩展功能,而不是“修改旧代码”。
4. 与现代CI/CD的矛盾:
- 现代软件强调持续集成/持续部署。如果你只是想把请假流程从“3天以内主管批”改成“5天以内主管批”,却需要开发人员介入、修改代码、走完整的测试/发布流程,那这个系统的响应速度将完全跟不上业务的步伐。
5. 从代码层面看:
- 你的“工作流引擎”只是一个嵌在业务逻辑里的巨大
switch-case或if-else块。没有持久化、没有版本管理、没有可视化。它只能算一个“自动化的脚本”,远称不上一个“系统”。
V3.0 标准化引擎时代:BPM与图形化配置 —— 你终于把“流程”拎出来了
改进逻辑:把“流程逻辑”从“业务代码”里剥离出来,变成可配置的“图”
你终于受不了每次改审批流都要重写代码了。开始上网搜解决方案,一个词反复出现:工作流引擎。一个概念让你醍醐灌顶:BPM (Business Process Management)。
这背后有一个伟大的思想:过程式编程 vs 声明式编程。
以前你是在“过程式”地指挥电脑:先做这一步,如果A就做那步,否则再做那一步。这是How。
而声明式编程是告诉电脑:我想达到这个目标,这是规则,你来帮我规划。这是What。就像你出门打车,以前你得自己开(过程式),现在你只需要告诉司机目的地(声明式)。
你开始学习一个当时很火的Java工作流引擎——Activiti,以及它的标准语言 BPMN 2.0。
BPMN 2.0 是一个标准,让你能用“图形化”的方式画出一个流程图。这个图背后是一个XML文件。Activiti 引擎会读取这个XML文件,像一个“发动机”一样,驱动你的流程跑起来。
你的代码从3000行缩减到了10行:
// 你的业务代码现在长这样
public void submitPurchaseRequest(PurchaseRequest req) {
// 1. 启动一个流程实例,绑定一个流程定义(你的图)
ProcessInstance pi = runtimeService.startProcessInstanceByKey(
"purchase_process", // 你画的那张流程图的名字
req.getId(), // 业务ID
Map.of("amount", req.getAmount()) // 传入变量
);
// 2. 接下来会发生什么?
// Activiti 会自动根据流程图,判断下一步是“主管审批”还是“总监审批”。
// 你的业务代码里,没有任何if-else了!
}
// 用户审批的代码也极度简化
public void approveTask(String taskId) {
taskService.complete(taskId); // 告诉引擎“我干完了”
// 引擎自动驱动流转到下一个节点。你的代码完全不用知道“下一个是谁”。
}
你画了第一张BPMN图:一个圆圈(开始) → 一个方块“提交申请” → 一个菱形“金额>1000?” → 如果是,走“总监审批”;如果否,走“经理审批”。
你把这个图交给产品经理,他说:“这个我看懂了!” 你第一次觉得,沟通如此顺畅。
新发现的问题,直击灵魂:
1. 太重了:为了画个简单的图,配环境配了三天
你想要在项目里用起来,结果根本不是引个包那么简单。你需要:
- 下载Activiti Explorer(一个war包)部署到你的Tomcat服务器。
- 独立维护至少7张数据库表(ACT_RE_*存定义, ACT_RU_*存运行时, ACT_HI_*存历史)。
- 学习一个全新的、与你业务代码格格不入的XML语言。
- 为了在开发环境测试,还得给每个开发人员配一个本地流程引擎。
- 终于,你看着
bpmn.xml里那几百行像蜘蛛网一样的自动生成代码(因为图形化编辑器拖拽出来的底层就是XML),长叹一口气。一个简单的请假流程,XML文件比业务代码还长。
2. 灵活性差:理想很丰满,现实很骨感
一天,总监过来说:“这个采购申请,我临时想拉财务的一个同事先看一眼,再决定批不批。”
你看着BPMN里那个画死的箭头,愣住了。
- “硬加一个节点”:可以,去编辑器里拖一个新的“用户任务”,连线。但这改的是流程定义(Process Definition)。所有正在运行的审批单,都得迁移到新版本流程上?还是让旧的照旧跑?这叫“流程版本管理”,瞬间把你拉入另一个深渊。
- “临时加签”:BPMN标准里有所谓的“边界事件”或“任务委派”,但实现起来极其复杂,要写大量监听器代码,又绕回了V2的思路。
你觉得,自己好像从一个“代码迷宫”跳进了“XML和配置的地狱”。流程图确实可视化了,但那是给管理者看的;对开发者而言,又多了一层抽象,多了一堆要学习、维护、排查问题的黑盒。
> 深度扩展:BPMN 2.0与工作流引擎的“傲慢与偏见”
1. Activiti引擎架构剖析:
- 核心API:
ProcessEngine:一切的起点,通过配置文件(activiti.cfg.xml)创建,是线程安全的。RepositoryService:管理“静态”的流程定义(.bpmn20.xml文件的部署、查询、挂起/激活)。RuntimeService:操作“动态”的流程实例(启动、查询、触发)。TaskService:管理“人工任务”(查询待办、签收、完成、委派)。HistoryService:查询已结束(或进行中)流程的所有历史轨迹和变量。- 核心数据库表关系:
ACT_RE_*(Repository):存放静态定义,如流程模型、图片。ACT_RE_PROCDEF是核心。ACT_RU_*(Runtime):存放运行时的动态数据,如当前流转到哪个节点、变量值、执行流。流程结束后,此表数据清空。ACT_HI_*(History):存放所有历史记录,如审批过的任务、参与者、耗时。这是数据分析的宝库。ACT_GE_*(General):通用数据,如用户、权限。- 这27张表的存在意味着:Activiti不仅仅是一个“工具”,它是一个完整的、需要独立维护生命周期和运维的“子系统”。你的业务数据库和流程数据库被物理或逻辑隔离。对于简单项目,这种重量级架构是巨大的负担。
2. BPMN 2.0 流程元素解读:
- 流对象:事件(圆圈)、活动(圆角矩形)、网关(菱形,用于
排他/并行/包容)。- 数据:流程变量(Variables)。引擎就是靠这些变量来做分支判断的。例如,
${amount > 1000}就是一串写在XML里的表达式,这引入了 表达式语言 (JUEL/UEL) 的漏洞风险和性能损耗。- 连接对象:顺序流、消息流(画在不同的“泳池”之间的虚线箭头,代表跨系统交互)、关联。
- 泳池/泳道:POOL/LANE。用于区分“谁(角色)来做”,如“项目经理”泳道和“财务”泳道。这是企业级流程可视化的标准。
3. 流程版本管理 (Process Versioning) 的噩梦:
- BPMN要求每次修改流程图,只要文件名不变,部署后会生成一个新版本(v1, v2, v3…)。
- 正在运行的旧流程实例还停留在v1,新启动的流程会用v2。这被称为 “流程迁移”问题。如果你想让v1的旧流程也走v2的新路径,就需要极其复杂的“流程实例迁移API”,这是BPM实施中最容易导致数据崩溃的环节之一。
4. 重量级模式 vs 轻量级模式:
- Activiti/JBPM诞生于Java EE时代,与Spring深度绑定,是典型的企业重量级架构。
- 相比之下,Camunda 7(源自Activiti创始人离职后所做)提供了更轻量的嵌入式引擎,对开发者更友好。它也是目前BPM技术商业化的成功代表,其核心思想是“代码生成图形,而非图形生成代码”,开始模糊V3和V4的边界。
V4.0 分布式与数据驱动时代:现代化编排 —— “图”复活了,以代码之名
改进逻辑:“代码即工作流 (As Code)”,用代码的灵活性,弥补图形的死板
你开始反思。图形化是为了管理者,但开发者才是一线使用者。流程的本质是 任务调度,是编排。
这时,两个新的场景出现了:
- 数据处理:你们公司的数据分析师要你每天凌晨1点,从A数据库抽数,清洗,再导入B数仓,最后发一个报表邮件。这中间没有“人”审批,全是机器任务。BPMN那套“人工任务”在这里臃肿不堪。
- 微服务调用:你的CAD需要调用用户服务、权限服务、通知服务。当用户点击“分享模型”,后端要串行或并行地调用5个不同的微服务。如果某个服务挂了,整个流程要能自动重试,而不是直接走“异常结束”的死胡同。
你发现了下一个时代的明星工具:
- Apache Airflow:用Python写“数据工作流”,核心是DAG(有向无环图)。
- Temporal:用代码定义分布式工作流,稳定性强到可怕。
用Airflow的思路,你重写了那个采购流程:
# Airflow DAG 定义 (Python代码,但表达的是流程逻辑)
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator, BranchPythonOperator
from airflow.operators.dummy_operator import DummyOperator
from datetime import datetime
default_args = {
'retries': 3, # 任务失败自动重试3次
'email_on_failure': True # 失败直接发邮件给你
}
dag = DAG('purchase_workflow',
description='采购审批流,但用代码写的',
schedule_interval=None,
start_date=datetime(2024, 1, 1),
catchup=False)
def check_amount(**context):
"""这是那个‘菱形判断’,但现在是纯Python函数,可调试,可单元测试"""
amount = context['dag_run'].conf.get('amount')
if amount > 1000:
return 'director_approval_task' # 返回下一个任务的ID
else:
return 'manager_approval_task'
submit_task = PythonOperator(task_id='submit_task', ...)
check_task = BranchPythonOperator(
task_id='check_amount',
python_callable=check_amount,
provide_context=True)
manager_task = DummyOperator(task_id='manager_approval_task')
director_task = DummyOperator(task_id='director_approval_task')
payment_task = DummyOperator(task_id='payment_task')
# 定义依赖关系,就像连线一样,但是在代码里,更清晰,可版本化管理(Git)
submit_task >> check_task
check_task >> [manager_task, director_task] # 并行分支
manager_task >> payment_task
director_task >> payment_task
它的好处是革命性的:
- 代码即真理:你的流程和业务逻辑写在一起,用同一个Git仓库管理。谁改了什么,一目了然。
- 极强的容错性:内置重试机制。比如调用那个不稳定的“财务系统API”,你可以设置“失败后每5分钟重试一次,最多重试10次”。这是V3的图形化引擎难以企及的。
- 可视化(对,又回来了):Airflow自带一个Web UI,可以直接把你的Python DAG文件渲染成一张漂亮的流程图!你可以看到每个任务的运行状态(绿色成功、红色失败),点击进去看日志。你同时得到了V3的可视化能力和V4的编码灵活性。
新发现的问题,依然存在:
1. 维护成本高:流程的“微服务化”雪崩
当公司有1000个这样的DAG文件,每一个都依赖不同的Python库、连接不同的数据库、跑在不同的服务器上时,系统的复杂度开始爆炸。它们像一团乱麻,一个任务的延迟可能导致下游十个任务报警。
2. 依然“死板”
Airflow的DAG虽然用代码写,但它的拓扑结构是预先定义好的。submit_task后面一定是check_task,你永远无法在运行时,因为一个数据分析结果,而“凭空创造”出一个全新的审批步骤。它解决了V3的灵活性缺陷,但仍然在为预设的流程服务。它无法应对真正需要“模糊决策”的场景。
> 深度拓展:Apache Airflow 与 Temporal,现代工作流的“双子星”
1. Apache Airflow 核心技术揭秘:
- DAG核心概念:
DAG:一个工作流,是一个无环有向图。Task:图中的一个节点,Operator的执行实例。Operator:定义Task“做什么”(PythonOperator,BashOperator,EmailOperator)。Task Instance:一个Task在某一次运行时的实例,有状态(running, success, failed).- 调度器原理:
- Scheduler 是核心。它不断检查所有DAG和Task,一旦发现某个Task的上游依赖都满足了,就将其放入执行队列。
- 支持 Cron 和 Datetime 定时触发。
- 支持 Backfill:若停机了几天,可以把这期间漏掉的任务都补跑一遍。
- 核心优势:
- 动态性:工作流由Python代码动态生成,可以在运行时决定并行度。
- 可扩展性:使用
CeleryExecutor,可以把Task分发到Worker集群(多台机器并行跑)。- 生态丰富:众多Provider(AWS、Google Cloud、K8s),让Airflow成为数据工程的“事实标准”编排器。
- 局限:
- 并非为“无限循环、长时间等待”的任务设计(因为它在每个调度周期都会检查状态,会给元数据库造成压力)。
- 不适合“人工审批”这类需要活锁的流程,它更偏向机器自动化调度。
2. Temporal 的“叛逆”与“强大”:
- 核心概念去中心化:Temporal没有“中心调度器”。你写的是“Workflow Code”(编排逻辑)和“Activity Code”(具体执行),全部用一种特殊SDK编写,并注册到Temporal Server。Temporal Server像一个“保证送达的消息队列”,确保你的Activity至少被执行一次,且Workflow状态被持久化。
- 技术亮点:
- Workflow as Code:完美实践。确定性的编排逻辑和不确定的业务逻辑分离。
- 内置重试、超时、心跳:所有处理分布式系统“八宗罪”的逻辑,都被框架吸收,开发者只需配置。
- 极强韧性:即使整个Worker集群宕机,恢复后Workflow可以从断点处完美恢复,毫发无伤。这是
Uber/Netflix级别的基础设施能力。- 与Airflow的定位区别:
- Airflow:数据管道编排器,强于定时批量处理、ETL。
- Temporal:微服务编排器,强于长事务、人机交互、高可靠事件驱动。
V5.0 AI Agent 时代:智能动态工作流 —— 你的“灵机一动”
改进逻辑:不再定义路径,只定义目标,让AI自己“探路”
你已经把能想到的都自动化了。直到有一天,老板给你一个任务:“小C,尝试探索一下我们的CAD软件进入东南亚市场的可能性,下周给我一个初步分析报告和行动计划。”
你第一反应是——这能自动化?
你拆解了一下:我需要先搜索东南亚的建筑行业报告、我们的竞品、当地政策。然后分析数据,得出结论。最后写一个PPT,可能还要翻译成英文。
这不再是一个线性的、可预测的流程。这是一个 “目标 (Goal)”。路径是未知的。
你翻出了之前没太在意的论文,一个词抓住了你的眼睛:Agentic Workflow (智能体工作流)。
它不再是 A -> B -> C 的硬连线。
它的模式是:系统收到一个目标。它内部的AI Agent开始“思考”:
- 规划 (Plan):“我需要先搜索网络。哦,我的工具有‘网络搜索’,‘PDF解析器’,‘PPT生成器’。”
- 执行 (Act):调用搜索工具,搜“东南亚建筑市场2026”。得到一堆链接。
- 观察与反思 (Observe & Reflect):AI阅读搜索结果。“信息好像不够,我需要更具体的数据。我再搜一下‘东南亚基础设施投资预算’。”
- 循环 (Loop):它自主决定多步操作,直到内部评估认为信息够了。
- 动态生成最后一步:最后,它不是进入“结束”,而是根据分析结果,动态决定下一个动作是调用“生成PPT”还是“写邮件”。
你打开你的代码编辑器,开始为你CAD的AI助手设计第一个 Agent。
# 伪代码:Agent驱动的CAD协同设计工作流
class CADDesignAgent:
def __init__(self, goal):
self.goal = goal
self.plan = []
self.context = {}
def run(self):
while self.goal_not_reached():
# 1. 思考下一步(这是LLM的核心能力)
next_step = self.decide_next_step(self.context)
if next_step is None:
break # 没有更多步骤了
# 2. 执行该步骤(可能是搜索、调用一个CAD功能、询问用户)
result = self.execute_step(next_step)
# 3. 观测结果,更新上下文记忆
self.context[next_step.id] = result
self.memory.add(result)
# 4. 反思。如果出错,可能修改计划,甚至自我纠正。
if result.is_error():
self.revise_plan(next_step, result)
def decide_next_step(self, context):
prompt = f"""
目标:{self.goal}。
历史操作:{context}。
可用的工具列表:[搜索知识库, 创建模型, 修改参数, 询问用户, 生成报告]
下一步我应该做什么?只回答工具名和参数。
"""
return LLM.generate(prompt)
# 启动一个Agent
agent = CADDesignAgent("设计一个能承重200kg、成本低于50元的轻量化支架,并生成分析报告")
agent.run()
# 你不知道它会怎么搜索、问几次问题、调用几次生成功能,
# 路径是动态、自适应的,每时每刻都在决定。
核心进化,颠覆一切:
- 自适应:目标是“找到最优设计”,AI可以尝试10种“曲面减重”方法,比较结果,发现不好就回退,这是V4的DAG想都不敢想的。
- 自然语言驱动:产品经理不再需要画图,也无需配置复杂的XML。他只需要在输入框里敲:“帮我查一下住建部刚出的设计规范,把我们所有不满足新规范的项目列出来,并给出修改建议。” 这个“工作流”就被创建了。
新的问题,未来等你来解:
- AI可能会陷入死循环,一遍又一遍搜索同样的东西。
- 成本无法预估。一次复杂的任务可能调用数百次价格昂贵的GPT-5 API。
- 责任归属:当AI自主决定的设计方案导致建筑坍塌,这是谁的责任?AI还是你这个写Agent的程序员?
> 深度拓展:通往AGI之路的“工作流”
1. 智能体架构 (Agent Architectures):
- 思考-行动-观察 (ReAct) 模式:这是当前最主流的Agent模式。它不是线性决策,而是“思考一下(Plan) -> 行动一下(Act) -> 观察结果(Observe) -> 再思考…”,形成一个循环。它是“推理”与“行动”的协同。
- 规划与执行 (Plan-and-Solve):直接让LLM先生成一个完整的计划列表,再一步步执行。但这容易不适应动态变化。
- 多智能体协作 (Multi-Agent Collaboration):一个“项目经理Agent”拆解任务,分发给“搜索Agent”、“CAD分析Agent”、“报告生成Agent”。Agent之间可以开会讨论(Soft Debate)。例如,AutoGPT, MetaGPT, ChatDev等项目都在探索。
- 记忆系统:
- 短期记忆:当前上下文窗口。
- 长期记忆:外部向量数据库,存储历史成功经验和知识,实现终身学习。
- 情景记忆:记录具体事件的细节,用于自我反思和经验回放。
2. 工具使用 (Tool Use)与函数调用 (Function Calling):
- 这是Agent能“做事”的基础。LLM本身只能生成文本。
- OpenAI Function Calling 定义了一种标准格式,让LLM输出一个结构化JSON,指定要调用的函数名和参数。
- 你的CAD系统,会暴露出成千上万个这样的“工具”给AI Agent调用,例如:
create_circle(radius, x, y),search_library(keyword),simulate_stress(part_id)。- 这本质上是将你的软件系统 API化 和 语义化,让AI能看懂API文档并自动编组调用参数。
3. 展望未来:AI原生的流程:
- 工作流不再只是一个 应用 (Application),而是一种 服务能力 (Service Capability)。
- 未来的“工作流引擎”可能是一个大型多模态模型本身。它以目标为输入,以环境状态为上下文,输出一系列可执行的动作指令。BPMN这种“中间表示”可能会消失,或者变形为一种更抽象的目标描述语言 (Goal Description Language)。
版本 核心驱动力 解决的核心问题 留给未来的坑(你的机会) V1 纸笔/肉身 从无到有 效率低、易丢失 V2 硬编码 数字化 改不动、难维护 V3 图形化引擎 业务与逻辑分离 太笨重、门槛高、灵活性差 V4 分布式/代码化 高并发、高可靠、可编程 依然预设路径,无法端到端自治 V5 AI Agent 自主决策/动态路径/语言驱动 成本、可控性、安全、伦理责任
尾声:你的工作流,就是你的工程哲学
你终于可以下班了。走之前,你看了眼自己开发的CAD软件。界面里,命令窗口静静地闪着光标。一个年轻设计师正在用它画图,他敲下了一行字:
“生成一个VR展厅,展示我们新设计的齿轮箱,用金属质感的材质,配暖色灯光。”
你的AI Agent接收了指令。它没有按任何预设路径工作。它在后台静默地规划、搜索、生成、渲染、打包。不到30秒,一封带VR演示链接的邮件已经发给了设计师的客户。
办公室里,没有一个人为了这个“流程”跑腿、签字、写if-else。创造被释放了。
你看了一眼自己的第一个版本——那张画满框框的纸表格。你轻轻地把它揉成团,扔进了垃圾桶。
从肉身的奔跑,到AI的思考;从僵死的路径,到自适应的目标。
工作流的进化史,就是人类不断将“执行的意志”交给“更智能的载体”的历史。 而你,既是历史的见证者,也是下一篇章的执笔人。
- 如果想像唠嗑一样,去了解一些小知识,快去看看视频吧:
- 认准一个头像,保你不迷路:
- 抖音:搜索“GodWarrior”
- 快手:搜索“AIYWminmin”
- B站:搜索“宇宙第一AIYWM”
您要是也想站在文章开头的巨人的肩膀啦,可以动动您发财的小指头,然后把您的想要展现的名称和公开信息发我,这些信息会跟随每篇文章,屹立在文章的顶部哦
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)