ChatGPT | LangChain的文本切割方法对比

【无标题】基于LangChain+ChatGPT+Chroma搭建自有知识库问答机器人 下图需要注意的是vector_store(向量数据库),当用户提出的问题被向量化后在vector_store(向量数据库 )内会通过计算embedding向量之间的余弦相似度来获取两个特征值的相似性。最后根据用户对问题与知识库内的内容相似度的要求给出内容。 阅读详情

本文来自http://blog.youkuaiyun.com/hellogv/ ,引用必须注明出处!

ChatGPT面向对话格式的文本理解很好,但如果要把网络上的文章让ChatGPT直接分析则会有格式的问题。文本清洗是个大课题,讲起来需要很多篇幅,优化起来前路漫漫。

本文基于稍微加工后的文本内容,使用LangChain的CharacterTextSplitter 和 RecursiveCharacterTextSplitter两个文本切割方法做效果对比,因为文本切割的效果直接影响知识库方向ChatGPT反馈的效果。

先说结论,CTS比RTCS稍好,利用明确的段落分隔符可以避免一些初级问题发生,一些高级的问题两者都会发生。

以下文本内容来自大爆发:最后一波上半年能开标的50多个项目,预算超50亿元,标黄的内容是测试关键数据。

直接贴出运行结果,红框是出错的地方都是来自RTCS(RecursiveCharacterTextSplitter):

 CTS 返回结果是使用CharacterTextSplitter做text_splitter,它是基于符号做段落切割,本文选择####作为段落的分割符。

RTCS 返回结果是使用RecursiveCharacterTextSplitter,它是基于固定大小做段落切分。

再次总结结论,CTS比RTCS稍好,可以避免一些初级问题发生。


接下来贴出源代码,分为两部分:input.py和output.py。

以下是Input.py的源码,是很关键很关键很关键的地方,用embedding和切割存数据到向量数据库:

import os
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter

# 1 定义embedding
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxx"
os.environ["OPENAI_API_BASE"] = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002", deployment="lk-text-embedding-ada-002", chunk_size=1)

# 2 定义文件 
loader = TextLoader(".\\单文件\\项目信息.txt", "utf-8")
pages = loader.load_and_split()

# 3 重要!!!初始化加载器
# 按符号切分段落
text_splitter_CTS = CharacterTextSplitter(
    separator = "####",
    chunk_size = 500, #chunk_size = 1000,
    chunk_overlap = 0
)
split_docs_CTS = text_splitter_CTS.split_documents(pages)
print(f'CharacterTextSplitter documents:{len(split_docs_CTS)}')
#print(split_docs_CTS)
#写入向量数据库
print(f'写入CTS向量数据库')
vectordb = Chroma.from_documents(split_docs_CTS, embedding=embeddings, persist_directory="./CTS/")
vectordb.persist()

# 按固定尺寸切分段落
text_splitter_RCTS = RecursiveCharacterTextSplitter(
    chunk_size = 500, #chunk_size = 1000,
    chunk_overlap = 200
)
split_docs_RCTS = text_splitter_RCTS.split_documents(pages)
print(f'RecursiveCharacterTextSplitter documents:{len(split_docs_RCTS)}')
#print(split_docs_RCTS)
#写入向量数据库
print(f'写入RCTS向量数据库')
vectordb = Chroma.from_documents(split_docs_RCTS, embedding=embeddings, persist_directory="./RTCS/")
vectordb.persist()
 

以下是Output.py的源码,调用ChatGPT基于向量数据库搜索出来的文字片段组织文字来回答:

import os
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain import OpenAI,VectorDBQA
from langchain.chains import RetrievalQA
from typing import Dict, Any

os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxxxxxxxxx"
os.environ["OPENAI_API_BASE"] = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"

dict: Dict[str, Any] = {
    "deployment_id": "lk-gpt-35-turbo"
}
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002", deployment="lk-text-embedding-ada-002", chunk_size=1)
openAiLLm = OpenAI(temperature=0.9, model_name="gpt-35-turbo", model_kwargs=dict, max_tokens=100)


db_CTS = Chroma(persist_directory="./CTS/", embedding_function=embeddings)
db_RTCS = Chroma(persist_directory="./RTCS/", embedding_function=embeddings)

