langchainlangchain-core 和 langchain-community 是 LangChain 项目为了更清晰的组织架构和依赖管理而拆分出的三个主要包。它们之间的协作关系可以用一个清晰的模型来理解。

核心概念比喻

你可以把它们想象成一个公司的结构:

  • langchain-core:基础架构部

    • 职责:定义公司的核心规章制度、通用接口(Interface)和基础工具。所有部门都必须遵守这些规则。

    • 具体来说:它包含了最核心的抽象基类(ABCs),如 BaseChatModelBaseRetrieverBaseToolRunnable interface 等。这些规定了“一个LLM应该有什么方法”、“一个检索器应该如何定义”,但不提供具体实现。

  • langchain:核心产品与集成部

    • 职责:使用core定义的规则,开发和维护官方支持的、高质量的核心组件和第三方集成(Integrations)。

    • 具体来说:它包含了基于core接口的具体实现,比如OpenAI、Anthropic的LLM封装,Chroma、Pinecone的向量存储检索器,以及各种链(Chains)、代理(Agents)的逻辑。这里的集成是经过LangChain团队精心维护和测试的。

  • langchain-community:社区与第三方生态部

    • 职责:容纳大量由社区贡献的、或来自第三方服务的集成和工具。这里的组件更多样化,但可能不如核心包里的那么稳定或及时更新。

    • 具体来说:它包含了无数个第三方模型的集成、不那么流行的向量数据库工具、各种小众的API工具等。它的存在是为了保持langchain核心包的轻量和稳定,同时又能拥抱庞大的社区生态。


三者如何协作

它们之间的依赖和协作关系如下图所示:

  1. langchain-core 是基石

    • langchain 和 langchain-community 都依赖于 langchain-core

    • 这意味着,无论你安装 langchain 还是 langchain-community,你都会自动安装 langchain-core

    • langchain 和 langchain-community 中的任何组件,只要是LLM、检索器、工具等,都必须实现 langchain-core 中定义的对应接口。

  2. langchain 是官方标准

    • 它直接依赖 langchain-core,并提供主要实现。

    • 它通常不依赖 langchain-community,以保证自身的简洁和稳定。

    • 当你 import langchain.llms import OpenAI 时,你使用的是核心包里的官方实现。

  3. langchain-community 是生态扩展

    • 它同样依赖 langchain-core(因为它要实现那些接口)。

    • 它内部的很多组件在运行时可能需要 langchain 中的一些辅助工具或工具类,因此它对 langchain 是可选依赖(optional dependency)。这意味着,如果你想使用 langchain-community 里的某个特定工具,你可能需要额外安装对应的依赖(如 langchain 本身或其他包)。


实际应用中的导入示例

假设你想使用 OpenAI 的模型,你有两种方式,这体现了包的分层:

1. 使用官方维护的核心包实现(推荐)

# 从核心包 langchain 中导入
from langchain_openai import ChatOpenAI # 这是最新的命名,旧版是 from langchain.chat_models import ChatOpenAI
from langchain_core.messages import HumanMessage

llm = ChatOpenAI(model_name="gpt-4")
message = [HumanMessage(content="Hello")]
response = llm.invoke(message)
  • 这里 ChatOpenAI 是 langchain 核心包提供的,它实现了 langchain_core.language_models.BaseChatModel 这个接口。

2. 使用社区包中的实现(通常不需要,除非核心包没有)

# 从社区包 langchain_community 中导入(理论上存在,但通常不会这么做)
# from langchain_community.llms import OpenAI  # 这是一个旧版示例,现在官方推荐用上面的方式

# 更常见的例子是使用一个非常小众的模型
# from langchain_community.llms import Petals
  • 对于OpenAI这种主流服务,你绝对应该使用 langchain 中的版本。社区包通常用于存放那些还未被核心包收录或不够主流的小众集成。

总结与建议

特性 langchain-core langchain langchain-community
内容 接口、抽象基类、基础协议 官方、高质量的集成和组件 社区贡献、第三方集成
稳定性 (变更会破坏所有其他包) 中/低(可能频繁变动)
依赖关系 无依赖(或极少依赖) 依赖 langchain-core 依赖 langchain-core,可选依赖 langchain
用户使用频率 较少直接导入 (主要导入来源) 按需导入(用于特定工具)

给开发者的建议:

  • 大多数情况下,你只需要安装和导入 langchain 中的组件(例如 from langchain_community.chat_models import ChatOpenAI 现在趋向于 from langchain_openai import ChatOpenAI)。它会帮你处理好一切。

  • 当你需要一个非常小众的、核心包没有的工具体(比如一个特殊的PDF解析器或一个冷门模型的API),才去 langchain-community 里寻找。

  • 当你需要自定义一个组件(例如自己实现一个检索器)时,你需要从 langchain-core 导入对应的抽象基类并继承它,以确保你的自定义组件可以和整个LangChain生态系统无缝协作。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