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

【LangChain专栏】 Retrieval 入门:RAG核心原理与文档加载全解析

目录引言一、RAG与Retrieval模块核心认知1.1 大模型幻觉与RAG的解决方案1.2 RAG的核心优势与局限性1.3 LangChain Retrieval完整流程拆解二、Retrieval第一步文档加载器Document Loaders2.1 文档加载器的核心设计思想2.2 主流格式文档加载实战2.2.1 TXT纯文本文件加载2.2.2 PDF文件加载2.2.3 CSV表格文件加载2.2.4 JSON格式文件加载2.2.5 HTML网页加载2.2.6 Markdown文件加载2.2.7 文件夹批量加载2.3 文档加载器源码核心逻辑解析2.3.1 BaseLoader基类2.3.2 Document类三、文档加载的最佳实践与避坑指南3.1 大文件处理的延迟加载方案3.2 不同格式文档的加载选型建议3.3 元数据管理的核心技巧总结引言大语言模型LLM的爆发让AI应用开发进入了全新的时代但「幻觉」问题始终是LLM落地专业领域场景的最大绊脚石——无论是金融行业的精准数据查询还是医疗领域的专业知识问答LLM一旦生成错误信息都可能带来致命的后果。目前行业内公认缓解LLM幻觉、构建私有领域知识库最有效的方案之一就是检索增强生成Retrieval Augmented GenerationRAG。而LangChain作为LLM应用开发最主流的框架其Retrieval模块完整封装了RAG全流程的能力从数据加载、文本处理到向量检索为开发者提供了一套标准化、可扩展的RAG开发范式。一、RAG与Retrieval模块核心认知1.1 大模型幻觉与RAG的解决方案LLM的知识来源于预训练数据这就带来了两个天然的缺陷知识边界受限无法学习到所有专业领域的细节知识更无法覆盖企业私有数据、实时更新的业务信息生成不可控面对未知问题时大概率会生成看似合理、实则错误的内容也就是「幻觉」且非专业人士难以辨识。而RAG的核心思路就是让LLM在回答问题前先从外挂的私有知识库中检索到相关的权威上下文信息再基于检索到的内容生成答案。相当于给LLM装上了一个「可实时查阅的外部图书馆」从根源上减少无依据的内容生成大幅提升回答的准确性、时效性与可靠性。1.2 RAG的核心优势与局限性相比于提示词工程、模型微调等方案RAG有着不可替代的优势对比维度RAG方案核心优势上下文能力无需用户手动输入大量背景描述可自动从海量知识库中匹配相关上下文突破单轮对话的Token限制知识时效性无需重新训练/微调模型只需更新知识库即可完成知识迭代适配业务数据实时变化的场景数据隐私私有数据无需进入模型训练环节仅在推理阶段按需检索大幅降低业务数据泄露风险开发成本无需大量标注数据也无需高端算力支持中小团队即可快速落地可维护性远高于模型微调同时我们也需要正视RAG的天然局限性在开发前做好预期管理响应时延更高每次问答都需要触发「查询向量化-向量库检索-上下文拼接-LLM推理」全流程相比纯LLM对话链路更长、时延更高Token消耗更大检索到的上下文内容会占用大量输入Token尤其在多轮检索场景下会显著增加推理成本效果强依赖链路细节RAG的最终回答质量受文档分块、嵌入模型、检索策略、提示词等多个环节影响任一环节处理不当都会导致效果打折。1.3 LangChain Retrieval完整流程拆解LangChain的Retrieval模块完整覆盖了RAG的6个核心环节形成了一套标准化的处理流水线Source数据源RAG的外挂知识库支持几乎所有格式的非结构化数据包括TXT/PDF/CSV/JSON等文档、图片/视频/音频转译内容、网站实时数据、业务API返回数据等Load加载通过文档加载器将不同来源、不同格式的非结构化数据统一加载为LangChain标准的Document对象Transform转换对加载后的文档进行处理核心是文本拆分将长文档切分为语义完整的小块同时支持冗余过滤、元数据提取、多语言翻译等能力Embed嵌入通过文本嵌入模型将文本块转换为固定维度的向量把人类语言的语义信息转化为计算机可计算的数值表示Store存储将生成的文本向量与对应的原始文档块存入向量数据库实现高效的相似性检索能力Retrieve检索用户查询时先将查询词向量化再从向量数据库中检索出语义最相关的文档块为LLM生成答案提供上下文支撑。二、Retrieval第一步文档加载器Document Loaders文档加载是RAG全流程的起点无论你的知识库格式多么复杂LangChain都能通过文档加载器将其转换为统一格式的Document对象。2.1 文档加载器的核心设计思想LangChain的文档加载器有两个核心设计原则也是其能适配海量数据源的关键统一抽象接口所有加载器都继承自BaseLoader基类必须实现统一的load()方法无论数据源是本地文件、在线PDF还是网页最终都返回List[Document]格式的结果标准化数据结构所有加载结果都封装为Document对象该对象只有两个核心属性page_content文档的文本内容字符串格式metadata文档的元数据字典格式存储文件路径、页码、作者、行号等溯源信息是后续检索过滤、结果溯源的关键。这种设计让后续的文本拆分、向量化、检索环节完全无需关注原始数据的格式只需面向Document对象开发即可大幅降低了RAG系统的开发复杂度。2.2 主流格式文档加载实战LangChain提供了上百种文档加载器覆盖了几乎所有主流数据源和文件格式这里我们详解最常用的7类场景的加载实现。2.2.1 TXT纯文本文件加载TXT是最基础的文本格式使用TextLoader即可快速加载核心需要注意编码问题中文文件建议指定encodingutf-8避免乱码。# 1. 导入依赖 from langchain_community.document_loaders import TextLoader # 2. 初始化加载器指定文件路径与编码 text_loader TextLoader( file_path./test.txt, encodingutf-8 ) # 3. 执行加载返回Document对象列表 docs text_loader.load() # 4. 查看结果 print(f加载到的文档数量{len(docs)}) print(f文档内容{docs[0].page_content[:100]}) # 查看前100个字符 print(f文档元数据{docs[0].metadata}) # 输出{source: ./test.txt}2.2.2 PDF文件加载PDF是企业知识库最常见的格式LangChain最常用的是PyPDFLoader支持本地文件与在线PDF链接同时支持按页拆分自动记录页码元数据。前置依赖pip install pypdf# 1. 导入依赖 from langchain_community.document_loaders import PyPDFLoader # 2. 初始化加载器支持本地文件/在线链接 # 本地文件示例 pdf_loader PyPDFLoader(file_path./data/企业产品手册.pdf) # 在线PDF示例 # pdf_loader PyPDFLoader(file_pathhttps://arxiv.org/pdf/2302.03803) # 3. 执行加载按页返回Document对象一页对应一个Document docs pdf_loader.load() # 进阶加载并直接拆分底层默认使用递归字符切分器 # docs pdf_loader.load_and_split() # 4. 查看结果 print(fPDF总页数{len(docs)}) print(f第1页内容{docs[0].page_content[:200]}) print(f第1页元数据{docs[0].metadata}) # 包含source、page、total_pages等信息工程扩展如果需要更高精度的PDF解析如扫描件PDF、带复杂表格的PDF可替换为PyMuPDFLoader、UnstructuredPDFLoader适配更复杂的PDF场景。2.2.3 CSV表格文件加载CSV格式的业务数据、知识库使用CSVLoader加载支持全列加载也可指定某一列作为文档来源适配不同的表格结构。# 1. 导入依赖 from langchain_community.document_loaders.csv_loader import CSVLoader # 2. 基础用法加载CSV所有列一行对应一个Document loader CSVLoader(file_path./data/产品知识库.csv, encodingutf-8) data loader.load() # 进阶用法指定source_column将某一列作为元数据的source便于溯源 # loader CSVLoader( # file_path./data/产品知识库.csv, # source_column产品名称, # 指定产品名称列作为来源 # encodingutf-8 # ) # 3. 查看结果 print(f加载到的行数{len(data)}) print(f第一行内容{data[0].page_content}) print(f第一行元数据{data[0].metadata})2.2.4 JSON格式文件加载JSON是API接口返回、业务系统存储最常用的格式LangChain的JSONLoader基于jq语法实现支持精准提取JSON中嵌套的目标字段适配各种复杂的JSON结构。前置依赖pip install jq# 1. 导入依赖 from langchain_community.document_loaders import JSONLoader from pprint import pprint # 场景1提取JSON数组中指定字段 # 示例JSON结构{messages: [{content: xxx}, {content: xxx}]} json_loader JSONLoader( file_path./data/对话数据.json, jq_schema.messages[].content, # jq语法精准定位content字段 ) docs json_loader.load() pprint(docs) # 场景2提取嵌套JSON中的文本保留其他字段为元数据 # 示例JSON结构{data: {items: [{title: xxx, content: xxx, author: xxx}]}} loader JSONLoader( file_path./data/接口返回数据.json, jq_schema.data.items[], # 先定位到数组条目 content_key.content, # 提取content作为page_content is_content_key_jq_parsableTrue, # 启用jq语法解析content_key ) data loader.load() pprint(data)2.2.5 HTML网页加载针对网页数据、本地HTML文件使用UnstructuredHTMLLoader加载支持按语义元素拆分自动识别标题、段落、列表等结构保留HTML的层级信息。前置依赖pip install unstructured# 1. 导入依赖 from langchain.document_loaders import UnstructuredHTMLLoader # 2. 初始化加载器 html_loader UnstructuredHTMLLoader( file_path./data/官网产品介绍.html, modeelements, # 按语义元素拆分生成多个独立Document strategyfast # fast快速模式/hi_res高精度模式 ) # 3. 执行加载 docs html_loader.load() # 4. 查看结果 print(f拆分后的语义块数量{len(docs)}) for doc in docs: print(f元素类型{doc.metadata[category]}内容{doc.page_content[:50]})2.2.6 Markdown文件加载针对技术文档、知识库常用的Markdown格式使用UnstructuredMarkdownLoader加载支持按标题、段落、代码块等语法结构拆分完美保留MD的层级信息。# 1. 导入依赖 from langchain.document_loaders import UnstructuredMarkdownLoader # 2. 初始化加载器 md_loader UnstructuredMarkdownLoader( file_path./data/技术开发文档.md, modeelements, # 按MD语义元素拆分 strategyfast ) # 3. 执行加载 docs md_loader.load() # 4. 查看结果 print(f拆分后的文档块数量{len(docs)}) for doc in docs: print(f内容{doc.page_content}元数据{doc.metadata})2.2.7 文件夹批量加载当知识库有上百个文件时无需逐个文件编写加载逻辑使用DirectoryLoader即可批量加载指定文件夹内的指定格式文件支持多线程加速。# 导入依赖 from langchain_community.document_loaders import DirectoryLoader, PyPDFLoader # 初始化文件夹加载器 directory_loader DirectoryLoader( path./data/, # 目标文件夹 glob*.pdf, # 匹配文件格式这里加载所有PDF use_multithreadingTrue, # 启用多线程提升加载速度 show_progressTrue, # 显示加载进度条 loader_clsPyPDFLoader, # 指定使用的加载器与文件格式匹配 ) # 执行批量加载 docs directory_loader.load() # 查看结果 print(f批量加载到的文档总数{len(docs)}) # 遍历输出 for doc in docs: print(doc.metadata)2.3 文档加载器源码核心逻辑解析2.3.1 BaseLoader基类所有文档加载器都必须继承BaseLoader抽象基类其核心逻辑如下from abc import ABC, abstractmethod from typing import List, Iterable from langchain_core.documents import Document class BaseLoader(ABC): 文档加载器的抽象基类 abstractmethod def lazy_load(self) - Iterable[Document]: 延迟加载方法逐一生成Document对象处理大文件时避免内存溢出子类必须实现 raise NotImplementedError() def load(self) - List[Document]: 全量加载方法返回Document列表用户直接调用 底层默认调用lazy_load转为列表返回 return list(self.lazy_load()) def load_and_split(self, text_splitterNone) - List[Document]: 加载并直接拆分文档底层默认使用RecursiveCharacterTextSplitter from langchain_text_splitters import RecursiveCharacterTextSplitter _text_splitter text_splitter or RecursiveCharacterTextSplitter() docs self.load() return _text_splitter.split_documents(docs)核心要点子类必须实现lazy_load延迟加载方法这是LangChain推荐的加载模式避免一次性加载超大文件导致内存溢出对外暴露的load()方法底层只是把延迟加载的迭代器转为列表无需子类重写内置load_and_split()方法实现加载拆分一步到位简化开发流程。2.3.2 Document类Document是LangChain中文本数据的最小载体其核心结构极简且高扩展from typing import Optional, Dict, Any from pydantic import Field, BaseModel class Document(BaseModel): 用于存储文本及其关联元数据的核心类 # 核心文本内容必填 page_content: str # 元数据字典格式可自定义扩展任意字段默认空字典 metadata: Dict[str, Any] Field(default_factorydict) # 固定类型标识 type: Literal[Document] Document所有加载器最终的输出都是这个类的实例这也是LangChain能实现全流程标准化的核心。三、文档加载的最佳实践与避坑指南3.1 大文件处理的延迟加载方案当处理GB级别的超大文档时直接使用load()方法会一次性将所有内容加载到内存极易导致内存溢出。此时必须使用lazy_load()延迟加载方法逐行/逐页处理文档# 大文件延迟加载示例 from langchain.document_loaders import TextLoader loader TextLoader(./data/超大日志文件.txt, encodingutf-8) # 逐一生成Document对象而非一次性加载全量内容 for doc in loader.lazy_load(): # 逐块处理文档拆分、向量化、入库无需全量驻留内存 print(f处理文档块{doc.page_content[:100]})3.2 不同格式文档的加载选型建议文件格式首选加载器适用场景避坑提示TXTTextLoader纯文本日志、说明文档必须指定encoding中文场景优先utf-8PDFPyPDFLoader常规文本型PDF、学术论文扫描件PDF需搭配OCR工具使用UnstructuredPDFLoaderCSVCSVLoader结构化知识库、产品参数表避免单行列内容过长建议提前做分行处理JSONJSONLoaderAPI接口数据、结构化业务数据复杂嵌套结构必须精准编写jq_schema避免提取无效内容MarkdownUnstructuredMarkdownLoader技术文档、知识库启用modeelements按标题层级拆分提升后续检索效果HTMLUnstructuredHTMLLoader网页爬虫数据、官网文档提前清洗HTML中的广告、导航栏等无效内容减少噪音3.3 元数据管理的核心技巧元数据是后续检索优化、结果溯源的关键加载阶段必须做好元数据的管理必存溯源字段所有文档必须保留source字段记录文件路径、URL、行号等信息便于后续定位答案来源扩展分类字段可自定义添加file_type、department、update_time、author等字段后续检索时可通过元数据过滤缩小检索范围提升准确率避免元数据冗余不要把大量文本内容放入元数据仅存储检索过滤、溯源所需的关键字段减少向量库的存储压力。总结本篇我们从RAG的核心原理出发完整拆解了LangChain Retrieval模块的全流程并深度详解了文档加载器的设计、使用与最佳实践。掌握了文档加载我们就完成了RAG系统的第一步能把任意格式的私有知识库转换为LangChain可处理的标准化Document对象。

