大家好,这是从零搭建智能体第三篇,本文将介绍Agent的一些核心概念,Agent与LLM、workflow的区别,并搭建一个最简单的agent,了解LangGraph中的核心组件
一、Agent 概念介绍
OpenAI的研究主管Lilian Weng给出的定义是:Agent = 大模型(LLM)+ 规划(Planning)+ 记忆(Memory)+ 工具使用(Tool Use)

图1 按照规划、记忆、工具、动作分解的Agent定义(OpenAI)
规划(Planning) :Agent 在执行任务时的核心能力。它负责将复杂的任务拆解为一系列可执行的子任务。
记忆(Memory):Agent 获取、存储、保留和用于随后检索信息的知识。
工具使用(Tools):Agent 调用的一系列工具,如搜索、计算、代码执行等。
1)Agent和LLM的区别(以电子邮件回复为例):
假设收到一份邮件,邮件内容:
“你好,小明,明天是否有空当面快速同步下。继续聊下上次沟通过的一些想法”
LLM的回复:
请问明天你方便的时间段是什么时候?我们可以根据你的时间安排一个合适的会面时间。
Agent思考过程:
a)检查日历,是否有时间
b)查看与发件人过往聊天记录
c)查看最近的回忆记录
。。。
综合上面各种有用的信息后,再用比较合理的语气回复邮件
2)Agent和workflow的区别(来源知乎安小强)
workflow:预定义编排
Agent:运行时自主决策

小结:Agent相比于LLM,对于用户的提问会利用各种工具尽可能多地获取有用的消息后再进行回复。
与workflow相比,Agent会在运行过程,根据获取到的知识/信息,反思对子目标确认是否达到预期,调整自己的规划,如更改调用工具,调用工具参数等等。
二、Agent 框架 LangGraph 介绍
LangGraph 是一个 AI Agent框架,它将Agent交互实现为有状态图。节点表示通过边连接的函数或计算步骤。LangGraph 维护所有节点和边缘之间共享的Agent状态。

了解节点、边和状态
Nodes:node是Agent的构建块,代表Agent workflow中的离散计算单元。节点可以像简单Python函数,也可以能够调用外部工具的独立agent一样复杂。
Edges:Edge 连接节点并定义Agent如何从一个步骤进行到下一步。边可以有两种类型:直接边和条件边。直接边简单地连接两个节点,没有任何条件,而条件节点类似于 if-else 语句,并根据条件连接两个节点。
State:state是 LangGraph 最被低估但最重要的组件。它包含不同实体(例如节点和边)可用的所有数据和上下文。简而言之,状态在图中的所有节点和边之间共享数据和上下文。
三、实现一个最简单的Agent demo
定义一个最简单的Agent,根据用户输入的话题生成一个笑话
环境配置:
pip install langgraphpip install langchain-openai建议在Jupyter上运行
from langchain_openai import ChatOpenAI
# 先去modelscope上获取所需的API key,这里采用的Qwen3作为LLMbase_url='https://api-inference.modelscope.cn/v1'api_key='modelscope上获取 API key'
model_name='Qwen/Qwen3-30B-A3B-Instruct-2507'llm = ChatOpenAI( api_key=api_key, base_url=base_url, model_name=model_name, temperature=0, max_tokens=None, timeout=None, max_retries=2,)
from typing_extensions import TypedDict
# 定义 State 的数据结构,# topic 为用户输入的主题,joke 为输出的笑话class State(TypedDict): topic: str joke: str
# Nodes 定义def generate_joke(state: State): """First LLM call to generate initial joke""" msg = llm.invoke(f"Write a short joke about {state['topic']}") return {"joke": msg.content}
from langgraph.graph import StateGraph, START, ENDfrom IPython.display import Image, display
# Build workflowworkflow = StateGraph(State)# Add nodesworkflow.add_node("generate_joke", generate_joke)# Add edges to connect nodesworkflow.add_edge(START, "generate_joke")workflow.add_edge("generate_joke", END)# Compilechain = workflow.compile()# Show workflowdisplay(Image(chain.get_graph().draw_mermaid_png()))查看图的节点和工作流

state = chain.invoke({"topic": "小猫咪"})print("Initial joke:")print(state["joke"])输出结果:
Initial joke:小猫咪去参加面试,面试官问:“你有什么特长?” 小猫咪说:“我会抓老鼠!” 面试官点点头:“不错,那你会不会写代码?” 小猫咪一脸无辜:“……我只会‘喵’代码。” 😺参考资料
https://mp.weixin.qq.com/s/OYRJ7Q5RmjK9XrDzUvi77g
https://boristane.com/blog/context-engineering/
https://www.zhihu.com/question/1896707093580448857/answer/1919367811278550553
https://langchain-ai.github.io/langgraph/
https://www.getzep.com/ai-agents/langgraph-tutorial/
PS:拒绝白嫖,辛苦各位大佬,来个点赞、在看、关注吧。 您的支持是我坚持的最大动力!
欢迎多多关注公众号「AI算法与图像处理」
2578

被折叠的 条评论
为什么被折叠?