print('----------------')

question_list=["介绍一下重庆市新型数字交通物联网大数据服务平台的金额、截止时间",
               "介绍一下广州城市职业学院项目的金额、截止时间",
               "介绍一下吴中区智慧教育项目的预算、截止时间",
               "介绍一下之江实验室项目的预算、截止时间"]

for i in range(0,len(question_list)):
    question_text=question_list[i]

    qa_CTS = RetrievalQA.from_chain_type(llm=openAiLLm, chain_type="stuff", retriever=db_CTS.as_retriever(), return_source_documents=False)
    # 进行问答
    result = qa_CTS({"query": question_text}) 
    print("CTS 返回结果:" + str(result))#.split('\n')[0])
    print('------')

    qa_RTCS = RetrievalQA.from_chain_type(llm=openAiLLm, chain_type="stuff", retriever=db_RTCS.as_retriever(), return_source_documents=False)
    # 进行问答
    result = qa_RTCS({"query": question_text}) 
    print("RTCS 返回结果:" + str(result))#.split('\n')[0])
    print('***********************************************')

深入理解RecursiveCharacterTextSplitter:文本分割的递归魔法 阅读详情

相关推荐

Langchain使用之 - 文本分割Splitter

通过实际代码例子介绍如何使用Lanchain的文本分割器对文本进行分割

qiaotl的博客 2万+

推荐三个搭建专有知识库+大模型智能助手开源项目

“介绍三个开源项目Dify、FastGPT和LangChain-Chatchat。这些项目使用了各种前沿技术,具有模块化设计、易扩展性、Docker支持等特点,非常适合二次开发。无论是在应用中自动化任务,构建知识库,还是进行问答系统的搭建,都有着广泛的用途。”01—Dify官方地址:https://dify.ai/开源地址:https://github.com/langgenius/difyDi...

1万+

ChatGPT 上下文突破实战:3种长文本处理方案对比与性能实测

本文深入探讨了ChatGPT在处理长文本时的上下文限制问题,对比了三种工程化解决方案:分块投喂、API参数优化和外部向量库集成。通过实测数据揭示了不同模型下的性能差异,为开发者提供了处理技术文档、法律合同等长文本的高效策略。特别推荐混合策略,结合语义分块和向量库,显著提升准确率和效率。

java2000.net 419

FastGPT,知识库AI !保姆级教程,5分钟上手

国内直联GPT!清风 AIchat 手把手保姆级使用教程,适合小白“未来几年,所有组织的管理、业务都将AI化,如何利用AI技术,是每一个管理者必须思考的问题”自从去年 12 月 ChatGPT 发布后,带动了新的一轮应用交互革命。尤其是 GPT-3.5 接口全面放开后,LLM 应用雨后春笋般快速涌现。企业信息化1.0 是电算化,2.0 是移动化,3.0 就是 AI 智能化了。企业 AI 化时代,员工关心是如何提高写作效率、工作效率;管理者关心的是如何提高组织的整体效率,促进业务,带动销售,提效降费。

favxxx的博客 2万+

LangChain入门指南:从RAG到智能体,构建AI应用的核心框架与实践

在AI应用开发领域,大语言模型(LLM)的API调用仅是起点。面对私有数据集成、复杂任务编排与工具调用等实际挑战,开发者需要更系统的工程化框架。LangChain应运而生,它通过模块化设计,将LLM、向量数据库与外部工具等组件标准化连接,显著降低了构建智能应用的复杂度。其核心价值在于提供了清晰的抽象层,如用于处理上下文的Chain、实现知识增强的RAG(检索增强生成)架构,以及驱动自主决策的智能体(Agent)机制。这些组件共同支撑了从文档问答、数据分析到自动化工作流等多种应用场景。对于希望高效利用AI能力

weixin_30791095的博客 280

(17-3-01)检索增强生成(RAG):Recursively文本分割器

文本分割器(Text Splitters)是 LangChain 中用于处理和转换文档的工具,可以帮助开发者将长文档分割成更小的、语义上有意义的块,以适应我们的应用程序或模型的上下文窗口。

码农三叔 2638

使用langchain+chatGPT搭建自有知识库问答机器人

