news 2026/4/23 17:43:38

LangChain智能体(Agents)全面指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain智能体(Agents)全面指南

1. 概述:什么是智能体?

智能体(Agents)是将大型语言模型(LLMs)与各种**工具(Tools)**相结合的系统,能够推理复杂任务、自主决定使用何种工具,并通过迭代方式逐步解决问题。

create_agent函数提供了一个生产就绪的智能体实现。它基于LangGraph构建了一个**图结构(graph)的智能体运行时环境。这种架构由节点(nodes,即处理步骤)边(edges,即连接关系)**组成,智能体在执行过程中会沿着这个图结构移动,执行如模型调用、工具执行等节点操作。

智能体的核心执行遵循ReAct模式(“推理+行动”):交替进行推理步骤工具调用,并将工具执行结果作为后续决策的输入,直至达成目标或达到迭代限制。


2. 核心组件详解

2.1 模型(Model):智能体的推理引擎

模型是智能体的核心,它可以通过静态或动态方式进行配置。

2.1.1 静态模型

静态模型在创建智能体时一次性配置,执行过程中保持不变。

  • 使用模型标识符字符串:最简单直接的方式。

    fromlangchain.agentsimportcreate_agent# 模型标识符支持自动推断agent=create_agent("openai:gpt-5",tools=tools)
  • 直接实例化模型对象:提供更精细的控制。

    fromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAI model=ChatOpenAI(model="gpt-5",temperature=0.1,# 控制输出随机性max_tokens=1000,# 限制生成长度timeout=30# 设置超时)agent=create_agent(model,tools=tools)
2.1.2 动态模型

动态模型允许根据运行时上下文选择不同的模型,实现复杂路由逻辑和成本优化。

fromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_agentfromlangchain.agents.middlewareimportwrap_model_call,ModelRequest basic_model=ChatOpenAI(model="gpt-4o-mini")advanced_model=ChatOpenAI(model="gpt-4o")@wrap_model_calldefdynamic_model_selection(request:ModelRequest,handler):"""根据对话复杂度选择模型"""message_count=len(request.state["messages"])ifmessage_count>10:# 复杂对话使用高级模型model=advanced_modelelse:model=basic_modelreturnhandler(request.override(model=model))agent=create_agent(model=basic_model,# 默认模型tools=tools,middleware=[dynamic_model_selection])

2.2 工具(Tools):智能体的行动能力

工具赋予智能体执行具体操作的能力,支持顺序调用、并行调用、动态选择和错误处理等功能。

2.2.1 定义工具
fromlangchain.toolsimporttoolfromlangchain.agentsimportcreate_agent@tooldefsearch(query:str)->str:"""搜索信息"""returnf"Results for:{query}"@tooldefget_weather(location:str)->str:"""获取指定位置的天气信息"""returnf"Weather in{location}: Sunny, 72°F"agent=create_agent(model,tools=[search,get_weather])
2.2.2 工具错误处理
fromlangchain.agents.middlewareimportwrap_tool_callfromlangchain.messagesimportToolMessage@wrap_tool_calldefhandle_tool_errors(request,handler):"""处理工具执行错误的自定义中间件"""try:returnhandler(request)exceptExceptionase:# 返回自定义错误消息给模型returnToolMessage(content=f"工具错误:请检查输入后重试。({str(e)})",tool_call_id=request.tool_call["id"])agent=create_agent(model="gpt-4o",tools=[search,get_weather],middleware=[handle_tool_errors])

2.2.3 ReAct循环中的工具使用示例

智能体通过ReAct循环逐步解决问题:

  1. 人类消息:查找当前最流行的无线耳机并检查库存
  2. 推理:“流行度具有时效性,我需要使用搜索工具”
  3. 行动:调用search_products("wireless headphones")
  4. 工具返回:找到5个匹配项,排名第一:WH-1000XM5
  5. 推理:“需要在回答前确认库存”
  6. 行动:调用check_inventory("WH-1000XM5")
  7. 工具返回:产品WH-1000XM5:库存10件
  8. 推理:“已获取最流行型号及库存状态,可以回答问题”
  9. 最终答案:生成包含具体信息的回答

2.3 系统提示(System Prompt)

系统提示用于塑造智能体的行为方式。

2.3.1 基本用法
agent=create_agent(model,tools,system_prompt="你是一个有用的助手。请保持回答简洁准确。")
2.3.2 高级控制

使用SystemMessage对象可以提供更精细的控制:

fromlangchain.messagesimportSystemMessage literary_agent=create_agent(model="anthropic:claude-sonnet-4-5",system_prompt=SystemMessage(content=[{"type":"text","text":"你是一个专门分析文学作品的AI助手。"},{"type":"text","text":"<《傲慢与偏见》全书内容>","cache_control":{"type":"ephemeral"}# 启用缓存优化}]))
2.3.3 动态系统提示
fromlangchain.agents.middlewareimportdynamic_prompt@dynamic_promptdefuser_role_prompt(request:ModelRequest)->str:"""根据用户角色生成系统提示"""user_role=request.runtime.context.get("user_role","user")base_prompt="你是一个有用的助手。"ifuser_role=="expert":returnf"{base_prompt}请提供详细的技术性回答。"elifuser_role=="beginner":returnf"{base_prompt}请用简单语言解释概念,避免专业术语。"returnbase_prompt agent=create_agent(model="gpt-4o",tools=[web_search],middleware=[user_role_prompt])

3. 调用智能体

智能体通过向其状态(State)传递更新来调用。所有智能体都在状态中包含一系列消息。

# 基本调用result=agent.invoke({"messages":[{"role":"user","content":"旧金山现在的天气如何?"}]})# 支持流式输出# 请参考streaming guide了解流式步骤和token生成

4. 高级概念

4.1 结构化输出(Structured Output)

LangChain提供两种结构化输出策略。

4.1.1 工具策略(ToolStrategy)

适用于任何支持工具调用的模型,通过“人工”工具调用来生成结构化输出。

frompydanticimportBaseModelfromlangchain.agents.structured_outputimportToolStrategyclassContactInfo(BaseModel):name:stremail:strphone:stragent=create_agent(model="gpt-4o-mini",tools=[search_tool],response_format=ToolStrategy(ContactInfo))result=agent.invoke({"messages":[{"role":"user","content":"从以下提取联系信息: John Doe, john@example.com, (555) 123-4567"}]})# 访问结构化响应print(result["structured_response"])# ContactInfo(name='John Doe', email='john@example.com', phone='(555) 123-4567')
4.1.2 供应商策略(ProviderStrategy)

利用模型供应商的原生结构化输出功能,更加可靠但仅限支持此功能的供应商。

fromlangchain.agents.structured_outputimportProviderStrategy agent=create_agent(model="gpt-4o",response_format=ProviderStrategy(ContactInfo))

重要提示:在LangChain 1.0中,直接传递模式(如response_format=ContactInfo)不再支持,必须明确使用ToolStrategyProviderStrategy

4.2 记忆(Memory)

智能体通过消息状态自动维护对话历史,也可以配置自定义状态模式来记住更多信息。

4.2.1 通过中间件定义状态

当自定义状态需要被特定中间件钩子和工具访问时使用。

fromlangchain.agentsimportAgentStatefromlangchain.agents.middlewareimportAgentMiddlewareclassCustomState(AgentState):user_preferences:dictclassCustomMiddleware(AgentMiddleware):state_schema=CustomState tools=[tool1,tool2]defbefore_model(self,state:CustomState,runtime):# 模型调用前的预处理逻辑passagent=create_agent(model,tools=tools,middleware=[CustomMiddleware()])result=agent.invoke({"messages":[{"role":"user","content":"我偏好技术性解释"}],"user_preferences":{"style":"technical","verbosity":"detailed"},})
4.2.2 通过state_schema定义状态

作为快捷方式,当自定义状态仅在工具中使用时适用。

fromlangchain.agentsimportAgentStateclassCustomState(AgentState):user_preferences:dictagent=create_agent(model,tools=tools,state_schema=CustomState)

5. 最佳实践总结

  1. 模型选择:简单应用使用静态模型,需要智能路由时使用动态模型
  2. 工具设计:为每个工具提供清晰描述和类型提示,实现适当的错误处理
  3. 提示工程:基础任务使用字符串提示,高级需求使用SystemMessage或动态提示
  4. 输出控制:需要特定格式输出时使用结构化输出策略
  5. 状态管理:利用自定义状态跟踪对话上下文和用户偏好

本指南涵盖了LangChain智能体的核心概念和高级特性。实际应用中,建议从简单配置开始,逐步根据需求添加复杂度,充分利用中间件和状态管理来构建强大的智能体应用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 8:20:23

Steam交易效率提升终极指南:3步实现智能批量操作

Steam交易效率提升终极指南&#xff1a;3步实现智能批量操作 【免费下载链接】Steam-Economy-Enhancer 中文版&#xff1a;Enhances the Steam Inventory and Steam Market. 项目地址: https://gitcode.com/gh_mirrors/ste/Steam-Economy-Enhancer 还在为繁琐的Steam库存…

作者头像 李华
网站建设 2026/4/23 8:15:59

Switch智能音乐伴侣:TriPlayer高效播放解决方案

Switch智能音乐伴侣&#xff1a;TriPlayer高效播放解决方案 【免费下载链接】TriPlayer A feature-rich background audio player for Nintendo Switch (requires Atmosphere) 项目地址: https://gitcode.com/gh_mirrors/tr/TriPlayer 你是否曾在Switch游戏时渴望拥有专…

作者头像 李华
网站建设 2026/4/23 8:22:25

3DS无线文件传输革命:5分钟实现无数据线高效管理

3DS无线文件传输革命&#xff1a;5分钟实现无数据线高效管理 【免费下载链接】3DS-FBI-Link Mac app to graphically push CIAs to FBI. Extra features over servefiles and Boop. 项目地址: https://gitcode.com/gh_mirrors/3d/3DS-FBI-Link 还在为3DS文件传输的繁琐流…

作者头像 李华
网站建设 2026/4/14 3:31:28

明日方舟游戏资源库:从零到一掌握高清素材与数据解析

明日方舟游戏资源库&#xff1a;从零到一掌握高清素材与数据解析 【免费下载链接】ArknightsGameResource 明日方舟客户端素材 项目地址: https://gitcode.com/gh_mirrors/ar/ArknightsGameResource 《明日方舟》作为近年来备受瞩目的策略手游&#xff0c;其精美的美术设…

作者头像 李华
网站建设 2026/4/23 9:59:07

游戏开发者的AI助手:快速集成Z-Image-Turbo角色生成方案

游戏开发者的AI助手&#xff1a;快速集成Z-Image-Turbo角色生成方案 作为一名独立游戏开发者&#xff0c;你是否曾为角色设计耗费大量时间&#xff1f;Z-Image-Turbo作为一款高效的文生图模型&#xff0c;能够帮助你快速生成多样化的游戏角色形象。本文将手把手教你如何将这个A…

作者头像 李华
网站建设 2026/4/22 23:05:05

智能翻译服务异常处理:提升系统健壮性

智能翻译服务异常处理&#xff1a;提升系统健壮性 &#x1f4cc; 背景与挑战&#xff1a;AI智能中英翻译服务的稳定性需求 随着全球化进程加速&#xff0c;跨语言沟通已成为企业、开发者乃至个人用户的日常刚需。基于深度学习的神经网络翻译&#xff08;Neural Machine Transla…

作者头像 李华