理念
返回LangChain 由几个核心信念驱动:
- 大型语言模型(LLM)是一项伟大的新技术。
- 当 LLM 与外部数据源结合时,它们会更加强大。
- LLM 将改变未来应用的面貌。具体来说,未来的应用将越来越具有 agent 特性。
- 这种转变仍处于非常早期的阶段。
- 虽然构建这些 agent 应用的原型很容易,但构建足够可靠以投入生产的 agent 仍然非常困难。
在 LangChain 中,我们有两个核心关注点:
历史
鉴于该领域不断变化,LangChain 也随着时间的推移而发展。以下是 LangChain 多年来如何变化的简要时间线,与使用 LLM 进行构建的含义一起演进:
- LLM 抽象
- "Chains",或为常见用例运行的预定计算步骤。例如 - RAG:运行检索步骤,然后运行生成步骤。
名称 LangChain 来自 "Language"(如语言模型)和 "Chains"。
这些通用 agent 基于 [ReAct 论文](https://arxiv.org/abs/2210.03629)(ReAct 代表 Reasoning 和 Acting)。它们使用 LLM 生成表示工具调用的 JSON,然后解析该 JSON 以确定调用哪些工具。
此前,模型接收字符串并返回字符串。在 ChatCompletions API 中,它们演变为接收消息列表并返回消息。其他模型提供商也纷纷效仿,LangChain 更新为与消息列表一起工作。
LLM 和 agent 将改变应用的构建方式,而 JavaScript 是应用开发者的语言。
主要目标是 "让智能 agent 无处不在"。团队认识到,虽然 LangChain 是关键部分(LangChain 使开始使用 LLM 变得简单),但也需要其他组件。
这允许 API 显式生成表示工具调用的 payload。其他模型提供商也纷纷效仿,LangChain 更新为使用此方法作为工具调用的首选方法(而不是解析 JSON)。
构建 agent 的主要问题是如何让它们变得可靠,而 LangSmith(提供可观测性和评估)就是为了解决这一需求而构建的。LangChain 已更新为与 LangSmith 无缝集成。
行业从原型走向生产,因此,LangChain 增加了对稳定性的关注。
原始 LangChain 有两个关注点:LLM 抽象和用于开始常见应用的高级接口;然而,它缺少一个低级编排层,让开发者控制 agent 的确切流程。于是:LangGraph 诞生了。
在构建 LangGraph 时,我们从构建 LangChain 的经验中吸取了教训,并添加了我们发现需要的功能:流式传输、持久执行、短期记忆、人在回路(human-in-the-loop)等。
:::python
集成从核心 LangChain 包中分离出来,要么移动到独立的包中(对于核心集成),要么移动到 `langchain-community`。
:::
:::js
集成从核心 LangChain 包中分离出来,要么移动到独立的包中(对于核心集成),要么移动到 `@langchain/community`。
:::
随着开发者试图提高应用的可靠性,他们需要比高级接口提供的更多控制。LangGraph 提供了这种低级灵活性。LangChain 中的大多数 chains 和 agent 都被标记为弃用,并提供了如何迁移到 LangGraph 的指南。LangGraph 中仍然创建了一个高级抽象:一个 agent 抽象。它构建在低级 LangGraph 之上,具有与 LangChain 中的 ReAct agent 相同的接口。
:::python
模型开始接受文件、图像、视频等。我们相应地更新了 `langchain-core` 消息格式,使开发者能够以标准方式指定这些多模态输入。
:::
:::js
模型开始接受文件、图像、视频等。我们相应地更新了 `@langchain/core` 消息格式,使开发者能够以标准方式指定这些多模态输入。
:::
1. 完全重构 `langchain` 中的所有 chains 和 agent。所有 chains 和 agent 现在仅替换为一个高级抽象:一个构建在 LangGraph 之上的 agent 抽象。这是最初在 LangGraph 中创建的高级抽象,只是迁移到了 LangChain。
:::python
对于仍在使用旧版 LangChain chains/agents 且不想升级的用户(注意:我们建议你升级),你可以通过安装 `langchain-classic` 包继续使用旧版 LangChain。
:::
:::js
对于仍在使用旧版 LangChain chains/agents 且不想升级的用户(注意:我们建议你升级),你可以通过安装 `@langchain/classic` 包继续使用旧版 LangChain。
:::
2. 标准消息内容格式:模型 API 从返回具有简单内容字符串的消息演变为更复杂的输出类型——推理块、引用、服务器端工具调用等。LangChain 演进了其消息格式以跨提供商标准化这些内容。