尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

8.4 工作流九个节点的实现过程

8.4 工作流九个节点的实现过程 8.4.1 节点1开始节点与字段约束开始节点定义了整个工作流的输入接口。本项目共定义5个输入字段keyword行业关键词必填例如“AI金融”“新能源汽车“是整条流水线的驱动器。platform发布平台可选默认值“小红书/公众号/视频号通用”影响文章生成节点对文风的微调。audience目标受众可选默认值“行业从业者、创业者、投资关注者”影响信息密度与专业术语的使用。content_length内容长度可选默认值“中等”影响最终文章的字数范围。mode_preference模式偏好可选默认值“自动判断”允许用户在重磅模式与日常模式之间手动切换。五个字段中只有keyword是必填其他四个均为可选并提供合理默认值。这种“最小必填 完整默认值”的设计让普通用户只需输入一个关键词就能跑通工作流同时让高级用户可以通过更多参数精细调控产出。如图8-3所示。图8-3 用户输入页面8.4.2 节点2新闻搜索节点联网搜索新闻搜索节点是整条工作流的数据源。它使用扣子编程预置的联网搜索SDKSearchClient针对关键词执行多次搜索查询覆盖政策、企业动作、技术突破、投融资、争议事件等多个维度最终聚合8~12条候选热点。节点内部的关键工程细节有三点。第一是多查询策略单次查询的覆盖面有限因此节点内部会构造两条互补的查询字符串——一条聚焦最新动态、行业新闻另一条聚焦政策、投融资、技术突破并在结果层做URL去重。第二是时间过滤调用SDK时设置 time_range1w确保只返回最近7天的内容规避热点实际是旧闻的尴尬。第三是字段标准化把SDK返回的原始结果映射为统一的dict结构title、summary、source、time、url、authority方便下游消费。如图8-4所示为新闻搜索节点的输出示例。def news_search_node(state: NewsSearchInput, config, runtime) - NewsSearchOutput:client SearchClient(ctxruntime.context)queries [f{state.keyword}最新动态新闻行业,f{state.keyword}政策投融资技术突破争议,]news_list, seen [], set()for q in queries:resp client.search(queryq, count10, time_range1w, need_summaryTrue)for it in resp.web_items:if it.url and it.url not in seen:seen.add(it.url)news_list.append({title: it.title, summary: it.snippet,source: it.site_name, time: it.publish_time,url: it.url, authority: it.auth_info_des,})return NewsSearchOutput(news_listnews_list[:12])[yx1][yx2][yx3]图8-4 新闻搜索节点输出示例[yx4]8.4.3 节点3热点定调节点大语言模型热点定调节点是本章工作流中第一次出现智能判断。它接收上游传入的news_list调用大模型推荐模型为doubao-seed-2.0-Pro对新闻进行四类分析提炼从12条候选热点中提炼出3条核心热点分类判断每条热点属于政策驱动、技术突破、商业模式、投融资、市场变化、舆论争议、企业动作中的哪一类。定调综合判断本次内容的情绪基调兴奋、理性、警惕、机会、复盘、科普。路由根据热点的重要性判断进入重磅模式还是日常模式。该节点的提示词遵循“角色任务输出格式”三段式结构并要求模型严格按照JSON格式输出topic_direction、content_tone、content_mode、key_points四个字段。这种结构化输出是后续条件路由的前提——只有输出格式严格content_mode字段才能被下游节点准确读取。如图8-5所示。图8-5 热点定调节点的输入输出页面8.4.4 节点4内容模式路由节点条件判断路由节点是整条工作流的分叉点。它本身不调用任何模型或外部工具仅基于上游节点输出的content_mode字段做出路由决策这通过add_conditional_edges接口实现伪代码如下def content_mode_router(state: ContentModeRouterInput) - str:title:内容模式路由desc:根据热点定调结果决定走深度解读还是盘点汇总if state.content_mode 重磅模式:return 深度解读else:return 盘点汇总builder.add_conditional_edges(sourcetopic_tone,pathcontent_mode_router,path_map{深度解读: deep_analysis,盘点汇总: summary_analysis,})路由函数的设计有两条工程经验。其一路由函数不应承担任何业务逻辑仅做路径选择。所有判断为何重磅的逻辑都已在上游热点定调节点完成路由节点只是执行结果。其二path_map应该写得全覆盖content_mode的所有可能取值避免上游节点输出意外字符串时整个流水线无路可走。8.4.5 节点5深度解读与盘点汇总双分支两条分支节点的能力都是大语言模型但任务设定差异显著。深度解读节点重磅模式分支的输出结构是“事件一句话总结为什么重要行业逻辑 多方影响未来 3 个趋势核心观点”强调单点深挖与因果链。它适合处理一项重大政策、一项颠覆性技术或一起标志性企业事件。盘点汇总节点日常模式分支的输出结构是“行业热点总览3~5 个重点事件共同趋势机会与风险”强调多点横向梳理与趋势归纳。它适合处理多个中等热度信息的汇总场景。两条分支最终在文章生成节点合流——无论走哪条分支输出都是同一个全局变量 analysis_result类型为str。这种分而治之、合而生成的结构是工作流条件分支设计的经典范式。表8-3对两条分支做了横向对比。表8-3两条分支节点的能力对比对比维度深度解读重磅模式盘点汇总日常模式分析重心单点深挖、因果链多点梳理、趋势归纳输出长度较长强调论证完整性较短强调信息密度典型应用政策出台、技术突破周度回顾、动态汇总对模型要求推理深度信息整合模型选型建议doubao-seed-2-0-prodoubao-seed-2-0-lite8.4.6 节点6文章生成节点结构化输出文章生成节点是整个工作流的主菜。它接收9个输入字段keyword、platform、audience、content_length、topic_direction、content_tone、content_mode、key_points、analysis_result输出一份完整的图文内容包包含3 个候选标题满足传播感与不夸大的双重约束。1 篇正文适配指定平台与受众的文风。3 条金句可被读者引用与转发。3 个适合封面的短标题总长度不超过 12 字。发布时间建议基于平台流量规律。8 ~ 12 个话题标签兼顾搜索流量与垂直度。该节点的输出本身是一个JSON对象被序列化为article_result字符串后注入全局状态。下游图片提示词节点会重新解析这个JSON从中提取标题与正文用于配图规划。这种“序列化—反序列化”的中间态设计让节点之间既保持松耦合又能传递复杂的结构化数据。如图8-6所示。图8-6 [yx5] 文章生成节点的输入输出页面8.4.7 节点7图片提示词规划节点图片提示词规划节点是整个工作流中最容易被低估的节点。许多初学者会跳过这一节点直接把文章正文丢给生图模型——结果是生成的图片要么与文章主题脱节要么风格混乱、画面元素冲突。本章采用先规划、后生成的两阶段范式。规划节点的任务不是直接生图而是为生图模型撰写六类辅助信息封面图提示词、正文配图提示词3条、整体风格描述、主视觉元素、构图建议、禁止出现的元素。这六类信息合在一起构成image_prompts字典。规划节点的关键工程价值有三点。第一是风格统一四幅图共用同一套style与 main_visual确保视觉一致性。第二是合规护栏禁止出现的元素显式列出真实品牌Logo、夸张数据、低质素材规避平台合规风险。第三是中文友好在风格描述中明确要求支持中文标题渲染避免后续生图阶段出现中英文混排的尴尬。8.4.8 节点8图片生成节点生图模型图片生成节点使用扣子编程预置的生图SDKImageGenerationClient。它根据上游节点输出的image_prompts依次生成1幅封面图4:5比例和 3 幅正文配图16:9比例共 4 幅图。节点内部的工程细节有三点。第一是分辨率约束SDK要求自定义分辨率必须落在 [2560×1440, 4096×4096] 区间内因此封面采用3200×4000、正文采用3840×2160。第二是顺序生成四幅图按封面、正文 1、正文 2、正文 3 的顺序串行调用便于失败重试。第三是返回File对象生成后返回的不是base64字节流而是带url与file_type的File对象供前端直接渲染或下载。图 8-7 图片生成节点输入输出示例8.4.9 节点9结束节点与输出契约结束节点不执行任何业务逻辑仅负责把全局状态中的指定字段打包 GraphOutput对象。本章的输出契约定义为七个字段content_mode、topic_direction、content_tone、article_result、image_prompts、generated_images、news_list。输出契约的设计原则是下游可直接消费无需二次处理。例如generated_images直接是 List[File]类型前端可以遍历渲染news_list直接是 List[Dict]运营人员可以查看每条新闻的来源与链接。如果输出包含半结构化的字符串下游就需要做正则匹配或JSON解析工程复杂度立刻提升。表8-4工作流九节点关键配置一览节点名节点类型能力关键输入关键输出开始input——keyword/platform/...新闻搜索task联网搜索keywordnews_list热点定调agent大语言模型news_listtopic_direction/content_tone/content_mode/key_points内容模式路由condition条件判断content_mode路径选择深度解读agent大语言模型key_points/news_listanalysis_result盘点汇总agent大语言模型key_points/news_listanalysis_result文章生成agent大语言模型analysis_result前置变量article_result图片提示词规划agent大语言模型article_resultimage_prompts图片生成task生图模型image_promptsgenerated_images结束output——GraphOutput8.4.11 调试过程中的典型问题项目开发过程中出现过三次典型问题值得记录。第一次是节点输入字段缺失。文章生成节点初次运行时报错提示platform、audience、content_length三个字段缺失。排查发现其默认不会自动把GraphInput的默认值传播到GlobalState解决办法是在节点的Input类型中给这三个字段加上默认值等同于双重保险。如图8-8所示。图8-8 调试过程中的错误捕获自修复闭环第二次是LLM返回JSON解析失败。热点定调节点偶尔会返回包裹在Markdown代码块中 JSON即 json ... 形式直接json.loads会抛JSONDecodeError。解决办法是在节点内部增加_extract_json辅助函数先用正则剥离代码块标记再做反序列化。第三次是图片生成size参数越界。图片生成节点初版代码采用了4500×4500的分辨率超出了SDK[2560, 4096]的范围被SDK直接拒绝。修正后采用3200×4000封面与 3840×2160正文完全落在范围内。【经验】三次问题揭示了两条共性其一工作流模式比Agent模式更需要在契约边界上做防御式编码——下游不假设上游一定输出某字段而是为每个字段提供默认值或解析降级其二扣子编程具备自动诊断与修复能力开发者在出错时应当先看自动修复的建议而非立即手工调试。
返回列表