
人工智能AI AgentAgent 编排低代码AI 技能RAG【免费下载链接】nexentNexent 是一个开源智能体SDK和平台能够将描述流程的自然语言转化为完整的多模态服务 —— 无需编排无需复杂拖拉拽。基于 MCP 工具生态系统构建Nexent 提供灵活的模型集成、可扩展的数据处理和强大的知识库管理。我们的目标很简单将数据、模型和工具整合到一个智能中心中让任何人都能轻松地将 Nexent 集成到项目中使日常工作流程更智能、更互联。项目地址https://gitcode.com/ModelEngine/nexent点击查看免费下载Nexent 的开源 SDK 将文件 → 文本块chunks→ 向量 → 知识库这条链路收敛到一个统一入口DataProcessCore上无论是 PDF、Word、Excel 还是 Markdown只需传入内存字节与文件名即可自动完成格式识别、内容解析、分块chunking并在多模态场景下同步提取文档内嵌图片。本文以 SDK 源码实现为佐证完整讲解file_process()/file_split()的签名、参数、处理器选择规则与返回结构覆盖 5 个可直接运行的实战示例、4 个辅助方法、错误处理与性能调优最后结合后端 Celery Ray MinIO Elasticsearch 的调用链说明它在知识库流水线中的真实位置。读完本文你将能在自己的项目中独立接入 Nexent 的文件处理能力。一、DataProcessCore 是什么DataProcessCore是 sdk/nexent/data_process/core.py 中定义的一个外观类Facade它将三种文件处理器与一个文件拆分器统一注册到内部processors字典中注册名实现类职责UnstructuredUnstructuredProcessor通用格式解析与分块txt/pdf/docx/html/md 等OpenPyxlOpenPyxlProcessorExcel.xlsx/.xls专用解析输出 Markdown 表格UniversalImageExtractorUniversalImageExtractor按需提取文档内嵌图片PDF/OfficeFileSplitterFileSplitter大文件按格式拆分从源码结构看DataProcessCore遵循按扩展名自动选择处理器 按需叠加图像提取器的设计解析流程与图像提取流程相互独立最后以(chunks, images_info)二元组统一返回便于上层向量化、知识库入库直接消费。模块的公共导出位于 sdk/nexent/data_process/init.pyfrom nexent.data_process import DataProcessCore即可使用。注意 SDK 要求 Python3.11,3.12见 sdk/pyproject.toml且unstructured相关依赖需要通过pip install nexent[data_process]安装extra 声明为unstructured[all-docs]与unstructured-inference1.2.0。二、核心方法file_process()2.1 函数签名def file_process(self, file_data: bytes, filename: str, chunking_strategy: str basic, processor: Optional[str] None, **params) - Tuple[List[Dict], List[Dict]]2.2 参数说明参数类型必填说明取值file_databytes是文件字节数据内存处理任意合法字节流filenamestr是文件名用于自动识别文件类型并选择处理器任意合法文件名chunking_strategystr否分块策略basic、by_title、noneprocessorstr否显式指定处理器缺省时按扩展名自动选择Unstructured、OpenPyxl**paramsdict否附加处理参数见下文参数细节2.3 分块策略chunking_strategy详解策略说明适用场景输出特征basic基础分块策略大多数文档处理场景按内容长度自动分块by_title按标题分块结构化文档技术文档、报告等在标题边界处切分none不分块短文档或需要完整内容时返回包含全部内容的单个块从源码看三种策略由 UnstructuredProcessor._process_elements 落实none将分区得到的全部元素文本用\n\n拼接为单个文档其余策略则逐元素生成块。而在 UnstructuredProcessor._prepare_partition_kwargs 中chunking_strategy会直接透传给unstructured.partition.auto.partition当为none时置为None由底层库完成标题感知的切分。2.4 处理器选择规则扩展名位于EXCEL_EXTENSIONS.xlsx、.xls→ 使用OpenPyxl处理器其他受支持扩展名 → 使用Unstructured处理器当params中包含model_typemulti_embedding且扩展名位于EXTRACT_IMAGE_EXTENSIONS.pdf、.doc、.docx、.xls、.xlsx、.ppt、.pptx时额外调用UniversalImageExtractor提取文档内嵌图片。该逻辑对应 core.py 的_select_processor_by_filename处理器选择只看扩展名大小写不敏感图像提取器选择则同时依赖model_type与扩展名。测试 test/sdk/data_process/test_core.py 中的参数化用例进一步验证了组合规则例如test.pptx在无multi_embedding时提取器为None而test.pdf、test.docx在multi_embedding下均会挂载UniversalImageExtractor。2.5 附加参数**params详解参数类型默认值说明适用处理器max_charactersint1536每个块的最大字符数通用Unstructurednew_after_n_charsint1024超过该字符数后开启新块通用Unstructuredstrategystrfast处理策略通用Unstructuredskip_infer_table_typeslist[]跳过推断的表类型通用Unstructuredtask_idstr任务标识通用Unstructuredmodel_typestrNone嵌入模型类型multi_embedding触发图像提取通用这些默认值与 UnstructuredProcessor.init中维护的default_params完全一致用户传入的参数通过_merge_params覆盖默认值后透传给unstructured.partition。后端还会额外注入table_transformer_model_path与unstructured_default_model_initialize_params_json_path见 backend/data_process/ray_actors.py供UniversalImageExtractor在 hi_res 策略下加载表格识别模型。2.6 返回值格式返回Tuple[List[Dict], List[Dict]]即(chunks, images_info)。chunks文本块列表公共字段字段类型说明示例contentstr文本内容This is the first paragraph of the document...filenamestr文件名document.pdf可选字段字段类型说明示例metadatadict元数据信息可选{chunk_index: 0, source_type: ...}languagestr语言标识可选en从源码看Unstructured 处理器在生成块时会尽力携带丰富元数据chunk_index、元素类型element_type如CompositeElement、page_number、coordinates坐标信息以及从元素元数据中读取的首个语言标签见 unstructured_processor.py 的_create_chunked_documentsnone策略下也会尽力写入language_create_single_document。Excel 处理器则输出{chunk_index: i, file_type: xlsx|xls}元数据。images_info图像信息列表提取到的内嵌图片元数据字典列表未触发图像提取时为空列表。每个条目包含image_bytes原始字节、image_formatpng/jpg、position位置信息PDF/PPT 为page_number 归一化坐标Excel 为sheet_name 行列坐标。三、支持的文件类型Excel 文件.xlsx— Excel 2007 及以后版本.xls— Excel 97-2003通用文件.txt— 纯文本.pdf— PDF 文档.docx— Word 2007 及以后.doc— Word 97-2003.html、.htm— HTML 文档.md— Markdown 文件.rtf— 富文本格式.odt— OpenDocument 文本.pptx— PowerPoint 2007 及以后.ppt— PowerPoint 97-2003.epub— EPUB 电子书.xml— XML 数据文件.json— JSON 数据文件.csv— 逗号分隔值文件支持清单由 UnstructuredProcessor.get_supported_formats 提供DataProcessCore.get_supported_file_types()会将其汇总为{excel: [...], generic: [...]}。需要特别说明的是JSON 文件的专门处理UnstructuredProcessor._process_file会对.json走独立分支_partition_json由 json_chunk_processor.py 的JSONChunkProcessor负责拆分——它优先保持 JSON 顶层键值对的完整性仅在无法安全切分时退化为标点边界切分并且不会切断转义序列如\n、\保证输出与 unstructured 元素格式一致。四、使用示例示例 1处理本地文本文件先读入内存from nexent.data_process import DataProcessCore core DataProcessCore() # 将文件读入内存file_process 只接受内存字节数据 with open(/path/to/document.txt, rb) as f: file_bytes f.read() chunks, images_info core.file_process( file_datafile_bytes, filenamedocument.txt, chunking_strategybasic ) print(fProcessed into {len(chunks)} chunks) for i, chunk in enumerate(chunks): print(fChunk {i}: {chunk[content][:100]}...)示例 2处理 Excel 文件with open(/path/to/spreadsheet.xlsx, rb) as f: file_bytes f.read() chunks, images_info core.file_process( file_datafile_bytes, filenamespreadsheet.xlsx, chunking_strategynone # Excel 文件通常无需分块 ) for chunk in chunks: print(fFile: {chunk[filename]}) print(fContent: {chunk[content]}) print(fMetadata: {chunk.get(metadata)})从 openpyxl_processor.py 的实现看Excel 解析并非简单逐格读取它先定位表头行_get_title_row按非空单元格最多的行判定、处理合并单元格_merge_columns/_merge_all_cells将左上角值填充到整个合并区域、提取表头前的备注_get_remark然后把每一行转换为Markdown 表格并追加————工作表名后缀_build_row_content单列数据则逐行拼接、换行替换为br。这意味着 Excel 内容会以结构化表格形式进入知识库检索时语义更完整。示例 3使用自定义参数处理内存中的 PDFwith open(/path/to/document.pdf, rb) as f: file_bytes f.read() chunks, images_info core.file_process( file_datafile_bytes, filenamedocument.pdf, chunking_strategyby_title, max_characters2000 # 自定义参数 )示例 4为多模态嵌入提取内嵌图片chunks, images_info core.file_process( file_datafile_bytes, filenamereport.docx, chunking_strategybasic, model_typemulti_embedding # 触发 UniversalImageExtractor 提取内嵌图片 ) print(fExtracted {len(images_info)} images)UniversalImageExtractor对不同格式采用不同提取路径extract_image.pyPDF以strategyhi_res调用unstructured.partition并开启extract_images_in_pdfTrue/extract_image_block_to_payloadTrue从元素元数据中还原image_base64记录页码与坐标PPTX直接用python-pptx遍历幻灯片的图片形状将 EMU 单位按emu_per_inch默认 914400与dpi默认 96换算为像素坐标XLSX直接解压 zip 包解析工作表 XML → drawing → 关系文件 → 锚点twoCellAnchor/oneCellAnchor还原图片及其所在行列XLS / PPT / DOC / DOCX先通过 LibreOfficesoffice --headless --convert-to转换为中间格式再复用上述提取逻辑转换超时限制为 60 秒且临时文件在finally中统一清理。所有路径均使用 SHA-256 哈希做图片去重同一文档中重复出现的图片只会提取一次。示例 5拆分大文件parts core.file_split( file_datafile_bytes, filenamelarge_document.pdf, max_size10 * 1024 * 1024, # 每个分片最大 10MB可选参数 ) print(fSplit into {len(parts)} parts)file_split()返回List[BytesIO]其内部委托 FileSplitter 按格式拆分PDF按页拆分pypdf支持max_size按字节自适应或target_parts指定份数Worddoc/docx先经 LibreOffice 转为 PDF 再按页拆分若最终无需拆分则保留原始 Word 字节Excel按行分组重建工作簿并尽力保留原图copy_images_safeJSON用ijson流式读取按条目累计字节分批Markdown基于langchain_text_splitters.MarkdownHeaderTextSplitter从最高级标题逐层下探保证标题层级完整CSV / TXT按行累积到目标大小EPUB按文档条目分组重建电子书XML按根节点子元素分组重组。拆分涉及的扩展名白名单SPLIT_EXTENSIONS定义在 core.py.csv/.epub/.xlsx/.xls/.json/.md/.pdf/.txt/.xml/.doc/.docx不支持拆分时file_split会原样返回[BytesIO(file_data)]拆分器抛异常或返回非法格式时也会优雅回退对应测试见 test_core.py 的 file_split 用例。五、辅助方法1. 获取支持的文件类型core DataProcessCore() supported_types core.get_supported_file_types() print(Excel files:, supported_types[excel]) print(Generic files:, supported_types[generic])2. 校验文件类型is_supported core.validate_file_type(document.pdf) print(fIs PDF supported: {is_supported})validate_file_type对空文件名返回False对扩展名做小写归一后与支持清单比对测试中.unknown、.exe均被判定为不支持test_core.py。3. 获取处理器信息info core.get_processor_info(spreadsheet.xlsx) print(fProcessor type: {info[processor_type]}) print(fFile extension: {info[file_extension]}) print(fIs supported: {info[is_supported]})get_processor_info返回{processor_type: excel|generic, file_extension: .xlsx, is_supported: True|False}注意is_supported是字符串Excel 扩展名大小写不敏感TEST.XLSX同样识别为 excel见 test_core.py。4. 获取支持的分块策略与处理器类型strategies core.get_supported_strategies() processors core.get_supported_processors() print(fSupported chunking strategies: {strategies}) print(fSupported processor types: {processors})六、错误处理常见异常异常触发条件解决方案ValueError参数非法如不支持的分块策略或处理器类型检查参数取值UnsupportedFileFormatError文件扩展名不受支持或无法从内存字节识别类型未安装 libmagic 时内存类型检测失败确认扩展名受支持处理内存字节前先安装 libmagicImportError缺少必需处理依赖如 unstructured安装nexent[data_process]extraRuntimeErrorfile_split()拆分失败查看日志定位拆分错误参数校验在 core.py 的_validate_parameters中完成分块策略必须属于CHUNKING_STRATEGIES {basic, by_title, none}显式指定的处理器必须属于PROCESSORS {Unstructured, OpenPyxl, UniversalImageExtractor}否则抛出带支持列表提示的ValueError对应测试 test_core.py。libmagic 依赖说明file_process()只接受内存字节数据而 unstructured 依赖系统 libmagic 从内存字节识别文件类型。Linux/macOS 通常自带Windows 默认不提供需先安装如pip install python-magic-bin否则处理.txt等格式会抛出UnsupportedFileFormatError。错误处理示例from unstructured.partition.common import UnsupportedFileFormatError try: chunks, images_info core.file_process( file_datafile_bytes, filenamedocument.txt, chunking_strategyinvalid_strategy ) except ValueError as e: print(fInvalid parameter: {e}) except UnsupportedFileFormatError as e: print(fUnsupported or unrecognizable file type: {e}) except ImportError as e: print(fMissing dependency: {e}) except Exception as e: print(fProcessing failed: {e})此外file_process与file_split都会通过监控管理器monitoring_manager.trace_operation上报knowledge.preprocess.*观测 span含ingestion.stage、file.extension、file.size_bytes、processor.name、chunk.count等属性见 core.py生产排查时可结合链路追踪定位失败阶段。七、性能优化建议选择合适的分块策略小文件用none大文件用basic结构化文档用by_title调优分块参数根据下游处理需求调整max_characters在速度与内存占用之间取舍文件类型优化Excel 通常无需分块PDF 建议使用更大的max_characters批量处理复用DataProcessCore实例避免重复初始化从后端实际配置看分块参数并非只能手动指定Ray Actor 会根据所选 embedding 模型的记录动态注入expected_chunk_size与maximum_chunk_sizeray_actors.py 的_apply_model_chunk_sizes常量默认值分别为 1024 与 1536backend/consts/const.py与 SDK 侧new_after_n_chars1024、max_characters1536的默认值相互呼应。八、知识库流水线中的真实调用链原文档描述的四种流程用户请求流、AI Agent 执行流、知识库文件处理流、实时文件处理流中DataProcessCore是知识库文件处理流的核心执行器File upload → Temporary storage → Data processing → Vectorization → Knowledge base storage → Index update数据处理/入库流程图基于当前实现的完整流水线详细步骤文件上传前端接收用户上传的文件临时存储文件存入 MinIO任务排队创建处理任务并推入 Redis 任务队列数据处理data process 服务消费任务DataProcessCore.file_process()完成格式解析与分块超大文件可先用file_split()预拆分多模态嵌入场景下同步提取内嵌图片向量化由EmbeddingAdapter嵌入模型生成向量表示知识库存储处理结果经ElasticSearchCore.vectorize_documents()批量写入 Elasticsearch索引更新刷新搜索索引并更新任务状态支撑检索源码级佐证每一步的落点Celery Redis 队列任务由 backend/data_process/tasks.py 定义process/forward链式任务worker 启动脚本见 backend/data_process/worker.py支持QUEUESprocess_q、WORKER_CONCURRENCY等环境变量控制队列与并发Ray 分布式处理DataProcessCore实例被封装进ray.remote的 DataProcessorRayActor通过全局共享 actor 池做预热与轮询调度拆分后的分片会写入 Redis等待超时按DP_REDIS_CHUNKS_WAIT_TIMEOUT_S计算并允许按波次线性放宽tasks.py批量入库ElasticSearchCore.vectorize_documents 会按文档量自动选择策略——总量 ≥64 或large_mode时走索引设置优化 大批量路径否则走wait_for实时刷新路径EmbeddingAdapter位于 sdk/nexent/core/gateway/modality/embedding/embedding_adapter.py作为多模态网关的一部分提供向量生成能力配置常量DP_FILE_SPLIT_SIZE_MB默认 5拆分阈值、DP_PART_PROCESSOR_COUNT默认 3Ray 处理 actor 数、MAX_CONCURRENT_CONVERSIONS默认 5LibreOffice 转换并发上限等均可在 backend/consts/const.py 中查看并通过环境变量覆盖。实时文件处理流File upload → Temporary storage → Data processing → Agent processing → Real-time answer详细步骤文件上传用户在会话中上传文件临时存储文件被临时保存待处理数据处理实时提取文件内容与结构Agent 处理AI Agent 分析文件内容实时回答基于文件内容即时回复后端对该场景的封装示例是 DataProcessService.process_uploaded_text_file它直接调用DataProcessCore.file_process()得到块列表汇总为text、chunks、chunks_count、text_length、processing_time等字段返回印证了 SDK 与后端服务之间的直接复用关系。九、数据处理优化策略异步处理大文件处理使用异步任务队列Celery Redis批量操作多文件处理时使用批量优化Ray actor 池、ES 分批写入缓存重复文件可缓存处理结果流式处理大文件采用内存流式处理如file_split的流式拆分与ijson流式读取小结DataProcessCore把按扩展名选处理器、按策略分块、按需提取图片、大文件预拆分四件事收敛为一个入口屏蔽了unstructured、openpyxl、python-pptx、pypdf、LibreOffice 等底层组件的差异向上以(chunks, images_info)标准结构对接EmbeddingAdapter与ElasticSearchCore向下被后端 Celery 任务与 Ray Actor 以分布式方式消费。无论你是想在自有 Python 项目中快速接入文件解析还是想深入理解 Nexent 知识库从上传到检索的完整链路都可以以 sdk/nexent/data_process 为起点配合 test/sdk/data_process/test_core.py 的测试用例验证各边界行为。赞分享人工智能AI AgentAgent 编排低代码AI 技能RAG【免费下载链接】nexentNexent 是一个开源智能体SDK和平台能够将描述流程的自然语言转化为完整的多模态服务 —— 无需编排无需复杂拖拉拽。基于 MCP 工具生态系统构建Nexent 提供灵活的模型集成、可扩展的数据处理和强大的知识库管理。我们的目标很简单将数据、模型和工具整合到一个智能中心中让任何人都能轻松地将 Nexent 集成到项目中使日常工作流程更智能、更互联。项目地址https://gitcode.com/ModelEngine/nexent点击查看免费下载相关推荐Nexent SDK DataProcessCore 使用指南多格式文件解析、智能分块与向量化落库全流程Nexent SDK DataProcessCore 使用指南多格式文件解析、智能分块与向量化落库全流程 导读 本文面向需要在 Nexent 平台上处理非结构AI AgentAI 应用后端前端大模型RAGNexent DataProcessCore 使用指南统一文件解析、分块与知识库入库全流程解析Nexent DataProcessCore 使用指南统一文件解析、分块与知识库入库全流程解析 Nexent 的 DataProcessCore 位于 sdAI AgentAI 应用后端前端大模型RAGRyujinx Switch模拟器从零安装到流畅运行的完整实战指南Ryujinx Switch模拟器从零安装到流畅运行的完整实战指南 Ryujinx 是一款用 C 编写的开源 Nintendo Switch 模拟器它模拟硬件仿真图形学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考