鸿蒙智能体开发实战:15.使用工作流
前言在智能体开发中单靠大模型的对话能力往往无法满足复杂的业务需求。工作流Workflow是鸿蒙智能体平台提供的一种可视化任务编排工具它允许开发者通过拖拽节点的方式构建多步骤的业务流程让智能体具备执行复杂任务的能力。本文将深入介绍工作流的概念、创建流程、18种节点详解以及版本管理等进阶功能。工作流概述什么是工作流工作流是将一系列任务按照预定义的逻辑顺序组织起来的可视化编排工具。每个工作流由多个节点Node组成节点之间通过连线连接数据在节点间流动传递。工作流的核心价值将复杂业务拆分为可编排的步骤实现流程即代码的工程化思维让智能体的能力从简单对话扩展到复杂任务处理。工作流 vs 智能体提示特性工作流智能体提示角色指令任务复杂度支持多步骤、分支、循环单步骤、线性可视化编排✅ 拖拽式图形化界面❌ 纯文本条件分支✅ 选择器节点❌ 不支持数据转换✅ 代码节点、文本处理❌ 不支持复用性✅ 可跨智能体复用❌ 仅当前智能体调试方式✅ 单节点调试、试运行❌ 需完整对话测试创建工作流新建工作流在小艺开放平台页面通过【资源库】→【工作流】→【新建工作流】进入新建工作流配置页面上图展示了在小艺开放平台中新建工作流的配置入口设置名称、分类和描述后即可进入编排页面。{workflow:{name:天气查询工作流,category:信息查询,description:根据用户输入的城市名称查询该城市当前的天气信息,initial_nodes:[start,end]}}创建后页面会自动跳转至工作流的编辑页面初始状态下工作流包含开始节点和结束节点。上图展示了在小艺开放平台中新建工作流的配置入口设置名称、分类和描述后即可进入编排页面。编排工作流编排工作流的基本步骤如下在底部面板中选择要使用的节点将节点按任务流程相连接配置节点的输入和输出参数# 工作流编排的逻辑示例# 以下代码展示一个简单工作流的处理流程defweather_query_workflow(user_input:str):天气查询工作流的Python模拟# Step 1: 开始节点 - 接收用户输入city_nameextract_city(user_input)# Step 2: 插件节点 - 调用天气查询APIweather_datacall_weather_api(city_name)# Step 3: 大模型节点 - 格式化回复responsegenerate_response(weather_data)# Step 4: 结束节点 - 返回结果returnresponse测试并发布工作流工作流开发完成后需要经过测试和发布才能在智能体中使用# 测试流程1. 单击【试运行】按钮2. 成功后节点的边框将显示为绿色3. 在页面右侧弹窗中查看节点的输入输出4. 单击【上架】调测成功的工作流方可发布上架工作流节点详解鸿蒙工作流提供了18种内置节点覆盖了从数据输入、处理到输出的全流程节点功能对照表序号节点名称功能说明适用场景1开始节点工作流的起始节点设定启动输入信息所有工作流的起点2结束节点工作流的最终节点返回运行结果所有工作流的终点3大模型节点调用大语言模型生成内容文案生成、文本总结、文章扩写4插件节点调用插件运行指定工具天气查询、订单查询等API调用5工作流节点嵌套调用另一个工作流复杂任务模块化拆分6代码节点编写Python代码处理数据数据处理、格式转换、逻辑判断7选择器节点if-else条件分支根据条件执行不同流程8意图分类节点识别用户意图并分流客服智能体、多意图处理9输出节点中间过程的回答或思考输出流式输出、思考过程展示10循环节点重复执行一系列任务批量数据处理、遍历操作11批处理节点一次性运行多次相同任务多城市天气查询12知识库节点查询知识库召回匹配信息FAQ问答、文档检索13变量节点修改和存储用户变量值数据动态更新、状态记录14文本处理节点字符串拼接和分隔处理Prompt构建、数据格式化15提问器节点主动收集用户信息信息采集、选项确认16配额管理节点对计数变量进行原子化赋值资源扣减、调用管控17长期记忆节点召回智能体的长期记忆数据个性化推荐、用户画像18查询计数变量节点读取计数变量的当前值使用量查询、配额检查开始节点开始节点是工作流的起始节点用于设定启动工作流需要的输入信息。它包含三个默认参数{start_node:{default_params:{USER_INPUT:用户在本轮对话中输入的原始内容,FILES_INPUT:用户上传的图片或文件Arraystring类型,EVENT_INPUT:触发智能体的事件消息},custom_params:[String,Boolean,Integer,Time,Object]}}注意开始节点中的自定义参数因无法从用户输入中接收所以有自定义输入参数的工作流不支持在工作流模式的智能体中使用仅支持试运行。大模型节点大模型节点可以调用大语言模型根据输入参数和提示词生成内容# 大模型节点配置示例llm_node_config{model:Pangu-LLM,parameters:{top_k:50,top_p:0.95,temperature:0.8},system_prompt:你是一个友好且专业的健康咨询助手。,user_prompt:我最近总是感到疲劳这可能是什么原因呢,output_format:text# text / markdown / json}提示大模型节点支持配置技能插件/工作流扩展模型能力的边界。配置技能后大模型节点可以自动进行意图识别并判断调用技能的时机。选择器节点选择器节点是一个if-else 节点用于设计工作流内的分支流程# 选择器节点的逻辑模拟defselector_node(input_value,conditions): 选择器节点处理逻辑 conditions [ {if: input_value 100, then: branch_high}, {if: input_value 50, then: branch_medium}, {else: branch_low} ] forconditioninconditions:ifcondition.get(if):ifeval(condition[if]):returncondition[then]returnconditions[-1][else]# 兜底分支意图分类节点意图分类节点能够识别用户输入的意图并将不同的意图流转至工作流不同的分支处理{intent_classification:{categories:[{name:产品咨询,flow:knowledge_base_node},{name:售后服务,flow:after_sale_workflow},{name:投诉建议,flow:complaint_handler}],fallback:default_response}}输出节点输出节点支持三种模式模式说明是否支持绑卡输出模式输出中间过程回答内容✅ 支持思考模式输出思考状态和思考内容❌ 不支持暂态模式执行时间长时展示预设提示语❌ 不支持# 输出节点配置示例output_node{mode:thinking,config:{stepInfo:思考中,streamingTextId:main_stream,reasoningText:正在分析用户的问题...}}# 配合输出模式使用output_node_result{mode:output,config:{answer:根据分析结果建议您...,streamingTextId:main_stream,stepInfo:已深度思考}}循环节点循环节点支持三种循环方式# 1. 数组循环 - 类似 for 循环defarray_loop(items):results[]forindex,iteminenumerate(items):resultprocess_item(item)results.append(result)returnresults# 2. 指定次数循环defcount_loop(times):foriinrange(times):do_something()# 3. 无限循环 - 类似 while 循环definfinite_loop():whileTrue:resultdo_something()ifcondition_met(result):break# 通过终止循环节点跳出循环体中可以添加三种特殊节点终止循环break、继续循环continue、设置变量。批处理节点批处理节点用于一次性运行多次相同任务。例如一次性查询多个城市的天气# 批处理节点的逻辑模拟defbatch_process(cities:list): 批处理查询多个城市的天气 并行运行数量最多20个并发 批处理次数上限最多200次 max_parallelmin(len(cities),20)results[]forcityincities:# 每个城市并行执行天气查询resultquery_weather(city)results.append(result)returnresults知识库节点知识库节点可以基于用户输入查询指定的知识库召回最匹配的信息# 知识库节点配置knowledge_base_config{query:用户的问题,knowledge_bases:[产品FAQ知识库,技术文档库],retrieval_config:{threshold:0.5,# 检索文本相关阈值max_segments:3,# 最大召回分段数max_chars:500,# 单条片段最大字符数query_rewrite:True# 查询改写多轮对话}}查询改写在多轮对话中用户的 Query 和对话的上下文息息相关。例如用户先问知识库检索节点可以用来做什么“再问怎么用”开启查询改写后第二个问题会被改写为知识库检索节点怎么用。代码节点代码节点支持通过编写Python代码来生成返回值# 代码节点示例数据处理defprocess_order_data(input_data:dict)-dict: 处理订单数据的代码节点 注意代码节点仅企业开发者可用基于Python 3.11.4 order_idinput_data.get(orderId)statusinput_data.get(status)# 数据处理逻辑result{orderId:order_id,status:status,processed:True,timestamp:2026-04-15 10:00:00}returnresult安全限制代码节点禁用了网络请求和系统资源访问如os.system、subprocess、eval等高风险函数。提问器节点提问器节点用于主动收集用户的信息支持三种方式{questioner:{mode:direct_answer,question:请问您需要查询哪个城市的天气,field_name:city}}动态生成槽位示例{extractedFields:[{fieldName:depart_time,description:航班的起飞时间,cnFieldName:起飞时间,fieldType:String,required:true,defaultValue:2025年1月8日12:00},{fieldName:arrive_time,description:航班的到达时间,cnFieldName:到达时间,fieldType:String,required:false}]}工作流版本管理版本存档方式工作流版本管理支持三种存档方式存档类型触发条件说明上架存档工作流每次上架完成自动记录系统存档工作流发生编辑后自动保存为【当前】版本手动存档手动点击存档图标填写存档描述后生成记录版本操作预览历史版本查看版本编排内容或试运行不可编辑还原到该版本将历史版本覆盖当前工作流的草稿版本版本筛选按存档类型筛选历史版本导入导出工作流导出工作流点击工作流操作项中的【导出】按钮可以将工作流导出为JSON文件# 导出工作流文件# 文件格式.json包含各节点详细信息# 支持选择是否一并导出嵌套的工作流节点导入工作流点击工作流列表右上方的【导入工作流】上传导出的JSON文件注意事项部分组件的有效性与账号有关导入后可能存在失效如插件、知识库、工作流如果工作流中包含子工作流节点需要先导入子工作流并上架再导入主工作流工作流最佳实践1. 复杂任务模块化# 使用工作流节点实现模块化main_workflow{nodes:[{type:start},{type:intent_classification},{type:workflow,name:order_query_workflow},# 子工作流{type:workflow,name:after_sale_workflow},# 子工作流{type:end}]}2. 流式输出与参考来源输出节点支持配置参考来源让回复更可信{reference:{items:[{params:{name:环球网,source:华为浏览器},card:{type:leftPictureRightText,params:{title:网页标题,subTitle:站点名称-站点来源类型,link:{webLink:{startMode:0,url:https://example.com/article}}}}}]}}3. 处理非文本请求当工作流需要处理用户上传的图片或文件时可以通过开始节点的FILES_INPUT参数接收再借助文本处理组件提取文件链接# FILES_INPUT 是一个 Arraystring 类型参数# 通过文本处理组件的字符串拼接方式取出目标链接file_urlinput[0]# 取出第一个文件链接4. 用户问题建议输出节点支持配置用户问题建议suggestions引导用户后续对话{suggestions:{chipsList:[{content:superlink://vassistant?text如何缓解压力startmoderecognize,domain:documentSummary},{content:superlink://vassistant?text常见症状有哪些startmoderecognize,domain:documentSummary}]}}注意最多只会展示一组用户问题建议最多3条每条不超过30个字符。常见问题FAQQ1工作流试运行失败如何排查答首先检查节点的边框颜色——运行成功的节点边框显示为绿色失败的节点会显示错误信息。可以在运行结果面板中查看调测树信息定位失败节点。Q2工作流模式的智能体使用返回变量的结束节点时没有响应内容答工作流模式的智能体如果结束节点配置了返回变量因为没有大模型做融合答复智能体会没有响应内容。可以为结束节点绑定卡片或者改为返回文本模式。Q3工作流中的插件版本如何更新答工作流中添加的插件如果有版本更新在工作流试运行时会自动执行新版本插件。如果工作流已被智能体引用需更新发布工作流后在引用资源中升级到新版本。Q4流式云插件的结果为什么在后续节点获取不到答流式云插件注册时含默认输出参数streamInfostring类型后续节点必须通过引用streamInfo字段获取流式结果。总结本文全面介绍了鸿蒙智能体平台的工作流功能工作流概念可视化任务编排工具将复杂业务拆分为可编排步骤创建流程新建→编排→测试→上架四个阶段18种节点覆盖输入、处理、输出全流程的各类节点高级功能版本管理、导入导出、流式输出、参考来源最佳实践模块化设计、非文本处理、用户问题建议掌握工作流开发是构建复杂智能体的关键一步它让智能体具备了真正的工程化能力。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源创建工作流开始节点大模型节点插件节点代码节点意图分类节点输出节点知识库节点循环节点提问器节点工作流节点工作流版本管理导入导出工作流小艺开放平台