【保姆级】手把手教你用LangGraph搭建AI Agent(附详细代码),远比你想的更简单!_langgraph agent
你是否遇到过这种尴尬:在对客户演示AI智能体时,本应流畅自动的流程却反复请求澄清、决策混乱?
工程师Paolo Perrone在曾经历这种惨痛失败后反思发现,自己对智能体架构理解有误,构建的系统过于复杂,决策界限模糊,缺乏清晰的推理路径。只要理解了核心原理,构建高效的agent实际上远比想象中简单。
本文将分享这一经验,带你从零开始深入理解AI智能体,学会用LangGraph搭建自己的AI Agent。
1、什么是AI智能体
AI智能体不同于简单的聊天机器人,它具备三个核心特点:
- 逐步思考问题
- 按需调用外部工具
- 从自身行动中不断学习进步
从独立的AI模型到整合型AI智能体,是一个巨大的飞跃。传统AI方案通常是割裂的,需要人工协调各步骤,造成了上下文丢失及繁琐的手动管理。AI智能体能够自动完成每一步任务,保持全局视角,自主适应并做出智能决策。
AI智能体的三大基础要素:
- 状态管理:记录并跟踪任务上下文
- 决策制定:根据现有知识决定下一步行动
- 工具使用:准确选择合适的工具
AI agent 的构建依赖于三个基本原则:
状态管理
Agent 需要拥有一个工作记忆,用来跟踪它已学到的信息和目标。
决策机制
根据当前知识,agent 能够判断哪种方法最合适。
工具使用
Agent 必须知道在特定问题上哪个工具最为有效。
2、搭建详细流程
接下来,我们将使用LangGraph(LangChain框架下用于构建强大AI agent的工具)来构建我们的第一个agent。
为什么是LangGraph呢?
因为它允许你将agent的思考和行动以图谱的方式展现。图中每个节点代表一种能力(例如搜索网页、编写代码),节点间的连接(边)则控制信息流。当我开始构建agent时,这种方式让我能够直观地看到agent的思考流程。
环境搭建
Step 1 — 创建项目目录
mkdir ai_agent_projectcd ai_agent_project
Step 2 — 创建并激活虚拟环境
# Windows 系统下python -m venv agent_envagent_env\\Scripts\\activate# macOS/Linux 系统下python3 -m venv agent_envsource agent_env/bin/activate
Step 3 — 安装所需的包
pip install langgraph langchain langchain-openai python-dotenv
Step 4 — 设置 OpenAI API
我这里使用的是 GPT-4o mini 作为 agent 的“大脑”,但你可以换成其它任意 LLM。
如果还没有 API key,请按照以下步骤操作:
- 在 OpenAI 注册账号。
- 进入 API Keys 页面。
- 点击 “Create new secret key”。
- 复制你的 API key。
Step 5 — 创建 .env 文件
# Windows 系统下echo OPENAI_API_KEY=your-api-key-here > .env# macOS/Linux 系统下echo \"OPENAI_API_KEY=your-api-key-here\" > .env
将 “your-api-key-here” 替换为你的实际 API key。
Step 6 — 创建测试文件 test_setup.py
import osfrom dotenv import load_dotenvfrom langchain_openai import ChatOpenAI# 加载环境变量load_dotenv() # 初始化 ChatOpenAI 实例llm = ChatOpenAI(model=\"gpt-4o-mini\") # 测试环境配置response = llm.invoke(\"Hello! Are you working?\")print(response.content)
Step 7 — 运行测试
python test_setup.py
若能看到响应输出,恭喜你,环境已经为构建 agent 做好准备!
创建我们的第一个 Agent
导入必要的库
import osfrom typing import TypedDict, Listfrom langgraph.graph import StateGraph, ENDfrom langchain.prompts import PromptTemplatefrom langchain_openai import ChatOpenAIfrom langchain.schema import HumanMessage
构建 Agent 的记忆
为了让 agent 跟踪进度,我们使用 Python 的 TypedDict 创建一个记忆(State)结构:
from typing import TypedDict, List class State(TypedDict): text: str # 存储原始输入文本 classification: str # 存储分类结果(例如类别) entities: List[str] # 存储提取出的实体列表(例如命名实体) summary: str # 存储文本的简洁摘要
现在,agent 已经具备记忆能力,接下来为它赋予“思考”能力。
配置语言模型
llm = ChatOpenAI(model=\"gpt-4o-mini\", temperature=0)
设置 temperature=0 可确保 agent 始终选择最可能的响应,这对于按预期推理至关重要。简要说明:
- Temperature=0:响应专注且确定性高;
- Temperature=1:输出更丰富、富有创意;
- Temperature=2:输出较为离谱,甚至可能不连贯。
当 agent 行为异常时,请先检查温度设置!
为 Agent 添加各项能力
接下来,我们为 agent 构建专门的工具,每个工具负责处理一种特定任务。
1. 分类能力
def classification_node(state: State): \"\"\" 将文本分类为预定义的类别之一。 参数: state (State): 当前状态字典,包含待分类的文本 返回: dict: 返回包含 \"classification\" 键的字典,其值为分类结果 类别: - News: 新闻报道类 - Blog: 个人或非正式写作 - Research: 学术或科研内容 - Other: 不属于以上类别的其它内容 \"\"\" # 定义 prompt 模板,指示模型对给定文本进行分类 prompt = PromptTemplate( input_variables=[\"text\"], template=\"Classify the following text into one of the categories: News, Blog, Research, Other. Text: {text}\" ) # 根据当前 state 中的文本格式化 prompt message = HumanMessage(content=prompt.format(text=state[\"text\"])) # 调用语言模型对文本进行分类 classification = llm.invoke([message]).content.strip() # 返回包含分类结果的字典 return {\"classification\": classification}
这个函数利用 prompt 模板给出明确的指令,接收当前 state(包含待分析文本)并返回分类结果。
2. 实体提取能力
def entity_extraction_node(state: State): # 用于从文本中识别并提取命名实体(按人名、组织、位置分类) # 创建实体提取 prompt 模板,指定需要查找的实体和格式(逗号分隔) prompt = PromptTemplate( input_variables=[\"text\"], template=\"Extract all the entities (Person, Organization, Location) from the following text. Text: {text}\" ) # 根据 state 中的文本格式化 prompt 并包装为 HumanMessage message = HumanMessage(content=prompt.format(text=state[\"text\"])) # 发送给语言模型,获取响应,清除空白后按逗号分隔拆分为列表 entities = llm.invoke([message]).content.strip().split(\", \") # 返回包含实体列表的字典,将与 agent state 合并 return {\"entities\": entities}
这个函数对文档进行处理,返回一组关键实体(如重要人名、组织、地点等)。
3. 摘要能力
def summarize_node(state: State): # 创建摘要 prompt 模板,指示模型用一句话对文本进行总结 summarization_prompt = PromptTemplate.from_template( \"\"\"Summarize the following text in one short sentence. Text: {text} Summary:\"\"\" ) # 利用 \"|\" 运算符将 prompt 模板和语言模型连接起来形成一个 chain chain = summarization_prompt | llm # 执行 chain,将文本传递给模型进行摘要 response = chain.invoke({\"text\": state[\"text\"]}) # 返回包含摘要的字典,将合并进 agent state return {\"summary\": response.content}
该函数将文本中的主要观点浓缩为一句话,便于快速理解核心内容。
最终整合 Agent 结构
接下来我们将这些能力整合成一个协调一致的工作流:
workflow = StateGraph(State)# 向图中添加各个节点workflow.add_node(\"classification_node\", classification_node)workflow.add_node(\"entity_extraction\", entity_extraction_node)workflow.add_node(\"summarization\", summarize_node)# 设置图的入口节点workflow.set_entry_point(\"classification_node\")# 定义图中各节点之间的边关系workflow.add_edge(\"classification_node\", \"entity_extraction\")workflow.add_edge(\"entity_extraction\", \"summarization\")workflow.add_edge(\"summarization\", END)# 编译图app = workflow.compile()
现在,你已经构建了一个从文本分类到实体提取再到摘要生成,层层衔接的 agent,它可以识别文本类型、提取关键信息、生成摘要并完成整个流程。
Agent 运行示例
现在,我们用一段样本文本来测试 agent 的完整工作流:
# 定义一段关于 Anthropic 的 MCP 的样本文本sample_text = \"\"\"Anthropic\'s MCP (Model Context Protocol) is an open-source powerhouse that lets\"\"\"# 构造包含样本文本的初始 statestate_input = {\"text\": sample_text}# 运行 agent 的全流程result = app.invoke(state_input)# 输出各个部分的结果:# - 分类结果(News、Blog、Research 或 Other)print(\"Classification:\", result[\"classification\"])# - 提取出的实体(人名、组织、地点等)print(\"\\nEntities:\", result[\"entities\"])# - 生成的文本摘要print(\"\\nSummary:\", result[\"summary\"])
运行上述代码后,系统会依次对文本进行处理,输出结果示例如下:
- Classification: Technology
- Entities: [‘Anthropic’, ‘MCP’, ‘Model Context Protocol’]
- Summary: Anthropic’s MCP is an open-source protocol enabling seamless application interaction with various API systems.
不仅最终结果令人印象深刻,更重要的是每个处理阶段都在前一阶段的基础上叠加,就如同我们阅读时:先判断内容类型,再识别关键名词,最后形成整体理解。
这种构建 agent 的方法不仅适用于技术示例,你还可以用类似的设置来:
- 分析个人成长文章:对成长领域进行分类、提取可执行建议、总结关键启示;
- 解读创业故事:识别商业模式、融资模式及增长策略;
- 分析产品评价:抽取产品特性、品牌及推荐信息。
3、Agent的局限性
尽管AI智能体拥有出色的自动化能力,但仍存在局限:
-
固定框架限制
Agent 遵循预先设计的节点和连接,适应性较差; -
语境理解不足
虽然可以处理文本,但无法捕捉人类所具备的广泛知识和文化细微差别。 -
黑盒问题
我们只能看到输入和输出,内部决策过程却难以完全掌握。 -
非完全自主
当前系统仍需人工监督,确保输出准确性和对结果进行验证。
在必要时,通过增加互联网搜索等辅助机制可以部分补充知识盲区,但总体上,最优结果往往来自 AI 能力与人类专业经验的结合。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。