相关文章:

【LangChain专栏】 Retrieval 入门:RAG核心原理与文档加载全解析

目录 引言 一、RAG与Retrieval模块核心认知 1.1 大模型幻觉与RAG的解决方案 1.2 RAG的核心优势与局限性 1.3 LangChain Retrieval完整流程拆解 二、Retrieval第一步:文档加载器(Document Loaders) 2.1 文档加载器的核心设计思想 2.2 主…...

【解决】RESP.app GUI for Redis 连接不上redis服务器

我的情况是:linux的防火墙端口没有开启可以使用 firewall-cmd --zonepublic --list-ports 查询开放了哪些防火墙端口 比如我的redis是使用6379端口。则我需要开放6379/tcp 操作如下: firewall-cmd --add-port6379/tcp --permanent firewall-cmd --reload…...

2026年塑料托盘粉碎机实力榜:TOP3厂家谁更胜一筹?

在再生资源加工领域,塑料托盘粉碎机作为核心设备,其性能直接影响企业产能与成本控制。据行业数据显示,2025年国内塑料回收市场规模突破1200亿元,但设备能耗高、故障率高、智能化不足等问题仍困扰超60%的从业者。本文基于技术参数、…...

Playwright添加 Trace 录制方法

Playwright添加 Trace 录制方法举例1、Trace 文件使用说明录制生成的 .zip 包可通过 Playwright CLI 查看:bashplaywright show-trace basic_test_trace.zip该命令会打开可视化界面,可逐步骤查看页面操作、网络请求、DOM 状态、截图等,便于调…...

