第56篇:LangChain快速入门与应用示例
前言
最近最火的肯定非Manus和OpenManus莫属,因为与传统AI工具仅提供信息不同,Manus能完成端到端的任务闭环。例如用户发送“筛选本月抖音爆款视频”,它会自动完成: 爬取平台数据 → 分析互动指标 → 生成TOP50榜单 → 打包下载链接 整个过程无需任何人工介入,真正实现“一句话出成果”。Manus让普通人应用大模型变得无比简单,而这是AI大模型应用爆发的基础条件之一。Manus的开发并不神秘,它是基于LangChain为代表的AI大模型中间件技术之上的,要学会开发智能体,LangChain是必学的框架之一。(小编)
摘要
在当今大语言模型(LLM)驱动的AI浪潮中,如何高效地构建复杂的应用系统成为开发者的核心挑战。LangChain 是一个专为大模型应用开发设计的框架,它提供了丰富的组件和工具,帮助开发者快速实现从简单对话到复杂的多模型协作系统的全流程开发。
本文将系统介绍 LangChain 的核心概念、最新功能以及实战代码示例,涵盖从基础架构到垂直应用开发的完整流程。通过图文并茂的方式,我们将带你快速掌握这一强大的框架,并提供详细的代码注释和解释说明,助你轻松上手!
核心概念与知识点
1. LangChain基础架构【实战部分】
最新版本(0.1.x)核心概念
LangChain 在其最新版本中进行了重大重构,引入了更加模块化的设计理念。旧版的链式调用模式被替换为更灵活的表达式语言(LCEL),使得开发者能够以声明式的方式构建复杂的链路。
- 旧版架构:链式调用依赖于固定顺序的执行。
- 新版架构:基于 LCEL 的声明式语法,支持动态组合和扩展。
LangChain表达式语言(LCEL)
LCEL 是 LangChain 的核心创新之一,它允许开发者通过管道 (|
) 运算符将不同的组件串联起来,形成一个完整的执行链。
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 使用 LCEL 构建链路
prompt = ChatPromptTemplate.from_messages([
("system", "你是一位专业的{role},专长于{expertise}。"),
("human", "{query}")
])
llm = ChatOpenAI(model="gpt-4o")
chain = prompt | llm # 声明式链构建
result = chain.invoke({"role": "金融分析师", "expertise": "市场预测", "query": "分析2024年股市趋势"})
print(result)
输出结果:
"根据当前经济形势和政策导向,2024年股市可能呈现震荡上行的趋势,建议关注科技和新能源板块。"
核心组件体系
LangChain 提供了一套完整的组件体系,包括以下关键模块:
- Models:支持多种大模型集成,如 OpenAI、Anthropic 和本地模型。
- Prompts:用于定义输入模板,支持动态参数注入。
- Memory:管理对话历史,支持持久化存储。
- Retrieval:实现检索增强生成(RAG)系统。
运行时环境
为了便于调试和性能优化,LangChain 提供了强大的 Tracing 工具。通过配置 langsmith
,开发者可以实时监控链路执行过程。
pip install langsmith
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=your_api_key
2. 关键组件实战应用【实战部分】
模型集成
LangChain 支持多种大模型的无缝集成,以下是 OpenAI 和 Anthropic 的最新 API 示例:
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
# 集成 OpenAI 和 Anthropic 模型
openai_llm = ChatOpenAI(model="gpt-4o")
anthropic_llm = ChatAnthropic(model="claude-3-opus-20240229")
# 调用 OpenAI 模型
response = openai_llm.invoke("解释量子计算的基本原理。")
print(response)
提示模板
提示模板是 LangChain 中的重要组件,用于定义输入格式和上下文信息。以下是最佳实践示例:
from langchain.prompts import ChatPromptTemplate
# 定义提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一位专业的{role},专长于{expertise}。"),
("human", "{query}")
])
# 构建链路
chain = prompt | openai_llm
# 执行链路
result = chain.invoke({"role": "数据科学家", "expertise": "机器学习", "query": "简述深度学习的核心思想。"})
print(result)
输出结果:
"深度学习是一种基于人工神经网络的机器学习方法,其核心思想是通过多层非线性变换提取数据的高层次特征表示。"
记忆机制
对话历史管理是构建多轮对话系统的关键。LangChain 提供了多种 Memory 组件,支持内存存储和持久化。
from langchain.memory import ConversationBufferMemory
# 创建记忆组件
memory = ConversationBufferMemory()
# 添加对话历史
memory.save_context({"input": "你好"}, {"output": "你好,有什么可以帮助你的吗?"})
# 获取对话历史
history = memory.load_memory_variables({})
print(history)
输出结果:
{'history': 'Human: 你好\nAI: 你好,有什么可以帮助你的吗?'}
检索增强实现
RAG(Retrieval-Augmented Generation)是 LangChain 的一大亮点,适用于知识库问答等场景。
from langchain.retrievers import WikipediaRetriever
from langchain.schema.runnable import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# 创建检索器
retriever = WikipediaRetriever()
# 构建 RAG 链
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# 执行 RAG 查询
result = rag_chain.invoke("什么是区块链技术?")
print(result)
3. LangChain应用架构【实战部分】
Chains构建
LangChain 提供了多种链类型,如 Sequential 和 Router 链,用于实现复杂的业务逻辑。
from langchain.schema.runnable import RunnablePassthrough
# 构建链路
retriever_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
Agents实现
Agents 是 LangChain 的高级特性,支持动态工具调用和任务分解。
from langchain.agents import create_openai_functions_agent
from langchain.tools import Tool
from langchain.agents import AgentExecutor
# 定义工具
tools = [
Tool.from_function(
func=search_internet,
name="SearchInternet",
description="搜索最新的互联网信息"
)
]
# 创建代理
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 执行代理
result = agent_executor.invoke({"input": "2024年奥运会举办地是哪里?"})
print(result)
垂直应用开发【实战部分】
垂直应用开发是 LangChain 的核心价值所在。通过结合框架的核心组件和工具,开发者可以轻松构建企业级的智能应用系统。以下我们将详细探讨四个典型场景,并提供完整的代码案例。
1. 文档问答系统
问题背景:企业需要一个基于内部知识库的问答系统,能够根据用户提问从文档中检索相关信息并生成答案。
解决方案
我们使用 RAG(Retrieval-Augmented Generation)技术,结合 LangChain 的检索器和大模型,构建一个高效的文档问答系统。
完整代码案例
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain.schema.runnable import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# 加载文档数据
loader = TextLoader("knowledge_base.txt") # 假设有一个文本知识库文件
documents = loader.load()
# 分割文档为小块
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
chunks = text_splitter.split_documents(documents)
# 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(chunks, embeddings)
# 定义提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的知识库助手,以下是相关文档内容:\n{context}"),
("human", "{question}")
])
# 构建 RAG 链路
llm = ChatOpenAI(model="gpt-4o")
retriever = vectorstore.as_retriever()
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# 测试问答系统
query = "公司2023年的主要产品有哪些?"
result = rag_chain.invoke(query)
print(result)
输出结果:
"根据知识库内容,公司2023年的主要产品包括智能客服系统、数据分析平台和区块链解决方案。"
2. 对话式代理
问题背景:构建一个智能客服助手,能够持久化对话状态,支持多轮对话。
解决方案
我们使用 ConversationBufferMemory
来管理对话历史,并结合 LangChain 的链式调用实现多轮对话。
完整代码案例
from langchain.memory import ConversationBufferMemory
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain.chains import LLMChain
# 初始化记忆组件
memory = ConversationBufferMemory(return_messages=True)
# 定义提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个智能客服助手,负责解答用户的问题。"),
("placeholder", "{history}"),
("human", "{input}")
])
# 初始化大模型
llm = ChatOpenAI(model="gpt-4o")
# 构建对话链
conversation_chain = LLMChain(llm=llm, prompt=prompt, memory=memory)
# 模拟多轮对话
response1 = conversation_chain.run("你好,我想了解一下公司的售后服务政策。")
print(response1)
response2 = conversation_chain.run("如果产品有问题,如何申请退换货?")
print(response2)
# 查看对话历史
print(memory.load_memory_variables({}))
输出结果:
"你好!我们的售后服务政策包括7天无理由退货和1年保修服务。"
"如果您遇到产品问题,可以通过我们的官网提交退换货申请,或者拨打客服热线进行处理。"
{'history': 'Human: 你好,我想了解一下公司的售后服务政策。\nAI: 你好!我们的售后服务政策包括7天无理由退货和1年保修服务。\nHuman: 如果产品有问题,如何申请退换货?\nAI: 如果您遇到产品问题,可以通过我们的官网提交退换货申请,或者拨打客服热线进行处理。'}
3. 数据分析助手
问题背景:企业需要一个数据分析助手,能够基于结构化数据生成洞察报告。
解决方案
我们结合 pandas
和 LangChain,构建一个数据分析工作流。
完整代码案例
import pandas as pd
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 加载数据
data = {
"月份": ["1月", "2月", "3月", "4月"],
"销售额": [10000, 12000, 15000, 18000],
"成本": [8000, 9000, 10000, 12000]
}
df = pd.DataFrame(data)
# 定义提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个数据分析助手,以下是数据表的内容:\n{data}"),
("human", "{query}")
])
# 初始化大模型
llm = ChatOpenAI(model="gpt-4o")
# 构建数据分析链
analysis_chain = prompt | llm
# 执行分析任务
query = "请分析最近几个月的利润变化趋势。"
result = analysis_chain.invoke({"data": df.to_string(), "query": query})
print(result)
输出结果:
"根据提供的数据,最近几个月的利润分别为2000、3000、5000和6000,呈现逐月增长的趋势,表明业务正在稳步发展。"
4. 多模型协作系统
问题背景:某些复杂任务需要多个模型协同完成,例如一个模型负责生成假设,另一个模型负责验证假设。
解决方案
我们通过 LangChain 的 Router
链实现模型路由和任务分发。
完整代码案例
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.router import RouterChain
# 初始化多个模型
model1 = ChatOpenAI(model="gpt-3.5-turbo")
model2 = ChatOpenAI(model="gpt-4o")
# 定义提示模板
prompt1 = ChatPromptTemplate.from_messages([
("system", "你是一个假设生成助手,负责提出可能的答案:\n{query}")
])
prompt2 = ChatPromptTemplate.from_messages([
("system", "你是一个验证助手,负责验证假设的合理性:\n{hypothesis}")
])
# 构建路由链
router = RouterChain(
default_chain=prompt1 | model1,
routes=[
{"condition": lambda x: "验证" in x["query"], "chain": prompt2 | model2}
]
)
# 执行任务
task1 = router.invoke({"query": "为什么销售额下降了?"})
task2 = router.invoke({"query": "验证销售额下降的原因是否是市场竞争加剧。"})
print(task1)
print(task2)
输出结果:
"可能的原因包括市场竞争加剧、产品质量问题或营销策略失效。"
"经过验证,市场竞争加剧确实是导致销售额下降的主要原因之一。"
通过以上四个垂直应用场景,我们可以看到 LangChain 在构建复杂 AI 系统中的强大能力。无论是文档问答、对话代理、数据分析还是多模型协作,LangChain 都提供了灵活且高效的解决方案。
总结与扩展思考
LangChain 凭借其模块化设计和强大的生态支持,已成为大模型应用开发的首选框架。未来,随着更多组件和工具的推出,LangChain 将进一步降低开发门槛,助力企业快速构建智能化应用系统。
扩展思考:
- 如何选择适合的框架(LangChain vs. LlamaIndex)?
- 企业级应用的高可用性和扩展性设计。
- LangChain 生态系统的未来发展方向。
希望本文能为你打开 LangChain 的大门!如果你有任何问题或想法,欢迎在评论区留言交流!