第01章:LangChain使用概述

1、介绍LangChain

1.1 什么是LangChain

LangChain是 2022年10月 ,由哈佛大学的 Harrison Chase (哈里森·蔡斯)发起研发的一个开源框架,用于开发由大语言模型(LLMs)驱动的应用程序。

比如,搭建"智能体"(Agent)、问答系统(QA)、对话机器人、文档搜索系统、企业私有知识库等。

LangChain在Github上的热度变化

https://github.com/langchain-ai/langchain

简单概括

LangChain ≠ LLMs

LangChain 之于 LLMs,类似 Spring 之于 Java

LangChain 之于 LLMs,类似 Django、Flask 之于 Python

顾名思义,LangChain中的"Lang"是指language,即⼤语⾔模型,"Chain"即"链",也就是将⼤模型与外部数据&各种组件连接成链,以此构建AI应⽤程序。

大模型相关的岗位

应用开发是大模型最值得关注的方向:应用为王!

学习LangChain框架,高效开发大模型应用

1.2 有哪些大模型应用开发框架呢?

截止到2025年7月26日,GitHub统计数据:

LangChain :这些工具里出现最早、最成熟的,适合复杂任务分解和单智能体应用

LlamaIndex :专注于高效的索引和检索,适合 RAG 场景。(注意不是Meta开发的)

LangChain4J :LangChain还出了Java、JavaScript(LangChain.js)两个语言的版本,LangChain4j的功能略少于LangChain,但是主要的核心功能都是有的

SpringAI/SpringAI Alibaba :有待进一步成熟,此外只是简单的对于一些接口进行了封装

SemanticKernel :也称为sk,微软推出的,对于C#同学来说,那就是5颗星

1.3 为什么需要LangChain?

问题1:LLMs用的好好的,干嘛还需要LangChain?

在大语言模型(LLM)如 ChatGPT、Claude、DeepSeek 等快速发展的今天,开发者不仅希望能"使用"这些模型,还希望能 将它们灵活集成到自己的应用中 ,实现更强大的对话能力、检索增强生成(RAG)、工具调用(Tool Calling)、多轮推理等功能。

LangChain 为更方便解决这些问题,而生的。比如:大模型默认不能联网,如果需要联网,用langchain。

问题2:我们可以使用GPT 或GLM4 等模型的API进行开发,为何需要LangChain这样的框架?

不使用LangChain,确实可以使用GPT 或GLM4 等模型的API进行开发。比如,搭建"智能体"(Agent)、问答系统、对话机器人等复杂的 LLM 应用。

但使用LangChain的好处:

简化开发难度:更简单、更高效、效果更好

学习成本更低:不同模型的API不同,调用方式也有区别,切换模型时学习成本高。使用LangChain,可以以统一、规范的方式进行调用,有更好的移植性。

现成的链式组装:LangChain提供了一些 现成的链式组装 ,用于完成特定的高级任务。让复杂的逻辑变得 结构化、易组合、易扩展

问题3:LangChain 提供了哪些功能呢?

LangChain 是一个帮助你构建 LLM 应用的 全套工具集 。这里涉及到prompt 构建、LLM 接入、记忆管理、工具调用、RAG、智能体开发等模块。

学习 LangChain 最好的⽅式就是做项⽬。

1.4 LangChain的使用场景

学完LangChain,如下类型的项目,大家都可以实现:

|---------------------|----------------------------------|-------|
| 项目名称 | 技术点 | 难度 |
| 文档问答助手 | Prompt + Embedding + RetrievalQA | ★★★ |
| 智能日程规划助手 | Agent + Tool + Memory | ★★★★★ |
| LLM+数据库问答 | SQLDatabaseToolkit + Agent | ★★★★★ |
| 多模型路由对话系统 | RouterChain + 多 LLM | ★★★★★ |
| 互联网智能客服 | ConversationChain + RAG +Agent | ★★★★★ |
| 企业知识库助手(RAG + 本地模型) | VectorDB + LLM + Streamlit | ★★★★★ |

