langchain - AI应用开发框架,用于构建基于大语言模型的智能应用
如果你曾经尝试过用大语言模型开发应用,你一定遇到过这样的问题:如何让模型访问外部数据?如何管理多轮对话的记忆?如何让模型调用外部工具?这些看似基础的需求,如果用原始API实现,需要编写大量重复的代码。langchain正是为了解决这些问题而生的。它是目前最流行的大语言模型应用开发框架,通过提供一系列标准化的组件和抽象,让你可以用最少的代码构建功能强大的AI应用,从简单的问答系统到复杂的智能体应用,都能轻松实现。
项目基本信息
| 信息项 | 详情 |
|---|---|
| 项目名称 | langchain |
| GitHub地址 | https://github.com/langchain-ai/langchain |
| 项目描述 | The agent engineering platform |
| 作者 | langchain-ai |
| 开源协议 | MIT License |
| Stars | 131762 |
| Forks | 21717 |
| 支持平台 | Windows / macOS / Linux |
| 最后更新 | 2026-03-31 |
一、项目介绍
langchain是一个用于构建大语言模型应用的开源框架,由Harrison Chase于2022年创建,现已成为AI应用开发领域的事实标准。它的核心理念是“组合性”,将AI应用开发中的常见需求抽象成标准化的组件,然后像搭积木一样将它们组合起来,构建出复杂的应用。
langchain的架构围绕几个核心概念展开。首先是模型,它封装了各种大语言模型API,提供统一的调用接口,支持OpenAI、Anthropic、Hugging Face、Cohere等数十种模型。其次是提示词模板,它提供了一种灵活的方式来构建和管理与模型交互的提示词,支持变量替换、格式化等操作。第三是输出解析器,它可以将模型的非结构化输出解析成结构化数据,比如JSON、列表、日期等。第四是记忆组件,它提供了多种记忆管理策略,让模型能够记住对话历史。第五是检索器,它实现了RAG(检索增强生成)模式,让模型可以访问外部知识库。第六是工具和智能体,它让模型能够调用外部工具和API,实现自主决策和行动。
langchain的生态系统非常庞大,除了核心库,还有针对特定场景的扩展库,如langchain-community(社区贡献的集成)、langchain-experimental(实验性功能)、langgraph(基于图的工作流编排)等。同时,langchain还提供了完善的文档、教程和示例,大大降低了开发者的学习成本。
二、核心优势
开源免费
langchain采用MIT许可证,代码完全开放。用户可以自由使用、修改和分发,没有任何商业限制。庞大的开源社区持续贡献新的集成和功能,让框架保持活力。
社区支持
作为GitHub上最受欢迎的Python项目之一,langchain拥有极其活跃的社区。官方Discord服务器有数万名成员,GitHub Issues响应迅速,Stack Overflow上有大量问答。社区贡献了大量的集成、示例和最佳实践,是开发者的宝贵资源。
持续更新
从2026年3月31日的最后更新可以看出,langchain保持着高频的更新节奏。新的模型集成、功能增强、优化技术持续加入。项目团队紧跟大语言模型的发展,确保框架始终支持最新的模型和技术。
功能丰富
langchain的功能矩阵非常完整,覆盖了AI应用开发的方方面面:
- 模型集成:支持数十种LLM、聊天模型和嵌入模型
- 提示词管理:提示词模板、示例选择器、提示词优化
- 记忆系统:会话缓冲、向量存储记忆、实体记忆等多种策略
- 数据连接器:支持PDF、网页、数据库等数十种数据源
- 检索系统:向量检索、全文检索、混合检索
- 智能体框架:支持ReAct、Plan-and-Execute等多种智能体模式
- 工作流编排:支持链式调用、条件分支、循环等逻辑
三、适用场景
开发者学习和参考
对于希望学习AI应用开发的开发者,langchain是最好的入门工具。通过阅读官方文档和示例代码,可以系统学习RAG、智能体、提示词工程等核心概念。框架的模块化设计也让理解各个组件的作用变得容易。
个人项目使用和集成
如果你是独立开发者,想要快速构建AI应用,langchain是理想的选择。比如,你可以用langchain构建一个能够访问私有文档的问答系统,或者一个能够执行自动化任务的智能助手。通过丰富的组件库,原本需要数百行代码的功能,现在几十行就能完成。
企业级应用开发
对于需要构建生产级AI应用的企业,langchain提供了可靠的支撑。它的模块化设计让代码易于维护和扩展,丰富的监控和调试工具让生产环境的问题排查更加便捷。同时,langchain支持私有化部署,确保企业数据安全。
日常工作和效率提升
对于AI工程师,langchain是提升工作效率的利器。通过预定义的组件和链,可以快速搭建原型进行实验。LangSmith平台提供了实验跟踪、版本管理、性能评估等功能,让开发流程更加规范。
四、安装教程
系统要求
| 工具 | 用途 | 下载/安装方式 |
|---|---|---|
| Python | 运行环境 | [https://python.org/] (版本要求:3.8 或以上) |
| Git | 下载项目代码(可选) | [https://git-scm.com/] |
安装步骤
步骤一:创建虚拟环境(推荐)
# 创建虚拟环境
python -m venv langchain_env
# 激活虚拟环境(Windows)
langchain_env\Scripts\activate
# 激活虚拟环境(macOS/Linux)
source langchain_env/bin/activate步骤二:安装langchain
# 安装核心包
pip install langchain
# 根据需求安装额外组件
pip install langchain-openai # OpenAI集成
pip install langchain-community # 社区集成
pip install langchain-chroma # 向量数据库集成步骤三:验证安装
python -c "import langchain; print(langchain.__version__)"从源码安装(可选)
git clone https://github.com/langchain-ai/langchain.git
cd langchain
pip install -e .五、使用示例
示例一:基础对话
最简单的langchain应用——与模型对话:
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage
# 初始化模型
chat = ChatOpenAI(model="gpt-3.5-turbo")
# 发送消息
response = chat.invoke([
HumanMessage(content="解释一下什么是大语言模型")
])
print(response.content)示例二:提示词模板
使用提示词模板动态生成提示词:
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
# 定义提示词模板
template = ChatPromptTemplate.from_messages([
("system", "你是一个{role}专家,请用{style}的风格回答用户的问题"),
("user", "{question}")
])
# 创建模型
chat = ChatOpenAI(model="gpt-3.5-turbo")
# 构建链
chain = template | chat
# 执行
response = chain.invoke({
"role": "Python",
"style": "简洁",
"question": "如何读取CSV文件"
})
print(response.content)示例三:输出解析器
将模型输出解析为结构化数据:
from langchain_openai import ChatOpenAI
from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field
# 定义输出结构
class UserInfo(BaseModel):
name: str = Field(description="用户姓名")
age: int = Field(description="用户年龄")
city: str = Field(description="所在城市")
# 创建解析器
parser = PydanticOutputParser(pydantic_object=UserInfo)
# 构建提示词
prompt = PromptTemplate(
template="从以下文本中提取用户信息:\n{text}\n{format_instructions}",
input_variables=["text"],
partial_variables={"format_instructions": parser.get_format_instructions()}
)
# 创建模型和链
model = ChatOpenAI(model="gpt-3.5-turbo")
chain = prompt | model | parser
# 执行
result = chain.invoke({"text": "我叫张三,今年28岁,住在北京"})
print(result.name, result.age, result.city)示例四:RAG应用(检索增强生成)
构建能够访问私有文档的问答系统:
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA
# 1. 加载文档
loader = TextLoader("./documents.txt")
documents = loader.load()
# 2. 分割文档
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
texts = text_splitter.split_documents(documents)
# 3. 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)
# 4. 创建检索器
retriever = vectorstore.as_retriever()
# 5. 创建问答链
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-3.5-turbo"),
retriever=retriever
)
# 6. 提问
response = qa_chain.invoke("文档中关于XX的内容是什么?")
print(response)示例五:记忆管理
让模型记住对话历史:
from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
# 创建带记忆的对话链
memory = ConversationBufferMemory()
conversation = ConversationChain(
llm=ChatOpenAI(model="gpt-3.5-turbo"),
memory=memory
)
# 多轮对话
response1 = conversation.predict(input="我叫张三")
print(response1)
response2 = conversation.predict(input="我叫什么名字?")
print(response2) # 会记住用户叫张三示例六:构建智能体
让模型能够调用外部工具:
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from langchain.agents import create_react_agent, AgentExecutor
# 定义工具
@tool
def add_numbers(a: int, b: int) -> int:
"""两个数相加"""
return a + b
@tool
def get_weather(city: str) -> str:
"""获取城市天气"""
# 实际应用中这里调用天气API
return f"{city}的天气是晴天,25度"
# 创建智能体
tools = [add_numbers, get_weather]
model = ChatOpenAI(model="gpt-3.5-turbo")
agent = create_react_agent(
llm=model,
tools=tools,
prompt=prompt
)
executor = AgentExecutor(agent=agent, tools=tools)
# 执行任务
result = executor.invoke({
"input": "帮我计算15加27,然后查询北京的天气"
})
print(result)示例七:链式调用
将多个组件串联成工作流:
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain, SequentialChain
# 第一步:生成主题
topic_chain = LLMChain(
llm=ChatOpenAI(model="gpt-3.5-turbo"),
prompt=PromptTemplate(
input_variables=["subject"],
template="为{subject}写一个吸引人的标题"
),
output_key="title"
)
# 第二步:根据标题写文章
article_chain = LLMChain(
llm=ChatOpenAI(model="gpt-3.5-turbo"),
prompt=PromptTemplate(
input_variables=["title"],
template="根据标题{title},写一篇500字的文章"
),
output_key="article"
)
# 串联成顺序链
overall_chain = SequentialChain(
chains=[topic_chain, article_chain],
input_variables=["subject"],
output_variables=["title", "article"]
)
# 执行
result = overall_chain.invoke({"subject": "人工智能"})
print(f"标题: {result['title']}")
print(f"文章: {result['article']}")六、常见问题
问题一:API调用失败
原因:API密钥无效、余额不足或网络问题。
解决方案:
- 检查
OPENAI_API_KEY环境变量是否正确设置 - 确认API账户有足够余额
- 检查网络连接,确保能访问API服务
问题二:安装依赖冲突
原因:不同包之间的版本不兼容。
解决方案:
- 使用虚拟环境隔离依赖
- 安装特定版本:
pip install langchain==0.1.0 - 查看官方文档的版本兼容性说明
问题三:检索结果不相关
原因:文档分割策略不当或向量化效果差。
解决方案:
- 调整chunk_size和chunk_overlap参数
- 尝试不同的文本分割器
- 更换嵌入模型(如使用OpenAI的text-embedding-3-large)
- 添加元数据过滤条件
问题四:智能体执行失败
原因:工具描述不清晰或模型理解错误。
解决方案:
- 为工具提供更清晰的描述和参数说明
- 设置
max_iterations限制避免无限循环 - 使用
handle_parsing_errors=True处理解析错误 - 尝试使用更强大的模型(如GPT-4)
问题五:内存占用过高
原因:记忆组件存储了过多历史信息。
解决方案:
- 使用
ConversationBufferWindowMemory限制历史轮数 - 使用
ConversationSummaryMemory压缩历史信息 - 考虑使用向量存储管理长期记忆
七、总结
langchain是AI应用开发领域的里程碑项目。它用统一的抽象和标准化的组件,将大语言模型应用的开发复杂度降低了一个数量级。无论你是想快速搭建原型,还是构建生产级应用,langchain都能提供强大的支持。
与其他框架相比,langchain最大的优势在于其生态的完整性。从模型集成到数据连接,从提示词管理到工作流编排,从开发工具到生产监控,langchain提供了全栈式的解决方案。同时,活跃的社区和持续的更新保证了框架的长期生命力。
如果你正在从事AI应用开发,langchain值得深入学习。它不仅能够提升你的开发效率,更重要的是,它提供了一套成熟的架构模式,让你可以站在巨人的肩膀上,专注于业务逻辑的创新。在这个AI快速发展的时代,掌握langchain,就是掌握了构建智能应用的核心能力。
暂无评论