安装配置 VMware 虚拟机VMware Workstation

第一章下载VMware Workstation并进行向导安装第二章项目实施 安装与配置虚拟机1)双击桌面上生成的虚拟机快捷图标,在弹出的如图 1-1 所示的界面中,选择“将 VMwareWorkstation 17 用于个人用途”后单击“继续”按钮。图1-1 许可证密钥验证界…...

【网络】6.UDP和TCP原理

目录 UDP 和 TCP 协议原理详解 一、UDP 协议 1. 通信识别 2. UDP 报头结构 3. 报头分离与分用 4. UDP 特点 5. 缓冲区 6. 报文大小限制 二、报文在内核中的管理 1. 读取与调度 2. 报文管理结构:struct sk_buff 三、TCP 协议 1. 交付与分离 2. TCP 报头…...

26.3 新旅程

本人是一名信息安全专业的大四学生,目前正在全力准备考研复试和毕业设计。 回想大一刚开始接触C语言时,那时候对计算机的了解非常浅,学得很皮毛,基础也不扎实。后来学习数据结构时,由于前期C语言掌握得不够好&#xf…...

基于卷积神经网络模型的图像分类

一.回归任务与分类任务输出的区别从图像上看,回归是将各个预测点回归拟合一条合适的,loss最小的直线或者曲线;分类是将各个不同种类的数据通过一定的分类划分方法,划分为一类或者几类;从向量上看,回归的向量…...

