LangChain-Core、LangChain-Community、LangChain-Experimental核心组件详解与示例
一、LangChain-Core
作用:
作为LangChain框架的底层核心库,提供基础抽象接口、可观察性工具和组件组合逻辑(如LCEL表达式语言),是构建语言模型应用的基石。其设计目标是保持轻量级依赖,同时通过标准化的接口实现跨模型和工具的兼容性。
组成:
- Runnable协议:定义了所有可运行组件(如模型、链、工具)的输入/输出规范,支持链式组合。
- LCEL(LangChain表达式语言) :声明式语法,允许通过管道符
|
串联组件(如prompt | model | output_parser
)。 - 基础抽象接口:
BaseChatModel
(聊天模型接口)BaseRetriever
(检索器接口)BaseMemory
(记忆模块接口)
- 可观察性工具:集成LangSmith的跟踪和日志功能。
代码示例:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI # 需安装langchain-openai
# 定义LCEL链式流程
prompt = ChatPromptTemplate.from_template("用一句话解释{term}的概念")
model = ChatOpenAI(model="gpt-4")
chain = prompt | model | StrOutputParser()
# 调用链
response = chain.invoke({"term": "量子计算"})
print(response) # 输出量子计算的简明解释
说明:此示例展示了LCEL的声明式组合,通过|
运算符串联提示模板、模型和输出解析器。
二、LangChain-Community
作用:
提供第三方集成的模块化仓库,涵盖大模型服务(如通义千问)、向量数据库(如Pinecone)、工具接口(如Google Search API)等,由社区维护并保持可选依赖。
组成:
- 模型集成:
- 开源模型(Llama、GLM)
- 云服务模型(OpenAI、Anthropic、通义千问等)
- 数据连接器:
- 文档加载器(PDF、数据库、网页爬虫)
- 向量存储适配器(FAISS、Elasticsearch)
- 工具扩展:
- 外部API(天气查询、股票数据)
- 本地工具(Shell命令执行)
代码示例:
from langchain_community.llms import Tongyi # 通义千问集成
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import HuggingFaceEmbeddings
# 使用社区版通义千问模型
llm = Tongyi(model_name="qwen-plus", temperature=0.5)
response = llm.invoke("如何用Python实现快速排序?")
print(response)
# 构建FAISS向量库
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")
documents = ["LangChain是一个LLM应用框架", "FAISS是高效的向量检索库"]
vector_db = FAISS.from_texts(documents, embeddings)
result = vector_db.similarity_search("框架", k=1)
print(result[0].page_content) # 输出匹配的文档内容
三、LangChain-Experimental
作用:
包含实验性功能和高风险组件,例如需要高权限访问的代理、未经验证的算法或前沿技术(如新型推理策略)。这些功能可能不稳定,适用于技术探索场景。
组成:
- 高级代理:
- 自主决策的多步骤Agent(如GitHub代码修改代理)
- 需要系统级权限的工具(如文件系统操作)
- 新型链结构:
- 基于强化学习的动态链调整
- 多模型协作链(如LLM+DALL·E联合生成)
- 前沿算法:
- 基于知识图谱的推理引擎
- 分布式任务分发机制
代码示例:
from langchain_experimental.agents import AutoDebuggerAgent
from langchain_experimental.tools import SystemShellTool
# 创建具有Shell访问权限的实验性代理
tools = [SystemShellTool()]
agent = AutoDebuggerAgent.from_llm_and_tools(
llm=ChatOpenAI(temperature=0),
tools=tools,
verbose=True
)
# 执行复杂任务(需谨慎!)
response = agent.run("分析当前目录下的app.log文件,找出错误并修复")
print(response) # 可能执行Shell命令修改文件
警告:此类代理可能执行高风险操作,建议在沙箱环境中使用。
三模块协作关系
模块 | 定位 | 典型使用场景 | 稳定性 |
---|---|---|---|
LangChain-Core | 基础设施层 | 定义接口、构建标准化流程 | 高 |
LangChain-Community | 生态扩展层 | 集成第三方服务 | 中 |
LangChain-Experimental | 创新试验田 | 技术预研、高风险功能开发 | 低 |
总结
- Core是地基:通过LCEL和标准化接口实现组件解耦,如
Runnable
协议允许任意组件自由组合。 - Community是生态:通过模块化设计降低依赖冲突,例如仅安装
langchain-openai
即可使用GPT模型。 - Experimental是实验室:为框架注入创新活力,但需谨慎用于生产环境。
开发者应根据需求合理选择模块:核心业务逻辑使用Core,快速接入外部服务使用Community,前沿技术预研使用Experimental。