☰
LangChain 入门系列四:agent初体验-创建与调用
2026/9/28 8:59:17 网站建设 项目流程

LangChain 入门系列四:agent初体验

  • 前言
  • Agent的运行原理
  • Agent的创建与调用
    • 创建Agent
      • 静态方式
      • 动态创建
    • Agent调用
  • Agent提示词
    • 基础提示词设置
  • 总结

前言

前面几篇我们了解了 LangChain 大模型的初始化、多种调用方式以及结构化输出,解决了模型可控输出的基础问题。从本篇开始,我们正式进入 LangChain 核心的知识点——Agent 智能体。Agent 是实现 AI 自主思考、自主决策、自动调用工具完成复杂任务的核心载体。本文将分享 Agent 的核心运行原理、创建方式、调用方法以及系统提示词配置,带大家入门 LangChain Agent 开发。

Agent的运行原理

在 LangChain 中,Agent 本质是一个循环推理 + 工具调用的智能执行体,能够根据用户任务,自主判断是否需要调用工具、调用什么工具,直到任务完成。
Agent 整体遵循** ReAct 架构**(Reasoning + Acting):思考推理 → 执行动作 → 观察结果 → 再次推理,循环往复,直至任务闭环。整个流程依托模型、工具、记忆、中间件等组件协同完成。agent模型原理如下图所示:

以「查找并下单 HUAWEI P20 手机」任务为例,完整还原 Agent 自主决策全过程:
1、接收用户输入并理解开始第一次推理
输入:查找HUAWEI P20手机并下单,下单数量是1
大模型推理:查找HUA WEI P20手机下单需要先确定购物平台是否有这个型号的手机并确认库存才能下单,所以需要先调用搜索工具
2、第一次行动与观察
action:调用搜索工具,产品型号为 HUAWEI P20
observation:工具返回结果:平台有HUA WEI P20手机
3、第二次推理
推理:平台中有指定型号手机售卖,要想下单需要先确定库存
4、第二次行动与观察
action:调用查询库存工具,输入产品型号
observation:工具返回结果:库存10,库存充足
5、第三次推理
推理:平台商品库存10,有库存充足,满足下单条件,可以执行下单操作
6、第三次行动与观察
action:调用下单工具,输入产品型号和数量
observation:工具返回结果:下单成功
7、第三次推理
推理:工具返回:下单成功,综合所有信息,LLM得出结论指定商品下单成功,任务完成
action:输出最终结果,下单成功

整个过程无需人工干预,Agent 自主完成思考、选工具、执行、复盘,这也是Agent的核心价值。

Agent的创建与调用

创建Agent

在 LangChain 1.3 中,支持静态模型和动态模型两种方式,通过create_agent API 是创建智能体,它通过将语言模型与工具相结合,创建能够自主决策并执行复杂任务的系统。

静态方式

""" 创建一个静态模型的智能体 """importjsonfromlangchain.agentsimportcreate_agentfromlangchain.chat_modelsimportinit_chat_modelfromlangchain.toolsimporttoolfrominit_modelimportdeepseek@tooldefget_weather(city:str)->str:"""获取指定城市的天气信息。"""returnf"{city}的天气为晴朗,25°C。"agent=create_agent(deepseek,tools=[get_weather])print(type(agent))# CompiledStateGraphresp:dict=agent.invoke({"messages":[{"role":"user","content":"查询北京的天气"}]})print(type(resp))# dictprint(resp)

💡注意:

  1. create_agent函数返回的本身就是一个具备执行能力的实体,这个实体内部基于 LangGraph 构建了一个执行图(Graph)。
  2. create_agent方法传递的参数为model(Agent使用的模型)和tools(Agent使用的工具),更多参数参考:https://reference.langchain.com/python/langchain/agents/
  3. agent.invoke是调用Agent,传入的参数为固定格式:” {“messages”: [{“role”: “…”, “content”: “…”}]}”,当然根据场景还有其参数,其他参与需要用逗号(,)与{“messages”:…}隔开

动态创建

动态模型是在运行时根据当前对话的状态或上下文智能地选择不同的模型,实现方式是通过中间件来灵活配置。
代码示例:当对话消息数大于等于3条后,使用复杂模型,否则使用简单模型。

