李博!上周我们组开了个需求评审,产品总监突然说要做一个能自主决策的AI助手,不是那种简单的问答机器人。
哦?让我猜猜,是不是那种能自己调工具、多轮推理的Agent?
对对对,就是那个词,Agent。然后我就发现,光会调OpenAI的API根本不够用了。
哈哈,欢迎来到2024年。现在大厂招AI岗,简单调API那叫入门都算不上。真正要的是能搭复杂智能体系统的人。
所以我最近在看LangGraph,但说实话,一开始看文档有点懵。你能不能给我讲讲这玩意儿到底在干嘛?
可以啊。不过我先问你一个问题——你知道LangChain吧?
知道,之前用过,就是把几个步骤串成一条链嘛,先检索再生成那种。
对,LangChain的核心抽象是Chain,线性流水线。但你想想,一个真正的Agent它需要什么?它需要循环推理——思考完了去行动,行动完了看结果,不满意再思考。
它还需要条件分支,根据不同情况走不同路。这些东西,线性的链表达不了。
所以LangGraph就是把链变成了图?
Bingo。用图替代链,节点是计算单元,边定义流转规则。天然支持循环、分支、复杂状态管理。
等会儿让我想想……这不就是有限状态机吗?我大学学过这个。
哎!你这个直觉很准。LangGraph确实借鉴了FSM的思想,但做了两个关键扩展。
第一,状态不再是简单的枚举值,而是一个复合数据对象,能携带消息历史、工具结果这些丰富信息。第二,状态转移可以由LLM的输出动态决定,不是写死的规则。
就是说图怎么走,是AI自己决定的?
对!这就是Agent能做决策的关键。条件边用一个函数实现,根据当前状态动态选择下一个节点。
好,那具体来说,LangGraph的核心概念有哪几个?你给我掰开了讲讲。
三个:State、Node、Edge。State是贯穿整个执行过程的数据容器,Node是处理函数,Edge定义流转关系。
这个我能理解。但你说用TypeScript实现,跟Python比有啥优势?
我跟你说,这个优势太明显了。你想,现代AI应用有三层——前端交互、服务端编排、AI能力层。TypeScript一套语言全打通。
嗯,这个我有体感。我们组现在前后端都是TS,加个AI编排层确实不用切语言。
而且TypeScript的类型系统在这里特别有用。你用泛型定义StateGraph,状态类型在编译期就能检查。Agent系统那么复杂,运行时出bug你根本找不到。
又开始学术了哈哈。
得了吧,这是工程实践好吗!你们产品经理天天喊稳定性,类型安全就是稳定性的基础。
行行行,那你说的那个图执行引擎,核心逻辑复杂吗?
说出来你可能不信,核心循环就几行代码。获取当前节点、执行函数、更新状态、根据边决定下一个节点、重复直到结束。
真的假的?就这么简单?
框架的精髓不在代码量,在设计思想。每个节点只返回Partial状态——就是只返回它修改的那部分,不用管别的字段。这个设计特别优雅。
哦这个好,各节点解耦了。那实际开发中最常用的Agent模式是什么?
ReAct,Reasoning加Acting。2022年普林斯顿和Google Brain提出的。让LLM交替推理和行动,观察结果再调整策略。
这个我在产品设计里见过!用户问一个复杂问题,AI先想想该查什么,查完了再想,不满意再查。
对,就是这个循环——Think、Act、Observe、再Think。这个循环结构恰好对应图里的环路,LangGraph天然支持。
所以LangChain的线性链做不了这个?
做不了,或者说做起来很别扭。你得hack各种回调和递归,代码可读性极差。
懂了懂了。那你觉得前端工程师转AI Agent开发,路径怎么走?
我说句可能有争议的话——前端同学可能比传统后端更有优势。
哦?这我得听听为什么。
第一,LangGraph.js生态已经很成熟了。第二,全栈岗位天然要求前后端能力,前端转全栈路径更短。第三,AI应用最终是产品,产品需要好的交互体验,这是前端主场。
你这是在夸我们前端吗哈哈。
我是在陈述事实好吧。
那学习建议呢?从哪入手?
先吃透图的设计思想,不急着用框架。然后从单工具的ReAct Agent切入,跑通循环。最后重视状态设计,因为状态结构决定了系统的可扩展性。
嗯,我觉得这个思路很清晰。其实聊到最后我有个感受——AI开发这事儿,真的是从调API变成了建系统。
对,这是思维方式的升级。不管你用不用LangGraph这个具体框架,状态图驱动、节点化编排这些思想,理解了就是你的武器。
行,那我回去先把那个简化版执行引擎自己撸一遍,下次找你review代码。
随时欢迎,别写出bug来让我帮你debug就行。