AI时代,最珍贵的能力从不是会用AI,而是这一种

罗振宇与尹烨在一次对话节目中,曾抛出一个直击人心的问题:AI浪潮席卷而来,人人都在焦虑被替代,到底什么能力,才是人生最坚实的底气? 有人说,是驾驭AI的能力,毕竟工具迭代太快&#…...

MYSQL order by , group by练习

一:MYSQL执行顺序 SQL 语句的逻辑处理顺序如下所示。每个步骤都会生成一个虚拟表,作为下一步的输入,直到最终返回结果给客户端-1-5。 执行顺序子句作用描述1FROM / JOIN确定数据源,对指定的表执行笛卡尔积,生成初始的…...

个人博客地址自测试

1...

超实用机器视觉框架:VS2019 一键编译,开启视觉检测新旅程

机器视觉框架源码vs2019可以直接编译 应用于视觉检测 AOI视觉检测 机械手定位 点胶 插件 激光切割 视觉螺丝 视觉贴合 激光焊接机 视觉裁板仅供学习使用,不提供技术,想所有功能都…...

SEO Machine:解锁高效的SEO内容创作之旅!

SEO Machine:提升内容创造与优化的利器 在当今网络环境中,优质的SEO内容不仅是吸引流量的关键,也是品牌形象和市场竞争力的重要一环。为满足商业需求,SEO Machine应运而生。这是一个专为长格式、SEO优化博客内容创造而设计的工作空间,旨在帮助用户更好地研究、撰写、分析…...