比如:医院智能助手

比如:万象知识库

比如:京东助手

LangChain的位置:

1.5 LangChain资料介绍

官网地址:https://www.langchain.com/langchain

官网文档:https://python.langchain.com/docs/introduction/

API文档:https://python.langchain.com/api_reference/

github地址:https://github.com/langchain-ai/langchain

1.6 架构设计

1.6.1 总体架构图

V0.1 版本

V0.2 / V0.3 版本

图中展示了LangChain生态系统的主要组件及其分类,分为三个层次:架构(Architecture)、组件(Components)和部署(Deployment)。

版本的升级,v0.2 相较于v0.1,修改了⼤概 10 % − 15 % 1 0 \% - 1 5 \% 10%−15% 。功能性上差不多,主要是往稳定性(或兼容性)、安全性上使劲了,⽀持更多的⼤模型,更安全。

1.6.2 内部架构详情

结构1:LangChain

langchain:构成应用程序认知架构的Chains,Agents,Retrieval strategies等 ,构成应⽤程序的链、智能体、RAG。

功能:主包,包含核心功能模块,依赖 langchain-core。

主要子模块:

  • LLMs:与语言模型交互的接口(如 OpenAI、Hugging Face)。
  • Chat Models:专为对话场景优化的模型接口。
  • Memory:管理对话上下文的模块(如 ConversationBufferMemory)。
  • Chains:组合提示、模型和其他组件的工作流(如 LLMChain、RetrievalQA)。
  • Agents:动态决策和工具调用的模块。
  • Tools:外部工具接口(如搜索、计算器)。
    用途:提供构建复杂应用的完整工具集,适合快速开发。

langchain-community:第三方集成

⽐如:Model I/O、Retrieval、Tool & Toolkit;合作伙伴包 langchain-openai,langchain-anthropic等。

功能:社区贡献的扩展模块,包含大量第三方集成和工具。

主要内容:

  • 向量存储:支持 Chroma、FAISS、Pinecone 等向量数据库。
  • 文档加载器:支持从 PDF、CSV、网页等加载数据。
  • 工具:如 Wikipedia、SerpAPI、Arxiv 等。
  • 模型集成:支持 Hugging Face、Anthropic、Cohere 等模型。
    用途:扩展 LangChain 的功能,适合需要特定集成或开源替代方案的场景。

langchain-Core:基础抽象和LangChain表达式语言 (LCEL)

功能:提供 LangChain 的核心抽象和基类,是其他模块的基础。

主要组件:

  • Runnable:LangChain 的核心执行接口,所有链、代理和工具都基于此抽象。
  • PromptTemplate:用于动态生成模型输入的模板,支持字符串和聊天消息格式。
  • OutputParser:解析语言模型的输出(如 JSON、列表、结构化数据)。
  • Callbacks:用于监控和调试执行过程,支持日志记录、性能分析等。
    用途:定义通用的接口和工具,确保模块之间的兼容性和可扩展性。

小结:LangChain,就是AI应用组装套件,封装了一堆的API。langchain框架不大,但是里面琐碎的知识点特别多。就像玩乐高,提供了很多标准化的乐高零件(比如,连接器、轮子等)

结构2:LangGraph

LangGraph可以看做基于LangChain的api的进一步封装,能够协调多个Chain、Agent、Tools完成更复杂的任务,实现更高级的功能。

结构3:LangSmith

https://docs.smith.langchain.com/

链路追踪。提供了6大功能,涉及Debugging (调试)、Playground (沙盒)、Prompt Management (提示管理)、Annotation (注释)、Testing (测试)、Monitoring (监控)等。与LangChain无缝集成,帮助你从原型阶段过渡到生产阶段。

正是因为LangSmith这样的⼯具出现,才使得LangChain意义更⼤,要不仅靠⼀些API(当然也可以不⽤,⽤原⽣的API),⽀持不住LangChain的热度。

