第1课、LangChain 介绍

LangChain 介绍

LangChain 是一个以大语言模型(LLM, Large Language Model)为核心的开发框架,旨在帮助开发者高效地将如 GPT-4 等大型语言模型与外部数据源和计算资源集成,构建智能化应用。

1.1 工作原理

如上图所示,LangChain 通过三个核心组件提升了大型语言模型(LLMs)的能力:

  • Components(组件):为 LLMs 提供接口封装、提示模板和信息检索索引。
  • Chains(链):将不同组件组合,解决复杂任务,如在大规模文本中检索和处理信息。
  • Agents(代理):使 LLMs 能与外部环境交互,例如通过 API 请求执行操作。

1.2 主要特性

  • 支持多种数据源接入,如网页、PDF 文件、向量数据库等。
  • 允许语言模型与外部环境实时交互。
  • 封装了 Model I/O(输入/输出)、Retrieval(检索)、Memory(记忆)、Agents(决策与调度)等核心模块。
  • 通过链式结构灵活组装各组件,满足多样化应用需求。

1.3 核心概念

LangChain 由以下核心概念构成:

  • LLM Wrappers:对接主流大语言模型(如 GPT-4、Hugging Face 等)。
  • Prompt Templates:支持动态变量插入,提升 Prompt 工程灵活性。
  • Indexes:高效索引与检索大规模文本或数据库中的相关信息。
  • Chains:将多个组件串联,完成多步推理与复杂任务。
  • Agents:赋予模型自主决策能力,可调用外部工具或 API。

上图展示了一个复杂的自然语言处理系统,包括模型、提示、链、代理以及嵌入与向量存储:

  • Models(模型):负责理解和生成自然语言。
  • Prompts(提示):引导模型输出期望结果。
  • Chains(链):将多个步骤串联,完成复杂任务。
  • Agents(代理):实现模型与外部环境的动态交互,如 API 调用。
  • Embedding & VectorStore(嵌入与向量存储):用于数据表示和高效检索,为模型提供语义理解基础。

1.4 工作流程

LangChain 的典型工作流程如下:

  • 用户提出问题。
  • 问题被向量化,用于在向量数据库中进行相似性检索。
  • 检索到的相关信息与原始问题一同输入语言模型。
  • 语言模型基于上下文生成答案或执行操作。

1.5 应用场景

LangChain 的应用场景涵盖但不限于:

  • 智能个人助手:如自动预订、转账、缴税等。
  • 数据分析与数据科学:连接企业内部或外部数据源,提升数据分析效率。
  • 数据连接:将 LLM 与数据库、PDF、文档等私有数据源集成,实现专属知识检索。
  • 自动化行动执行:不仅能检索信息,还可根据检索结果自动执行操作(如发送邮件),无需硬编码。

LangChain 为 AI 应用开发带来了高度的灵活性和扩展性,使机器学习系统能够更好地贴合实际业务需求,推动智能应用的多样化和个性化发展。


LangChain 简介

LangChain 是一个以大语言模型(LLM)为核心的开发框架,旨在让开发者能够更方便地将如 GPT-4 这样的模型与外部数据源和计算资源结合起来。框架目前支持 Python 和 JavaScript(TypeScript)两大主流开发语言,极大地降低了 LLM 应用开发的门槛。


版本介绍

LangChain 目前主要有两个官方维护的版本,分别面向 Python 和 JavaScript/TypeScript 生态:

  • LangChain (Python)

  • 适用于数据科学、AI 应用、后端开发等场景。

  • 社区活跃,文档与案例丰富。

  • 支持主流 LLM(如 OpenAI、Anthropic、HuggingFace)、多种向量数据库(如 FAISS、Chroma、Weaviate),工具链和插件生态完善。

  • PyPI 包名:langchain

  • LangChain.js (JavaScript/TypeScript)

  • 适用于前端、全栈、Node.js 服务端开发。

  • 语法风格与 Python 版趋同,API 设计一致。

  • 支持主流 LLM、向量数据库,兼容浏览器和 Node.js 环境。

  • npm 包名:langchain

