LangChain 源码剖析-代理详解(Agent)代理将语言模型与工具相结合,构建能够推理任务、决定工具使用并迭代推进解决方案的系统。createAgent() 提供了一个生产就绪的代理实现。大型语言模型代理通过循环运行工具来实现目标。代理将持续运行,直到满足停止条件——即模型输出最终结果或达到迭代次数限制。核心组件静态模型静态模型在创建代理时配置一次,并在整个执行过程中保持不变。这是最常见和最直接的方法。要从模型标识符字符串初始化静态模型,请执行以下操作:fromlangchain.agentsimportcreate_agent agent=create_agent("gpt-5",tools=tools)为了更好地控制模型配置,请直接使用提供程序包初始化模型实例。在这个例子中,我们使用ChatOpenAI。有关其他可用的聊天模型类,请参阅聊天模型。fromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAI model=ChatOpenAI(model="gpt-5",temperature=0.1,max_tokens=1000,timeout=30# ... (other params))agent=create_agent(model,tools=tools)模型实例使您可以完全控制配置。当您需要设置特定参数时,如温度、max_tokens、超时、base_url和其他特定于提供程序的设置,请使用它们。请参阅参考资料,查看模型上的可用参数和方法。动态模型在运行时根据当前状态和上下文选择动态模型。这实现了复杂的路由逻辑和成本优化。要使用动态模型,请使用@wrap_model_call装饰器创建中间件,该装饰器修改请求中的模型:fromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_agentfromlangchain.agents.middlewareimportwrap_model_call,ModelRequest,ModelResponse basic_model=ChatOpenAI(model="gpt-4o-mini")advanced_model=ChatOpenAI(model="gpt-4o")@wrap_model_calldefdynamic_model_selection(request:ModelRequest,handler)-ModelResponse:"""Choose model based on conversation complexity."""message_count=len(request.state["messages"])ifmessage_count10:# Use an advanced model for longer conversationsmodel=advanced_modelelse:model=basic_modelreturnhandler(request.override(model=model))agent=create_agent(model=basic_model,# Default modeltools=tools,middleware=[dynamic_model_selection])工具工具赋予代理人采取行动的能力。代理通过促进以下方面超越了简单的模型工具绑定:按顺序调用多个工具(由单个提示触发)在适当的时候并行调用工具基于先前结果的动态刀具选择工具重试逻辑和错误处理跨工具调用的状态持久化定义工具将工具列表传递给代理。fromlangchain.toolsimporttoolfromlangchain.agentsimportcreate_agent@tooldefsearch(query:str)-str:"""Search for information."""returnf"Results for:{query}"
LangChain 源码剖析-代理详解(Agent)
LangChain 源码剖析-代理详解(Agent)代理将语言模型与工具相结合,构建能够推理任务、决定工具使用并迭代推进解决方案的系统。createAgent() 提供了一个生产就绪的代理实现。大型语言模型代理通过循环运行工具来实现目标。代理将持续运行,直到满足停止条件——即模型输出最终结果或达到迭代次数限制。核心组件静态模型静态模型在创建代理时配置一次,并在整个执行过程中保持不变。这是最常见和最直接的方法。要从模型标识符字符串初始化静态模型,请执行以下操作:fromlangchain.agentsimportcreate_agent agent=create_agent("gpt-5",tools=tools)为了更好地控制模型配置,请直接使用提供程序包初始化模型实例。在这个例子中,我们使用ChatOpenAI。有关其他可用的聊天模型类,请参阅聊天模型。fromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAI model=ChatOpenAI(model="gpt-5",temperature=0.1,max_tokens=1000,timeout=30# ... (other params))agent=create_agent(model,tools=tools)模型实例使您可以完全控制配置。当您需要设置特定参数时,如温度、max_tokens、超时、base_url和其他特定于提供程序的设置,请使用它们。请参阅参考资料,查看模型上的可用参数和方法。动态模型在运行时根据当前状态和上下文选择动态模型。这实现了复杂的路由逻辑和成本优化。要使用动态模型,请使用@wrap_model_call装饰器创建中间件,该装饰器修改请求中的模型:fromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_agentfromlangchain.agents.middlewareimportwrap_model_call,ModelRequest,ModelResponse basic_model=ChatOpenAI(model="gpt-4o-mini")advanced_model=ChatOpenAI(model="gpt-4o")@wrap_model_calldefdynamic_model_selection(request:ModelRequest,handler)-ModelResponse:"""Choose model based on conversation complexity."""message_count=len(request.state["messages"])ifmessage_count10:# Use an advanced model for longer conversationsmodel=advanced_modelelse:model=basic_modelreturnhandler(request.override(model=model))agent=create_agent(model=basic_model,# Default modeltools=tools,middleware=[dynamic_model_selection])工具工具赋予代理人采取行动的能力。代理通过促进以下方面超越了简单的模型工具绑定:按顺序调用多个工具(由单个提示触发)在适当的时候并行调用工具基于先前结果的动态刀具选择工具重试逻辑和错误处理跨工具调用的状态持久化定义工具将工具列表传递给代理。fromlangchain.toolsimporttoolfromlangchain.agentsimportcreate_agent@tooldefsearch(query:str)-str:"""Search for information."""returnf"Results for:{query}"