LangChain Agent:从概念到落地,打造会自主干活的AI智能体

发布时间:2026/7/9 1:42:39
LangChain Agent:从概念到落地,打造会自主干活的AI智能体 文章目录前言一、什么是Agent和Chain到底有什么区别1.1 Chain的局限固定流水线无法自主决策1.2 Agent核心定义让LLM拥有自主决策权1.3 四大核心组件通俗易懂版1.4 Chain vs Agent 完整对比表1.5 开发选择建议二、工具定义与使用Agent的“手脚”底层是Function Calling2.1 Function Calling底层原理核心必懂2.2 LangChain快速定义工具tool装饰器2.3 一行创建Agentcreate_agent2.4 Agent两种调用方式2.5 调试利器LangSmith三、MCP协议AI工具界的Type-C标准化接入外部服务3.1 为什么需要MCP3.2 MCP三层架构3.3 两种传输模式适配不同场景3.4 MCP Server不止提供工具3.5 LangChain集成MCP3.6 本地工具 vs MCP工具选型四、记忆管理解决Agent“失忆”多会话隔离4.1 默认痛点无记忆每次对话清零4.2 核心解决方案Checkpointer4.3 Thread ID多用户会话隔离4.4 记忆的致命缺陷上下文无限膨胀五、Agent中间件执行流程拦截器解决记忆、安全问题5.1 两种高频实用中间件1. SummarizationMiddleware 消息压缩解决长对话2. HumanInTheLoopMiddleware 人工审核高危操作安全兜底5.2 中间件使用方式六、Agent最佳实践避坑指南提升稳定性6.1 工具设计五大黄金原则6.2 系统提示词优化技巧6.3 性能优化方案七、完整知识体系总结 技术栈定位7.1 LangChain四层技术栈自底向上7.2 核心知识点复盘7.3 常见问题解答八、学习落地建议前言很多人刚接触大模型开发时只会写固定流程的Chain链式流程但遇到需要动态判断、多分支任务的场景就束手无策。比如一句需求查北京明天天气如果下雨就取消户外预约。固定Chain根本无法实现——流程取决于天气结果代码没法提前写死分支。而Agent智能体就是解决这类动态任务的核心方案。本文基于LangChain完整Agent体系用通俗语言拆解全部核心知识点Agent核心原理、工具调用、MCP标准化工具、记忆管理、中间件、最佳实践新手也能看懂。一、什么是Agent和Chain到底有什么区别1.1 Chain的局限固定流水线无法自主决策Chain是开发者提前写死流程所有步骤线性执行路径完全固定用户输入 → 提示词模板 → LLM → 解析输出举个例子翻译工具Chain永远只会执行「输入文本→翻译→输出」中途不会产生任何分支判断。一旦任务存在未知分支、条件判断、多轮工具调用Chain直接失效。1.2 Agent核心定义让LLM拥有自主决策权Agent LLM大脑 自主决策 工具调用核心逻辑转变Chain你告诉AI怎么做AI只负责执行流程由人定义Agent你只告诉AI要做什么AI自己思考步骤、选择工具、调整方案流程由LLM动态生成Agent会循环执行一套「感知→推理→行动」闭环直到任务完成感知接收用户提问/上一轮工具返回结果推理LLM自主判断下一步要不要调用工具调用哪个传什么参数行动执行工具拿到结果再次进入感知任务完成则直接输出答案1.3 四大核心组件通俗易懂版Agent由4个协作组件构成最简Agent仅需LLMTools记忆、规划属于增强能力组件角色类比核心作用LLM大脑总指挥理解需求、拆分任务、每一步做决策驱动整套流程Tools工具手脚执行外部操作查天气、搜索、计算、调APILLM不能直接操作外部系统Memory记忆记事本存储历史对话多轮聊天不“失忆”区分不同用户会话Planning规划思考逻辑分两种模式1. ReAct边走边想基础每一步临时思考下一步2. Plan-and-Execute全局规划复杂任务先出完整步骤清单再执行重点LangChain中Planning不是独立代码组件而是内置在LLM推理与提示词里的能力日常开发不用单独实例化。1.4 Chain vs Agent 完整对比表对比维度Chain链式Agent智能体流程控制权开发者硬编码定义LLM运行时自主决定执行路径线性、固定不变循环、动态分支工具调用固定位置调用固定工具按需选择调用次数不固定应对突发无法处理预期外情况根据工具结果灵活调整策略适用场景步骤固定、无判断的简单任务翻译、摘要开放式、需要多步判断、动态操作智能客服、自动化办公可预测性极高每次执行路径一致较低不同输入路径不同开发难度低中等需要设计工具、优化提示词1.5 开发选择建议流程100%固定优先Chain简单稳定、开销低需要分支判断、多轮工具交互必须用Agent两者可混用Agent内部子流程可以封装Chain二、工具定义与使用Agent的“手脚”底层是Function CallingAgent不能直接操作外部系统所有实操都依赖工具工具底层依托大模型原生Function Calling能力。2.1 Function Calling底层原理核心必懂很多新手混淆工具调用逻辑记住一句话LLM只会选工具、写参数不会真正执行工具执行全靠本地代码。完整流程开发者定义工具函数描述参数规范LangChain自动转为JSON Schema随提示词发给LLMLLM分析需求输出工具调用指令工具名参数框架解析指令本地运行对应函数工具结果回传给LLMLLM继续推理或输出最终回答2.2 LangChain快速定义工具tool装饰器不用手写复杂JSON Schematool装饰器一键转换函数为Agent可用工具三大关键点决定调用准确率函数名动词名词语义清晰get_weather而非tool1Docstring详细说明工具用途、参数含义相当于给LLM的说明书参数类型注解明确参数格式、约束减少LLM传参错误示例基础天气工具fromlangchain.toolsimporttooltooldefget_weather(city:str,date:str)-str:获取指定城市指定日期天气预报 Args: city: 城市中文名称如北京、上海 date: 查询日期格式YYYY-MM-DD # 实际项目对接天气APIreturnf{city}{date}多云局部小雨复杂参数Pydantic模型约束参数结构复杂时用BaseModel精细化限制参数frompydanticimportBaseModel,FieldclassWeatherArgs(BaseModel):city:strField(description城市名称)date:strField(description日期YYYY-MM-DD)tool(args_schemaWeatherArgs)defget_weather(city:str,date:str)-str:查询天气预报returnf{city}{date}天气晴朗2.3 一行创建Agentcreate_agent工具定义完成后通过create_agent组装模型、工具、记忆、中间件自动封装所有底层工具调用逻辑fromlangchain.agentsimportcreate_agentfromlangchain.chat_modelsimportinit_chat_model# 1. 初始化LLM大脑llminit_chat_model(modelgpt-4o-mini,model_provideropenai)# 2. 工具列表自定义工具第三方搜索工具tools[get_weather,TavilySearch(max_results3)]# 3. 构建Agentagentcreate_agent(modelllm,toolstools,system_prompt你是生活助手按需调用工具回答用户问题无工具则直接回复)2.4 Agent两种调用方式invoke() 一次性调用等待全部推理、工具执行完毕统一返回结果适合后台任务stream() 流式调用实时打印每一步思考、工具调用、返回结果调试必备前端聊天界面首选2.5 调试利器LangSmithAgent流程动态不可控报错难定位开启LangSmith可视化追踪importos os.environ[LANGSMITH_TRACING]trueos.environ[LANGSMITH_API_KEY]你的密钥os.environ[LANGSMITH_PROJECT]agent调试项目平台可查看每一轮LLM输入输出、工具参数、循环次数快速定位「选错工具、参数错误、无限循环」问题。三、MCP协议AI工具界的Type-C标准化接入外部服务3.1 为什么需要MCP本地tool工具适合简单业务但对接第三方服务12306、GitHub、数据库存在巨大痛点每个外部系统接口规范、认证、加密逻辑完全不同接入一个就要写一套适配代码无法复用。MCPModel Context Protocol模型上下文协议统一工具通信标准类比USB-C无MCP查火车票REST、查数据库JDBC、GitHub GraphQL三套适配代码有MCP所有工具服务统一协议一套客户端代码对接全部服务一次开发全平台复用3.2 MCP三层架构MCP Host你的LangChain Agent程序客户端宿主MCP ClientHost内置通信客户端负责和服务端收发指令MCP Server独立部署的工具服务暴露工具、资源、提示词模板3.3 两种传输模式适配不同场景传输方式通信原理使用场景Stdio标准输入输出本地进程间通信不走网络端口本地开发调试、本机工具Streamable HTTP流式HTTP网络远程通信云端部署、多客户端共享工具服务3.4 MCP Server不止提供工具MCP服务端可输出三类能力统一被Agent加载mcp.tool()可执行操作查车票、计算对应本地toolmcp.resource()只读静态资源企业手册、日志类似虚拟文件mcp.prompt()预定义提示词模板第三方服务内置最优话术无需手写Prompt3.5 LangChain集成MCP通过MultiServerMCPClient同时连接多个本地/远程MCP服务所有工具自动转为LangChain标准工具对LLM完全透明分不清本地工具和MCP远程工具clientMultiServerMCPClient({# 本地Stdio服务本地计算工具:{transport:stdio,command:python,args:[mcp_server.py]},# 远程HTTP服务12306票务服务:{transport:streamable_http,url:https://xxx/mcp}})# 自动获取全部工具toolsawaitclient.get_tools()3.6 本地工具 vs MCP工具选型维度本地tool工具MCP远程工具部署位置主项目代码内独立Server进程可单独部署复用性仅当前项目可用全平台、多项目共享维护成本和主项目耦合更新独立迭代、独立运维适用场景简单业务逻辑、短期项目通用公共工具、第三方服务、跨团队复用四、记忆管理解决Agent“失忆”多会话隔离4.1 默认痛点无记忆每次对话清零不配置记忆时每次invoke都是独立会话Agent完全遗忘上一轮对话用户我叫张三Agent你好张三用户我叫什么Agent不清楚你的名字4.2 核心解决方案Checkpointer记忆底层由Checkpointer实现执行逻辑对话结束自动存储本轮全部消息新一轮对话加载历史消息拼接至输入LLM读取完整上下文最简内存记忆示例fromlanggraph.checkpoint.memoryimportInMemorySaver# 创建内存存储器程序重启数据丢失checkpointerInMemorySaver()# 创建Agent时传入agentcreate_agent(llm,tools,checkpointercheckpointer)4.3 Thread ID多用户会话隔离一个Agent同时服务多个用户依靠thread_id区分独立会话不同ID历史完全隔离互不干扰# 用户张三会话agent.invoke(input,config{configurable:{thread_id:user_zhangsan}})# 用户李四全新会话看不到张三聊天记录agent.invoke(input,config{configurable:{thread_id:user_lisi}})4.4 记忆的致命缺陷上下文无限膨胀多轮对话后消息列表持续变长带来两个问题Token消耗暴增调用成本上涨超出模型上下文窗口直接报错解决方案下一章消息压缩中间件五、Agent中间件执行流程拦截器解决记忆、安全问题中间件是嵌入Agent执行链路的拦截器可在LLM调用前后、工具执行前后介入处理支持叠加多个中间件。5.1 两种高频实用中间件1. SummarizationMiddleware 消息压缩解决长对话当消息数量/Token达到阈值自动把老旧历史压缩为一段摘要大幅减少上下文长度fromlangchain.agents.middlewareimportSummarizationMiddleware summary_midSummarizationMiddleware(modelllm,trigger(tokens,3000)# Token超过3000自动压缩)触发规则三选一按消息条数、按上下文占比、按Token绝对值。2. HumanInTheLoopMiddleware 人工审核高危操作安全兜底转账、删除数据等高风险工具调用前拦截Agent执行暂停流程等待人工确认防止AI误操作hitl_midHumanInTheLoopMiddleware(interrupt_on{transfer_money:True,# 转账需要审核get_weather:False# 查天气无需审核})执行流程AI触发高危工具→中间件拦截暂停→人工批准/拒绝→继续执行或取消操作。5.2 中间件使用方式创建Agent时传入中间件列表按顺序执行agentcreate_agent(modelllm,toolstools,checkpointercheckpointer,middleware[summary_mid,hitl_mid]# 叠加多个中间件)六、Agent最佳实践避坑指南提升稳定性6.1 工具设计五大黄金原则单一职责一个工具只做一件事不要合并多个功能不要handle_weather_and_calendar描述详尽Docstring写清用途、参数格式、使用场景LLM依赖描述判断调用时机参数约束明确标注格式、取值范围减少传参错误错误友好工具报错返回提示而非原生异常栈方便LLM修正参数重试幂等安全查询类工具优先修改/创建类工具增加校验避免重复执行产生脏数据6.2 系统提示词优化技巧好的提示词角色定位工作流程约束条件输出规范拒绝模糊话术# 优质提示词模板 你是专业出行助手工作流程 1. 先查询目的地天气 2. 根据天气判断是否需要预约户外行程 3. 下雨则调用取消预约工具不下雨直接回复天气 约束不编造天气数据所有信息必须调用工具获取输出简洁口语化文字6.3 性能优化方案精简工具列表只加载当前任务必需工具减少LLM选择开销开启消息压缩中间件降低Token消耗工具返回结果精简减少循环调用次数使用ainvoke异步调用支持并发处理多用户请求七、完整知识体系总结 技术栈定位7.1 LangChain四层技术栈自底向上基础层 Model I/O模型调用、提示词、输出解析只能纯文字对话组合层 Chains固定线性流程编排无自主决策知识层 RAG私有文档检索给模型补充外部知识智能层 Agents自主决策、工具调用、记忆、中间件本文核心进阶LangGraph用于多Agent协作、复杂分支、状态管理。7.2 核心知识点复盘Agent核心LLM自主决定流程循环感知-推理-行动区别于固定Chain工具底层Function Callingtool快速封装本地工具MCP标准化远程工具协议像USB一样即插即用记忆CheckpointerThread ID实现多轮会话、多用户隔离中间件消息压缩、人工审核解决长上下文与安全风险落地关键规范工具设计、优化提示词、借助LangSmith调试7.3 常见问题解答Chain和Agent怎么选流程固定用Chain需要动态判断、多工具分支用Agent二者可嵌套。RAG和Agent可以结合吗完全可以把文档检索封装成工具Agent自主按需查询知识库。什么时候需要LangGraph多智能体协作、复杂分支循环、精细状态控制场景create_agent能力不足时使用。八、学习落地建议动手小项目搭建简易智能客服Agent融合本地工具MCP工具记忆压缩中间件调试优先开发全程使用stream流式输出LangSmith追踪快速定位工具调用异常生态拓展学习社区MCP工具服务快速给Agent增加搜索、数据库、办公系统能力进阶学习LangGraph状态编排实现多Agent协同复杂业务系统