rag笔记4

摘要

本周学习分为RAG会话记忆和LangChain文档加载器两部分,短时会话记忆只缓存一轮对话、读写快且无需持久化,长时会话记忆完整留存全部对话并持久存储。文档加载器作为RAG的数据入口,能把各类文件转换成标准Document对象,我学习了txt、PDF、CSV、JSON四种文件对应的加载器,掌握了它们各自的适用场景。

abstract

This week covers two parts: RAG session memory and LangChain document loaders. Short-term session memory only caches a single round of dialogue, featuring fast read and write speeds without persistent storage, while long-term session memory retains all dialogue records completely with persistent storage. As the data entry point of RAG, document loaders can convert various files into standard Document objects. I have learned loaders corresponding to four types of files including TXT, PDF, CSV and JSON, and mastered their respective applicable scenarios.

一、Memory会话记忆

短会话记忆

RAG 中的短会话记忆属于临时上下文缓存,仅留存当前一轮对话的交互信息,只抓取用户最新提问与模型上一轮回复,存储生命周期仅限单次问答流程。它不做历史对话持久化,检索文档时仅结合近期少量对话语义,优势是读取速度快、占用资源少,适合单次独立提问、无需追溯过往交流的轻量问答场景,一旦开启全新提问轮次,旧的短时记忆数据就会直接清空。实现代码如下:

python 复制代码
# 创建一个新的链,对原有链增强功能:自动附加历史消息
conversation_chain = RunnableWithMessageHistory(
    base_chain,     # 被增强的原有chain
    get_history,    # 通过会话id获取InMemoryChatMessageHistory类对象
    input_messages_key="input",             # 表示用户输入在模板中的占位符
    history_messages_key="chat_history"     # 表示用户输入在模板中的占位符
)

长会话记忆

长会话记忆用于留存完整多轮对话历史,会持久存储全部用户问题、模型回答、对话时间等完整交互文本,支持跨轮次、跨时段追溯全局对话逻辑。执行 RAG 检索时会把全部历史对话语义融入查询向量,让模型理解贯穿全程的上下文需求,通常依托数据库、向量库落地保存,缺点是对话越多数据量越大、检索耗时会小幅上升,主要适配连续多轮聊天、需要连贯语境的长对话业务。实现代码分为写入和读取两个部分

python 复制代码
    #将数据写入文件
    def add_messages(self, messages: Sequence[BaseMessage]) -> None:
        # Sequence序列 类似list、tuple
        all_messages = list(self.messages)      # 已有的消息列表
        all_messages.extend(messages)           # 新的和已有的融合成一个list
        new_messages = [message_to_dict(message) for message in all_messages]
        # 将数据写入文件
        with open(self.file_path, "w", encoding="utf-8") as f:
            json.dump(new_messages, f)
    
    #将文件从数据中读入
    @property       # @property装饰器将messages方法变成成员属性用
    def messages(self) -> list[BaseMessage]:
        # 当前文件内: list[字典]
        try:
            with open(self.file_path, "r", encoding="utf-8") as f:
                messages_data = json.load(f)    # 返回值就是:list[字典]
                return messages_from_dict(messages_data)
        except FileNotFoundError:
            return []

二、langchain loders

LangChain Loaders(文档加载器)是 LangChain 中专门用于从各种数据源读取、提取原始数据,并将其转换为 LangChain 标准 Document 对象的工具模块,是 RAG 流程的第一步入口组件。常用的有CSVLoader、JSONLoader、PyPDFLoader以及TextLoader。

TextLoader(文本文件加载器)

TextLoader

是读取纯 txt 文件的加载器,输出统一 Document 实例,适配本地无格式文本文档。基础创建代码:

python 复制代码
from langchain_community.document_loaders import TextLoader
loader = TextLoader(
    file_path="./article.txt", encoding="utf-8"
)
docs = loader.load()
  • page_content:txt 文件完整文本内容
  • metadata:字典,默认携带文件路径、文件名信息

PyPDFLoader(PDF 文件加载器)

PyPDFLoader 用于解析 PDF 电子文档,会按 PDF 分页生成多个 Document 对象,每一页对应一条文档实例。基础创建代码:

python 复制代码
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(
    file_path="./book.pdf"
)
docs = loader.load()
  • page_content:PDF 单页提取出的文字内容
  • metadata:字典,自带 page(当前页码)、source(pdf 文件路径)字段

CSVLoader(表格加载器)

CSVLoader 读取 csv 表格文件,将表格每行数据整合为一段文本,一行生成一个 Document 实例。基础创建代码:

python 复制代码
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader(
    file_path="./data.csv", encoding="utf-8"
)
docs = loader.load()
  • page_content:当前行所有列名 + 对应数值拼接成的文本
  • metadata:字典,记录行号、csv 文件路径、各列原始数据

JSONLoader(JSON 数据加载器)

JSONLoader 读取本地 JSON 文件,依靠 jq 语法筛选目标数组数据,每一条匹配数据生成一个 Document。基础创建代码:

python 复制代码
from langchain_community.document_loaders import JSONLoader
loader = JSONLoader(
    file_path="./info.json", jq_schema=".data[]", text_content_key="content"
)
docs = loader.load()
  • page_content:JSON 中指定字段的文本内容
  • metadata:字典,保存 JSON 文件路径、当前整条原始 JSON 对象数据
相关推荐
wixzjsh10 分钟前
51单片机学习笔记|最小系统、中断、定时器+数码管动态扫描实现0~9999计数器
笔记·学习·51单片机
snow@li21 分钟前
服务器运维: k3s 安装及配置的完整操作笔记
笔记
影视飓风TIM1 小时前
C++异常与RAII智能指针笔记
开发语言·c++·笔记
YHHLAI2 小时前
基于 Next.js 16 + Redis 的全栈笔记博客系统
javascript·redis·笔记
-SOLO-11 小时前
开发笔记-摸鱼输入法
笔记
疯狂打码的少年14 小时前
【计算机网络】TCP/IP协议族(四层体系结构,与OSI对比)
网络·笔记·tcp/ip·计算机网络
xqqxqxxq14 小时前
AI Agent学习:Agent协作工具技术笔记(李博杰《深入理解 AI Agent》4.6观后总结)
笔记·学习
彧azz16 小时前
数据结构:关于图的学习
c语言·数据结构·笔记·学习·算法
自小吃多16 小时前
高云 FPGA 添加时序约束笔记
笔记·fpga开发
彧azz17 小时前
二叉搜索树学习记录
c语言·数据结构·笔记·算法