《AI大模型应知应会100篇》第56篇:LangChain快速入门与应用示例

news2025/4/10 9:13:00

第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 提供了一套完整的组件体系,包括以下关键模块:

  1. Models:支持多种大模型集成,如 OpenAI、Anthropic 和本地模型。
  2. Prompts:用于定义输入模板,支持动态参数注入。
  3. Memory:管理对话历史,支持持久化存储。
  4. 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 将进一步降低开发门槛,助力企业快速构建智能化应用系统。

扩展思考

  1. 如何选择适合的框架(LangChain vs. LlamaIndex)?
  2. 企业级应用的高可用性和扩展性设计。
  3. LangChain 生态系统的未来发展方向。

希望本文能为你打开 LangChain 的大门!如果你有任何问题或想法,欢迎在评论区留言交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 大视界 -- Java 大数据在智能农业无人机植保作业路径规划与药效评估中的应用(165)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

哈希表系列一>两数之和

目录 题目:方法:暴力代码:优化后代码: 题目: 链接: link 方法: 暴力代码: public int[] twoSum(int[] nums, int target) {解法一:暴力解法:int n nums.length;for(int…

CAD插件实现:自动递增编号(前缀、后缀、位数等)——CADc#实现

cad中大量输入一定格式的递增编号时,可用插件实现,效果如下: ①本插件可指定数字位数、起始号码、加前缀、后缀、文字颜色等(字体样式和文字所在图层为cad当前图层和当前字体样式)。 ②插件采用Jig方式,即…

C语言--回文字符串

输入:字符串,判断是否是回文字符串,例如abcba输出Yes 输出:是否 代码 思路:使用两个指针分别指向头和尾,依次对比第一个元素和最后一个元素,第二个和倒数第二个元素,如果遇到不相同…

Coco-AI 支持嵌入,让你的网站拥有 AI 搜索力

在之前的实践中,我们已经成功地把 Hexo、Hugo 等静态博客和 Coco-AI 检索系统打通了:只要完成向量化索引,就可以通过客户端问答界面实现基于内容的智能检索。 这一层已经很好用了,但总觉得少了点什么—— 比如用户还得专门打开一…

TRDI 公司的RiverPro 和 RioPro ADCP 用户指南

TRDI 公司 RiverPro 和 RioPro ADCP 用户指南 简介第一章 - 概述第二章 - 安装第三章 - 采集数据第四章 - 维护第五章 - 测试RIVERPRO/RIOPRO第六章 - 故障排除第七章 - 将系统返回TRDI进行维修第八章 - 规格第九章 - 命令第十章 - 输出数据格式附录A-合规通知首次完整翻译《Ri…

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应用开发,驱动开发由于涉及底层硬件且抽象程度较高,往往让初学者感到难度较大。…

飞浆PaddlePaddle 猫狗数据大战

猫狗数据大战 1 数据集的准备以及处理操作1.1 数据集1.2 文件解压操作(python) 1.3 数据的分类1.4 创建训练集和测试集 2 网络构建CNN版本--DeepID 人脸识别网络结构DeepID 与 CNN 网络结构的差异 3 深度学习模型训练和推理的核心设置4 制图5 训练6 预测…

使用高德api实现天气查询

创建应用获取 Key 天气查询-基础 API 文档-开发指南-Web服务 API | 高德地图API 代码编写 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

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…

【HarmonyOS Next之旅】DevEco Studio使用指南(十)

目录 1 -> Optimize Imports功能 2 -> 父/子类快速跳转 3 -> 查看接口/类的层次结构 4 -> 代码自动补全 1 -> Optimize Imports功能 使用编辑器提供的Optimize Imports&#xff0c;可以快速清除未使用的import&#xff0c;并根据设置的规则对import进行合并…

java并发编程-并发容器

并发容器 CopyOnWriteArrayListCopyOnWriteArraySetConcurrentHashMapConcurrentSkipListMap迭代器的fail-fast与fail-safe机制应用场景 CopyOnWriteArrayList 线程不安全容器&#xff1a;ArrayList代替Vector、synchronizedList适用于读多写少的场景&#xff0c;对读操作不加…

PPT助手:一款集计时、远程控制与多屏切换于一身的PPT辅助工具

PPT助手&#xff1a;一款集计时、远程控制与多屏切换于一身的PPT辅助工具 &#x1f4dd;&#x1f3a4; 在现代化的演讲和演示中&#xff0c;如何高效地控制PPT进程、保证展示的流畅性与精准性&#xff0c;成为了每个演讲者必须面对的挑战。无论是商务汇报、学术演讲&#xff0…

大模型应用初学指南

随着人工智能技术的快速发展&#xff0c;检索增强生成&#xff08;RAG&#xff09;作为一种结合检索与生成的创新技术&#xff0c;正在重新定义信息检索的方式&#xff0c;RAG 的核心原理及其在实际应用中的挑战与解决方案&#xff0c;通用大模型在知识局限性、幻觉问题和数据安…

如何通过管理系统提升团队协作效率

在现代企业管理中&#xff0c;团队协作效率的高低直接关系到企业的竞争力和运营效率。随着信息技术的不断发展&#xff0c;管理系统作为提升团队协作效率的重要工具&#xff0c;逐渐受到企业的重视。本文将深入探讨如何通过管理系统提升团队协作效率&#xff0c;为企业提供实用…

云手机如何防止设备指纹被篡改

云手机如何防止设备指纹被篡改 云手机作为虚拟化设备&#xff0c;其设备指纹的防篡改能力直接关系到账户安全、反欺诈和隐私保护。以下以亚矩阵云手机为例&#xff0c;讲解云手机防止设备指纹被篡改的核心技术及实现方式&#xff1a; 系统层加固&#xff1a;硬件级安全防护 1…

XT1870 同步升压 DC-DC 变换器

1、 产品概述 XT1870 系列产品是一款低功耗、高效率、低纹波、工 作频率高的 PFM 控制升压 DC-DC 变换器。 XT1870 系列产品仅需要 3 个外部元器 , 即可完成低输 入的电池电压输入。 2、用途 数码相机、电子词典 LED 手电筒、 LED 灯 血压计、MP3 、遥控玩具 …