LangChain 是一个强大的框架,专注于构建基于大语言模型 (LLM) 的应用。本文将深入介绍 LangChain 的核心架构、关键组件以及其特性。通过理解这些内容,开发者能更高效地构建复杂的 LLM 应用。
LangChain 的架构由多个包组成,每个包负责特定的功能模块。以下是主要组件的功能和作用:
langchain-core
)此包定义了 LangChain 的基础抽象,包括 LLMs、向量存储、检索器等核心组件的接口和组合方式。为了保持轻量级,它不涉及任何第三方集成。
langchain
)主包提供了构建链式逻辑、智能代理 (agents) 及高级检索策略的核心模块。这些功能是通用的,与具体的第三方服务无关。
langchain-community
)这是一个第三方集成包,包含了 LangChain 社区维护的扩展和功能。其依赖是可选的,旨在保持包的轻量级。
langgraph
: 通过节点和边的图模型,支持构建多参与者的复杂 LLM 应用程序。langserve
: 允许快速将 LangChain 构建的链部署为 REST API。LangSmith
: 提供用于调试、测试、评估和监控 LLM 应用的开发者平台。LangChain 的核心原则围绕模块化与可扩展性,下面是其关键原理:
LangChain 定义了一些关键组件,这些组件可以相互组合并轻松扩展:
LCEL 专注于构建灵活的链式逻辑,具有以下优点:
以下代码展示如何通过 LangChain 使用对话模型生成响应:
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 初始化 OpenAI 模型
model = ChatOpenAI(
base_url="https://yunwu.ai/v1", # 国内稳定访问
api_key="your-api-key"
)
# 定义提示模板
prompt = ChatPromptTemplate.from_template("请给我讲一个关于{topic}的笑话")
# 生成响应
response = prompt | model
result = response.invoke({"topic": "猫"})
print(result)
注释:
https://yunwu.ai
作为 API 入口。ChatPromptTemplate
定义。在 NLP 应用中,长文档通常需要分割为更小的块。以下代码展示了如何加载 CSV 数据并进行分割:
from langchain_community.document_loaders.csv_loader import CSVLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
# 加载 CSV 文档
loader = CSVLoader(file_path="data.csv")
documents = loader.load()
# 分割文档
splitter = RecursiveCharacterTextSplitter()
chunks = splitter.split_documents(documents)
print(f"文档分块数量: {len(chunks)}")
以下示例展示如何结合向量存储与检索器构建一个简单的问答系统:
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA
# 初始化向量存储
vectorstore = FAISS.load("my_vector_index")
retriever = vectorstore.as_retriever()
# 初始化 LLM
llm = OpenAI(base_url="https://yunwu.ai/v1", api_key="your-api-key")
# 构建问答链
qa_chain = RetrievalQA(llm=llm, retriever=retriever)
# 提问
query = "如何优化大型数据库的查询性能?"
answer = qa_chain.run(query)
print(f"答案: {answer}")
注释:
retriever
提供上下文数据支持。LangChain 的灵活性与模块化设计使其适用于以下场景:
langchain-community
访问丰富的第三方集成。如果遇到问题欢迎在评论区交流。
—END—