《AI大模型应知应会100篇》第56篇:LangChain快速入门与应用示例
第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 的大门!如果你有任何问题或想法,欢迎在评论区留言交流!
相关文章:
《AI大模型应知应会100篇》第56篇:LangChain快速入门与应用示例
第56篇:LangChain快速入门与应用示例 前言 最近最火的肯定非Manus和OpenManus莫属,因为与传统AI工具仅提供信息不同,Manus能完成端到端的任务闭环。例如用户发送“筛选本月抖音爆款视频”,它会自动完成: 爬取平台数据…...
vue-office 支持预览多种文件(docx、excel、pdf、pptx)预览的vue组件库
官网地址:https://github.com/501351981/vue-office 支持多种文件(docx、excel、pdf、pptx)预览的vue组件库,支持vue2/3。也支持非Vue框架的预览。 1.在线预览word文件(以及本地上传预览) 1.1:下载组件库 npm inst…...
Java 大视界 -- Java 大数据在智能农业无人机植保作业路径规划与药效评估中的应用(165)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
哈希表系列一>两数之和
目录 题目:方法:暴力代码:优化后代码: 题目: 链接: link 方法: 暴力代码: public int[] twoSum(int[] nums, int target) {解法一:暴力解法:int n nums.length;for(int…...
【SPP】深入解析蓝牙 L2CAP 协议在SPP中的互操作性要求
在蓝牙协议体系中,L2CAP(Logical Link Control and Adaptation Protocol)作为基带协议与高层协议之间的桥梁,承担着数据分帧、协议复用、QoS协商等核心功能。当涉及串行端口通信时,L2CAP的规范实现直接决定了设备间数据传输的可靠性、效率及兼容性。本文基于《Serial Port…...
CAD插件实现:自动递增编号(前缀、后缀、位数等)——CADc#实现
cad中大量输入一定格式的递增编号时,可用插件实现,效果如下: ①本插件可指定数字位数、起始号码、加前缀、后缀、文字颜色等(字体样式和文字所在图层为cad当前图层和当前字体样式)。 ②插件采用Jig方式,即…...
Spring | Spring、Spring MVC 和 Spring Boot 的区别
关注:CodingTechWork 引言 在 Java 开发领域,Spring、Spring MVC 和 Spring Boot 是三个经常被提及的概念。它们之间既有联系又有区别,对于初学者来说可能会感到困惑。本文将详细介绍它们的区别,并通过示例代码帮助读者更好地理解…...
观察者模式在Java微服务间的使用
一.、使用RabbitMQ来实现 (1) 生产者(订单微服务) import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service;Service public class OrderService {private final RabbitTemplate rabbitTemplate;…...
C语言--回文字符串
输入:字符串,判断是否是回文字符串,例如abcba输出Yes 输出:是否 代码 思路:使用两个指针分别指向头和尾,依次对比第一个元素和最后一个元素,第二个和倒数第二个元素,如果遇到不相同…...
【云计算物理网络】数据中心网络架构设计
云计算的物理基础:数据中心网络架构设计 一、技术背景:从“三层架构”到“云原生网络”二、技术特点:云数据中心网络的四大支柱三、技术细节:CLOS架构的实现挑战四、未来方向:从“连接设备”到“感知服务”结语&#x…...
Coco-AI 支持嵌入,让你的网站拥有 AI 搜索力
在之前的实践中,我们已经成功地把 Hexo、Hugo 等静态博客和 Coco-AI 检索系统打通了:只要完成向量化索引,就可以通过客户端问答界面实现基于内容的智能检索。 这一层已经很好用了,但总觉得少了点什么—— 比如用户还得专门打开一…...
批处理脚本的主要解析规则
批处理脚本的主要解析规则 批处理脚本(Batch files)有一套独特的解析规则,这些规则在很多情况下不太直观,但了解它们对于编写可靠的脚本至关重要。以下是最重要的一些规则: 1. 变量扩展规则 标准变量扩展 (%变量%) 解析时扩展:…...
TRDI 公司的RiverPro 和 RioPro ADCP 用户指南
TRDI 公司 RiverPro 和 RioPro ADCP 用户指南 简介第一章 - 概述第二章 - 安装第三章 - 采集数据第四章 - 维护第五章 - 测试RIVERPRO/RIOPRO第六章 - 故障排除第七章 - 将系统返回TRDI进行维修第八章 - 规格第九章 - 命令第十章 - 输出数据格式附录A-合规通知首次完整翻译《Ri…...
Linux 基础入门操作 前言 linux操作指令介绍
1 linux 目录介绍 Linux 文件系统采用层次化的目录结构,所有目录都从根目录 / 开始 1.1 核心目录 / (根目录) 整个文件系统的起点、包含所有其他目录和文件 /bin (基本命令二进制文件) 存放系统最基本的shell命令:如 ls, cp, mv, rm, cat 等&#…...
【总结】SQL注入防护手段
1、对提交的数据进行数据类型判断,比如id值必须是数字:is_numeric($id) 2、对提交的数据进行正则匹配,禁止出现注入语句,比如union、or、and等 3、对提交数据进行特殊符号转义,比如单引号、双引…...
OpenCV 图形API(11)对图像进行掩码操作的函数mask()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 描述 对矩阵应用掩码。 该函数mask设置来自给定矩阵的值,如果掩码矩阵中对应的像素值设为true,否则将矩阵的值设为0。 支持的源矩阵…...
使用C#写的一个Kafka的使用工具
由于offset不支持通过界面推送数据,所以我写了一个kafka的连接工具,能够直接从界面推送数据,方便使用。由于使用的是C#写的,所以比offset要流畅的多。 1、数据源连接 2、获取集群的topic 3、点击获取数据能够获取最新的100条数…...
【通知】STM32MP157驱动开发课程全新升级!零基础入门嵌入式Linux驱动,掌握底层开发核心技能!
在嵌入式Linux系统开发中,驱动程序开发是一项关键技术,它作为硬件与软件之间的桥梁,实现了操作系统对硬件设备的控制。相较于嵌入式Linux应用开发,驱动开发由于涉及底层硬件且抽象程度较高,往往让初学者感到难度较大。…...
MCP协议java开发的servers,已开源
访问地址: mcp-server-java 已实现的filesystem提高性能和效率,比Python的操作更顺畅。java实现,让部署更容易。...
飞浆PaddlePaddle 猫狗数据大战
猫狗数据大战 1 数据集的准备以及处理操作1.1 数据集1.2 文件解压操作(python) 1.3 数据的分类1.4 创建训练集和测试集 2 网络构建CNN版本--DeepID 人脸识别网络结构DeepID 与 CNN 网络结构的差异 3 深度学习模型训练和推理的核心设置4 制图5 训练6 预测…...
嵌入式硬件篇---JSON通信以及解析
文章目录 前言一、JSON特点语法简单数据格式灵活轻量化跨语言使用二、JSON数据结构对象数组三、JSON在单片机之间通信的应用数据封装与传输四、JSON示例代码五、JSON在上位机与单片机之间通信的应用数据交互六、JSON示例代码七、JSON解析与生成解析生成八、Python中的数据解析1…...
递归典例---汉诺塔
https://ybt.ssoier.cn/problem_show.php?pid1205 #include<bits/stdc.h> #define endl \n #define pii pair<int,int>using namespace std; using ll long long;void move(int n,char a,char b,char c) // n 个盘子,通过 b,从 a 移动到 …...
使用高德api实现天气查询
创建应用获取 Key 天气查询-基础 API 文档-开发指南-Web服务 API | 高德地图API 代码编写 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…...
蓝桥云客-修建灌木
1.修剪灌木 - 蓝桥云课 修剪灌木 问题描述 爱丽丝要完成一项修剪灌木的工作。 有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为0厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。当修剪…...
OpenCV 图形API(7)用于将笛卡尔坐标(x, y)转换为极坐标(magnitude, angle)函数cartToPolar()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算二维向量的大小和角度。 cartToPolar 函数计算每个二维向量 (x(I), y(I)) 的大小、角度,或同时计算两者: magnitude…...
Could not find artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0 in central
具体错误 [ERROR] Failed to execute goal on project datalink-resource: Could not resolve dependencies for project com.leon.datalink:datalink-resource:jar:1.0.0: Could not find artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0 in central (https://repo.maven…...
Express学习笔记(三)——使用 Express 写接口
目录 1. 创建基本的服务器 2. 创建 API 路由模块 3. 编写 GET 接口 4. 编写 POST 接口 5. CORS 跨域资源共享 5.1 接口的跨域问题 5.2 使用 cors 中间件解决跨域问题 5.3 什么是 CORS 5.4 CORS 的注意事项 5.5 CORS 响应头部 - Access-Control-Allow-Origin 5.6 COR…...
透视飞鹤2024财报:如何打赢奶粉罐里的科技战?
去年乳制品行业压力还是不小的,尼尔森IQ指出2024年国内乳品市场仍处在收缩区间。但是,总有龙头能抗住压力,飞鹤最近交出的2024财报中就有很多亮点。 比如,2024年飞鹤营收207.5亿元、同比增长6%,净利润36.5亿元&#x…...
【HarmonyOS Next之旅】DevEco Studio使用指南(十)
目录 1 -> Optimize Imports功能 2 -> 父/子类快速跳转 3 -> 查看接口/类的层次结构 4 -> 代码自动补全 1 -> Optimize Imports功能 使用编辑器提供的Optimize Imports,可以快速清除未使用的import,并根据设置的规则对import进行合并…...
数据框的添加
在地图制图中,地图全图显示的同时希望也能够显示局部放大图,以方便查看地物空间位置的同时,也能查看地物具体的相对位置。例如,在一个名为airport的数据集全图制图过程中,希望能附上机场区域范围的局部地图,…...
