智能体工作流构建与认识
智能体工作流是 “状态驱动的自动化执行引擎”,通过 “FSM + 图灵机” 模型实现动态决策与复杂业务闭环。其核心价值在于将分散的模型能力、工具、知识库整合为可复用的业务系统,解决传统线性流程的灵活性不足问题。传统 OA 工作流基于纯有限状态机(FSM),流程固定(如 “提交→审核→审批”),无动态决策能力;智能体工作流则是 “FSM + 图灵机” 的混合模型,支持流程动态调整(如 “插图质量不达
智能体工作流基础认知
- 传统 OA 工作流基于纯有限状态机(FSM),流程固定(如 “提交→审核→审批”),无动态决策能力;智能体工作流则是 “FSM + 图灵机” 的混合模型,支持流程动态调整(如 “插图质量不达标→重新生成”),具备自我修正能力。
- 有限状态机(FSM):定义状态集合(如 “数据收集完成”“插图生成中”)和状态转移规则(如 “数据收集完成→开始构建知识库”),对应 “状态转移矩阵”。
- 图灵机:通过 “读写头”(工具 / 模型调用)操作 “纸带”(数据 / 资源),实现任意复杂业务逻辑,对应 “通用计算能力”。
智能体工作流的 3 大核心特性
-
特性 技术本质 类比 书籍解读场景体现 认知能力 基于 LLM 的意图理解与决策 模型推理层(如分类模型的预测逻辑) 自动识别书籍类型(小说 / 科普),调整解读深度 资源协同 多模态资源(文本 / 图像 / 音频)的动态调度 多模态模型融合(如 CLIP 的跨模态匹配) 思维导图(文本)与插图(图像)的内容对齐 闭环迭代 基于反馈的流程优化 强化学习(Reward-based 优化) 根据用户评分自动调整视频节奏(如加快 / 减慢讲解速度)
智能体与工作流的关系
-
Coze 工作流支持通过可视化的方式,对插件、大语言模型、代码块等功能模块进行组合,从而实现复杂、稳定的业务流程编排。当目标任务场景包含较多的步骤,且对输出结果的准确性、格式有严格要求时,适合配置工作流来实现。
- 工作流:是一个功能 “组件” 或 “工具链”。它是一系列预设步骤的自动化流程,专注于高效、稳定地完成一个特定任务。无论是生成报告还是处理图片,工作流都像一个高度专业化的流水线,输入明确指令,输出预期结果。它强大而精准,但本身不具备 “意图” 或 “目标”。
- 智能体:是整个系统的 “大脑” 和 “中枢”。智能体是一个具备认知、决策和行动能力的 AI 实体。构建的智能体是一个完整的、可交互的 AI 应用。它拥有身份设定、知识库、长期记忆、对话能力,并能够自主判断何时以及如何调用各种工具(包括工作流)来达成用户的目标。
-
Agent 框架(Agent = LLM + 规划 + 记忆 + 工具使用),我们可以更清晰地看到两者的位置:工作流主要实现了框架中的 “工具使用” 部分。它将多个工具(插件、大模型、代码等)通过逻辑编排串联起来,形成一个更强大的复合工具。智能体则涵盖了完整的 Agent 框架:
-
LLM(大模型):作为智能体的核心 “大脑”,处理语言理解与生成。
-
规划:智能体能够分解复杂任务(对应吴恩达提出的 Planning 模式)。
-
记忆:智能体拥有短期对话记忆和长期知识存储与检索的能力。
-
工具使用:调用工作流,正是智能体实现工具使用的最高效方式之一。还能直接调用单一步骤的插件、API 等。
-
特性 工作流 Coze 智能体 核心定位 功能组件,自动化工具链 完整的 AI 应用中枢与大脑 角色类比 专业部门 / 自动化生产线 CEO / 总指挥官 核心能力 顺序执行、数据处理、任务自动化 意图理解、任务规划、记忆、工具调度、对话交互 灵活性 线性、预设性强 非线性、动态、适应性强 关系 是智能体可以调用的强大工具集 是工作流的调度者和组织者
-
工作流核心构成
-
开始节点:节点名称(双击可以重命名);节点介绍(双击可以编辑);分割符;输入栏。输入栏中我们可以看到有变量名、变量类型、是否必填、展开、选择删除,变量名可以自定义,但是有一定的要求:“只能包含字母、数字或下划线,并且以字母或下划线开头”。变量类型,如果上传文件选择 Fille,上传文本使用其他变量类型。
-
常见插件节点:比如点击“xlsx文件读取”节点,节点名称(双击可以重命名)。节点介绍(双击可以编辑);分割符;输入栏;输出栏;异常处理。输入栏中我们可以看到有变量名、变量值
- 在插件、部分官方节点中,变量名是固定值
- 点击变量值的叉,可以选择使用固定值
- 点击变量值的叉,可以选择引用前面节点变量,或者全局中的用户、应用、系统变量。在插件节点中输出的变量名和变量类型都是固定,这里我们可以看到,变量名是“message”,变量类型是 string
-
常见代码节点:节点名称(双击可以重命名);节点介绍(双击可以编辑);分割符;输入栏;分割符;输出栏;分割符;异常处理。输入栏中我们可以看到有变量名、变量值;在输入的右边有一个加号可以批量添加多个变量;在代码看到变量名是可以编辑的;变量值的引用和输入与前面节点一致。输出栏中看到和开始节点一样的内容,具体大家参考开始节点。
-
大模型节点:节点名称(双击可以重命名);节点介绍(双击可以编辑);分割符;模型;分割符;技能;分割符;输入栏;分割符;视觉理解输入;分割符;系统提示词;分割符;用户提示词;分割符;输出栏;分割符;异常处理。
-
节点类型 核心构成 关键特性 开始节点 节点名称、介绍、输入栏(变量名、类型、必填项) 变量名规则:仅含字母、数字、下划线,且以字母 / 下划线开头;支持文件(File 类型)和文本输入 插件节点 名称、介绍、输入栏(固定变量名)、输出栏(固定变量名 + 类型)、异常处理 变量值可设为固定值,或引用前置节点 / 全局变量(用户、应用、系统变量) 代码节点 名称、介绍、输入栏(可自定义变量名)、输出栏、异常处理、代码编辑区 支持批量添加输入变量,变量引用逻辑与插件节点一致 大模型节点 名称、介绍、模型选择、技能配置、输入栏、视觉理解输入、提示词(系统 + 用户)、输出栏、异常处理 需配置系统提示词(定义模型行为)和用户提示词(任务指令) -
工作流只要运行成功,一定是从开始节点流向结束节点,从左边流向右边,左边的节点引用不到右边的节点的值,而右边节点可以引用左边节点的值。
工作流分类和节点类型
-
链式工作流:线性任务的效率引擎
-
基于输入中的选题背景和功能,描述行业趋势、智能体的作用、价值和业务场景。重点突出智能体如何解决现有问题,并替代初级角色。语言应连贯、有洞察力,涵盖背景、挑战和智能体定位。首先概述典型的开发流程(例如:知识收集→知识库构建→工作流设计→集成测试→优化维护),然后基于输入中的困难,分析两个主要痛点。每个痛点需详细描述:
- 痛点一:[描述第一个痛点,包括原因、影响和现实挑战,结合输入中的困难举例说明。]
- 痛点二:[描述第二个痛点,同样包括原因、影响和现实挑战,与输入对应。]
-
模型能力:[指定所需模型能力,如自然语言处理、多语言支持、多模态处理等,基于输入功能推断。]
-
知识要求:[描述知识库内容、更新机制和验证需求,确保专业性和准确性。]
-
插件能力:[列出可能需要的插件,如翻译工具、文档处理插件等,基于功能推断。]
-
工作流设计:[描述工作流模块设计,如知识库导入、问答处理等,确保可扩展性。]
-
用户行为:[描述用户交互方式,如输入处理、响应机制和优化建议。]
-
-
路由式工作流:智能分流的多面手,基于条件判断将任务路由到不同处理分支,多场景、需分类处理、有明确判断逻辑的场景
-
评估优化式工作流:持续进化的智能体,通过生成-评估-优化的循环机制提升输出质量,创意生成、质量要求高、需要迭代优化的场景。需要注意质量评估标准、优化触发条件、循环退出机制
-
并行式工作流:效率倍增的加速器。同时执行多个独立或相关任务,最后聚合结果,任务可拆分、无强依赖、追求效率的场景。数据分片并行、任务类型并行、资源优化并行
-
AI智能体是集推理(Reasoning)、工具(Tools)和记忆(Memory)于一体的系统。它利用LLM的动态决策能力,在有限人类干预下完成任务。以下是三大组件的详细说明:
- 推理(Reasoning):AI智能体通过LLM执行规划(Planning)和反思(Reflecting)。规划涉及任务分解(Task Decomposition),即将复杂问题拆解为可执行的子任务,以提高准确性和减少幻觉。反思则允许智能体评估行动结果,并迭代调整策略。
- 工具(Tools):LLM的静态知识局限通过外部工具扩展。工具使智能体能访问实时数据(如网络搜索、API或向量数据库),并执行函数调用(Function Calling)。工具选择可由用户预设或智能体动态决定,适用于不同复杂度场景。
- 记忆(Memory):智能体通过记忆从经验中学习,区分于纯LLM工作流。短期记忆存储对话历史,指导即时行动;长期记忆积累跨会话知识,实现个性化和性能提升。
-
工作流是连接 “资源” 与 “业务” 的核心枢纽 —— 它本质是 “将业务目标拆解为可自动化执行的步骤序列,通过组件协同实现端到端闭环”。工作流是按预设逻辑编排 “数据处理、工具调用、模型推理、资源交互” 的步骤链,本质是 “状态驱动的自动化执行引擎”。解决算法工程师的 “落地痛点”—— 将分散的模型能力、API 工具、知识库整合为 “可复用、可调试、可扩展” 的业务系统。传统算法流程是 “输入→模型→输出” 的线性管道,智能体工作流是 “感知(资源交互)→决策(条件判断)→执行(工具 / 模型)→反馈(迭代优化)” 的闭环系统。智能体工作流的核心组件
-
组件 算法视角的理解 类比算法模块 核心作用 触发节点 工作流的 “入口函数” 数据输入层 接收初始指令(如 “生成《三体》讲解视频”) 执行节点 原子化的 “功能函数” 算法核心模块(如分类、生成) 调用工具 / 模型 / 知识库(如调用图书 API、生成思维导图) 条件分支节点 带 “if-else” 的 “逻辑判断模块” 模型推理后的决策层 根据中间结果动态调整流程(如 “书籍厚度> 300 页则分节讲解”) 并行节点 多线程 / 多进程 “并行计算” 分布式训练框架 同时执行多个独立步骤(如 “同步生成插图 + 解读文本”) 循环节点 带 “while” 的 “迭代优化模块” 模型微调 / 迭代推理 重复执行步骤直到满足条件(如 “插图生成不满意则重新调用工具”) 状态存储节点 数据缓存 / 中间结果存储 特征存储 / 模型 checkpoint 记录流程状态(如 “已完成章节拆分、待生成音频”)
-
-
工作流的核心类型(按业务复杂度选型)
-
类型 适用场景 技术实现难度 适配点 线性工作流 简单业务(单步骤序列) 低 类似传统算法管道,直接按顺序串联步骤 分支工作流 条件依赖业务(动态选路) 中 用 “规则引擎 / LLM 决策” 替代硬编码判断 循环 + 并行工作流 复杂业务(多组件协同) 高 结合多线程、状态管理实现并行 + 迭代
-
工作流开发原则与技术选型
-
工作流开发的核心原则
- 模块化拆分:每个节点只做一件事(如 “仅负责书籍数据收集”“仅负责思维导图生成”),类似算法模块的 “高内聚低耦合”。
- 状态可追溯:每个步骤的输入 / 输出、执行状态都需记录,便于调试(类似算法的 “日志打印”)。
- 容错性设计:为关键节点添加 “重试机制 + 降级方案”(如 “API 调用失败则切换备用接口”),避免流程中断。
- 参数化配置:将可变参数(如 API 密钥、生成阈值)抽离为配置文件,类似算法的 “超参数配置”。
-
工作流引擎的技术选型框架
-
引擎类型 核心技术 优势 劣势 项目适配度 代码型(LangChain Workflow) Python 代码直接定义节点与连接 灵活度高,支持复杂逻辑 可视化弱,非技术人员难维护 ★★★★★(算法工程师主导开发) 低代码型(Dify Workflow) 可视化拖拽 + 代码插件 平衡灵活度与易用性 复杂循环逻辑实现受限 ★★★★☆(需团队协作时) 无代码型(Coze 流程) 全可视化配置,模板化节点 开发速度快,门槛低 自定义能力弱 ★★★☆☆(快速验证原型)
-
视频生成工作流
-
以《三体》解读视频生成为例,拆解 10 个核心节点的技术细节、输入输出、错误处理和优化技巧:
-
节点 1:输入解析与标准化(工作流的 “数据预处理层”),将用户输入的模糊书籍名(如 “刘慈欣的三体第一部”)转化为唯一标识(如 ISBN),避免歧义。实体识别可替换为开源模型(如 spaCy + 自定义 NER),降低 API 成本,置信度计算可引入编辑距离(如用户输入与搜索结果的字符串相似度)。
-
def parse_book_input(raw_input): """ 输入解析流程: 1. 实体识别:提取书籍名、作者、版本等关键信息 2. 歧义消除:通过搜索引擎验证最可能的书籍 3. 标准化输出:返回ISBN、书名、作者的结构化数据 """ # 1. 实体识别(用LLM提取关键信息) llm = ChatOpenAI(model="gpt-3.5-turbo") entity_prompt = f""" 从用户输入中提取书籍关键信息:{raw_input} 输出JSON:{{"book_name": "书名", "author": "作者", "version": "版本(可选)"}} """ entities = json.loads(llm.predict(entity_prompt)) # 2. 歧义消除(调用Google Books API验证) import requests search_url = f"https://www.googleapis.com/books/v1/volumes?q=intitle:{entities['book_name']}+inauthor:{entities['author']}" response = requests.get(search_url) if not response.json().get("items"): raise ValueError(f"未找到书籍:{entities['book_name']}") # 3. 标准化输出(提取ISBN和详细信息) book_info = response.json()["items"][0]["volumeInfo"] isbn = next((i["identifier"] for i in book_info.get("industryIdentifiers", []) if i["type"] == "ISBN_13"), None) return { "isbn": isbn, "title": book_info["title"], "author": book_info["authors"][0], "raw_input": raw_input, "confidence": 0.95 # 置信度,用于下游节点判断是否需要人工干预 } # 错误处理:低置信度时触发人工审核 def handle_input_ambiguity(standardized_input): if standardized_input["confidence"] < 0.7: # 发送审核请求(可集成企业IM工具) send_approval_request(f"请确认书籍:{standardized_input['title']}(ISBN:{standardized_input['isbn']})") # 暂停工作流,等待人工确认 return "pause" return "proceed" -
标准化任务结构体(JSON),实体识别(LLM/GPT-3.5-turbo + spaCy 自定义 NER,提取书名、作者、版本);歧义消除(调用 Google Books / 豆瓣 API 交叉验证,确保书籍唯一);任务标准化(基于书籍类型 / 页数自动匹配解读需求)。
-
{ "task_id": "wf-20240520-001", "book_info": { "isbn": "9787536692930", "title": "三体Ⅰ:地球往事", "author": "刘慈欣", "version": "第一版", "pages": 302, "book_type": "科幻小说" }, "task_requirement": { "video_type": "单章节解读", // 分节/单节 "depth": "深度解读", // 浅层/深度/学术级 "output_format": "MP4", "resolution": "1080P" }, "confidence": 0.96 // 输入解析置信度 }
-
-
节点 2:多源数据融合(构建 “书籍全息数据库”),整合图书 API、网络爬虫、专业数据库的多源数据,为后续解读提供丰富素材。数据来源与处理逻辑:
-
数据类型 来源 处理方法 存储格式 基础元数据 豆瓣 / Google Books API 字段对齐(统一 “出版时间” 格式为 YYYY-MM-DD) JSON 全文片段 鸠摩搜书 / Z-Library OCR 识别 PDF→文本清洗→章节拆分 分块文本 + 元数据(页码 / 章节) 作者访谈 知乎 / 公众号爬虫 去广告→实体链接(关联到书籍内容) 文本 + 来源 URL 时代背景 维基百科 / 学术论文 时间线提取→事件关联(如 “2008 年科幻文学趋势”) 时间线 JSON + 关联文本 -
多线程并行爬取,爬虫代理池:使用动态 IP 代理(如阿布云)避免被反爬,数据校验:用 SHA256 哈希检测重复内容,避免存储冗余,增量更新:记录已爬取 URL,仅获取新内容。
-
import concurrent.futures def fetch_book_data(standardized_input): """多线程并行爬取多源数据,提升效率""" isbn = standardized_input["isbn"] title = standardized_input["title"] # 定义爬取函数(每个来源一个函数) def fetch_douban(): # 豆瓣API调用逻辑(省略) return {"source": "douban", "data": douban_data} def fetch_zhihu_interviews(): # 知乎作者访谈爬取逻辑(省略) return {"source": "zhihu", "data": zhihu_data} def fetch_wikipedia_context(): # 维基百科时代背景爬取逻辑(省略) return {"source": "wikipedia", "data": wiki_data} # 多线程并行执行 with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor: futures = [ executor.submit(fetch_douban), executor.submit(fetch_zhihu_interviews), executor.submit(fetch_wikipedia_context) ] results = [f.result() for f in futures] # 数据融合(去重+结构化) merged_data = { "metadata": next(r["data"] for r in results if r["source"] == "douban")["metadata"], "chapters": [], # 后续章节拆分后填充 "interviews": [r["data"] for r in results if r["source"] == "zhihu"], "background": next(r["data"] for r in results if r["source"] == "wikipedia") } return merged_data -
结构化书籍全息数据(JSON),多线程并行采集(ThreadPoolExecutor,同时调用 多 类数据源);
-
{ "metadata": { // 基础元数据(API获取) "publisher": "重庆出版社", "pubdate": "2008-01", "summary": "文化大革命如火如荼进行的同时,军方探寻外星文明的绝秘计划“红岸工程”取得了突破性进展...", "tags": ["科幻", "宇宙社会学", "末日"] }, "chapters": [ // 章节级文本(爬虫+OCR) { "chapter_id": "c01", "title": "红岸基地", "text": "1967年,中国,大兴安岭...", "page_range": "1-25" }, // ... 其他章节 ], "depth_materials": { // 深度素材(多源融合) "author_interview": "刘慈欣在2010年访谈中提到:《三体》的核心是探讨人性与文明的冲突...", "background": "2008年科幻文学背景:中国科幻处于崛起期,受“硬科幻”潮流影响...", "academic_analysis": "《三体》中的“黑暗森林法则”本质是对宇宙资源稀缺性的假设..." } }
-
-
节点 3:书籍类型判定与分节策略(条件分支触发),根据书籍类型(小说 / 科普 / 非虚构)和页数,动态决定 “是否分节” 及 “分节规则”,避免统一流程导致的体验不佳(如厚书单视频过长)。输入节点 2 输出的全息数据(metadata+chapters 字段),输出:分节策略结构体(JSON)
-
{ "book_type": "科幻小说", "split_needed": true, // 是否分节(页数>300触发) "split_rule": "按情节模块分节", // 小说:情节模块;科普:知识点 "sections": [ { "section_id": "s01", "title": "红岸工程与三体文明接触", "chapter_ids": ["c01", "c02", "c03"], // 关联章节 "core_event": "叶文洁触发信号,三体文明收到消息" }, // ... 其他分节 ], "video_total": 3 // 总视频数 } -
书籍类型判定(LLM + 关键词匹配:科幻→小说,“公理”“实验”→科普);分节规则引擎(小说:情节转折检测;科普:知识点边界识别);分节合理性校验(LLM 评估分节是否符合逻辑,避免拆分碎片化)。
-
-
节点 4:知识库构建与检索优化(RAG 系统的 “算法级” 调优),构建高质量向量知识库,确保后续 LLM 生成内容的准确性和深度。文本分块策略(区别于通用方法的书籍专属优化):
-
书籍类型 分块粒度 拆分依据 示例(《三体》) 小说 500-800 字 / 块 情节转折(如章节内场景切换) “叶文洁按下发射按钮→三体文明收到信号” 作为一个块 科普 / 非虚构 300-500 字 / 块 知识点边界(如 “黑暗森林法则” 的完整解释) 单独拆分 “宇宙社会学公理” 相关段落 -
def book_chunking(text, book_type="novel"): """基于书籍类型的智能分块""" if book_type == "novel": # 小说按场景拆分(基于段落+对话标记) separators = ["。\"", "!\"", "\n\n", "\n", "。", "!"] # 优先按对话结束拆分 else: # 非虚构按知识点拆分(基于标题层级) separators = ["###", "##", "#", "\n\n", "\n"] text_splitter = RecursiveCharacterTextSplitter( chunk_size=500 if book_type == "novel" else 300, chunk_overlap=50, separators=separators ) chunks = text_splitter.split_text(text) # 为每个块添加"情节标签"(小说)或"知识点标签"(非虚构) for i, chunk in enumerate(chunks): if book_type == "novel": # 用LLM生成情节标签(如"叶文洁与三体文明首次接触") chunks[i] = {"text": chunk, "label": generate_plot_label(chunk)} else: chunks[i] = {"text": chunk, "label": generate_knowledge_label(chunk)} return chunks -
检索策略(混合检索 + 重排序):
-
def advanced_rag_retrieval(query, kb_collection, book_type): """ 混合检索流程: 1. 语义检索:获取与query语义相似的块 2. 关键词检索:获取包含核心实体的块 3. 重排序:用Cross-Encoder模型优化结果顺序 """ # 1. 语义检索(向量相似性) embedder = SentenceTransformer("all-MiniLM-L6-v2") query_emb = embedder.encode([query]) semantic_results = kb_collection.query(query_embeddings=query_emb, n_results=10) # 2. 关键词检索(提取实体后精确匹配) entities = extract_entities(query) # 提取"三体文明""黑暗森林"等实体 keyword_results = kb_collection.query( query_texts=[f"实体:{e}" for e in entities], # 按实体标签检索 n_results=5 ) # 3. 去重合并 all_results = list({r["id"]: r for r in semantic_results + keyword_results}.values()) # 4. 重排序(用Cross-Encoder优化相关性) from sentence_transformers.cross_encoder import CrossEncoder cross_encoder = CrossEncoder("cross-encoder/ms-marco-MiniLM-L-6-v2") pairs = [[query, r["text"]] for r in all_results] scores = cross_encoder.predict(pairs) # 按分数排序并返回Top5 sorted_results = [r for _, r in sorted(zip(scores, all_results), key=lambda x: x[0], reverse=True)] return sorted_results[:5]
-
-
节点 5:思维导图生成(结构化知识的 “算法表达”),将书籍核心内容转化为层次清晰、逻辑严谨的可视化结构,需解决 “层级划分”" 关系建模 " 两个关键问题。输入:节点 3 的分节策略 + 节点 4 的知识库。层级划分算法(基于 TextRank 的章节权重计算):
-
def generate_mindmap_hierarchy(book_data, kb_collection): """ 1. 提取章节主题(用TextRank计算关键句) 2. 构建层级关系(父主题→子主题) 3. 计算节点权重(重要性评分) """ # 1. 提取章节主题 chapters = book_data["chapters"] chapter_themes = [] for chapter in chapters: # 用TextRank提取章节关键句作为主题 from summa import keywords theme = keywords.keywords(chapter["text"], words=5).replace("\n", ",") chapter_themes.append({ "chapter_id": chapter["id"], "theme": theme, "text": chapter["text"] }) # 2. 构建层级关系(用LLM判断父子关系) llm = ChatOpenAI(model="gpt-4o") hierarchy_prompt = f""" 以下是《{book_data['metadata']['title']}》的章节主题列表: {[t['theme'] for t in chapter_themes]} 请将它们组织为3级层级结构(核心主题→二级主题→章节主题), 输出JSON:{{"root": [{{"title": "核心主题1", "children": [{{"title": "二级主题1", "children": ["章节主题1", ...]}}]}}]}} """ hierarchy = json.loads(llm.predict(hierarchy_prompt)) # 3. 计算节点权重(基于在知识库中的检索频率) for root in hierarchy["root"]: for child in root["children"]: # 用主题词检索知识库,频率越高权重越大 query = child["title"] results = advanced_rag_retrieval(query, kb_collection, book_type="novel") child["weight"] = len(results) # 权重=检索到的相关块数量 return hierarchy -
可视化实现(生成可交互 SVG):
-
def mindmap_to_svg(hierarchy): """将层级结构转换为SVG格式的可交互思维导图""" import svgwrite dwg = svgwrite.Drawing('mindmap.svg', profile='full', size=('800px', '600px')) # 递归绘制节点(核心算法:计算节点坐标) def draw_node(node, x, y, level=0): # 绘制节点圆形和文本 dwg.add(dwg.circle(center=(x, y), r=20, fill="#4CAF50")) dwg.add(dwg.text(node["title"], insert=(x-30, y+5), font_size=12, fill="white")) # 绘制子节点(水平分布) if "children" in node: child_count = len(node["children"]) spacing = 150 # 子节点间距 start_x = x + 100 # 子节点起始X坐标 start_y = y - (child_count-1)*spacing//2 # 子节点起始Y坐标 for i, child in enumerate(node["children"]): child_x = start_x child_y = start_y + i*spacing # 绘制连接线 dwg.add(dwg.line(start=(x+20, y), end=(child_x-20, child_y), stroke="black")) # 递归绘制子节点 draw_node(child, child_x, child_y, level+1) # 绘制根节点 for root in hierarchy["root"]: draw_node(root, x=100, y=300) # 根节点固定在左侧中间 dwg.save() return "mindmap.svg" -
思维导图生成(TextRank 提取关键主题→LLM 构建 3 级层级→SVG 可视化);解读文本生成(RAG 检索 + 提示词工程,确保内容准确 + 深度,包含时代背景 / 作者思想);内容对齐校验(LLM 对比思维导图与文本,确保核心点一致)。输出:结构化内容包(思维导图 SVG + 解读文本 JSON)
-
{ "mindmap": "./output/mindmap_s01.svg", // 分节思维导图 "interpretation_text": [ { "paragraph_id": "p01", "content": "红岸基地是《三体》的起点,叶文洁的偶然操作,开启了人类文明与三体文明的百年博弈...", "related_event": "红岸工程信号发射", "duration": 15 // 预估朗读时长(秒),用于音画同步 }, // ... 其他段落 ], "depth_analysis": "结合2008年科幻文学背景,红岸基地的设定暗合了当时人们对“外星文明探索”的好奇..." }
-
-
节点 6:关键事件插图生成(提示词工程 + 风格控制),基于结构化内容,生成符合书籍风格、贴合关键事件的 AI 插图,避免通用图片导致的违和感。输入:节点 5 的结构化内容包(interpretation_text+mindmap);输出:风格统一的插图集合(JSON)
-
{ "style": "科幻电影级画质,黑暗色调,星空背景,细节丰富", "images": [ { "image_id": "img01", "related_paragraph_id": "p01", // 关联文本段落(音画同步用) "event": "叶文洁在红岸基地按下发射按钮", "prompt": "科幻风格,红岸基地控制室,女性科学家按下红色按钮,窗外是大兴安岭夜色,8k分辨率", "url": "./output/img01.png", "relevance_score": 0.85 // 匹配度评分 }, // ... 其他插图 ] } -
风格提示词工程(根据书籍类型生成专属风格描述,如科幻→“电影级、黑暗色调”);插图质量评估(CLIP 模型计算 “插图 - 事件描述” 匹配度,阈值≥0.7);循环优化(匹配度 < 0.7 时,自动调整提示词重新生成,最多 3 次)。
-
def generate_illustrations(mindmap, book_data): """ 1. 提取3-5个关键事件(基于思维导图权重) 2. 生成风格化提示词(匹配书籍类型:科幻/历史/文学) 3. 调用Stable Diffusion API生成插图 4. 质量评估与重生成 """ # 1. 提取高权重事件 high_weight_events = [] for root in mindmap["root"]: for child in root["children"]: if child["weight"] > 3: # 权重阈值 high_weight_events.append(child["title"]) # 2. 生成风格化提示词(以科幻小说为例) style_prompt = "科幻风格,电影级画质,黑暗色调,星空背景,细节丰富,8k分辨率" event_prompts = [] for event in high_weight_events[:5]: # 取前5个 prompt = f"场景:{event},出自小说《{book_data['metadata']['title']}》,{style_prompt}" event_prompts.append(prompt) # 3. 调用API生成并评估 illustrations = [] for prompt in event_prompts: # 调用Stable Diffusion API image_url = stable_diffusion_api_call(prompt) # 质量评估(用CLIP判断与事件的匹配度) if evaluate_image_relevance(image_url, prompt) > 0.7: # 匹配度阈值 illustrations.append({"url": image_url, "event": event, "prompt": prompt}) else: # 重试一次 illustrations.append({"url": stable_diffusion_api_call(prompt), "event": event, "prompt": prompt}) return illustrations
-
-
节点 7:文本转语音(TTS)与音频分段(音画同步准备),将解读文本转化为 “风格贴合、语速适中” 的音频,并按文本段落拆分,确保后续与画面精准同步。输入:节点 5 的解读文本(含 duration 字段),输出:分段音频文件 + 音频配置(JSON)
-
{ "voice_type": "沉稳男声", // 小说→沉稳/激昂;科普→清晰平和 "audio_files": [ { "audio_id": "a01", "paragraph_id": "p01", // 关联文本段落 "file_path": "./output/a01.wav", "actual_duration": 14.8 // 实际朗读时长(秒) }, // ... 其他分段音频 ], "total_audio_path": "./output/total_audio.wav" // 完整音频(备用) } -
语音风格匹配(LLM 根据书籍类型 / 内容情绪推荐语音类型);语速优化(按文本复杂度调整语速:复杂句→慢,简单句→正常);音频分段(根据文本段落的实际朗读时长拆分,避免时长偏差)。
-
-
-
节点 8:视频合成(音画同步核心),将思维导图、插图、分段音频按 “文本段落 - 音频 - 插图” 的对应关系合成视频,确保节奏流畅、内容对齐。输入:节点 5 的思维导图 + 节点 6 的插图集合 + 节点 7 的分段音频,输出:单节完整视频文件(MP4)。画面资源调度(按文本段落匹配插图 / 思维导图,优先展示插图,无插图时用思维导图);音画同步算法(根据分段音频的实际时长,调整画面停留时间,偏差≤0.5 秒);视频美化(添加字幕、转场动画、背景音乐,控制整体音量平衡)。
-
节点 9:多节视频合并(分节场景专属),若触发分节策略(节点 3 的 split_needed=true),将各节视频按顺序合并为系列视频,并生成目录索引,方便用户观看。输入:节点 8 的所有单节视频 + 节点 3 的分节策略,输出:系列视频集合 + 目录索引(JSON)
-
{ "series_title": "《三体Ⅰ》深度解读系列", "total_episodes": 3, "episodes": [ { "episode": 1, "title": "红岸工程与三体文明接触", "video_path": "./output/three_body_s01.mp4", "duration": "15:30" }, // ... 其他集数 ], "index_file": "./output/series_index.md" // 目录索引(含每集核心看点) } -
视频合并(FFmpeg 批量合并,保持分辨率 / 帧率一致);目录索引生成(LLM 提取每集核心看点,生成 Markdown 格式目录);系列风格统一(确保每集的字幕样式、转场动画、背景音乐一致)。
-
-
节点 10:输出与反馈收集(工作流闭环),输出最终视频及配套资源,同时收集用户反馈,为后续工作流优化提供数据支撑(形成迭代闭环)。输入:节点 8 的单节视频 / 节点 9 的系列视频 + 目录索引,输出:最终交付包 + 反馈收集链接。交付包打包(自动压缩视频及配套文件,支持批量下载);反馈收集设计(问卷包含 “视频质量”“内容深度”“音画同步” 等维度评分);流程日志记录(记录每个节点的输入输出、执行时间、状态,便于问题追溯)。
-
实现可观测的状态存储,记录每个节点的输入、输出、执行时间和状态码:
-
class WorkflowStateManager: def __init__(self, workflow_id): self.workflow_id = workflow_id self.db = sqlite3.connect("workflow_states.db") self._create_table() def _create_table(self): self.db.execute(""" CREATE TABLE IF NOT EXISTS states ( id INTEGER PRIMARY KEY AUTOINCREMENT, workflow_id TEXT, node_name TEXT, input TEXT, output TEXT, status TEXT, # success/failed/running timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ) """) def save_state(self, node_name, input_data, output_data, status): """保存节点状态,支持JSON序列化复杂数据""" self.db.execute(""" INSERT INTO states (workflow_id, node_name, input, output, status) VALUES (?, ?, ?, ?, ?) """, (self.workflow_id, node_name, json.dumps(input_data), json.dumps(output_data), status)) self.db.commit() def get_state(self, node_name): """查询节点状态,用于调试和断点续跑""" cursor = self.db.execute(""" SELECT input, output, status FROM states WHERE workflow_id = ? AND node_name = ? ORDER BY timestamp DESC LIMIT 1 """, (self.workflow_id, node_name)) result = cursor.fetchone() if result: return { "input": json.loads(result[0]), "output": json.loads(result[1]), "status": result[2] } return None
-
-
工作流设计模式(可复用的 “算法框架”)
-
模式 核心逻辑 其他应用场景 与书籍项目的映射 提取 - 转换 - 加载(ETL) 数据收集→处理→存储 科研文献分析、电商评论挖掘 书籍数据爬取→清洗→知识库存储 生成 - 评估 - 优化(GEO) 内容生成→质量评估→迭代优化 营销文案生成、代码自动修复 插图生成→CLIP 评估→重新生成 分治 - 合并(Divide-Conquer) 复杂任务拆分→子任务处理→结果合并 长文档摘要、多语言翻译 书籍分章节→子视频生成→系列视频合并
-
-
核心工具 API 清单
-
功能类型 推荐工具 / API 技术要点(算法工程师关注) 图书数据收集 豆瓣图书 API、Google Books API 接口限流处理、数据格式标准化、异常捕获 AI 绘画 Stable Diffusion API、DALL·E 3 提示词工程(结合书籍情节生成精准描述)、图片格式转换 文本转语音 Azure TTS、ElevenLabs 语音风格匹配(如讲解类用沉稳音色)、语速调整 视频合成 FFmpeg、MoviePy 音视频同步、画面切换逻辑、格式压缩 知识库 Chroma、FAISS 向量嵌入模型选型、检索参数优化(top_k、相似度阈值) 工作流引擎 LangChain Workflow、Prefect 节点可视化调试、状态监控、日志记录
-
-
提示词工程:让 LLM 成为 “工作流的决策大脑”,提示词设计需体现 “结构化、参数化” 思维,避免模糊表述:
-
思维导图生成提示词(结构化示例):
-
prompt_template = """ 角色:你是专业的书籍解读师,擅长结构化梳理书籍核心内容。 任务:基于以下信息生成《{book_title}》的思维导图(Markdown格式)。 输入信息: 1. 书籍摘要:{book_summary} 2. 知识库补充:{kb_results} 输出要求: - 一级标题:核心主题(1-2个) - 二级标题:章节脉络(按书籍结构拆分) - 三级标题:关键事件、核心人物、思想内涵 - 禁止冗余,每个节点不超过15字 """ -
工具调用提示词(参数化示例):
-
tool_prompt_template = """ 角色:你是工具调用决策师,根据用户需求选择合适的工具。 可用工具:{tool_descriptions} 当前需求:{user_query} 当前上下文:{workflow_state}(已完成节点:{completed_nodes}) 输出要求:返回JSON格式{{"tool_name": "工具名", "params": {{参数键值对}}}},无需其他内容。 """
-
-
随着 LLM 多模态能力增强,“文本生成→插图生成→视频脚本” 可能合并为单一节点,动态流程 :LLM 可直接生成工作流定义(如用自然语言描述 “生成《三体》视频”,LLM 自动输出节点连接关系);**自优化工作流 **:结合强化学习,工作流可根据历史执行数据自动调整节点参数(如动态修改分块大小)
- 工作流=数据预处理(输入解析)+特征工程(知识库构建)+模型推理(LLM决策)+后处理(视频合成)+迭代优化(反馈闭环) 工作流 = 数据预处理(输入解析) + 特征工程(知识库构建) + \\ 模型推理(LLM决策) + 后处理(视频合成) + \\ 迭代优化(反馈闭环) 工作流=数据预处理(输入解析)+特征工程(知识库构建)+模型推理(LLM决策)+后处理(视频合成)+迭代优化(反馈闭环)
-
智能体工作流是 “状态驱动的自动化执行引擎”,通过 “FSM + 图灵机” 模型实现动态决策与复杂业务闭环。其核心价值在于将分散的模型能力、工具、知识库整合为可复用的业务系统,解决传统线性流程的灵活性不足问题。
更多推荐



所有评论(0)