结构4:LangServe

将LangChain的可运行项和链部署为REST API,使得它们可以通过网络进行调用。

Java怎么调用langchain呢?就通过这个langserve。将langchain应用包装成一个rest api,对外暴露服务。同时,支持更高的并发,稳定性更好。

总结:LangChain当中,最有前途的两个模块就是:LangGraph,LangSmith。

LangChain能做RAG,其它的⼀些框架也能做,而且做的也不错,⽐如LlamaIndex。所以这时候LangChain要在Agent这块发⼒,那就需要LangGraph。而LangSmith,做运维、监控。故,⼆者是LangChain⾥最有前途的。


2、开发前的准备工作

2.1 前置知识

1、Python 基础语法

变量、函数、类、装饰器、上下文管理器

模块导入、包管理(推荐用 pip 或 conda )

python入门基础

2、大语言模型基础

了解什么是 LLM、Token、Prompt、Embedding

OpenAI API 或其他模型提供商,如 Anthropic、阿里云百炼、DeepSeek等

通过浏览器或app使用过大模型(比如:豆包、DeepSeek等)

2.2 相关环境安装

1、安装Python或Anaconda

LangChain基于Python开发,因此需确保系统中安装了Python。

方式1 :直接下载Python安装包。推荐版本为Python 3.10及以上

Python官网:https://www.python.org/

方式2 :使用包管理工具(如Anaconda)进行安装。通过Anaconda可以轻松创建和管理虚拟环境,为项目提供独立的依赖空间,避免不同项目之间的依赖冲突。

具体操作见 conda安装使用

2、创建虚拟环境

为了保持项目的独立性与环境的干净,建议使用虚拟环境。可以在Anaconda中创建虚拟环境。

具体操作见 《尚硅谷-conda使用指南.md

验证Python版本:在激活的虚拟环境中,输入以下命令验证Python版本是否正确:

txt 复制代码
1 python --version 

3、如何下载安装包

比如:安装langchain包

方式1:使用pip指令

基础指令

bash 复制代码
1 #安装包(默认最新版)  
2 pip install langchain  
3  
4 #指定版本  
5 pip install langchain $\equiv = 0.3.7$ 6  
7 #批量安装(空格分隔)  
8 pip install langchain requests numpy  
9  
10 #升级包  
11 pip install --upgrade langchain  
12  
13 #卸载包  
14 pip uninstall langchain  
15  
16 #查看已安装包  
17 pip list

高级操作

python 复制代码
1 #国内镜像加速(解决下载慢)-i:指定镜像源  
2 pip install -i https://mirrors.aliyun.com/pypi/simple/ langchain  
3  
4 #从本地/URL安装:  
5 pip install ./localpackage.whl  
6 pip install https://github.com/user/repo/archive/main.zip

方式2:使用conda指令

python 复制代码
1 #安装包(默认仓库)  
2 conda install langchain  
3  
4 #指定频道(如 conda-forge)

5 conda install -c conda-forge langchain $= = 0.3.7$ 6   
7 #更新包   
8 conda update langchain   
9   
10 #卸载包   
11 conda uninstall langchain   
12   
13 #查看已安装包   
14 conda list

conda-forge :该源⽐官⽅默认渠道更新更快、包更全

建议: 二者最好不好混用,推荐先conda装基础包,后 pip补充的顺序。

检查包来源 1

2 conda list # conda 安装的包显示频道,pip安装的显示 pypi

txt 复制代码
(pyth310) C:\Users\shkst>conda list # packages in environment at D:\developTools\miniconda3\envs\pyth310: # # Name Version Build Channel 来自于pip 来自于conda _python_abi3_support 1.0 hd8edlab_2 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge aiofiles pypi0 ppi aiohappyeyeballs 2.6.1 pyhd8edlab_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge aiohttp 3.12.2 py310h38315fa_0 .......................

4、PyCharm开发环境

PyCharm作为专业的Python IDE,具有强大的代码编辑、调试和版本控制功能。