langchain + chatgpt构建自有知识库的知识问答系统

冰血ANG的博客 6800

【参数不确定】敏感性分析(sensitivity analysis)

【运筹学】灵敏性分析

羊肉蛋花汤的博客 14万+

# AIGC应用 ## 深度学习#向量数据库知识问答前期操作:文档切割/文档向量/chatgpt + langchain| NLTK | BERT | text2vect |

本文是利用chatgpt + langchain| NLTK | BERT | text2vect |四种文档切割的效果测试研究,附上源码可以自己实践

weixin_45312236的博客 1557

无监督低照度增强实战:用ZeroDCE和SCI拯救你的夜间照片(附PyTorch代码)

本文深入探讨了无监督低照度图像增强技术,重点解析了ZeroDCE和SCI两大代表性模型的核心原理与实战应用。通过对比分析两者的技术路径、网络结构及性能特点,并附上详细的PyTorch代码实现,旨在帮助读者掌握无需配对数据即可有效提升夜间照片画质的深度学习解决方案。

git9versioner的博客 489

深入解析Vivado FIFO的Standard与FWFT模式:性能对比与应用场景

本文深入解析了Vivado FIFO的Standard与FWFT两种工作模式的核心差异。通过对比数据就绪时机、读延迟、控制逻辑和有效深度等关键特性,并结合图像处理、数据包转发等典型应用场景,为FPGA设计者提供了清晰的选择依据和实战配置指南,帮助优化数据流性能与设计效率。

weixin_29219189的博客 253

基于Langchain+向量数据库+ChatGPT构建企业级知识库

▼最近直播超级多,预约保你有收获近期直播:《基于 LLM 大模型的向量数据库企业级应用实践》1—LangChain 是什么?众所周知 OpenAI 的 API 无法联网的,所以如果只使用自己的功能实现联网搜索并给出回答、总结 PDF 文档、基于某个 Youtube 视频进行问答等等的功能肯定是无法实现的。数据感知:将 LLM 模型链接到不同的数据源,比如:ChatGPT 访问 PDF 等;代理:...

musicml的博客 1316

游戏封包抓取实战:雷电模拟器+ProxyDroid+查尔斯3.93+WPE全流程解析

本文详细解析了使用雷电模拟器、ProxyDroid、查尔斯3.93和WPE进行游戏封包抓取的全流程实战。通过环境搭建、代理配置与工具协同,手把手教你抓取HTTP/HTTPS及原始Socket数据,涵盖从流量转向、证书安装到数据分析和常见问题排查,是学习游戏网络协议分析与安全测试的实用指南。

u8v9w0x1y的博客 441

langchain ChatGPT AI私有知识库

原理就是把文档变为向量数据库,然后搜索向量数据库,把相似的数据和问题作为prompt, 输入到大模型,再利用GPT强大的自然语言处理、推理和分析等方面的能力将答案返回给用户

九曜 1730

k8s上分离集群seatunnel部署(生产推荐)

k8s上分离集群seatunnel部署(生产推荐)

寂夜了无痕的博客 884

PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来

PPT里全是文字且很拥挤怎么办?本篇教你使用7种不同的排版让你的PPT瞬间变得高大上起来。

打造全国最全的AI Agent开发知识领域的博客 5021

LangChain和RAG

LangChain和RAG

sky学linux的博客 273

【Agent】AI Agent架构趋势及演进

本文系统介绍了AI Agent架构的发展趋势和技术框架,涵盖单Agent与多Agent系统设计、提示词工程与上下文管理、SpringAI开发框架等关键技术。重点阐述了AI原生应用参考架构,包括Nacos配置管理、Higress AI网关、RocketMQ会话状态管理等核心组件解决方案。同时深入探讨了AI应用可观测性体系,包含OpenTelemetry全链路追踪、关键指标监控以及基于LoongSuite开源工具的数据采集评估方法,为构建高效可靠的AI应用提供了全景式技术参考。

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 1104

ChatGPT上传PDF失败问题解析与高效解决方案

