LangChain 中 Runnable、Chain、Agent 有什么区别?
🧑💻 面试官:你说项目用的是 LangChain。Runnable、Chain、Agent 分别是什么?
🙋♂️ 我:先别把它们当成三个平级、互斥的组件。Runnable 更像可调用、可组合的接口;Chain 常指把几个处理步骤按预设关系串起来;Agent 强调运行时由模型选择下一步或工具。
🧑💻 面试官:一个“检索资料→填提示词→调用模型”的流程,用哪个?
🙋♂️ 我:路径固定的话,用 Runnable 组合成一条链就够了,不必为了名字好听再套 Agent。
🧑💻 面试官:如果模型需要自己判断先搜索、再查数据库,或直接回答?
🙋♂️ 我:这才是 Agent 的动态决策场景。但它内部同样可能使用 Runnable 或其他可组合节点,区别不在于“用了哪个类名”,而在谁控制执行路径。
这道题先分清“接口抽象”和“运行方式”,再谈选型,概念就不会打架。
面试速答(60 秒版)
Runnable 是 LangChain 里可调用、可组合的一类抽象,通常能以统一方式执行、批处理或流式处理。把若干 Runnable 按确定顺序组合起来,就形成一条固定处理链;大家口中的 Chain 往往指这种预设步骤的流程,旧版本也有具体的 Chain 类。
Agent 则用于执行路径要在运行时决定的任务。模型根据当前信息选择调用哪个工具、是否继续或直接回答。它不是“比 Chain 更高级”的默认选项,而是用灵活性换来更多不确定性、成本和测试难度。
实际项目中,检索→组装提示→模型回答这类固定流程,我优先用 Runnable 组合。只有下一步工具和路径确实难以预设,才用 Agent,并给它轮次、权限和预算限制。
知识点详解:三个词处在不同层次

Runnable 说的是“怎样调用与组合”
一个提示模板、模型、输出处理步骤,都可以参与可组合的处理流程。Runnable 体系提供共同的调用方式,使步骤之间容易串接、并行或包装。它主要回答“这块能力怎样接到另一块能力上”。
因此“项目用了 Runnable”并不能说明执行路径是固定还是动态。就像说用了函数接口,并不能说明整个程序有没有循环或条件判断。
Chain 说的是“步骤关系已经安排好”
例如先用用户问题检索知识库,把结果填入提示词,然后调用模型并解析输出。每一步可能处理不同数据,但主要路径由开发者预先确定。这样的链容易测试:固定输入后,可以逐步检查检索、提示词和输出。
“Chain”在 LangChain 不同版本里既可能是具体类名,也可能是对组合流程的泛称。面试时最好说清你指的是哪一层,不要把旧版 API 名称当作当前唯一写法。
Agent 说的是“下一步由模型参与决定”
假设用户说“排查昨天退款失败的原因”。模型可能先查日志,再查订单状态;如果日志已经足够,也可能提前回答。每一轮看到的工具结果会改变下一轮动作。这个运行方式更接近 Agent。
它仍需要应用规定权限、最大轮次、停止条件和危险动作审批。所谓动态,不是让模型无边界地调用一切工具。选型时先问能否把路径写清楚:能写清楚,就用简单的固定组合;写不清楚且动态判断有明确价值,再考虑 Agent。
面试官继续追问
RunnableSequence 就等于 Agent 吗?
不等于。RunnableSequence 是按顺序组合可调用步骤;Agent 的关键是运行时的决策与工具反馈循环。
Chain 中间调用了大模型,为什么还不一定是 Agent?
因为模型可能只负责生成或分类,下一步流程仍由代码提前安排。是否调用大模型不是划分标准。
用 Agent 后就不用 Runnable 了吗?
不是。两者不互斥;Agent 内部的模型、提示或工具包装仍可以采用可组合抽象。
面试速记卡
- Runnable:统一调用与组合能力的抽象。
- Chain:通常指预设主要步骤的组合流程。
- Agent:运行时由模型结合状态决定下一步。
- 注意:旧式 Chain 类与当前版本的泛称别混用。
- 选型:固定路径先用组合,开放决策才用 Agent。