创建新的工程,并设置Python解释器(选择Anaconda环境)。

python 复制代码
1 import langchain 

3 print(langchain.__version__) # 0.3.25 

1 import openai 

2 print(openai.__version__) # 1.81.0 

1 import sys 

#查看python的版本3

4 print(sys.version) # 3.10.17 | packaged by conda-forge | (main, Apr 10 2025, 22:06:35) [MSC v.1943 64 bit (AMD64)] 

3、大模型应用开发

大模型应用技术特点:门槛低,天花板高。

3.1 基于RAG架构的开发

背景:

大模型的知识冻结

大模型幻觉

而RAG就可以非常精准的解决这两个问题。

举例:

LLM在考试的时候面对陌生的领域,答复能力有限,然后就准备放飞自我了。而此时RAG给了一些提示和思路,让LLM懂了开始往这个提示的方向做,最终考试的正确率从 60 % 60 \% 60% 到了 90 % 90 \% 90% !

何为RAG?

Retrieval-Augmented Generation(检索增强生成)

检索-增强-⽣成过程:检索可以理解为第10步,增强理解为第12步(这⾥的提⽰词包含检索到的数据),⽣成理解为第15步。

类似的细节图:

强调一下难点的步骤:

这些过程中的难点:1、文件解析 2、文件切割 3、知识检索 4、知识重排序

Reranker的使用场景:

适合:追求 回答高精度 和 高相关性 的场景中特别适合使用 Reranker,例如专业知识库或者客服系统等应用。

不适合:引入reranker会增加召回时间,增加检索延迟。服务对 响应时间要求高 时,使用reranker可能不合适。

这里有三个位置涉及到大模型的使用:

第3步向量化时,需要使用EmbeddingModels。

第7步重排序时,需要使用RerankModels。

第9步生成答案时,需要使用LLM。

3.2 基于Agent架构的开发

充分利用 LLM 的推理决策能力,通过增加 规划 、 记忆 和 工具 调用的能力,构造一个能够独立思考、逐步完成给定目标的智能体。

举例:传统的程序 vs Agent(智能体)

OpenAI的元老翁丽莲(Lilian Weng)于2023年6月在个人博客首次提出了现代AI Agent架构。

一个数学公式来表示:

Agent = = = LLM + ^ + + Memory + ^ + + Tools + ^ + + Planning + ^ + + Action

⽐如,打⻋到西藏玩。

⼤脑中枢:规划⾏程的你

规划:步骤1:规划打⻋路线,步骤2:定饭店、酒店,。。。

调⽤⼯具:调⽤MCP或FunctionCalling等API,滴滴打⻋、携程、美团订酒店饭店

记忆能⼒:沟通时,要知道上下⽂。⽐如定酒店得知道是西藏路上的酒店,不能聊着聊着忘了最初的⽬的。

能够执⾏上述操作。说走就走,不能纸上谈兵。

智能体核心要素被细化为以下模块:

1、大模型(LLM)作为"大脑":提供推理、规划和知识理解能力,是AI Agent的决策中枢。

⼤脑主要由⼀个⼤型语⾔模型 LLM 组成,承担着信息处理和决策等功能, 并可以呈现推理和规划的过程,能很好地应对未知任务。

2、记忆(Memory)

记忆机制能让智能体在处理重复⼯作时调⽤以前的经验,从而避免⽤⼾进⾏⼤量重复交互。

短期记忆:存储单次对话周期的上下文信息,属于临时信息存储机制。受限于模型的上下文窗口长度。

3、工具使用(Tool Use):调用外部工具(如API、数据库)扩展能力边界。

4、规划决策(Planning):通过任务分解、反思与自省框架实现复杂任务处理。例如,利用思维链(Chain of Thought)将目标拆解为子任务,并通过反馈优化策略。

3.3 大模型应用开发的4个场景

场景1:纯 Prompt

Prompt是操作大模型的唯一接口