fromlangchain.toolsimporttoolfromlangchain.agentsimportcreate_agentfromlangchain.agents.middlewareimportwrap_model_call,ModelRequest,ModelResponsefromlangchain.chat_modelsimportinit_chat_modelfromenv_utilsimportDEEPSEEK_API_KEY,DEEPSEEK_BASE_URL,OPENAI_API_KEY,OPENAI_BASE_URL# 定义两个模型:基础版和高级版basic_model=init_chat_model(model="deepseek-v4-pro",model_provider="deepseek",api_key=DEEPSEEK_API_KEY,base_url=DEEPSEEK_BASE_URL,)advanced_model=init_chat_model(model="gpt-5",model_provider="openai",api_key=OPENAI_API_KEY,base_url=OPENAI_BASE_URL,)# 1. 定义动态模型选择中间件@wrap_model_calldefdynamic_model_selection(request:ModelRequest,handler)->ModelResponse:"""根据对话消息数动态选择模型"""# 获取当前对话消息数message_count=len(request.state["messages"])print(f"当前对话消息数:{message_count}")ifmessage_count>=3:# 对话消息数超过2条,切换至更强大的模型处理复杂对话model=advanced_modelelse:model=basic_modelreturnhandler(request.override(model=model))# 2.定义工具@tooldefget_current_location()->str:"""获取当前位置。"""return"当前位置为北京市。"@tooldefget_weather(city:str)->str:"""获取指定城市的天气信息。"""returnf"{city}的天气为晴朗,25°C。"# 2. 创建Agent,并传入动态模型选择中间件agent=create_agent(model=basic_model,# 此处设置一个默认模型tools=[get_current_location,get_weather],# 集成工具system_prompt="你是一个助手,可以帮助用户回答各种问题。",middleware=[dynamic_model_selection]# 挂载中间件)# 模拟一个对话的调用,包含获取当前位置和天气信息print(agent.invoke({"messages":[{"role":"user","content":"获取当前位置,并告诉我天气情况"}]}))

💡中间件说明

  1. @wrap_model_call 标记的方法是模型选择中间件方法,create_agent时通过middleware参数指定该方法。
  2. @wrap_model_call方法中的两个参数含义:
    ● request:ModelRequest,封装了当前模型调用的所有请求信息。
    ● handler:回调函数,代表后续处理链,调用它会继续执行模型调用流程,通过 handler(request.override(…))传递修改后的请求。
  3. agent.invoke()启动了一个复杂的、可能包含多次LLM调用和工具调用的推理循环。wrap_model_call在这个循环的每个推理步骤(LLM调用)前都会被触发。

Agent调用

invoke是 Agent 最基本的同步调用方法,它属于阻塞式调用即等待完整推理+工具执行结束后统一返回结果。同时支持自定义系统指令,限制 Agent 行为边界。
,示例代码:

resp=agent.invoke({"messages":[{"role":"system","content":"你是一个天气查询助手,只回答天气相关的问题,其他问题请直接回答:我不清楚这问题答案。"},{"role":"user","content":"帮我实现一个五言绝句"}]})

💡补充知识点-优雅格式化输出
关于输出结果打印,如果只想方便看message中内容,对于大模型的本身的一些信息不关注的话,可以使用如下方式结构的化返回内容

# 格式化输出所有消息formsginresp["messages"]:msg.pretty_print()

pretty_print()是LangChain框架中消息对象(例如 HumanMessage, AIMessage, SystemMessage等)自带的一个方法,会结构化的展示大模型返回不同类型消息

Agent提示词

在LangChain中,Agent的提示词是通过 system_prompt参数设置,它本质上定义了Agent的“角色”和“使命”。

基础提示词设置

提示词基础设置是在“create_agent”的时候传入一个参数system_prompt,这个参数可以是str或者SystemMessage类型。
案例:使用字符串和SystemMessage设置系统提示词。

fromlangchain.agentsimportcreate_agentfromlangchain.agents.middlewareimportdynamic_prompt,ModelRequestfromlangchain_core.messagesimportSystemMessagefromlangchain_core.toolsimportBaseTool,toolfromtypingimportTypedDictimportjsonfrominit_modelimportdeepseek# 工具:实现两数相加@tooldefadd_numbers(a:int,b:int)->str:"""计算并返回两个数的和。"""returnf"和为:{a+b}"if__name__=='__main__':"""创建客服助手Agent"""# 创建带有动态提示词中间件的Agentagent=create_agent(model=deepseek,tools=[add_numbers],# 工具列表# system_prompt="你是一个数学助手,可以实现两数相加。"system_prompt=SystemMessage(content="你是一个数学助手,可以实现两数相加。"))resp=agent.invoke({"messages":[{"role":"user","content":"10加上20再加上30是多少?"}]},)print("resp:",resp)result=resp["messages"][-1].contentprint(result)

总结

1、Agent 核心基于ReAct 循环机制,通过推理、行动、观察闭环,实现自主调用工具完成复杂任务。
2、LangChain 支持静态固定模型与动态自适应模型两种 Agent 创建方式,可适配简单/复杂对话场景。
3、通过 system_prompt 可严格约束 Agent 角色与行为边界,避免乱回答、越权执行。
4、Agent 是后续工具链、多智能体、工作流开发的基础核心。

下期预告: 详细讲解 LangChain 自定义工具开发、工具参数校验、工具调用等相关内容,关注第一时间获取更新

📚本系列往期文章

  • LangChain 入门系列三:大模型结构化输出三种实现方案
  • LangChain 入门系列二:Model初始化及调用方式实操

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询