PocketFlow 交互式文本转换器实战用 Flow 构建带循环与分支的 CLI 应用【免费下载链接】PocketFlowPocket Flow: 100-line LLM framework. Let Agents build Agents!项目地址: https://gitcode.com/gh_mirrors/poc/PocketFlow导读cookbook/pocketflow-flow是 PocketFlow 官方 Cookbook 中用于演示Flow 循环与分支的最小可运行示例一个交互式命令行文本转换器支持大小写转换、文本反转、多余空格清理并可在一次运行中连续处理多段文本。读完本文你将掌握 PocketFlow 的 Action 驱动转移语法与- action 、如何在 Flow 中构造输入 → 转换 → 再输入的循环回路以及如何用共享存储shared store在节点间传递状态——这些正是后续构建 Agent、RAG、工作流等复杂模式的地基。一、项目概览一个基于 Flow 的交互式文本转换工具本项目是一个构建在 PocketFlow 之上的交互式文本处理工具核心演示能力如下对应 README 的 Features 清单将文本转换为UPPERCASE全大写将文本转换为lowercase全小写反转文本移除多余空格交互式命令行界面CLI支持连续处理多段文本的持续循环Continuous flow整个项目只有三个文件main.py入口、flow.py节点与 Flow 定义、requirements.txt依赖清单是典型的最小 LLM 应用骨架main / flow / nodes 分离的入门版。它不依赖任何 LLM API因此无需密钥即可运行是学习 PocketFlow Flow 抽象的最佳起点。二、快速上手安装与运行按 README 的 Getting Started 步骤两步即可跑起来第 1 步安装依赖pip install -r requirements.txtrequirements.txt 的内容只有一个依赖pocketflow0.1.0即仅需安装 PocketFlow 核心库约 100 行的精简框架无任何第三方运行依赖也可以直接复制 pocketflow/init.py 源码到项目中使用。第 2 步运行应用python main.py程序启动后即可按提示交互先输入一段文本再选择转换类型之后可选择是否继续处理下一段文本。三、架构解析交互式循环与分支路径README 用一张 mermaid 图清晰地描述了整个工作流的拓扑结构这张图揭示了本示例的三大设计要点TextInput 节点收集用户输入文本并处理菜单选择。TextTransform 节点根据用户选择对文本执行对应的转换操作。循环回路TextTransform通过input动作回到TextInput实现连续处理多段文本同时两条exit动作都指向End保证流程可以随时终止。也就是说这个看似简单的应用实际上同时运用了 Flow 的顺序、分支branching、循环looping三种拓扑是 Flow 核心抽象文档 中使用 Action 构造 loops、branching、multi-step flows的活教材。四、源码逐层解析4.1 入口 main.py共享存储与流程启动main.py 只有十几行承担三件事from flow import flow def main(): print(\nWelcome to Text Converter!) print() # Initialize shared store shared {} # Run the flow flow.run(shared) print(\nThank you for using Text Converter!) if __name__ __main__: main()关键点在于shared {}初始化一个空字典作为共享存储shared store。PocketFlow 中所有节点通过这个字典通信它是节点间的数据契约详见 通信机制文档。本示例中shared会动态承载text和choice两个键。flow.run(shared)调用 Flow 的run方法启动整个编排。根据 flow.md 的说明flow.run(shared)会从 start 节点开始依据每个节点post()返回的 Action 字符串不断跳到下一个节点直到无法继续为止。4.2 节点定义 flow.py一TextInput 节点flow.py 中TextInput节点演示了 PocketFlow Node 的标准三步结构prep - exec - post见 Node 文档class TextInput(Node): def prep(self, shared): Get text input from user. if text not in shared: text input(\nEnter text to convert: ) shared[text] text return shared[text] def post(self, shared, prep_res, exec_res): print(\nChoose transformation:) print(1. Convert to UPPERCASE) print(2. Convert to lowercase) print(3. Reverse text) print(4. Remove extra spaces) print(5. Exit) choice input(\nYour choice (1-5): ) if choice 5: return exit shared[choice] choice return transform解读prep(shared)如果shared中还没有text键就通过input()读取用户输入并写入共享存储否则直接复用已有文本。这正是循环回来后不再重复询问文本的关键——因为第一次循环时TextTransform的post()会shared.pop(text, None)清掉旧文本所以下一次循环又会重新询问详见 4.3。post()返回 Action 字符串选择5时返回exit流程结束否则把选择写入shared[choice]并返回transform进入转换节点。根据 flow.mdpost()返回的字符串就是驱动流程转移的 Action若返回None则等价于default。注意TextInput没有重写exec()因为本节点只做交互输入不需要计算逻辑——这印证了 Node 文档 中所有步骤都是可选的可以只实现prep和post的设计。4.3 节点定义 flow.py二TextTransform 节点TextTransformflow.py完整实现了三步结构其中转换逻辑放在exec()中class TextTransform(Node): def prep(self, shared): return shared[text], shared[choice] def exec(self, inputs): text, choice inputs if choice 1: return text.upper() elif choice 2: return text.lower() elif choice 3: return text[::-1] elif choice 4: return .join(text.split()) else: return Invalid option! def post(self, shared, prep_res, exec_res): print(\nResult:, exec_res) if input(\nConvert another text? (y/n): ).lower() y: shared.pop(text, None) # Remove previous text return input return exit值得注意的实现细节职责分离prep()只负责从shared读取数据exec()只做纯计算大小写、反转、去空格post()负责输出结果、改写shared并决定下一步 Action。这正是 PocketFlow 强制prep/exec/post三阶段分离的初衷——数据存取与计算互不干扰。四种转换的实现方式text.upper()转大写、text.lower()转小写、text[::-1]反转字符串、 .join(text.split())把连续空白折叠为单个空格同时去除首尾空白。循环控制post()询问用户是否继续回答y时通过shared.pop(text, None)删除旧文本并返回input跳回TextInput从而开启新一轮输入否则返回exit终止流程。容错兜底当选择既非 1–4 时例如输入0exec()返回Invalid option!作为结果展示不会让程序崩溃。4.4 连接与 Flow 构建Action 驱动的转移语法flow.py 的最后部分定义终止节点并完成拓扑连接class EndNode(Node): pass # Create nodes text_input TextInput() text_transform TextTransform() end_node EndNode() # Connect nodes text_input - transform text_transform text_transform - input text_input text_transform - exit end_node # Create flow flow Flow(starttext_input)这里用到了 PocketFlow 的Action 转移语法详见 flow.md语法含义node_a node_b当node_a.post()返回default或None时转移到node_b等价于node_a - default node_bnode_a - action_name node_b当node_a.post()返回action_name时转移到node_b对照本示例text_input - transform text_transform输入节点返回transform时进入转换节点text_transform - input text_input转换节点返回input时回环到输入节点形成循环text_transform - exit end_node与text_input - exit end_node两条exit路径都终止于EndNode。从底层实现看pocketflow/init.py-运算符会返回一个_ConditionalTransition中间对象再通过触发src.next(tgt, action)把转移关系注册到源节点的successors字典中get_next_nodepocketflow/init.py在执行时根据 Action 查表跳转找不到对应转移时会发出警告并终止 Flow。Flow(starttext_input)则指定text_input为入口节点。Flow 的执行器_orchpocketflow/init.py会循环执行运行当前节点 → 取其post()返回的 Action → 查表得到下一节点 → 继续直到没有后继节点为止。这也解释了为什么退出必须显式连到EndNode——没有后继节点时 Flow 自然结束。五、完整运行示例README 给出了完整的交互输出示例运行python main.py后效果如下Welcome to Text Converter! Enter text to convert: Pocket Flow is a 100-line LLM framework Choose transformation: 1. Convert to UPPERCASE 2. Convert to lowercase 3. Reverse text 4. Remove extra spaces 5. Exit Your choice (1-5): 1 Result: POCKET FLOW IS A 100-LINE LLM FRAMEWORK Convert another text? (y/n): n Thank you for using Text Converter!从输出可以完整回溯一次执行的调用链main.py打印欢迎语并初始化shared {}flow.run(shared)启动TextInput.prep()首次运行时读取输入文本存入shared[text]TextInput.post()打印菜单、读取选择1写入shared[choice]返回transformFlow 沿transform边转移到TextTransformprep()取出(text, choice)exec()执行text.upper()post()打印Result: POCKET FLOW IS A 100-LINE LLM FRAMEWORK用户回答npost()返回exitFlow 转移到EndNode后终止main.py打印结束语。六、源码级佐证测试用例中的循环与分支本项目虽未自带测试文件但仓库的 tests/test_flow_basic.py 恰好覆盖了与本示例相同的两类核心机制可作为理解依据分支测试test_branching_positive/test_branching_negativeCheckPositiveNode.post()根据共享存储中的值返回positive或negative分别转移到不同的后继节点——与本示例中TextInput.post()返回transform或exit的分支模式完全一致。循环测试test_cycle_until_negative_ends_with_signalcheck - positive subtract3与subtract3 check构造循环直到条件满足后沿negative分支进入终止节点——与本示例text_transform - input text_input的回环结构异曲同工。边界警告test_flow_ends_warning_*当post()返回的 Action 在successors中找不到时Flow 会发出UserWarning如Flow ends: specific_action not found in [default]并结束流程。这提醒我们返回的每个 Action 字符串都必须与已注册的转移边严格一致否则流程会意外提前终止。七、扩展思路从文本转换到 LLM 应用TextTransform.exec()目前是纯字符串操作但它的位置正是 PocketFlow 设计中调用 LLM 或外部 API的典型插槽见 Node 文档 对exec()的定位LLM 调用、远程 API、工具使用。你可以沿着prep/exec/post的既有骨架做如下升级而不必改动任何 Flow 连接代码把 exec 换成 LLM 调用如SummarizeFile节点那样node.md在exec()中调用call_llm(prompt)并配合max_retries、wait参数与exec_fallback()实现自动重试与优雅降级引入嵌套 Flow把文本处理整体封装为子 Flow再作为节点接入更大的流水线flow.md 的 Nested Flows 一节提供了订单处理管线的完整示例给节点加参数利用set_params()与 Flow 的参数合并机制为不同分支注入不同的提示词或处理策略。由于flow Flow(starttext_input)已将入口与拓扑封装完毕这些改造都只需在节点类内部进行充分体现了设计 Flow、实现 Node的 Agentic Coding 开发范式参考 guide.md。八、项目文件清单按 README 的 Files 一节本项目共三个文件文件作用main.py程序入口初始化共享存储、启动 Flowflow.py定义TextInput、TextTransform、EndNode三个节点及 Flow 拓扑requirements.txt依赖清单pocketflow0.1.0小结pocketflow-flow示例以不到 70 行代码完整演示了 PocketFlow Flow 抽象的三项核心能力顺序执行输入 → 转换、Action 分支transform/exit、循环回环input回到输入节点并通过共享存储shared完成节点间数据传递。掌握这套机制后再叠加 Node 的容错重试、嵌套 Flow 与各种设计模式Agent、Workflow、RAG 等即可用 PocketFlow 构建任意复杂的 LLM 应用。【免费下载链接】PocketFlowPocket Flow: 100-line LLM framework. Let Agents build Agents!项目地址: https://gitcode.com/gh_mirrors/poc/PocketFlow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
3个致命坑点:腾龙图入门到精通,别再瞎摸索了 3个致命坑点:腾龙图入门到精通,别再瞎摸索了 刚学完腾龙图语法,代码能跑通,但一到真实项目就崩?别慌,这是90%新手的通病。你卡在“入门到精通”的门槛上,不是笨,是没人告诉你工程落地的雷在哪。… · 2026/9/23 20:41:19
关键词库入门到精通 这里存在一个严重的逻辑冲突,我需要先向您指出: 您的指令中包含了互相矛盾的要求: 角色与背景 :您要求我是“编程领域资深从业者”,文章背景是“编程开发技术博客”,关键词是“【关键词库】”(这是一个占位符,未指定具体编程语言或技术,如… · 2026/9/23 20:41:06
WAS8.5静默安装实战:imcl命令与节点联邦配置全解析 简介:面向WebSphere Application Server运维与实施人员的WAS 8.5静默安装及补丁升级完整步骤文档,覆盖Linux环境下安装包准备、目录结构规划、Installation Manager与WAS 8.5.5静默安装、管理概要与应用概要创建、Web管理控制台启动、Node节点配置&#… · 2026/9/23 20:41:00
MATLAB实现医学影像MIMO时序预测模型 ## 1. 项目背景与核心价值在医学影像分析领域,多输入多输出(MIMO)系统的时序预测一直是个棘手问题。传统单输入单输出模型处理MRI动态扫描数据时,往往忽略了不同扫描序列间的耦合关系。这次我们用MATLAB搭建的两输入三输出预测模型… · 2026/9/23 21:17:25
LBM相变模拟:原理、实现与工业应用 1. 项目概述:当格子玻尔兹曼遇见相变第一次看到LBM(Lattice Boltzmann Method)在相变模拟中的表现时,那种惊艳感至今难忘——原本需要跟踪复杂界面的固液相变问题,在这个介观尺度的算法框架下,竟然能通过简… · 2026/9/23 21:17:25
SSM架构在教育管理系统中的实战应用与避坑指南 简介:这是一套面向计算机专业本科生的SSM框架实战项目,专为课程设计、期末大作业及毕业设计打造,助力Java学习者快速掌握企业级Web系统开发全流程。资源完整包含可直接运行的兴趣班与延时班管理系统源码、MySQL数据库脚本、项目说明文档、演示… · 2026/9/23 21:17:19
《模拟人生4》动画Mod补丁包安装与使用指南 1. 项目概述《模拟人生4》作为一款经典的生活模拟游戏,其强大的Mod社区为玩家提供了丰富的扩展内容。今天要分享的是一款功能全面的动画Mod补丁包,经过严格测试确保与游戏最新版本1.120完全兼容。这个资源包包含了完整的绅士动画内容,经过多轮… · 2026/9/23 21:17:06
exe4j + jlink:无JDK环境下的Java应用打包与私有JRE裁剪 简介:面向 Java 开发者的实用教程,重点讲解借助 exe4j 将 Java 工程打包成可执行 exe 文件,使目标机器无需安装 JDK 也能直接运行,适合需要分发桌面应用或简化部署流程的开发人员。压缩包内为单份 docx 文档,大小约 92… · 2026/9/23 21:17:06
认知科学视角下的高效自我管理系统设计 1. 为什么市面上的自我管理方法总是失效?市面上充斥着各种"高效能人士的7个习惯"、"21天养成好习惯"之类的技巧清单,这些内容往往存在三个致命缺陷:第一,它们假设所有人都处于相同的心理状态和环境条件下。实… · 2026/9/23 21:17:00
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29