当人看:你说一句,ta回一句,你再说一句,ta再回一句...

场景2:Agent + ^ + + Function Calling

Agent:AI 主动提要求

Function Calling:需要对接外部系统时,AI 要求执行某个函数

当人看:你问 ta「我明天去杭州出差,要带伞吗?」,ta 让你先看天气预报,你看了告诉ta,ta再告诉你要不要带伞

场景3:RAG (Retrieval-Augmented Generation)

RAG:需要补充领域知识时使用

Embeddings:把文字转换为更易于相似度计算的编码。这种编码叫向量

向量数据库:把向量存起来,方便查找

向量搜索:根据输入向量,找到最相似的向量

举例:考试答题时,到书上找相关内容,再结合题目组成答案

这个在智能客服上用的最广泛。

场景4:Fine-tuning(精调/微调)

举例:努力学习考试内容,长期记住,活学活用。

特点:成本最高;在前面的方式解决不了问题的情况下,再使用。

如何选择

面对一个需求,如何开始,如何选择技术方案?下面是个常用思路:

注意:其中最容易被忽略的,是准备测试数据

下面,我们重点介绍下大模型应用的开发两类:基于RAG的架构,基于Agent的架构。

4、LangChain的核心组件

学习Langchain最简单直接的方法就是阅读官方文档。

https://python.langchain.com/v0.1/docs/modules/

通过文档目录我们可以看到,Langchain构成的核心组件。

两个红框内容是核⼼。中间的Integrations:集成各种⼯具或云平台。

4.1 一个问题引发的思考

如果要组织一个AI应用,开发者一般需要什么?

第1,提示词模板的构建,不仅仅只包含用户输入。

第2,模型调用与返回,参数设置,返回内容的格式化输出。

第3,知识库查询,这里会包含文档加载,切割,以及转化为词嵌入(Embedding)向量。

第4,其他第三方工具调用,一般包含天气查询、Google搜索、一些自定义的接口能力调用。

第5,记忆获取,每一个对话都有上下文,在开启对话之前总得获取到之前的上下文吧?

4.2 核心组件的概述

LangChain的核心组件涉及六大模块,这六大模块提供了一个全面且强大的框架,使开发者能够创建复杂、高效且用户友好的基于大模型的应用。

4.3 核心组件的说明

核心组件1:Model I/O

这个模块使⽤最多,也最简单

Model I/O:标准化各个大模型的输入和输出,包含输入模版,模型本身和格式化输出。

以下是使用语言模型从输入到输出的基本流程。

以下是对每一块的总结:

Format(格式化) :即指代Prompts Template,通过模板管理大模型的输入。将原始数据格式化成模型可以处理的形式,插入到一个模板问题中,然后送入模型进行处理。

Predict(预测) :即指代Models,使用通用接口调用不同的大语言模型。接受被送进来的问题,然后基于这个问题进行预测或生成回答。

Parse(生成) :即指代Output Parser 部分,用来从模型的推理中提取信息,并按照预先设定好的模版来规范化输出。比如,格式化成一个结构化的JSON对象。

核心组件2:Chains

Chain:"链条",用于将多个模块串联起来组成一个完整的流程,是 LangChain 框架中最重要的模块。

例如,一个 Chain 可能包括一个 Prompt 模板、一个语言模型和一个输出解析器,它们一起工作以处理用户输入、生成响应并处理输出。

常见的Chain类型:

LLMChain :最基础的模型调用链

SequentialChain :多个链串联执行

RouterChain :自动分析用户的需求,引导到最适合的链

RetrievalQA :结合向量数据库进行问答的链

核心组件3:Memory

Memory:记忆模块,用于保存对话历史或上下文信息,以便在后续对话中使用。

常见的 Memory 类型:

ConversationBufferMemory :保存完整的对话历史

ConversationSummaryMemory :保存对话内容的精简摘要(适合长对话)

ConversationSummaryBufferMemory :混合型记忆机制,兼具上面两个类型的特点

