LangChain与LangGraph实战:从零构建AI智能体的完整指南

发布时间:2026/10/24 9:21:34

LangChain与LangGraph实战:从零构建AI智能体的完整指南 如果你正在关注AI大模型开发特别是智能体Agent技术可能会发现一个明显的断层一方面各种宣传都在说Agent是AI应用的未来学会后薪资翻倍另一方面真正能跑通的教程却少之又少要么是过于理论化的概念讲解要么是依赖特定环境的魔法命令。这篇文章要解决的核心问题就是如何从零开始用可复现的方式搭建一个真正可用的智能体。我们将基于2026年最新的技术栈重点讲解LangChain和LangGraph这两个核心框架通过完整的实战项目让你不仅理解智能体开发的原理更能亲手打造属于自己的智能体应用。1. 为什么智能体开发值得投入学习智能体与传统AI应用的最大区别在于自主性。传统的AI应用更像是工具需要用户明确输入指令而智能体则更像助手能够理解复杂任务自主规划执行步骤甚至在遇到问题时自我调整。从市场需求来看具备智能体开发能力的工程师薪资普遍比普通AI工程师高出30-50%。这背后的逻辑很简单智能体开发需要综合能力——不仅要懂大模型调用还要掌握任务分解、状态管理、错误处理等系统工程思维。但智能体开发的学习曲线确实陡峭。很多开发者卡在以下几个关键点不理解智能体与普通AI应用的本质区别被各种框架和概念搞混LangChain vs LangGraph vs 其他框架缺乏完整的实战项目经验遇到错误不知道如何排查本文将围绕这些痛点提供一个系统性的解决方案。2. 智能体开发的核心概念解析2.1 什么是智能体Agent智能体不是单一技术而是一个系统架构。它包含三个核心组件规划器Planner负责将复杂任务分解为可执行的子任务工具集Tools智能体可以调用的外部能力如搜索、计算、API调用等执行器Executor按照规划调用工具并管理执行状态与传统AI应用相比智能体的关键优势在于能够处理多步骤复杂任务具备记忆和状态管理能力可以自主决策和调整策略2.2 LangChain与LangGraph的关系与区别这是初学者最容易混淆的概念LangChain是一个AI应用开发框架提供构建AI应用所需的基础组件模型调用封装提示词模板管理记忆管理链式操作LangGraph是建立在LangChain之上的状态管理框架专门用于构建有状态的智能体基于图结构定义工作流支持循环和条件分支提供完整的状态管理简单来说LangChain帮你组装零件LangGraph帮你设计流水线。对于智能体开发两者通常结合使用。2.3 RAG在智能体中的作用RAG检索增强生成为智能体提供了知识扩展能力。在智能体架构中RAG通常作为工具存在当智能体需要特定领域知识时可以通过RAG工具查询相关知识库。智能体RAG的组合解决了大模型的三个核心问题知识时效性通过RAG接入最新知识专业领域知识定制化知识库事实准确性减少模型幻觉3. 环境准备与工具选择3.1 基础环境要求推荐使用Python 3.9环境以下是完整的依赖清单# requirements.txt langchain0.2.0 langgraph0.0.40 langchain-openai0.1.0 openai1.12.0 chromadb0.4.24 pydantic2.5.0 faiss-cpu1.7.4 python-dotenv1.0.03.2 API密钥配置创建.env文件管理敏感信息# .env文件 OPENAI_API_KEY你的OpenAI API密钥 OPENAI_BASE_URL可选如果使用第三方代理 LANGCHAIN_API_KEY可选LangSmith监控密钥 LANGCHAIN_TRACINGtrue3.3 开发工具建议IDE: VS Code Python扩展调试工具: LangSmith用于监控智能体执行过程版本控制: Git环境管理: Conda或venv4. 第一个智能体天气查询助手让我们从最简单的例子开始构建一个能够查询天气的智能体。4.1 定义工具Tools首先我们需要为智能体提供查询天气的能力import requests from langchain.tools import tool from typing import Dict, Any tool def get_weather(city: str) - str: 根据城市名称查询当前天气情况 try: # 这里使用模拟API实际项目中替换为真实天气API # 例如和风天气、OpenWeatherMap等 if city.lower() beijing: return 北京晴温度15-25℃空气质量良 elif city.lower() shanghai: return 上海多云温度18-28℃空气质量优 else: return f{city}天气信息暂不可用 except Exception as e: return f查询天气时出错{str(e)}4.2 构建智能体使用LangGraph构建智能体工作流from langgraph.graph import StateGraph, END from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor from langchain.agents import create_tool_calling_agent from langchain.memory import ConversationBufferMemory from typing import TypedDict, List, Annotated import operator # 定义状态结构 class AgentState(TypedDict): messages: Annotated[List, operator.add] current_step: str # 初始化模型 llm ChatOpenAI(modelgpt-4o, temperature0) # 创建智能体 def create_weather_agent(): tools [get_weather] # 系统提示词 system_prompt 你是一个专业的天气查询助手。你的职责是 1. 理解用户想要查询的城市天气 2. 调用天气查询工具获取准确信息 3. 以友好、专业的方式回复用户 如果用户没有指定城市请主动询问。 agent create_tool_calling_agent(llm, tools, system_prompt) memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue) agent_executor AgentExecutor.from_agent_and_tools( agentagent, toolstools, memorymemory, verboseTrue, handle_parsing_errorsTrue ) return agent_executor # 使用智能体 weather_agent create_weather_agent()4.3 测试智能体# 测试对话 result weather_agent.invoke({input: 北京天气怎么样}) print(result[output]) # 多轮对话测试 result weather_agent.invoke({input: 那上海呢}) print(result[output])这个简单的例子展示了智能体的基本工作流程理解用户意图→选择合适工具→执行→返回结果。5. 进阶实战多工具智能体开发现在我们来构建一个更复杂的智能体它能够处理多种类型的任务。5.1 定义工具集import datetime from langchain.tools import tool tool def calculate_expression(expression: str) - str: 计算数学表达式 try: # 安全评估数学表达式 allowed_chars set(0123456789-*/.() ) if all(c in allowed_chars for c in expression): result eval(expression) return f{expression} {result} else: return 表达式包含不安全字符 except Exception as e: return f计算错误{str(e)} tool def get_current_time(timezone: str UTC) - str: 获取指定时区的当前时间 try: now datetime.datetime.now() if timezone.upper() UTC: return f当前UTC时间{now.strftime(%Y-%m-%d %H:%M:%S)} else: return f当前系统时间{now.strftime(%Y-%m-%d %H:%M:%S)}时区{timezone} except Exception as e: return f获取时间错误{str(e)} tool def search_web(query: str) - str: 搜索网络信息模拟实现 # 实际项目中可以接入Serper API、Google Search等 mock_data { AI发展: 2026年AI技术重点集中在多模态理解和智能体协作, Python编程: Python 3.11在性能上有显著提升建议升级, 机器学习: Transformer架构继续主导深度学习领域 } return mock_data.get(query, f未找到关于{query}的特定信息) # 工具列表 tools [get_weather, calculate_expression, get_current_time, search_web]5.2 使用LangGraph构建工作流from langgraph.graph import StateGraph, END from langchain_core.messages import HumanMessage, AIMessage from typing import TypedDict, List, Annotated import operator # 扩展状态定义 class AdvancedAgentState(TypedDict): messages: Annotated[List, operator.add] current_step: str max_steps: int steps_taken: int def should_continue(state: AdvancedAgentState) - str: 判断是否继续执行 messages state[messages] last_message messages[-1] # 如果已经达到最大步数停止 if state[steps_taken] state[max_steps]: return end # 如果上次消息是AI消息且包含工具调用继续 if hasattr(last_message, tool_calls) and last_message.tool_calls: return continue return end def call_model(state: AdvancedAgentState): 调用模型处理 messages state[messages] response llm.invoke(messages) return {messages: [response], steps_taken: state[steps_taken] 1} # 构建图工作流 def create_advanced_agent(): workflow StateGraph(AdvancedAgentState) # 添加节点 workflow.add_node(agent, call_model) workflow.add_node(tools, execute_tools) # 设置入口点 workflow.set_entry_point(agent) # 添加条件边 workflow.add_conditional_edges( agent, should_continue, { continue: tools, end: END } ) workflow.add_edge(tools, agent) return workflow.compile() def execute_tools(state: AdvancedAgentState): 执行工具调用 messages state[messages] last_message messages[-1] # 这里简化处理实际需要解析tool_calls并执行 # 详细实现取决于具体的消息格式和工具调用协议 return {messages: messages}5.3 完整的多轮对话示例# 完整的智能体使用示例 def run_advanced_agent_demo(): agent create_advanced_agent() # 初始化状态 initial_state { messages: [ HumanMessage(content请帮我计算一下(1527)*3是多少然后告诉我北京现在的天气) ], current_step: start, max_steps: 5, steps_taken: 0 } # 执行智能体 for step in agent.stream(initial_state): print(f步骤 {step[steps_taken]}:) for message in step[messages]: if hasattr(message, content): print(fAI: {message.content}) if hasattr(message, tool_calls): for tool_call in message.tool_calls: print(f调用工具: {tool_call}) # 运行演示 run_advanced_agent_demo()6. 集成RAG构建知识增强智能体6.1 准备知识库首先我们需要建立本地知识库from langchain_community.document_loaders import TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings from langchain_community.vectorstores import Chroma def create_knowledge_base(documents_path: str): 创建本地知识库 # 加载文档 loader TextLoader(documents_path, encodingutf-8) documents loader.load() # 分割文档 text_splitter RecursiveCharacterTextSplitter( chunk_size1000, chunk_overlap200 ) splits text_splitter.split_documents(documents) # 创建向量数据库 embeddings OpenAIEmbeddings() vectorstore Chroma.from_documents( documentssplits, embeddingembeddings, persist_directory./chroma_db ) return vectorstore # 创建RAG检索工具 tool def search_knowledge_base(query: str) - str: 从知识库中检索相关信息 try: # 这里假设已经初始化了vectorstore docs vectorstore.similarity_search(query, k3) content \n\n.join([doc.page_content for doc in docs]) return f从知识库中找到以下相关信息\n\n{content} except Exception as e: return f检索知识库时出错{str(e)}6.2 构建RAG增强的智能体def create_rag_enhanced_agent(): 创建集成RAG的智能体 # 添加RAG工具到工具集 rag_tools tools [search_knowledge_base] # 更新系统提示词 system_prompt 你是一个知识渊博的智能助手具有以下能力 1. 回答一般性问题 2. 进行数学计算 3. 查询天气信息 4. 提供时间信息 5. 从专用知识库中检索专业信息 请根据问题类型选择合适的工具。对于专业问题优先使用知识库检索。 agent create_tool_calling_agent(llm, rag_tools, system_prompt) memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue) agent_executor AgentExecutor.from_agent_and_tools( agentagent, toolsrag_tools, memorymemory, verboseTrue, handle_parsing_errorsTrue, max_iterations5 # 限制最大迭代次数防止无限循环 ) return agent_executor7. 智能体开发中的常见问题与解决方案7.1 工具调用错误处理def safe_tool_execution(tool_name: str, tool_args: dict) - str: 安全的工具执行包装器 try: # 根据工具名称找到对应工具 tool_map {tool.name: tool for tool in tools} if tool_name in tool_map: result tool_map[tool_name].invoke(tool_args) return str(result) else: return f工具 {tool_name} 不存在 except Exception as e: return f工具执行错误{str(e)}7.2 会话状态管理from langchain.memory import ConversationSummaryMemory class SmartMemoryManager: 智能记忆管理器 def __init__(self): self.buffer_memory ConversationBufferMemory() self.summary_memory ConversationSummaryMemory(llmllm) def save_context(self, input_str: str, output_str: str): 保存对话上下文 self.buffer_memory.save_context({input: input_str}, {output: output_str}) self.summary_memory.save_context({input: input_str}, {output: output_str}) def get_relevant_memories(self, query: str) - str: 获取相关记忆 # 结合缓冲记忆和摘要记忆 buffer_history self.buffer_memory.load_memory_variables({}) summary_history self.summary_memory.load_memory_variables({}) return f近期对话{buffer_history}\n对话摘要{summary_history}7.3 错误处理和重试机制from tenacity import retry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10)) def robust_agent_invoke(agent, input_text: str) - dict: 带重试机制的智能体调用 try: return agent.invoke({input: input_text}) except Exception as e: print(f智能体调用失败{e}进行重试...) raise8. 生产环境最佳实践8.1 性能优化建议# 异步处理提高并发性能 import asyncio async def async_agent_invoke(agent, input_text: str): 异步调用智能体 # 实际实现需要根据框架的异步支持情况调整 loop asyncio.get_event_loop() result await loop.run_in_executor( None, agent.invoke, {input: input_text} ) return result # 批量处理请求 async def batch_process_requests(agent, requests: list): 批量处理多个请求 tasks [async_agent_invoke(agent, req) for req in requests] results await asyncio.gather(*tasks, return_exceptionsTrue) return results8.2 监控和日志记录import logging from datetime import datetime def setup_agent_monitoring(agent_name: str): 设置智能体监控 logger logging.getLogger(agent_name) logger.setLevel(logging.INFO) # 创建文件处理器 fh logging.FileHandler(f{agent_name}_{datetime.now().strftime(%Y%m%d)}.log) formatter logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s) fh.setFormatter(formatter) logger.addHandler(fh) return logger # 使用LangSmith进行高级监控 def setup_langsmith_tracing(): 设置LangSmith追踪 import os os.environ[LANGCHAIN_TRACING_V2] true os.environ[LANGCHAIN_PROJECT] MyAgentProject8.3 安全考虑def validate_user_input(input_text: str) - bool: 验证用户输入安全性 # 检查输入长度 if len(input_text) 1000: return False # 检查潜在的安全风险 dangerous_patterns [ 系统命令, 文件操作, 网络请求, 数据库操作 ] for pattern in dangerous_patterns: if pattern in input_text: return False return True def sanitize_tool_output(output: str) - str: 清理工具输出防止敏感信息泄露 sensitive_info [API密钥, 密码, 密钥, token] for info in sensitive_info: output output.replace(info, ***) return output9. 实际项目部署方案9.1 FastAPI Web服务部署from fastapi import FastAPI, HTTPException from pydantic import BaseModel app FastAPI(title智能体API服务) class ChatRequest(BaseModel): message: str user_id: str class ChatResponse(BaseModel): response: str session_id: str app.post(/chat, response_modelChatResponse) async def chat_endpoint(request: ChatRequest): 聊天端点 try: # 输入验证 if not validate_user_input(request.message): raise HTTPException(status_code400, detail输入内容不符合安全要求) # 调用智能体 result await async_agent_invoke(global_agent, request.message) return ChatResponse( responseresult[output], session_idrequest.user_id ) except Exception as e: raise HTTPException(status_code500, detailf处理请求时出错{str(e)}) # 启动命令uvicorn main:app --host 0.0.0.0 --port 80009.2 Docker容器化部署# Dockerfile FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . # 创建非root用户 RUN useradd -m -u 1000 agentuser USER agentuser EXPOSE 8000 CMD [uvicorn, main:app, --host, 0.0.0.0, --port, 8000]通过本文的完整学习路径你应该已经掌握了智能体开发的核心技能。从基础概念到实战项目从简单工具调用到复杂的RAG集成这些知识为你进一步深入AI应用开发奠定了坚实基础。智能体开发真正的价值不在于掌握某个特定框架而在于理解这种架构思维。当你能够将复杂问题分解为可管理的子任务并设计出可靠的执行流程时你就具备了解决现实世界复杂问题的能力。建议下一步重点学习LangGraph的高级特性如多智能体协作、工作流持久化、以及如何将智能体集成到更大的系统架构中。同时关注行业最新发展特别是智能体在垂直领域的应用案例这些实际场景会给你带来更多启发。
延伸阅读

