原创 Ace人生 2025-04-13 20:15 浙江
Pocket Flow:LLM框架清流。
题记
本周看到了一个非常简洁、可以从0开始实现Agentic Flow的LLM框架:Pocket Flow。
https://github.com/The-Pocket/PocketFlow
Pocket Flow极其简洁,核心代码只有100行。它不仅证明了"AI Agent仅仅是图"这一核心理念,还展示了如何从第一原则出发构建AI系统。本文将分享我对Pocket Flow的研究心得,以及它如何让我们以全新视角看待Agentic Workflow的实现。如果你也厌倦了框架的臃肿与复杂,这篇文章或许能为你提供一些启发。💡
LLM框架们:过度臃肿
如今的AI开发领域,LLM(大型语言模型)框架已成为构建智能应用的标配工具。然而,你有没有注意到,像LangChain这样的流行框架存在一个共同问题:过度复杂化。
这些框架往往带来令人沮丧的开发体验:
正如一位开发者幽默地评论:"读完这句话的时间里,LangChain已经废弃了4个类,却没有更新文档。" 😅
这种复杂性不仅增加了学习成本,还阻碍了实际应用的开发和维护。你是否也思考过:我们真的需要这么多层的封装吗?
Pocket Flow:一股清流
面对这些挑战,Pocket Flow提供了一种令人耳目一新的简洁方案。与动辄数十万行代码的框架不同,Pocket Flow的核心仅有100行Python代码。这一极简主义方法背后有一个深刻的认识:
本质上,所有LLM系统都只是简单的有向图。
Pocket Flow彻底去除了不必要的复杂性,提供了一个零臃肿、零依赖、零厂商锁定的解决方案。它的优势包括:
这种简洁性不仅降低了学习门槛,还提供了极高的灵活性和可维护性。
Pocket Flow:核心理念
Pocket Flow的设计基于一个简单而强大的理念:将LLM应用建模为简单的有向图。
这种方法类似于组织良好的厨房:
所有复杂的AI代理系统,无论是搜索助手、自动编码工具还是数据分析应用,本质上都是这种简单模式的变体:一系列决策节点和操作节点,通过有向边连接,形成可能包含循环的图结构。
现在你知道了秘密 - LLM代理仅仅是带分支的循环:
"思考"发生在提示中(我们问LLM的内容),"分支"是当代理在可用工具中选择时,"执行"是当我们调用外部函数时发生的。其他一切只是管道工作!
Pocket Flow:核心组件
Pocket Flow有三个核心组件,总共只需100行代码:
Node(节点):每个节点执行三个基本操作:
class BaseNode:
def prep(self, shared): pass # 准备:从共享存储获取所需信息
def exec(self, prep_res): pass # 执行:进行特定操作
def post(self, shared, prep_res, exec_res): pass # 后处理:保存结果并决定下一步
Flow(流程):管理节点之间的流转:
class Flow(BaseNode):
def orch(self, shared, params=None): # 协调节点执行
# 找到下一个节点,根据当前节点的决定移动
共享存储:一个简单的字典,用于节点间通信:
shared = {"question": "谁是世界上最高的人?"}
这种简单而优雅的设计使得系统既容易理解又高度灵活。开发者可以轻松添加新节点、修改流程,或扩展功能,而不会被框架本身所限制。
Pocket Flow:对AI编程友好
Pocket Flow不仅简化了开发过程,还特别适合与AI配合进行开发,这种方式被称为Agentic Coding(代理编码)。在这种开发模式中:
Pocket Flow为AI编程提供了独特优势:
这种设计理念也意味着,随着更多开发者采用Pocket Flow模式,未来的LLM将自然而然地内化这些模式,使AI辅助开发变得更加无缝。
Pocket Flow:实现常用的Agentic Workflow
使用Pocket Flow实现代理工作流程非常直观。基本步骤如下:
定义节点:创建各种功能节点,每个节点负责特定任务
连接节点:使用简单的语法将节点连接成图:
# 如果决策返回"搜索",则执行搜索节点
decide - "search" >> search
# 如果决策返回"回答",则执行回答节点
decide - "answer" >> answer
设置共享存储:初始化包含输入数据的共享存储
执行流程:启动工作流并获取结果
flow = Flow(start=decide)
flow.run(shared)
这种方法可以实现多种常见的工作流模式:
一个例子:构建简单搜索代理
让我们通过构建一个简单的网络搜索代理来展示Pocket Flow的强大和简洁。这个代理可以:
步骤1:定义决策节点
class DecideAction(Node):
def prep(self, shared):
# 获取问题和当前上下文
context = shared.get("context", "无先前搜索")
question = shared["question"]
return question, context
def exec(self, inputs):
question, context = inputs
# 让LLM决定是搜索还是直接回答
prompt = f"""
问题: {question}
已知信息: {context}
决定: 是搜索更多信息还是直接回答?
"""
response = call_llm(prompt) # 调用语言模型
# 解析决策
return {"action": "search"if"需要搜索"in response else"answer"}
def post(self, shared, prep_res, exec_res):
if exec_res["action"] == "search":
# 生成搜索查询
shared["search_query"] = f"关于{shared['question']}的信息"
return exec_res["action"] # 返回"search"或"answer"
步骤2:定义搜索节点
class SearchWeb(Node):
def prep(self, shared):
return shared["search_query"]
def exec(self, query):
# 实际中会调用搜索API
results = f"搜索'{query}'的结果: 相关信息..."
return results
def post(self, shared, prep_res, exec_res):
# 保存搜索结果
shared["context"] = exec_res
return "decide" # 返回决策节点重新评估
步骤3:定义回答节点
class AnswerQuestion(Node):
def prep(self, shared):
return shared["question"], shared.get("context", "")
def exec(self, inputs):
question, context = inputs
# 生成答案
prompt = f"基于以下信息回答问题:\n问题: {question}\n信息: {context}"
return call_llm(prompt)
def post(self, shared, prep_res, exec_res):
# 保存最终答案
shared["answer"] = exec_res
return"done"# 流程结束
步骤4:连接节点并执行
# 创建节点实例
decide = DecideAction()
search = SearchWeb()
answer = AnswerQuestion()
# 连接节点
decide - "search" >> search
decide - "answer" >> answer
search - "decide" >> decide
# 创建流程
flow = Flow(start=decide)
# 执行!
shared = {"question": "谁是第一个登上月球的人?"}
flow.run(shared)
print(shared["answer"])
这个简单的例子展示了代理如何动态决策、执行操作并生成答案。整个系统清晰、透明,且易于扩展。
小结
Pocket Flow通过其极简设计展示了一个重要事实:复杂的AI代理系统可以基于简单的基础构建。与大型框架相比,它提供了几个关键优势:
最重要的是,Pocket Flow变革了我们思考和构建AI代理的方式。它将复杂性还原为基础组件,让我们看到最重要的本质:LLM Agents仅仅是图。
这种方法不仅使系统更容易构建和维护,还为AI开发带来了一种新范式:代理编码(Agentic Coding)—— 人类专注于高层设计,而AI助手处理实现细节。
对于那些希望构建LLM应用而不希望陷入框架复杂性的开发者来说,Pocket Flow提供了一条清晰的道路:回归基础,从第一原则出发,用最小的构建块创建强大的系统。
正如Pocket Flow的理念所示,有时候,少即是多。💡
欢迎加入「AI行动派」,"用AI做点什么"。
我在公众号「无人之路」每周更新"AI启示录",输出"学AI,用AI"的最新实践与心得。不过这只是冰山一角。
在知识星球「AI行动派」中,有更多更丰富"学AI,用AI"的各种资源、技术、心得,每天更新。 最近主要集中在用AI和Agent来自动编程,实现心中的想法💡。欢迎加入,一起行动!