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

大模型RAG (三)

一、文档的加载和分割

1、文档LLM回复系统搭建

2、把文本切分成chunks

把文本切分成chunks的方式有很多种:
1.按照句子来切分
2.按照字符数来切分
3.按固定字符数结合overlapping window
4. 递归方法 RecursiveCharacterTextSplitter

案例1: 按照句子来切分

import re txts=("大语言模型是基于深度学习架构、通过海量文本数据训练而成的人工智能系统。它能够理解自然语言、生成连贯文本,并在对话、翻译、摘要、创作等多种任务中表现出接近人类的表达能力。模型的性能通常与其参数量、训练数据规模和优化算法密切相关。随着技术不断迭代,大模型已从单一文本生成,逐步走向多模态理解、逻辑推理与工具调用,成为新一代人工智能应用的重要基础。") #正则表达式匹配中文句子结束的标点符合 sentences = re.split(r'(。| !|?|\...\...])', txts) #重新组合句子和结尾的标点符合 chunks=[sentence +(puncutation if puncutation else '') for sentence, puncutation in zip(sentences[::2], sentences[1::2])] for i ,chunk in enumerate(chunks): print(f"chunk {i+1}:{len(chunk)}:{chunk}")

案例2:按照字符数来切分

import re txts=("大语言模型是基于深度学习架构、通过海量文本数据训练而成的人工智能系统。它能够理解自然语言、生成连贯文本,并在对话、翻译、摘要、创作等多种任务中表现出接近人类的表达能力。模型的性能通常与其参数量、训练数据规模和优化算法密切相关。随着技术不断迭代,大模型已从单一文本生成,逐步走向多模态理解、逻辑推理与工具调用,成为新一代人工智能应用的重要基础。") def split_fixed_count(text,count): return [text[i:i+count] for i in range(0,len(text),count)] #如果按照每50个字符来切分文本 chunks=split_fixed_count(txts,50) for i ,chunk in enumerate(chunks): print(f"chunk {i+1}:{len(chunk)}:{chunk}")

案例3:按固定字符数结合overlapping window

import re txts=("大语言模型是基于深度学习架构、通过海量文本数据训练而成的人工智能系统。它能够理解自然语言、生成连贯文本,并在对话、翻译、摘要、创作等多种任务中表现出接近人类的表达能力。模型的性能通常与其参数量、训练数据规模和优化算法密切相关。随着技术不断迭代,大模型已从单一文本生成,逐步走向多模态理解、逻辑推理与工具调用,成为新一代人工智能应用的重要基础。") #将文本切分成多个部分 def sliding_chunks(text,chunk_size,step): return [text[i:i+chunk_size] for i in range(0,len(text),step)] #如果按照每100个字符来切分文本,步长为50 chunks=sliding_chunks(txts,100,50) for i ,chunk in enumerate(chunks): print(f"chunk {i+1}:{len(chunk)}:{chunk}")


案例4: 递归方法 RecursiveCharacterTextSplitter

import re from langchain_text_splitters import RecursiveCharacterTextSplitter txts = ( "大语言模型是基于深度学习架构、通过海量文本数据训练而成的人工智能系统。它能够理解自然语言、生成连贯文本,并在对话、翻译、摘要、创作等多种任务中表现出接近人类的表达能力。模型的性能通常与其参数量、训练数据规模和优化算法密切相关。随着技术不断迭代,大模型已从单一文本生成,逐步走向多模态理解、逻辑推理与工具调用,成为新一代人工智能应用的重要基础。") # 初始化分割器 # chunk_size: 每个块的最大长度 # chunk_overlap: 每个块之间的重叠长度 # length_function: 计算文本长度的函数,默认是len # RecursiveCharacterTextSplitter会递归地尝试不同的分隔符(如段落、句子、单词等)来分割文本,确保分割后的文本块尽可能完整且有语义意义 text_splitter = RecursiveCharacterTextSplitter(chunk_size=50, chunk_overlap=10, length_function=len) #一个文本块列表,每个文本块的长度不超过50个字符,且相邻文本块有10个字符的重叠部分。 chunks = text_splitter.split_text(txts) for i, chunk in enumerate(chunks): print(f"chunk {i + 1}:{len(chunk)}:{chunk}")

注意:

安装: pip install langchain

安装: pip install langchain-text-splitters
新版(1.2.15):from langchain_text_splitters import ...
LangChain 官方做了模块化拆分,文本分割器独立成包了。

二、向量检索


1、检索的方式

  • 关键字搜索:通过用户输入的关键字来查找文本数据。
  • 语义搜索:不仅考虑关键词的匹配,还考虑词汇之间的语义关系,以提供更准确的搜索结果。


2、关键字搜索
我们需要把相关的信息存储在Redis中。我们需要先安装一个Redis。先下载再直接解压缩。

然后cmd进入到对应的目录。然后输入redis-server.exe

再安装一个RDM工具来查看导入的数据

连接到Redis服务器,默认有16个数据库

将json中的数据存入到Redis数据库中

python安装 pip install redis

