衡水做网站服务商深圳知名seo公司

张小明 2026/1/8 16:21:46
衡水做网站服务商,深圳知名seo公司,谷歌网页版入口在线,网站建设销售合作合同范本01. DocumentTransformer 组件在 LangChain 中#xff0c;使用 文档加载器 加载得到的文档一般来说存在着几个问题#xff1a;原始文档太大、原始文档的数据格式不符合需求#xff08;需要英文但是只有中文#xff09;、原始文档的信息没有经过提炼等问题。如果将这类数据直…01. DocumentTransformer 组件在 LangChain 中使用 文档加载器 加载得到的文档一般来说存在着几个问题原始文档太大、原始文档的数据格式不符合需求需要英文但是只有中文、原始文档的信息没有经过提炼等问题。如果将这类数据直接转换成向量并存储到数据库中会导致在执行相似性搜索和 RAG 的过程中错误率大大提升。所以在 LLM 应用开发中在加载完数据后一般会执行多一步 转换 的过程即将加载得到的 文档列表 进行转换得到符合需求的 文档列表。转换涵盖的操作就非常多例如文档切割、文档属性提取、文档翻译、HTML 转文本、重排、元数据标记等都属于转换。聊天机器人架构/运行流程 如下所示在 LangChain 中针对文档的转换也统一封装了一个基类 BaseDocumentTransformer所有涉及到文档的转换的类均是该类的子类将大块文档切割成 chunk 分块的文档分割器也是 BaseDocumentTransformer 的子类实现。BaseDocumentTransformer 基类封装了两个方法transform_documents()抽象方法传递文档列表返回转换后的文档列表。atransform_documents()转换文档列表函数的异步实现如果没有实现则会委托 transform_documents() 函数实现。在 LangChain 中文档转换组件分成了两类文档分割器(使用频率高)、文档处理转换器(使用频率低老版本写法)。并且目前 LangChain 团队已经将 文档分割器 这个高频使用的部分单独拆分成一个 Python 包哪怕不使用 LangChain 框架本身进行开发也可以使用其文本分割包快速分割数据在使用前必须执行以下命令安装pip install -qU langchain-text-splitters对于文本分割器来说除了继承 BaseDocumentTransformer还单独设置了文本分割器基类 TextSplitter从而去实现更加丰富的功能BaseDocumentTransformer 衍生出来的类图02. 字符分割器基础使用技巧在文档分割器中最简单的分割器就是——字符串分割器这个组件会基于给定的字符串进行分割默认为 \n\n并且在分割时会尽可能保证数据的连续性。分割出来每一块的长度是通过字符数来衡量的使用起来也非常简单实例化 CharacterTextSplitter 需传递多个参数信息如下separator分隔符默认为 \n\n。is_separator_regex是否正则表达式默认为 False。chunk_size每块文档的内容大小默认为 4000。chunk_overlap块与块之间重叠的内容大小默认为 200。length_function计算文本长度的函数默认为 len。keep_separator是否将分隔符保留到分割的块中默认为 False。add_start_index是否添加开始索引默认为 False如果是的话会在元数据中添加该切块的起点。strip_whitespace是否删除文档头尾的空白默认为 True。如果想将文档切割为不超过 500 字符并且每块之间文本重叠 50 个字符可以使用 CharacterTextSplitter 来实现代码如下from langchain_community.document_loaders import UnstructuredMarkdownLoaderfrom langchain_text_splitters import CharacterTextSplitter# 1.构建Markdown文档加载器并获取文档列表loader UnstructuredMarkdownLoader(./项目API文档.md)documents loader.load()# 2.构建分割器text_splitter CharacterTextSplitter(separator\n\n,chunk_size500,chunk_overlap50,add_start_indexTrue,)# 3.分割文档列表chunks text_splitter.split_documents(documents)# 4.输出信息for chunk in chunks:print(f块内容大小:{len(chunk.page_content)},元数据:{chunk.metadata})输出内容Created a chunk of size 771, which is longer than the specified 500Created a chunk of size 980, which is longer than the specified 500Created a chunk of size 542, which is longer than the specified 500Created a chunk of size 835, which is longer than the specified 500块内容大小:251,元数据:{source: ./项目API文档.md, start_index: 0}块内容大小:451,元数据:{source: ./项目API文档.md, start_index: 246}块内容大小:771,元数据:{source: ./项目API文档.md, start_index: 699}块内容大小:435,元数据:{source: ./项目API文档.md, start_index: 1472}块内容大小:497,元数据:{source: ./项目API文档.md, start_index: 1859}块内容大小:237,元数据:{source: ./项目API文档.md, start_index: 2359}块内容大小:980,元数据:{source: ./项目API文档.md, start_index: 2598}块内容大小:438,元数据:{source: ./项目API文档.md, start_index: 3580}块内容大小:293,元数据:{source: ./项目API文档.md, start_index: 4013}块内容大小:498,元数据:{source: ./项目API文档.md, start_index: 4261}块内容大小:463,元数据:{source: ./项目API文档.md, start_index: 4712}块内容大小:438,元数据:{source: ./项目API文档.md, start_index: 5129}块内容大小:542,元数据:{source: ./项目API文档.md, start_index: 5569}块内容大小:464,元数据:{source: ./项目API文档.md, start_index: 6113}块内容大小:835,元数据:{source: ./项目API文档.md, start_index: 6579}块内容大小:489,元数据:{source: ./项目API文档.md, start_index: 7416}使用 CharacterTextSplitter 进行分割时虽然传递了 chunk_size 为 500但是仍然没法确保分割出来的文档一直保持在这个范围内这是因为在底层 CharacterTextSplitter 是先按照分割符号拆分整个文档然后循环遍历拆分得到的列表将每个列表逐个相加直到最接近 chunk_size 窗口大小时则完成一个 Document 的组装。但是如果基于分割符号得到的文本本身长度已经超过了 chunk_size则会直接进行警告并且将对应的文本单独变成一个块。核心代码如下# langchain_text_splitters/character-CharacterTextSplitter::split_textdef split_text(self, text: str) - List[str]:Split incoming text and return chunks.# First we naively split the large input into a bunch of smaller ones.separator (self._separator if self._is_separator_regex else re.escape(self._separator))splits _split_text_with_regex(text, separator, self._keep_separator)_separator if self._keep_separator else self._separatorreturn self._merge_splits(splits, _separator)def _split_text_with_regex(text: str, separator: str, keep_separator: bool) - List[str]:# Now that we have the separator, split the textif separator:if keep_separator:# The parentheses in the pattern keep the delimiters in the result._splits re.split(f({separator}), text)splits [_splits[i] _splits[i 1] for i in range(1, len(_splits), 2)]if len(_splits) % 2 0:splits _splits[-1:]splits [_splits[0]] splitselse:splits re.split(separator, text)else:splits list(text)return [s for s in splits if s ! ]
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

