createAgent() 提供了一个生产就绪的智能体实现。
一个LLM智能体通过循环运行工具以实现目标。
智能体运行,直到满足停止条件——即模型发出最终输出或达到迭代限制。
核心组件
模型
模型 是您智能体的推理引擎。它可以以多种方式指定,支持静态和动态模型选择。静态模型
静态模型在创建智能体时进行一次配置,并在整个执行过程中保持不变。这是最常见且最直接的方法。 要从模型标识符字符串初始化一个静态模型:模型:provider:model(例如:"openai:gpt-5")。如果您希望对模型配置有更多控制,可以直接使用提供者包初始化模型实例:
temperature、max_tokens、timeouts,或配置API密钥,base_url,以及其他供应商特定设置时,请使用它们。请参阅API参考以查看您模型上的可用参数和方法。
动态模型
动态模型根据当前的状态和上下文在 进行选择。这允许实现复杂的路由逻辑和成本优化。 要使用动态模型,创建中间件,使用wrapModelCall 修改请求中的模型:
工具
工具赋予智能体执行动作的能力。智能体不仅超越了简单的模型绑定,还通过以下方式促进:- 按顺序进行多个工具调用(由单个提示触发)
- 适当情况下并行工具调用
- 根据先前结果动态选择工具
- 工具重试逻辑和错误处理
- 工具调用间的状态持久化
定义工具
将工具列表传递给智能体。工具错误处理
为了自定义工具错误处理方式,请在自定义中间件中使用wrapToolCall 钩子:
ToolMessage]。
ReAct循环中的工具使用
智能体遵循ReAct(“推理+行动”)模式,在针对工具调用的简短推理步骤和将结果观察输入后续决策之间交替,直到它们能够提供一个最终答案。Example of ReAct loop
Example of ReAct loop
提示:识别当前最受欢迎的无线耳机并验证其可用性。
- 推理: “流行度是时间敏感的,我需要使用提供的搜索工具。”
- 行动: 调用
search_products("wireless headphones")
- 推理: “在回答之前,我需要确认顶级物品的可用性。”
- 行动: 调用
check_inventory("WH-1000XM5")
- 推理: “我拥有最受欢迎的模型及其库存状态。我现在可以回答用户的问题。”
- 行动: 生成最终答案
系统提示
您可以通过提供提示来塑造智能体处理任务的方式。@[system_prompt] 参数可以作为一个字符串提供:
system_prompt] 时,智能体将从消息中直接推断其任务。
动态系统提示
对于需要根据运行时上下文或智能体状态修改系统提示符的更高级用例,您可以使用中间件。调用
您可以通过向其State 传递更新来调用智能体。所有智能体在其状态中包含一个 消息序列;要调用智能体,请传递一条新消息:
高级概念
结构化输出
在某些情况下,您可能希望智能体以特定格式返回输出。LangChain提供了一个简单通用的方法,通过responseFormat参数来实现。
记忆
智能体通过消息状态自动维护对话历史。您还可以配置智能体在对话过程中使用自定义状态模式来记住更多信息。 存储在状态中的信息可以被视为智能体的短期记忆:流媒体
我们已经看到如何使用invoke 来调用智能体以获取最终响应。如果智能体执行多个步骤,这可能需要一些时间。为了显示中间进度,我们可以按发生顺序流回消息。
中间件
中间件 为在执行的不同阶段自定义智能体行为提供了强大的扩展性。您可以使用中间件来:- 在调用模型之前处理进程状态(例如,消息修剪、上下文注入)
- 修改或验证模型的响应(例如,安全措施、内容过滤)
- 使用自定义逻辑处理工具执行错误
- 根据状态或上下文实现动态模型选择
- 添加自定义日志记录、监控或分析