1、Agent开发框架学习思路分享---以langgraph为例
很多干软件工程的同学现在都在向Agent方向转站,此时我们去招聘网站上翻找关于Agent相关岗位的招聘的要求,我们都会发现主流的Agent开发岗位的要求当中都会出现诸如langchain、langgraph等等这些框架的要求,虽然目前关于Agent相关的解决方案仍然不成熟,langchain这些框架也被众多工程师吐槽太重,但是不能否认,这家公司目前仍然是比较前沿的探索agent框架的较好的解决方案。所以我们也只能不断探索,不断学习新的东西,才能尽可能的保证在技术真正成熟的时候,我们不会落后太多甚至是一个熟手。
接下来,我分享一下我个人学习这些框架的个人思路:
起初,我个人并没有深入了解过这些开发框架,得益于起初公司使用的是一些低代码平台来做业务,像Dify、fastgpt这些平台,随着不断的使用这些平台,个人对这些平台也已经是烂熟于心了,当将领导分发下来的业务进行拆解了之后,通过平台来进行拖拉连将业务做好进行测试。
不得不说,这些平台确实是上手及其简单,上手成本极低,一个工程师可能花一两个小时就大概知道怎么使用了,但是对于公司来说,如果将这些平台进行商用时,就需要付给平台公司授权费用。这对于大公司可能无所谓,但是大公司也不会去使用这些平台,毕竟,随会把核心业务用第三方平台呢,但是对于小公司而言,一年大几十万的授权费还是一笔不小的负担,所以很多公司都是使用的像langgraph这些框架来进行Agent开发。
说了低代码和框架的一些基本优缺点之后,我来讲讲我的学习思路。我个人学习一个新的东西是我比较喜欢将官方文档作为主要的学习资料,然后在搭配一些第三方资料作为补充,最终以实战收尾。在看了langchain和langgraph官方文档的部分介绍之后,我发现框架中的内容似乎和低代码平台很相似,比如我们使用langchain去创建一个最简单的聊天agent,这个agent只是去调用第三方API,我们会使用到model,creat_agent、tool这些模块,然后通过组装就可以得到一个聊天机器人了:
# pip install -qU langchain "langchain[openai]"
from langchain.agents import create_agent
def get_weather(city: str) -> str:
"""Get weather for a given city."""
return f"It's always sunny in {city}!"
agent = create_agent(
model="openai:gpt-5.4",
tools=[get_weather],
system_prompt="You are a helpful assistant",
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "What's the weather in San Francisco?"}]}
)
print(result["messages"][-1].content_blocks)
这个例子似乎和低代码平台的一个大模型节点很相似,在低代码平台当中,我们拉出一个AI聊天块,然后再里面选择模型、编写prompt、设置输入输出、选择工具,然后就可以使用了,那是不是就可以说langchain这个框架之中的agent的creat_agent这个方法就等于我们再低代码平台的整个操作,通过对比学习,我发现要理解这个框架其实并不难,只需要通过低代码平台里面的元素和框架中的内容进行对比就很好理解了,以上是我再学习中使用的对比的方法。
在发现了这种相似之处后,我在学习langgraph这个框架的时候更是发现很多相似之处,在最初我们去学习langgraph这个框架的时候,我们会接触到state、nodes、edges这些在langgraph中最核心的概念,这时候我们需要来看看这些概念的解释是怎么样的:
| State | 一个表示您应用程序当前快照的共享数据结构。它可以有任何数据类型,但通常使用共享状态模式来定义。 |
| nodes | 节点编码了您agent的逻辑。它们接收当前状态作为输入,执行某些计算或功能,并返回更新后的状态。 |
| edges | 根据当前状态决定下一个要执行的节点的功能。它们可以是条件分支或固定转换。 |
知道在langgraph中模型的核心概念后,我们再去想想在低代码平台的内容:
无论是在哪个低平台,我们都会看到“全局变量”这个概念,什么是全局变量?全局变量是一整个工作流中都能够用得到的一个参数,在和langgraph中的state对比,state和全局变量是非常相似的,甚至可以说只是换了一件衣服而已,这两个概念的作用在各自的体系当中起到的作用是一样的,都是在最初时设置整个workflow需要使用到的参数;
然后我们再来看低代码平台的里面的具体功能模块,无论是在Dify、coze还是其他平台,里面都会有AI节点、工具节点、插件节点、知识库节点等等不同功能的节点,作为工程师都知道,这些节点实际上就是用代码已经封装好的功能,那么当我们使用langgraph这个框架去做这些功能的时候,实际上就是使用nodes这个模块,无论做什么功能,这些功能实际上是可以统称为node节点的,只是他们各自所承担的具体工作不同;
最后我们对比一下edges实际上对应低代码平台中的什么,很简单,就是我们在使用Dify这些平台的哪些连接线条,并没有多么的复制,最多还可以去对比的其实是条件分支,在低代码平台中我们会是用if/else这个做好的模块的走向特定的节点,而在langgraph这个框架中,我们使用的是add_conditional_edges:
builder.add_conditional_edges("reasoning_node", route_decision)
通过以上三个重要的基本概念的对比,其实能够得到一个很重要的结论:低代码平台和langgraph这些框架具有非常多的相似之处,通过对比,我们能够发现很多值得互相对比学习的地方。当然,并不是说他们完全相同,我分享的也仅仅是我在学习这个框架之中所找到的一个比较好的学习方法,在这个框架中,还有很多知识点能够通过对比学习的方式找到共同点,后续我也会不断分享我在学习这个框架中学到的一些小技巧。
此外,由于我说过我本人学习一个新的东西比较喜欢看官方文档,所以我整理在各个新技术的官方文档链接,有兴趣的朋友可以通过下面的链接找到自己感兴趣的官方文档,毕竟大多数情况官方文档才是最好的学习资料:
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)