import redis # pip install redis from openai import OpenAI from dotenv import load_dotenv import json # 默认加载项目根目录下的 .env 文件 load_dotenv() # 1. 获取client对象,OpenAI类对象 client=OpenAI() #2. 获取redis对象 #localhost:指定Redis服务器地址为本地主机 #6379:指定Redis服务器端口为6379 #db=0:指定Redis数据库索引为0;(Redis默认有16个数据库(0-15)) #decode_responses=True:指定Redis返回的数据类型为字符串 r = redis.Redis(host='localhost', port=6379, db=0,decode_responses=True) #3.读取数据 with open('train_zh.json', 'r', encoding='utf-8') as f: data = json.load(f) #4.取出问题 instrutions= [item['instruction'] for item in data[0:800]] #5.输出数据 outputs=[item['output'] for item in data[0:800]] #6.将数据存入redis for instrution,output in zip(instrutions,outputs): #存入Redis,值序列化为JSON r.set(instrution,output) #key为问题,value为答案 #7.查询数据:根据关键字搜索instruction中包含该关键字的条目 def search_instrutions(keyword,top=3): # 通过模糊匹配 keys=r.keys(pattern='*'+keyword+'*') data=[] #遍历通过模糊匹配找到的所有键 for key in keys: data.append(r.get(key)) return data[:top]

http://www.jsqmd.com/news/680570/

相关文章:

  • 3D 地球卫星轨道可视化平台开发 Day13(卫星可视化交互优化+丝滑悬停聚焦)
  • 如何选择空运物流公司?2026年4月推荐评测口碑对比五家服务知名跨境电商时效延误 - 品牌推荐
  • 2026年4月全球AGV叉车厂家推荐:十大口碑产品评测对比领先仓储搬运效率低场景 - 品牌推荐
  • 2026年4月上海办公室出租公司推荐:五家口碑服务评测对比领先初创团队快速入驻 - 品牌推荐
  • 第三章 低通滤波(LPF)
  • Java 25虚拟线程上线倒计时(某千万级金融网关72小时迁移实录:QPS翻倍、GC停顿下降92%)
  • GRBL配置避坑指南:如何根据你的CNC雕刻机调整defaults.h参数(步进电机/加速度/回零)
  • 2026地埋水箱厂家精选指南:定压供水设备,、小区高层无负压增压二次供水设备、成都恒压供水设备厂家、战时储备水箱,选择指南 - 优质品牌商家
  • 如何选择空运物流公司?2026年4月推荐评测口碑对比五家服务领先跨境电商物流成本高 - 品牌推荐
  • 如何选择上海办公室出租公司?2026年4月推荐评测口碑对比五家服务知名企业搬迁成本控制痛点 - 品牌推荐
  • 如何选择AGV叉车厂家?2026年4月推荐评测口碑对比十家服务领先仓储空间紧张痛点 - 品牌推荐
  • Java 25虚拟线程性能断崖式跃迁:阿里云真实订单链路压测数据(RT从412ms→23ms,附全链路火焰图)
  • 别再只写JS了!用C++给OpenHarmony应用“开挂”:NAPI实战入门(附完整Demo)
  • 仅剩最后217份!《.NET 11 AI加速开发手册》v3.2(含CUDA Graph封装库+量化感知训练C#适配器)限时开放下载
  • 2026年围栏网行业标杆盘点:防护网生产厂家/主动边坡防护网/主动防护网厂家/厂区围栏网/双边丝围栏网/围栏网厂家/选择指南 - 优质品牌商家
  • 从J.B. Priestley的《英国人的未来》看技术时代的“Admass”困境:我们是否也在被算法与消费主义定义?
  • 2025-2026年国际AGV叉车厂家推荐:十款口碑产品评测对比顶尖电商仓库高峰期拣选压力大痛点 - 品牌推荐
  • 2026年4月电竞馆设计装修公司推荐:五家口碑服务评测对比领先连锁品牌降本增效 - 品牌推荐
  • 2026年4月国际空运物流公司推荐:五家口碑服务评测对比领先企业紧急备货断货焦虑 - 品牌推荐
  • 【仅限首批读者】JDK 25虚拟线程生产就绪检查表(含线程转储解析模板、监控埋点规范、告警阈值公式)
  • 医疗AI部署生死线(Docker 27合规配置黄金7步法)
  • 如何选择AGV叉车厂家?2026年4月推荐评测口碑对比十家产品领先仓储升级效率瓶颈 - 品牌推荐
  • 为什么你的深度学习项目总是缺少一张清晰的架构图?
  • 2026年4月中国空运物流公司推荐:五家口碑服务评测对比领先外贸履约成本控制 - 品牌推荐
  • 成都CIK细胞储存推荐:四川nk细胞储存、四川免疫细胞储存、四川干细胞制备、四川细胞储存、成都CIK细胞、成都TIL细胞选择指南 - 优质品牌商家
  • VideoAgentTrek-ScreenFilter惊艳案例:高效过滤直播流中的违规弹幕与浮动广告
  • Dify医疗安全配置速查手册(含GDPR/《个人信息保护法》/《医疗卫生机构信息系统安全管理办法》三重映射表)
  • 2026届毕业生推荐的五大AI论文工具实际效果
  • ACPI _DSM方法全解析:从UUID到Function Index的实战指南
  • 2026机床表面喷漆优质服务商推荐榜:液压机翻新/设备油漆翻新喷漆/车床喷漆/车床翻新喷漆/专业机床喷漆/二手机床翻新/选择指南 - 优质品牌商家