更多相关文章

2026/10/23 20:48:13

Java继承实战:Person家族5个类完整实现与运行测试

本文还有配套的精品资源,点击获取 简介:一套面向Java初学者的继承体系练习代码,以Person为基类,逐层派生出Student、Employee、Faculty和Staff共5个类,覆盖常见人员角色建模。每个类都包含ID、姓名、地址、电话、邮…

2026/10/25 2:10:44

Mythos动态推理图:AI安全从经验驱动到形式化验证的范式跃迁

1. 这不是一次普通模型发布:Mythos背后的真实技术断层与行业震感你可能已经刷到过几条标题里带“Claude Mythos”“Project Glasswing”的快讯,但如果你只把它当成又一个“更强的Claude”,那你就错过了过去五年AI安全与能力演进中最具分水岭意…

2026/10/25 0:49:10

LLM数据防泄漏(DLP)实战:三层语义防御架构

1. 项目概述:这本“黑皮书”不是讲黑客技术,而是讲怎么守住AI时代最后一道门你有没有遇到过这样的场景:团队刚上线一个内部知识库问答机器人,员工用它查报销流程、问IT故障、甚至输入客户合同片段确认条款——结果某天审计部门发来…

2026/10/25 3:43:04

顺序表原理与Java实现详解

1. 顺序表基础概念解析顺序表是数据结构中最基础的线性存储结构之一,也是学习数据结构的第一个重要门槛。它本质上是在内存中用一组地址连续的存储单元依次存储线性表的数据元素,这种物理上的连续性是顺序表区别于链表等结构的核心特征。在实际开发中&am…