两个版本均在持续快速迭代,API 设计趋于统一,便于开发者跨语言迁移和经验复用。


类似框架对比

随着 LLM 应用开发的兴起,业界涌现出多款与 LangChain 类似的框架。下表对主流框架进行简要对比:

框架语言主要特点适用场景
LangChainPython/JS生态完善,组件丰富,支持链式组合、Agent、Memory、插件众多,社区活跃通用 LLM 应用开发
LlamaIndex(原GPT Index)Python/JS专注文档/知识库检索(RAG),文档加载与索引能力强,易与 LangChain 集成知识库问答、RAG
HaystackPython企业级,支持多种后端(Elasticsearch、FAISS、OpenSearch),可视化工具丰富检索增强问答、企业知识库
PromptFlowPython/JS微软出品,强调可视化流程编排和 Prompt 工程,集成 Azure AI 服务流程自动化、企业级集成
FlowiseJS/可视化基于 Node.js 的低代码/可视化 LLM 应用编排,拖拽式界面,易用性强快速原型、非程序员用户

简要分析

  • LangChain:适合需要高度自定义、复杂链路、Agent、插件扩展的开发者,生态最全,社区活跃。
  • LlamaIndex:专注于知识库检索和文档增强生成(RAG),与 LangChain 可无缝集成。
  • Haystack:偏向企业级生产环境,支持多种后端和可视化,适合大规模知识库和检索场景。
  • PromptFlow/Flowise:适合需要可视化、低代码开发的团队,尤其适用于 Prompt 工程和流程自动化。

LangChain 的核心组件

LangChain 的设计高度模块化,主要包括以下核心组件:

  • LLM Wrappers(模型包装器):无缝对接 OpenAI、Hugging Face 等主流大模型。
  • Prompt Templates(提示模板):支持动态变量插入,提升 Prompt 工程灵活性。
  • Indexes(索引):高效检索大规模文本或数据库中的相关信息。
  • Chains(链):将多个组件串联,完成多步推理与复杂任务。
  • Agents(代理):赋予模型自主决策能力,可调用外部工具或 API。
  • Memory(记忆):支持对话历史和上下文记忆,提升智能化水平。

LangChain 的结构设计使 LLM 不仅能处理文本,还能在更广泛的应用环境中进行操作和响应,极大扩展了其应用范围和有效性。

[图片]

LangChain 的工作原理

LangChain 的典型工作流程如下:

  1. 用户提出问题。
  2. 问题被向量化,在向量数据库中检索相关内容。
  3. 检索到的信息与原始问题一同输入 LLM。
  4. LLM 生成答案,或由 Agent 进一步调用外部工具执行操作。

这种设计让 LLM 不再是"黑箱",而是能够与外部世界实时互动的智能体。

举例:如上图所示,智能问答系统从用户提问开始,通过相似性检索在数据库或向量空间中找到相关信息,结合原始问题由模型分析生成答案,并可由代理执行后续操作,实现数据驱动的自动化决策流程。


LangChain 的应用场景

LangChain 的应用非常广泛,包括但不限于:

  • 智能问答系统(RAG,Retrieval Augmented Generation)
  • 企业知识库检索
  • 智能客服/个人助理
  • 数据分析自动化
  • 自动化办公(如自动发邮件、生成报告)
  • 多轮对话机器人
  • 代码自动生成与解释
  • 数据连接:将 LLM 与数据库、PDF、文档等私有数据源集成,实现专属知识检索。
  • 行动执行:不仅能检索信息,还可根据检索结果自动执行操作(如发送邮件),无需硬编码。

LangChain 为 AI 应用开发打开了全新可能,使机器学习系统更贴合实际需求,推动智能应用的多样化和个性化。


简单案例:用 LangChain 构建本地知识库问答

假设你有一段本地文本资料,希望让大模型基于这些资料进行智能问答。以下为最小可运行的 Python 示例:

from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import RetrievalQA
from langchain.vectorstores import FAISS
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter# 1. 构建本地知识库
text = """
LangChain 是一个用于开发基于大语言模型(LLM)应用的开源框架。
它支持多种数据源接入,能够让 LLM 与外部世界无缝连接。
"""
# 文本切分
text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0)
docs = text_splitter.create_documents([text])# 构建向量数据库
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(docs, embeddings)# 2. 构建问答链
llm = OpenAI(temperature=0)
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever()
)# 3. 提问
question = "LangChain 有什么用?"
answer = qa.run(question)
print("答案:", answer)

说明

  • 需提前配置 OpenAI API Key(可通过环境变量 OPENAI_API_KEY 设置)。
  • 本案例将本地文本转为向量,用户提问后,LangChain 自动检索相关内容并调用大模型生成答案。
  • 可将 text 替换为自有知识库内容,或扩展为读取 PDF、网页等。

案例2:Prompt模版

from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAIoutput_parser = CommaSeparatedListOutputParser()format_instructions = output_parser.get_format_instructions()
prompt = PromptTemplate(template="列出五个 {subject}.\n{format_instructions}",input_variables=["subject"],partial_variables={"format_instructions": format_instructions},
)model = ChatOpenAI(temperature=0,model="gpt-4",api_key="xk-349774**********",base_url="https://**********/v1/")"""
这段代码定义了一个链式调用的过程,具体步骤如下:
prompt:生成初始提示。| model:将提示传递给模型进行处理。| output_parser:解析模型的输出结果。
"""
chain = prompt | model | output_parser
chain.invoke({"subject": "最喜欢的食物"})
for s in chain.stream({"subject": "最喜欢的食物"}):print(s)

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

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

相关文章

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…

[论文阅读] 人工智能+软件工程(软件测试) | 当大语言模型遇上APP测试:SCENGEN如何让手机应用更靠谱

当大语言模型遇上APP测试:SCENGEN如何让手机应用更靠谱? 一、论文基础信息 论文标题:LLM-Guided Scenario-based GUI Testing(《大语言模型引导的基于场景的GUI测试》)作者及机构:Shengcheng Yu等&#x…

香橙派3B学习笔记7:snap安装管理软件包_打包程序与依赖

有时可以尝试把程文件与其依赖一块打包安装,这里就学习一下。 ssh : orangepi本地ip 密码 : orangepi 操作系统发行版: 基于 Ubuntu 20.04.6 LTS(Focal Fossa)的定制版本,专门为 Orange Pi 设备…

Playwright 测试框架 - .NET

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】

Model Context Protocol (MCP) 是一个前沿框架

微软发布了 Model Context Protocol (MCP) 课程:mcp-for-beginners。 Model Context Protocol (MCP) 是一个前沿框架,涵盖 C#、Java、JavaScript、TypeScript 和 Python 等主流编程语言,规范 AI 模型与客户端应用之间的交互。 MCP 课程结构 …

【量化】策略交易 - 均线策略(Moving Average Strategy)- 代码增强版本

策略交易 - 均线策略(Moving Average Strategy)- 代码增强版本 一、前言 本文主要是针对 【量化】策略交易 - 均线策略(Moving Average Strategy) 中的代码事例,进行逻辑的增强,添加了模拟买入和卖出逻辑&…

为什么要引入内联函数?

C 中引入内联函数主要有以下几个目的: 提高程序运行效率 - 普通函数调用会有一定的开销,如保存现场、传递参数、跳转到函数地址执行等。内联函数在编译时,会将函数体直接插入到调用处,避免了函数调用的开销,从而提高程…

C++.OpenGL (17/64)模型(Model)

模型(Model) 模型系统架构 #mermaid-svg-Zaji5BPdvnIkXIVg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Zaji5BPdvnIkXIVg .error-icon{fill:#552222;}#mermaid-svg-Zaji5BPdvnIkXIVg .error-text{fill:#55222…

【Java学习笔记】System类