VectorStoreRetrieverMemory :保存对话历史存储在向量数据库中

核心组件4:Agents

Agents,对应着智能体,是 LangChain 的高阶能力,它可以自主选择工具并规划执行步骤。

Agent 的关键组成:

AgentType :定义决策逻辑的工作流模式

Tool :是一些内置的功能模块,如API调用、搜索引擎、文本处理、数据查询等工具。Agents通过这些工具来执行特定的功能。

AgentExecutor :用来运行智能体并执行其决策的工具,负责协调智能体的决策和实际的工具执行。

⽬前最热⻔的智能体开发实践,未来能够真正实现通⽤⼈⼯智能的落地⽅案。

核心组件5:Retrieval

Retrieval:对应着RAG,检索外部数据,然后在执行生成步骤时将其传递到 LLM。步骤包括文档加载、切割、Embedding等

Source :数据源,即大模型可以识别的多种类型的数据:视频、图片、文本、代码、文档等。

Load :负责将来自不同数据源的非结构化数据,加载为文档(Document)对象

Transform :负责对加载的文档进行转换和处理,比如将文本拆分为具有语义意义的小块。

Embed :将文本编码为向量的能力。一种用于嵌入文档,另一种用于嵌入查询

Store :将向量化后的数据进行存储

Retrieve :从大规模文本库中检索和查询相关的文本段落

绿⾊的是⼊库存储前的操作。

核心组件6:Callbacks

Callbacks:回调机制,允许连接到 LLM 应用程序的各个阶段,可以监控和分析LangChain的运行情况,比如日志记录、监控、流传输等,以优化性能。

回调函数,对于程序员们应该都不陌⽣。这个函数允许我们在LLM的各个阶段使⽤各种各样的"钩⼦",从而达实现⽇志的记录、监控以及流式传输等功能。

4.4 小结

Model I/O模块:使用最多,也最简单

Chains 模块: 最重要的模块

Retrieval模块、Agents模块:大模型的主要落地场景

在这个基础上,其它组件要么是它们的辅助,要么只是完成常规应用程序的任务。

辅助:⽐如,向量数据库的分块和嵌⼊,⽤于追踪、观测的Callbacks

任务:⽐如,Tools,Memory

5、LangChain的helloworld

text 复制代码
注意:⼤家如果想演⽰如下代码的话,需要准备两个前提:

1 安装必要的库和插件

2 参考后续《02-LangChain使⽤之Model IO》的2.3.2小结,配置好.env配置⽂件

建议:如下的helloworld⼤家看看即可,从下⼀章开始展开讲解

5.1 获取大模型

导入 dotenv 库的 load_dotenv 函数,用于加载环境变量文件(.env)中的配置

python 复制代码
#导入 dotenv 库的 load_dotenv 函数,用于加载环境变量文件(.env)中的配置
import dotenv
from langchain_openai import ChatOpenAI
import os

dotenv.load_dotenv(
    dotenv_path=r"C:\Users\fei\Desktop\companyProject\pythonProject\LangChain-tutorial\.env"
)

os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY1")
os.environ['OPENAI_BASE_URL'] = os.getenv("OPENAI_BASE_URL")

# 创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")  # 默认使用 gpt-3.5-turbo

# 直接提供问题,并调用llm
response = llm.invoke("什么是大模型?")
print(response)

其中,需要在当前工程下提供 .env 文件,文件中提供如下信息:

OPENAI_API_KEY1="demo"

OPENAI_BASE_URL="http://langchain4j.dev/demo/openai/v1"

密钥来自于:https://www.closeai-asia.com/

5.2 使用提示词模板

我们也可以创建prompt template, 并引入一些变量到prompt template中,这样在应用的时候更加灵活。

python 复制代码
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

# 这里需要指明具体的角色,system 和 user
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是世界级的技术文档编写者"),
    ("user", "{input}")  # {input} 为变量
])

