当前位置: 首页 > news >正文

LangChain原理解析及开发实战指南(2025年最新版)

一、LangChain核心架构解析

1.1 框架设计理念

LangChain是基于提示工程(Prompt Engineering)构建的LLM应用开发框架,其核心思想是通过模块化组件实现大语言模型与业务系统的无缝对接。该框架采用分层设计:

  1. 接口层:统一对接OpenAI、DeepSeek-R1等主流LLM API
  2. 逻辑层:通过Chain和Agent实现业务流程编排
  3. 数据层:支持本地向量数据库与云存储的混合部署

1.2 核心模块交互机制

需要工具
直接处理
用户输入
Prompt模板
Agent决策
工具调用
LLM推理
外部API/数据库
结果解析
记忆存储
最终输出

二、六大核心模块深度剖析

2.1 模型I/O(Model I/O)

2.1.1 LLM初始化
from langchain import OpenAI# 配置GPT-4 Turbo模型
llm = OpenAI(model_name="gpt-4-turbo-2025",temperature=0.7,max_tokens=2048
)

支持动态模型切换,通过修改model_name参数可在不同LLM间快速迁移(网页6)

2.1.2 嵌入模型
from langchain.embeddings import OpenAIEmbeddingsembeddings = OpenAIEmbeddings(model="text-embedding-3-large",dimensions=3072
)

最新版支持维度压缩技术,可将3072维向量降维至1536维保持90%准确率(网页3)

2.2 链(Chains)

2.2.1 链式工作流
from langchain.chains import LLMChain, SequentialChain# 定义问题生成链
question_chain = LLMChain(...)# 定义解答验证链
validation_chain = LLMChain(...)# 构建顺序链
full_chain = SequentialChain(chains=[question_chain, validation_chain],input_variables=["topic"],output_variables=["final_answer"]
)

支持动态路由机制,可根据上下文选择执行路径(网页4)

2.3 记忆(Memory)

2.3.1 会话记忆实现
from langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory(memory_key="chat_history",return_messages=True,k=5  # 保留最近5轮对话
)

采用滑动窗口算法优化长对话场景下的内存占用(网页3)

2.4 代理(Agents)

2.4.1 工具集成示例
from langchain.agents import Toolcalculator_tool = Tool(name="Calculator",func=math_processor,description="用于执行数学计算"
)weather_tool = Tool(name="WeatherAPI",func=get_weather_data,description="查询实时天气数据"
)

支持工具优先级调度机制,响应延迟<200ms(网页6)

2.5 数据连接(Data Connection)

2.5.1 文档处理流程
文档加载 文本分割 嵌入模型 向量数据库 检索器 按1024 tokens分块 生成向量 存储索引 返回相似结果 文档加载 文本分割 嵌入模型 向量数据库 检索器

2.6 回调(Callbacks)

支持全链路监控

from langchain.callbacks import FileCallbackHandlerhandler = FileCallbackHandler('llm_logs.json')
chain.run(input, callbacks=[handler])

可捕获Token消耗响应延迟等关键指标(网页6)

三、开发实战:构建智能文档问答系统

3.1 环境配置

pip install langchain>=0.1.0 \openai \faiss-cpu \tiktoken

3.2 数据处理流程

from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter# PDF文档加载
loader = PyPDFLoader("technical_manual.pdf")
documents = loader.load()# 文本分割
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200
)
docs = text_splitter.split_documents(documents)

3.3 向量存储优化

from langchain.vectorstores import FAISSvectorstore = FAISS.from_documents(documents=docs,embedding=OpenAIEmbeddings()
)# 相似性检索
retriever = vectorstore.as_retriever(search_type="mmr",  # 最大边际相关性search_kwargs={"k": 5}
)

3.4 问答链构建

from langchain.chains import RetrievalQAqa_chain = RetrievalQA.from_chain_type(llm=llm,chain_type="stuff",retriever=retriever,return_source_documents=True
)

3.5 性能优化策略

  1. 缓存机制:对高频查询结果进行Redis缓存
  2. 异步处理:使用AsyncRetrievalQA提升并发能力
  3. 精度控制:设置相似度阈值(>0.78)过滤低质量结果

四、进阶开发技巧

4.1 自定义工具开发

from langchain.tools import BaseToolclass CustomAPI(BaseTool):name = "CustomAPI"description = "访问企业私有API"def _run(self, query: str) -> str:headers = {"Authorization": f"Bearer {API_KEY}"}response = requests.get(API_ENDPOINT, params={"q":query}, headers=headers)return response.json()