System 类 常用方法 方法描述System.exit()退出当前程序System.arraycopy(源数组,源数组起始索引,目标数组,目标数组起始索引,拷贝长度)复制数组元素,比较适合底层调用System.currentTimeMillis()返回当前时间距离 1…

因泰立科技H1X激光雷达:因泰立科技为智慧工业注入新动力

在当今工业领域,精准测量与高效作业是推动产业升级的关键因素。因泰立科技推出的H1X三维轮廓扫描激光雷达,凭借其卓越的性能和广泛的应用场景,正成为智慧工业中不可或缺的高科技装备。 产品简介 H1X三维轮廓扫描激光雷达是因泰立科技基于二维…

【threejs】每天一个小案例讲解:创建基本的3D场景

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心运行代码 <!DOCTYPE html><html><head><t…

微软PowerBI考试 PL300-使用 Power BI 准备数据以供分析【提供练习数据】

微软PowerBI考试 PL300-使用 Power BI 准备数据以供分析 您将了解如何使用 Power Query 从不同的数据源中提取数据&#xff0c;选择存储模式和连接性类型。 您还将了解在对数据进行建模之前&#xff0c;如何分析、清理数据以及将数据加载到 Power BI 中。 在 Power BI 中获取…

Linux与Windows切换使用Obsidian,出现 unexplained changes 问题的解决

如果你的Obsidian文档在Linux与Windows间来回切换&#xff0c;可能会涉及到文件的保存换行符问题&#xff0c;但这样的话就容易导致一个问题&#xff0c;那就是内容无差异&#xff0c;Obsidian却提示unexplained changes&#xff0c;Windows系统下的解决方法如下&#xff0c;找…

Python爬虫-爬取各省份各年份高考分数线数据,进行数据分析

前言 本文是该专栏的第60篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者将基于Python爬虫,爬取各省份历年以来的“各年份高考分数线”进行数据分析。 废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看…

基于cornerstone3D的dicom影像浏览器 第三十章 心胸比例测量工具CTRTool

文章目录 前言一、实现过程1. 学习CobbAngleTool源码2. 新建CTRTool.js文件3. 重写constructor函数4. 重写defaultGetTextLines函数5. 增加_calculateLength函数6. 重写_calculateCachedStats函数7. 重写renderAnnotation函数 二、使用步骤1.引入库2. 添加到cornerstoneTools3.…

[嵌入式AI从0开始到入土]18_Ascend C算子开发环境(S5赛季)

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

《前端面试题:JavaScript 闭包深度解析》

JavaScript 闭包深度解析&#xff1a;从原理到高级应用 一、闭包的本质与核心概念 闭包&#xff08;Closure&#xff09;是 JavaScript 中最强大且最常被误解的概念之一。理解闭包不仅是掌握 JavaScript 的关键&#xff0c;也是区分初级和高级开发者的重要标志。 1. 什么是闭…

【FPGA开发】DDS信号发生器设计

一、常见IP模块介绍 IP(IntellectualProperty)原指知识产权、著作权等&#xff0c;在IC设计领域通常被理解为实现某种功能的设计。IP模块则是完成某种比较复杂算法或功能&#xff08;如FIR滤波器、FFT、SDRAM控制器、PCIe接口、CPU核等&#xff09;并且参数可修改的电路模块&a…

板凳-------Mysql cookbook学习 (九--3)

4.3 使用临时表 Drop table 语句来删除表&#xff0c; 选择使用create temporary table 语句&#xff0c;创建的是一张临时表。 Create temporary table tb1_name(…列定义…) 克隆表 Create temporary table new_table like original_table 根据查询结果建表 Create temporary…

Python Web项目打包(Wheel)与服务器部署全流程

目录 一、本地开发环境准备二、创建setup.py打包配置三、创建WSGI入口文件四、打包生成Wheel文件五、服务器端部署流程1. 传输文件到服务器2. 服务器环境准备3. 配置生产环境变量4. 使用Gunicorn启动服务 六、高级部署方案&#xff08;Systemd服务&#xff09;1. 创建Systemd服…