# 配置LLM
llm = ChatOpenAI(
    model="gpt-4o-mini",
    temperature=0,
    api_key="demo",
    base_url="http://langchain4j.dev/demo/openai/v1"
)

# 把 prompt 和具体 llm 的调用和在一起
chain = prompt | llm
message = chain.invoke({"input": "大模型中的LangChain是什么?"})
print(message)

# print(type(message))

LangChain是一个开源框架,旨在简化和增强大语言模型(如GPT-3、GPT-4 等)的开发与应用。它为开发者提供了一套工具和组件,使得在不同的用例中利用语言模型变得更加高效和灵活。LangChain 的全名是"Language Chain",意在强调它将多个处理步骤或组件串联在一起,形成一个完整的处理链,以便更好地利用语言模型的能力。

5.3 使用输出解析器

python 复制代码
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser

# 初始化模型
llm = ChatOpenAI(
    model="gpt-4o-mini",
    api_key="demo",
    base_url="http://langchain4j.dev/demo/openai/v1"
)

# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是世界级的技术文档编写者。"),
    ("user", "{input}")
])

# 使用输出解析器
output_parser = JsonOutputParser()

# 构建链
chain = prompt | llm | output_parser

# 调用
result = chain.invoke({
    "input": "LangChain是什么?用JSON格式回复,问题用question,回答用answer"
})

print(result)
txt 复制代码
{'question': 'LangChain是什么?', 'answer': 'LangChain是一个开源框架,用于构建与大型语言模型(LLMs)交互的应用程序。它提供了一个灵活的工具集,允许开发人员创建具有复杂推理能力、链式任务处理和上下文管理的智能应用。LangChain支持多种数据源和组件,可以帮助开发者在各种环境中更高效地利用语言模型。'}

python 复制代码
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser

# 初始化模型
llm = ChatOpenAI(model="gpt-4o-mini")

# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是世界级的技术文档编写者。输出格式要求: {formatInstructions}"),
    ("user", "{input}")
])

# 使用输出解析器
output_parser = JsonOutputParser()

# 构建链
chain = prompt | llm | output_parser

# 调用
result = chain.invoke({
    "input": "LangChain是什么?",
    "formatInstructions": output_parser.get_format_instructions()
})

print(result)
json 复制代码
{LangChain':{'description':'LangChain是一个开源的框架,用于构建基于语言模型的应用程序。它旨在将不同的语言模型、数据源和工具结合起来,以便于开发者创建复杂的应用。','key_features':['模块化设计:支持将不同的组件组合在一起,如语言模型、数据处理和外部API。';  
'支持多种语言模型:兼容不同类型的语言模型,如OpenAI的GPT系列、BERT等。',  
'内置数据连接:可以与多种数据源进行集成,例如数据库、文件和外部API。',  
'灵活的工作流管理:提供了多种方法来定义和管理任务的执行流程。',  
'社区支持:拥有活跃的社区,提供文档、示例和支持。',  
'可扩展性:允许开发者根据需求定制和扩展功能。'],  
'use Cases':['聊天机器人开发','文本生成和摘要','内容推荐系统','自然语言理解任务','自动化工作流处理'],  
'getting_started':{'installation': '使用pip安装:pip install langchain',  
'documentation_link': 'https://langchain.readthedocs.io/en/latest/'}}

5.4 使用向量存储

使用一个简单的本地向量存储 FAISS,首先需要安装它

txt 复制代码
1 pip install faiss-cpu  
2 #或者  
3 conda install faiss-cpu

1 pip install langchain-community = = 0.3.7 = = 0.3.7 ==0.3.7 2 #或者

3 cond installation community = = 0.3.7 = = 0.3.7 ==0.3.7

python 复制代码
# 导入和使用 WebBaseLoader
from langchain_community.document_loaders import WebBaseLoader
import bs4

loader = WebBaseLoader(
        web_path="https://www.gov.cn/xinwen/2020-06/01/content_5516649.htm",
 #       bs_kwargs=dict(parse_only=bs4.SoupStrainer(id="UCAP-CONTENT"))
    )