【第三十六周】论文阅读02

文章目录摘要Abstract一、《Nougat: Neural Optical Understanding for Academic Documents》1. 摘要2. 介绍3. 相关工作4. 模型4.1 设置4.2 数据增强5. 数据集5.1 页面拆分5.2 真实标注伪影6. 核心贡献总结二、《A Survey of Token Compression for Efficient Multimodal Larg…...

从零开始写一个微信小程序:完整代码实战指南(入门篇)

引言 在移动互联网时代,微信小程序以其“即用即走”、开发成本低、流量获取易等优势,成为开发者必须掌握的技能之一。本文将带你从零开始,不讲废话,只写代码,完成你的第一个微信小程序。我们将从环境搭建开始&#xf…...

从命令行到认知时代:GitHub 指令使用与自动化工作流深度实践

前言在软件开发的历史中,很少有工具像Git这样深刻地改变了我们协作的方式,也很少有平台像GitHub这样,将代码托管变成了一个集成的社交化开发中心。对于许多开发者而言,与GitHub的交互长期处于一种“分裂”的状态:使用G…...

13.jmeter性能测试高并发及高频率弱压力及持续高并发

高并发同一时间有大量请求或用户访问系统,比如春运抢火车票,抢演唱会门票高并发测试是为了发现系统瓶颈,保证上线稳定,了解系统的最大承载量。同步定时器实现高并发同步定时器实现高并发可测试瞬间高负载,比如秒杀/抢购…...

双馈风电机组并网仿真建模:四机九节点系统中的虚拟惯量与下垂控制技术,超速减载与桨距角控制调频策...

双馈风电机组并网matlab/simulink仿真建模,四机两区域/三机九节点系统,虚拟惯量下垂控制/超速减载/桨距角控制调频,风储联合调频,低电压穿越故障等双馈风电机组并网后的动态特性直接影响电网稳定性。咱们直接上Simulink撸个三机九…...