个人可以建购物网站吗绝缘子网站建设

摘要 随着人口老龄化加剧和智能安防需求增长,跌倒检测系统已成为计算机视觉领域的重要研究方向。本文详细介绍了基于深度学习YOLO系列模型的跌倒检测系统,涵盖YOLOv5/v6/v7/v8/v10等多个版本的技术演进、数据集构建、模型训练及可视化界面实现。通过对比不同YOLO版本在跌倒检…

张小明 2026/1/8 16:19:44 网站建设

网站建设saas排名展芒设计网页

开篇亮点:重新定义笔记本性能掌控 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 联想拯救者工具箱是一款专为拯…

张小明 2026/1/8 16:17:42 网站建设

长沙网站建设专家软件开发公司简介范文

欢迎使用我的小程序👇👇👇👇 俱好用助手功能介绍 你好!如果你曾觉得JavaScript的原型链像魔法一样神秘,那么今天我要告诉你一个秘密:它其实就像一份家族传家宝,代代相传&#xff0c…

张小明 2026/1/8 16:15:39 网站建设

做寄生虫对自己的网站有影响吗网站建设茂名

第一章:Open-AutoGLM会议纪要生成的核心价值在现代企业协作环境中,会议作为信息交换与决策制定的核心场景,其效率直接影响组织运转速度。Open-AutoGLM 通过大语言模型驱动的自动化技术,将语音转录、语义理解与结构化输出深度融合&…

张小明 2026/1/8 16:13:37 网站建设

用网站做平台有哪些wordpress 无法自动升级

Windows Server 2008 路由与远程访问管理全解析 1. 网络扫描与访问控制 对服务器进行扫描后发现,从远程位置开放的唯一端口是 1723/TCP,服务为 PPTP。这意味着除了 TCP/1723 的 PPTP 端口流量外,对该服务器的访问已被有效阻止,不过出站流量尚未过滤。 为了进一步优化网络…

张小明 2026/1/8 16:11:34 网站建设

wordpress建站好用吗用rp做网站不用写前段代码

你的电脑是否经常出现这些症状:打开浏览器要等半天,运行软件时频繁卡顿,系统响应越来越慢?这很可能是内存管理不善导致的系统"消化不良"。今天,我要为你介绍一款轻量级的内存优化工具——Mem Reduct&#xf…

张小明 2026/1/8 16:09:32 网站建设