docs = loader.load()
print(docs)

# 对于嵌入模型,这里通过 API调用
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")


from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 使用分割器分割文档
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
documents = text_splitter.split_documents(docs)
print(len(documents))
# 向量存储  embeddings 会将 documents 中的每个文本片段转换为向量,并将这些向量存储在 FAISS 向量数据库中
vector = FAISS.from_documents(documents, embeddings)

# 向量存储 embeddings会将documents中的每个文本片段转换为向量,并将这些向量存储在FAISS 向量数据库中
vector = FAISS.from_documents(documents, embeddings)

5.5 RAG(检索增强生成)

基于外部知识,增强大模型回复

python 复制代码
from langchain_core.prompts import PromptTemplate

retriever = vector.as_retriever()
retriever.search_kwargs = { "k":3 }
docs = retriever.invoke("建设用地使用权是什么?")

# 定义提示词模版
prompt_template = """
你是一个问答机器人。
你的任务是根据下述给定的已知信息回答用户问题。
确保你的回复完全依据下述已知信息。不要编造答案。
如果下述已知信息不足以回答用户问题,请直接回复"我无法回答您的问题"。

已知信息:
{info}

用户问:
{question}

请用中文回答用户问题。
"""

# 得到提示词模版对象
template = PromptTemplate.from_template(prompt_template)

# 得到提示词对象
prompt = template.format(info=docs, question='建设用地使用权是什么?')

# 调用LLM
response = llm.invoke(prompt)
print(response.content)

建设⽤地使⽤权是指在法律规定的范围内,建设⽤地使⽤权⼈对特定⼟地的使⽤、建造建筑物及其他设施的权利。根据相关法律规定,建设⽤地使⽤权可以通过出让或划拨等⽅式设⽴,并应当符合资源节约、⽣态环境保护及⼟地⽤途的规定。建设⽤地使⽤权⼈有权转让、出资、赠与或抵押其使⽤权,但需遵循法律规定和合同约定。

5.6 使用Agent

python 复制代码
from langchain.tools.retriever import create_retriever_tool

# 检索器工具
retriever_tool = create_retriever_tool(
    retriever,
    "CivilCodeRetriever",
    "搜索有关中华人民共和国民法典的信息。关于中华人民共和国民法典的任何问题,您必须使用此工具!"
)

tools = [retriever_tool]

from langchain import hub
from langchain.agents import create_openai_functions_agent
from langchain.agents import AgentExecutor

# https://smith.langchain.com/hub
prompt = hub.pull("hwchase17/openai-functions-agent")

agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 运行代理
agent_executor.invoke({"input":"建设用地使用权是什么"})
相关推荐
老王熬夜敲代码3 小时前
test_node流程详解
langchain
qq_54702617911 小时前
LangChain 中间件(Middleware)
中间件·langchain
Cha0DD11 小时前
【由浅入深探究langchain】第二十集-SQL Agent+Human-in-the-loop
人工智能·python·ai·langchain
Cha0DD11 小时前
【由浅入深探究langchain】第十九集-官方的SQL Agent示例
人工智能·python·ai·langchain
Barkamin19 小时前
LangChain简单介绍
langchain
百年੭ ᐕ)੭*⁾⁾1 天前
Chroma简单上手
人工智能·语言模型·langchain·chroma·rag
Roselind_Yi1 天前
【吴恩达2026 Agentic AI】面试向+项目实战(含面试题+项目案例)-2
人工智能·python·机器学习·面试·职场和发展·langchain·agent
JaydenAI1 天前
[RAG在LangChain中的实现-04]常用的向量存储和基于向量存储的检索器
python·langchain·ai编程
Roselind_Yi1 天前
【吴恩达2026 Agentic AI】面试向+项目实战(含面试题+项目案例)-1
人工智能·python·面试·职场和发展·langchain·gpt-3·agent