2026/10/25 3:43:04

LobeChat本地部署:Docker、环境变量与反向代理实战

1. 先把聊天界面从模型里拆出来,这件事本身就值得做很多人第一次接触本地聊天机器人,顺序是反的:先去折腾模型权重、量化精度、显存占用,结果折腾了三天,模型跑起来了,却只能对着终端敲curl,连个…

2026/10/25 3:43:04

用LLM做科研搭档:指令微调生成可验证研究想法

1. 项目概述:当文献阅读变成研究创意的“自动播种机”你有没有过这种体验:花一整天精读三篇顶会论文,笔记记了二十页,合上电脑却只记得“好像很有启发”,但具体能延展出什么新问题、新方法、新实验路径,脑子…

2026/10/25 3:43:04

3D高斯泼溅误差分离:Detector、Lifting与Representation三重归因

1. 项目概述:这不是“调参”,而是一次对3D高斯泼溅底层误差结构的外科手术你最近是不是也刷到了那篇标题里带着“Semantic Lifting”“Detector Error”“Lifting Error”“Representation Error”的论文?标题长、术语密、动词冷峻——“Sepa…

2026/10/25 3:43:04

教育AI中的跨模型共识机制:诊断分歧比一致更有教学价值

1. 这不是“投票决定对错”,而是用共识机制暴露模型认知盲区你有没有遇到过这样的场景:在K-12数学辅导对话分析中,让三个不同架构的大语言模型——比如一个基于Llama 3微调的推理型模型、一个专为教育对话优化的Phi-4变体、还有一个轻量级Qwe…

2026/10/25 3:38:04

impeccable质量标准:从主观感知到可测可验的工程实践

1. 项目概述:当“impeccable”不再只是词典里的形容词最近在多个技术社区、设计论坛和内容创作小组里,频繁看到一个词被反复拎出来讨论——impeccable。它不是新发布的工具名,不是某个开源项目的代号,甚至不是缩写或黑话。它就静静…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