4.2 多模态扩展

from langchain_community.llms import DeepSeekMultiModalmm_llm = DeepSeekMultiModal(vision_model="deepseek-vl-1b",text_model="deepseek-llm-7b"
)response = mm_llm.generate([{"type": "image_url","image_url": {"url": "https://example.com/chart.png"}
}])

五、最佳实践与调优

5.1 性能监控指标

指标推荐值监控方法
响应延迟<1.5sPrometheus+Grafana
Token消耗<5k/请求OpenAI Usage API
缓存命中率>85%Redis监控

5.2 安全防护方案

  1. 输入过滤:使用LLM Guard检测恶意提示
  2. 输出审核:部署T5-XXL模型进行内容审核
  3. 权限控制:基于RBAC实现工具访问控制

相关文章:

LangChain原理解析及开发实战指南(2025年最新版)

一、LangChain核心架构解析 1.1 框架设计理念 LangChain是基于提示工程(Prompt Engineering)构建的LLM应用开发框架&#xff0c;其核心思想是通过模块化组件实现大语言模型与业务系统的无缝对接。该框架采用分层设计&#xff1a; 接口层&#xff1a;统一对接OpenAI、DeepSee…...

YoloV8改进策略:Block改进|CBlock,Transformer式的卷积结构|即插即用

摘要 论文标题: SparseViT: Nonsemantics-Centered, Parameter-Efficient Image Manipulation Localization through Spare-Coding Transformer 论文链接: https://arxiv.org/pdf/2412.14598 官方GitHub: https://github.com/scu-zjz/SparseViT 这段代码出自SparseViT ,代码如…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_open_file

ngx_open_file 定义在src/os/unix/ngx_files.h #define ngx_open_file(name, mode, create, access) \open((const char *) name, mode|create, access)#define NGX_FILE_RDONLY O_RDONLY #define NGX_FILE_WRONLY O_WRONLY #de…...

测试金蝶云的OpenAPI

如何使用Postman测试K3Cloud的OpenAPI 1. 引言 在本篇博客中&#xff0c;我将带你逐步了解如何使用Postman测试和使用K3Cloud的OpenAPI。内容包括下载所需的SDK文件、配置文件、API调用及测试等步骤。让我们开始吧&#xff01; 2. 下载所需的SDK文件 2.1 获取SDK 首先&…...

C语言408考研先行课第一课:数据类型

由于408要考数据结构……会有算法题…… 所以&#xff0c;需要C语言来进行一个预备…… 因为大一贪玩&#xff0c;C语言根本没学进去……谁能想到考研还用得到呢&#xff1f;【手动doge&#xff08;bushi&#xff09; 软件用的是Clion&#xff0c;可以自行搜索教程下载使用。…...

11天 -- Redis 中跳表的实现原理是什么?Redis 的 hash 是什么?Redis Zset 的实现原理是什么?

Redis 中跳表的实现原理是什么&#xff1f; Redis 中的跳表&#xff08;Skip List&#xff09;是一种基于有序链表的高效数据结构&#xff0c;通过在链表上增加多级索引来提高数据的查找效率。以下是 Redis 中跳表的实现原理&#xff1a; 1. 基本概念 节点结构&#xff1a;跳…...

单细胞分析(19)—— 单细胞转录组基因集评分方法

下面是每种基因集评分方法的原理介绍代码示例&#xff0c;适用于R语言和Python两种主流生信分析环境。可以直接应用于单细胞转录组&#xff08;scRNA-seq&#xff09;数据分析中。 &#x1f52c; 单细胞转录组基因集评分方法&#xff08;附代码示例&#xff09; 在单细胞RNA测…...

010 rocketmq批量消息

文章目录 批量消息BatchProducer.javaBatchConsumer.java 批量消息 批量发送可以提⾼发送性能&#xff0c;但有⼀定的限制&#xff1a; topic 相同 waitStoreMsgOK 相同 &#xff08;⾸先我们建设消息的iswaitstoremsgoktrue(默认为true), 如果没有异常,我们将始终收到"O…...

JavaWeb后端基础(3)

原打算把Mysql操作数据库的一些知识写进去&#xff0c;但是感觉没必要&#xff0c;要是现在会的都是简单的增删改查&#xff0c;所以&#xff0c;这一篇&#xff0c;我直接从java操作数据库开始写&#xff0c;所以这一篇大致就是记一下JDBC、MyBatis、以及SpringBoot的配置文件…...

Oracle数据库基础入门(三): DQL 深入解析与实践