最近在做一个需要集成AI对话能力的项目时,遇到了一个挺让人头疼的问题:通过API向ChatGPT上传PDF文件时,总是莫名其妙地失败。有时候是文件太大传不上去,有时候是格式报错,还有时候网络一波动就直接超时了。这直接拖慢了整个项目的开发进度,每次调试都像在开盲盒。相信不少开发者朋友也遇到过类似的情况。明明本地文件好好的,一到API调用环节就出问题,查日志也经常只给个模糊的错误码,排查起来非常费时费力。

2600_94959817的博客 691

【论文复现】——基于NDT与ICP结合的点云配准算法(matlab版)

基于NDT与ICP结合的点云配准算法matlab版

点云侠的博客 490

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LangChain 入门

LangChain是AI时代开发智能体(Agent)的核心工具链,旨在弥补大模型在知识滞后、无法交互外部系统及缺乏记忆三大短板。它通过RAG增强知识、Tools实现外部调用、Memory保持上下文,支撑企业级应用如智能客服、自动工作流与多模态系统。其生态由LangChain(基础组件)、LangGraph(复杂编排)、DeepAgent(高层抽象)与LangSmith(监控评估)四大支柱构成,已成为构建高效、可落地的AI应用主流框架。

ctlover的博客 182

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LangChain

(langchain里面整合了各种开源大模型,它可以和Qwen、deepseek、openai、gpt等整合,之前连接需要去各自官网查找相应的连接语法,现在langchain框架已经帮忙整合好了)

Karen博客 229

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LinkSwift 网盘直链下载助手:支持9大网盘的浏览器用户脚本安装与使用指南

网盘里的文件下载速度被限制、每个平台都要单独装一个客户端,是很多用户的日常烦恼。LinkSwift(网盘直链下载助手)是一个基于 JavaScript 的浏览器用户脚本,运行在 Tampermonkey 或 Violentmonkey 等脚本管理器里,覆盖百度网盘、阿里云盘、中国移动云盘、天翼云盘、迅雷云盘、光鸭云盘、夸克网盘、UC 网盘、123 云盘 9 大平台,帮你把文件解析成网盘直链,再交给

gitblog_00912的博客 514

ChatGPT | Word表格整体输出

用ChatGPT往往是做企业知识库,所以会出现一个场景,即员工想让ChatGPT讲解包含表格的内容。 要达到效果,本文的做法是: 1、用pandoc把Doc文档转为MarkDown而且是GitHub模式,是重点,因为MarkDown可以作为文本被embedding并且输出内容包含原汁原味的表格标签 2、用"\n## "作为MarkDown文件的切割符,用TXTLoader读取MD文件并embedding 3、这里只用embedding而不用ChatGPT,本文只做整体表格输出,不做表格

hellogv的专栏 3957

LangChain 概述:从大模型到智能体应用的桥梁

文章摘要 LangChain是一个连接大语言模型与外部工具、数据源的智能体开发框架,旨在解决LLM的知识滞后、幻觉问题和执行能力不足等局限性。其发展经历了从基础模块到智能体平台的演进,2025年发布的v1.2版本标志着框架成熟,采用LangGraph进行智能体编排,支持结构化输出、多模态和中间件系统。主要应用于RAG、智能体构建、对话系统等场景,通过模块化设计(core/classic/community)满足不同开发需求。作为大模型应用开发的关键工具,LangChain帮助开发者快速构建具备推理和行动能力

2301_80809484的博客 426

基于InternLM与LangChain构建本地RAG知识库:从原理到实践

检索增强生成(RAG)是一种将大语言模型与外部知识源相结合的技术范式,其核心原理是通过检索机制从向量数据库中获取相关信息,再交由大模型进行生成,从而提升回答的准确性和可靠性。这一技术解决了大模型在处理专业、实时或私有数据时可能出现的“幻觉”问题,具有重要的工程实践价值。在应用场景上,RAG特别适用于构建企业知识库、个人知识助手以及需要精准溯源的专业问答系统。本文以开源模型InternLM和框架LangChain为例,详细阐述了搭建本地化智能知识库的完整流程,涵盖了文档处理、向量化存储、提示词工程等关键环节,

weixin_34185512的博客 419
上一篇: AntShares 区块链的智能合约(FunctionCode)外传数据
下一篇: ChatGPT | Word表格整体输出
欧巴Godwin
欧巴Godwin 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄20年 9690粉丝 141原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值