Assisted-by deepseek

LangChain Agent 几大组件 链接到标题

LangChain 里的 Agent 本质上是一个由 LLM 驱动的决策循环:模型根据当前状态决定下一步做什么(调用工具还是结束),执行后更新状态,再进入下一轮。拆开来看,主要由下面几个组件构成。

1. Model(模型) 链接到标题

Agent 的"大脑",负责理解上下文并做出决策。在 LangChain 中使用 ChatModel 进行绑定,通常需要配合 .bind_tools(tools) 将可用工具列表注入给模型,这样模型才知道自己能调用哪些工具。

调用模型时传入消息序列(系统提示 + 历史对话 + 当前状态),模型返回一个 AIMessage。如果模型认为需要调用工具,返回的消息中会携带 tool_calls 字段,包含工具名和参数;如果可以直接回答,则返回普通文本。

2. Tools(工具) 链接到标题

工具是 Agent 与外部世界交互的手段——搜索、计算、查数据库、调 API 等。在 LangChain 中用 @tool 装饰器或 StructuredTool 定义,核心是:

  • name:工具的唯一标识
  • description:告诉模型这个工具做什么、什么时候该用它
  • args_schema:输入参数的 schema(模型据此生成正确的调用参数)

工具的描述质量直接影响模型的调用准确率,所以 description 需要写清楚"何时用、输入什么、输出什么"。

3. State(状态) 链接到标题

State 是 Agent 在整个执行过程中的"记忆"。LangGraph 的 StateGraph 用 TypedDict 定义状态结构,最核心的字段是 messages——一个消息列表,用 add_messages reducer 累积每条消息。

State 里通常还包含:

  • 会话/用户标识
  • 中间计算结果
  • 工具返回数据
  • 循环控制标志

每次节点返回的 state 会按字段定义的 reducer 合并到全局状态中。

4. Model Node(模型节点) 链接到标题

Model Node 是 StateGraph 中的一个节点,封装了对 Model 的调用。它接收当前 State,取出消息列表传给模型,然后把模型的返回消息追加回 state。

def call_model(state: AgentState):
    response = model.invoke(state["messages"])
    return {"messages": [response]}

这个节点的输出决定了下一步走向:如果返回的消息包含 tool_calls,图会路由到 Tool Node;否则走向结束逻辑。

5. Tool Node(工具节点) 链接到标题

Tool Node 负责执行模型请求的工具调用。LangGraph 提供了 ToolNode(或 BasicToolNode),它会遍历 AIMessage 中的 tool_calls,逐个调用对应的工具,并把每个工具的执行结果包装成 ToolMessage 返回。

Tool Node 的输出会被并回 messages 列表,然后图通常会把控制权交还给 Model Node,形成 Model → Tool → Model → Tool → …→ End 的循环。

6. End Logic / Routing(结束/路由逻辑) 链接到标题

Agent 不能无限循环,需要判断何时终止。核心是 条件边(conditional edge)——在 Model Node 之后根据返回消息决定路由:

  • tool_calls → 进入 Tool Node,继续循环
  • 没有 tool_calls → 进入 END,结束执行

另外还可以加:

  • 递归上限recursion_limit):防止模型无限调用工具
  • 自定义终止条件:比如根据消息内容判断任务是否完成
  • Human-in-the-loop:关键操作前暂停等待人工确认

整体流程 链接到标题

用户输入 → Model Node → 有 tool_calls? 
                ↑              ├─ 是 → Tool Node → (循环回 Model Node)
                └──────────────┘
                └─ 否 → END → 输出最终回答

总结:State 承载上下文,Model 做决策,Tools 执行动作,Model Node 和 Tool Node 编排流程,路由逻辑控制循环与终止。 这六者的协作构成了一个完整的 Agent 运行闭环。