在 Oracle 数据库的知识体系中&#xff0c;数据查询语言&#xff08;DQL&#xff09;无疑是最为常用且关键的部分之一。对于 Java 全栈开发者而言&#xff0c;熟练掌握 DQL 不仅能高效地从数据库中获取所需数据&#xff0c;更是构建强大后端应用的基石。通过 DQL&#xff0c;我…...

P9231 [蓝桥杯 2023 省 A] 平方差

P9231 [蓝桥杯 2023 省 A] 平方差 - 洛谷 题目描述 给定 L,R&#xff0c;问 L≤x≤R 中有多少个数 x 满足存在整数 y,z 使得 xy2−z2。 输入格式 输入一行包含两个整数 L,R&#xff0c;用一个空格分隔。 输出格式 输出一行包含一个整数满足题目给定条件的 x 的数量。 输…...

贪心算法 求解思路

贪心算法简介 贪心算法是通过做一系列的选择来给出某一问题的最优解。对算法中的每一个决策点&#xff0c;做一个当时&#xff08;看起来是&#xff09;最佳的选择。这种启发式策略并不是总能产生出最优解&#xff0c;但它常常能给出最优解。 在实际设计贪心算法时&#xff0…...

2025/2/25,字节跳动后端开发一面面经

一、双方简单自我介绍 面试官先自我介绍,之后属于面试官看简历过程,基本不听。 二、实习中遇到最难的事情,怎么解决的 主要问的还是实习中做过的项目,项目难点在哪里(自己参与的地方),面对困难是怎么思考,怎么实际操作解决的。 三、项目实现细节 掌握自己项目的实…...

Buildroot 添加自定义模块-内置文件到文件系统

目录 概述实现步骤1. 创建包目录和文件结构2. 配置 Config.in3. 定义 cp_bin_files.mk4. 添加源文件install.shmy.conf 5. 配置与编译 概述 Buildroot 是一个高度可定制和模块化的嵌入式 Linux 构建系统&#xff0c;适用于从简单到复杂的各种嵌入式项目. buildroot的源码中bui…...

SpringBoot新闻推荐系统设计与实现

随着信息时代的快速发展&#xff0c;新闻推荐系统成为用户获取个性化内容的重要工具。本文将介绍一个幽络源的基于SpringBoot开发的新闻推荐系统&#xff0c;该系统功能全面&#xff0c;操作简便&#xff0c;能够满足管理员和用户的多种需求。 管理员模块 管理员模块为系统管…...

领域驱动设计:事件溯源架构简介

概述 事件溯源架构通常由3种应用设计模式组成,分别是:事件驱动(Event Driven),事件溯源(Event Source)、CQRS(读写分离)。这三种应用设计模式常见于领域驱动设计(DDD)中,但它们本身是一种应用设计的思想,不仅仅局限于DDD,每一种模式都可以单独拿出来使用。 E…...

基于Java+Spring+Mybsita+mysql的汽租车辆共享平台的设计源码+设计文档

文末获取源码数据库文档 感兴趣的可以先收藏&#xff0c;有毕设问题&#xff0c;项目以及论文撰写等问题都可以和博主沟通&#xff0c;尽最大努力帮助更多的人&#xff01; 目录 1软件需求 1.1引言 1.1.1编写目的 1.1.2背景 1.2 绪论 1.2.1&#xff0d;Internet与…...

深度学习的正则化深入探讨

文章目录 一、说明二、学习目标三、什么是机器学习中的正则化四、了解过拟合和欠拟合五、代价函数的意义六、什么是偏差和方差&#xff1f;七、机器学习中的正则化&#xff1f; 一、说明 在训练机器学习模型时&#xff0c;模型很容易过拟合或欠拟合。为了避免这种情况&#xf…...

Token相关设计

文章目录 1. 双Token 机制概述1.1 访问令牌&#xff08;Access Token&#xff09;1.2 刷新令牌&#xff08;Refresh Token&#xff09; 2. 双Token 认证流程3. Spring Boot 具体实现3.1 生成 Token&#xff08;使用 JWT&#xff09;3.2 解析 Token3.3 登录接口&#xff08;返回…...

【时序预测】在线学习:算法选择(从线性模型到深度学习解析)

——如何为动态时序预测匹配最佳增量学习策略&#xff1f; 引言&#xff1a;在线学习的核心价值与挑战 在动态时序预测场景中&#xff08;如实时交通预测、能源消耗监控&#xff09;&#xff0c;数据以流式&#xff08;Streaming&#xff09;形式持续生成&#xff0c;且潜在的…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...