永磁同步电机死区效应补偿策略研究仿真,该仿真利用已知的死区时间,直接将补偿时间补到三相占空比中...

永磁同步电机死区效应补偿策略研究仿真,该仿真利用已知的死区时间,直接将补偿时间补到三相占空比中,无需知道额外的参数。 采用参考电流判断电流的方向,避免传统根据实际电流判断方向在零电流箝位的误差影响。 该模型所有电机和控…...

光刻机十大核心卡脖子领域:用第一性原理,拆解中国芯片的破局之路

光刻机十大核心卡脖子领域:用第一性原理,拆解中国芯片的破局之路 作者:华夏之光永存 本篇不是民科,不是胡言乱语,光刻机并不难,难的是思维被锁死。等我有空,我会写一百篇落地文章,详…...

核心揭秘:epoll_wait 的数据到底从哪来?

一、 核心揭秘:epoll_wait 的数据到底从哪来? 很多初学者(甚至部分老手)都存在一个致命的认知误区:认为当网络事件发生时,Linux 内核会立刻去分析这个连接,临时拼凑出一个 epoll_event 结构体,然后塞给 epoll_wait。 错!大错特错! 根据笔记提炼,真实的底层流转机…...

导师推荐 8个一键生成论文工具:全领域适配,开题报告+学术论文+毕业论文高效写作测评

在学术研究日益数字化的今天,论文写作已成为高校师生和科研人员日常工作中不可回避的重要环节。然而,面对繁重的写作任务、复杂的文献检索流程以及不断升级的AIGC内容检测机制,许多学者仍深陷效率低下的困境。为了帮助用户更高效地选择适合自…...

windows操作系统上的Java版更新

如何安装 JDK 17 1. 下载 JDK 17 访问 Oracle JDK 17 下载页面 或使用开源的 Adoptium (Eclipse Temurin)。 选择与您操作系统匹配的安装包(Windows x64 MSI 或压缩包)。 2. 安装并配置环境变量 以 Windows 为例: 运行安装程序&#xff…...

用时光本重构工作时间管理:从个人规划到团队协同的全流程方案

矩阵日历 智能分析 团队协同,让时间管理更简单 管理大师杜拉克曾说:“不能管理时间,便什么也不能管理”,这句话道尽了时间管理对于工作的核心意义 —— 时间是世界上最短缺的资源,除非严加管理,否则就会…...

架构不是套娃:为什么简单的代码胜过无脑的层次

在软件开发中,我们常常被教导要“优化架构”、“抽象层次”、“面向未来”。于是,很多人养成了一个习惯:无论功能多简单,先搭几层抽象再说——接口、实现类、工厂、策略、服务层……文件夹层层嵌套,类名整整齐齐&#…...

基于EKF和UKF的电力系统动态状态估计方法验证与实现【有参考文献】(39节点系统为例)

【有参考文献】基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计 该程序对应文章《Power System Dynamic State Estimation Using Extended and Unscented Kalman Filters》,电力系统状态的准确估计对于提高电力系统的可靠性、弹性、安全性和稳定性具有重…...

编程入门指南:从概念到实践

1. 编程入门介绍在现代社会,编程已成为一项重要的技能。这是一门通过代码在机器上创造出动态世界的技术,对于许多人来说,它如同《黑客帝国》中的数字雨般神秘。然而,编程更像是一种特殊的写作艺术。就像作家通过文字创造故事一样&…...

VAE变分自编码器VAE Loss基础数学知识

一、基础数学知识1.1凸函数的定义下面我们要讲到生成模型。首先我们复习一些要用到的数学知识。第一个是凸函数的定义,因为不同教材对于凸函数的定义不同,为了避免混淆,这里我们讨论的是下凸函数,也就是函数曲线向下突出。下凸函数…...

各子群独立进化

【有参考文献】基于并行分布式差分算法的含需求响应家庭微网能量管理 该程序是《Demand Response of Residential Houses Equipped with PV-Battery Systems: An Application Study Using Evolutionary Algorithms》完全复现主要做的是一个家庭微网能量管理系统,考虑…...

LangChain/LangGraph/OpenAI核心概念+实战指南

LangChain/LangGraph/OpenAI核心概念深度拆解(含库关联+完整用法) 一、核心认知重构:从「封装层级」看透所有概念 先建立四层封装模型(这是理解所有概念的核心框架),同时明确各层级与langchain、langgraph、openai、langchain-openai的核心关联: 封装层级 核心目标 代…...