首页 电报出售网站内容详情

TextIn xParse LangChain插件正式上线!为Agent提供高效文档解析能力

2026-04-05 2 飞机号购买网站

80%的时间消耗在了文档解析以及清洗上,当针对PDF、PPT、扫描件等非结构化数据,去开展RAG或者Agent应用开发的时候。xParse LangChain插件把专业的文档解析能力直接整合进LangChain框架里,借助几行代码便能够达成从文件至向量的全流程处理,明显提高开发效率。

打通数据预处理关键环节

export XPARSE_APP_ID="your-app-id"
export XPARSE_SECRET_CODE="your-secret-code"

import os
os.environ["XPARSE_APP_ID"] = "your-app-id"
os.environ["XPARSE_SECRET_CODE"] = "your-secret-code"

LangChain身为构建大语言模型应用的主流框架,给出了检索增强生成、智能代理以及信息提取等核心元件,可是,这些元件的有效运作极为依赖格式规范的输入数据,现实里的业务文档涵盖表格、图表、多栏布局以及复杂公式,常规文本提取器会遗失诸多关键结构信息。

xParse是聚焦于非结构化文档处理的AI基础设施,它能够把杂乱的文档转变为可进行查询、可开展分析的数据资产。langchain - xparse插件作为这两者之间的桥梁,借助XParseLoader类将xParse Pipeline API的解析能力毫无缝隙地接入LangChain生态。开发者不用额外去处理文档格式方面的问题,直接就能获取可用于下游任务的纯净内容。

from langchain_xparse import XParseLoader
loader = XParseLoader(
    file_path="doc.pdf",
    app_id="your-app-id",
    secret_code="your-secret-code",
)

获取凭证与安装配置

from langchain_xparse import XParseLoader
# 创建加载器
loader = XParseLoader(file_path="example.pdf")
# 加载文档
docs = loader.load()
# 查看解析结果
print(docs[0].page_content[:200])  # 文档内容(Markdown 格式)
print(docs[0].metadata)  # 元数据:source, category, element_id, filename, page_number, ...

需要在使用之前,前往TextIn工作台去获取API凭证,登录控制台之后,在“账号与开发者信息”这个页面能够找到XPARSE_APP_ID以及XPARSE_SECRET_CODE,这两个参数属于调用解析服务的身份标识,要妥善保管防止泄露,工作台地址是:https://www.textin.com/console/dashboard/setting

插件的安装是极为简便的,借助pip命令便可达成。于Python环境里执行“pip install langchain-xparse”,便能够自动安装全部依赖包。要是在Jupyter Notebook或者云开发环境当中运用,建议先将pip升级至最新版本,以此避免依赖冲突。安装完毕后,不需要进行额外配置,就能于代码里导入XParseLoader类。

from langchain_xparse import XParseLoader
loader = XParseLoader(file_path="large_document.pdf")
# 懒加载,逐个返回文档
for doc in loader.lazy_load():
    print(f"页码: {doc.metadata.get('page_number')}")
    print(f"内容: {doc.page_content[:100]}...")
    # 处理文档

基础解析与懒加载模式

import asyncio
from langchain_xparse import XParseLoader
async def load_documents():
    loader = XParseLoader(file_path="example.pdf")
    async for doc in loader.alazy_load():
        print(doc.page_content[:100])
        # 处理文档
# 运行异步函数
asyncio.run(load_documents())

最为基础的运用方式乃是仅仅调用解析功能,在创建XParseLoader对象之际将文件路径以及API凭证传入,调用load方法就能够获取Document对象列表,每一个Document涵盖页面内容以及元数据,像是页码、文件来源等诸般信息,对于单页文档或者小文件而言,此种方式代码最为简洁,适宜于进行快速验证。

from langchain_xparse import XParseLoader
# 解析 + 分块
loader = XParseLoader(
    file_path="doc.pdf",
    parse_provider="textin",
    chunk_strategy="by_title",  # 按标题分块
    chunk_max_characters=500,   # 最大字符数
    chunk_overlap=50,           # 重叠字符数
)
docs = loader.load()

在处理大文件之际,或是面对多个文件之时,懒加载模式能够极大程度地降低内存占用情况。把load运用lazy_load方法予以替代,此方法返回的是迭代器,并非完整列表。程序会逐页进行读取,进而处理内容,并非一次性把所有数据都加载至内存当中。在解析上百页的PDF时,或者在批量处理数十个文件时,这种模式能够避免出现内存溢出状况,使之让应用运行表现得更加稳定。

from langchain_xparse import XParseLoader
loader = XParseLoader(
    file_path="doc.pdf",
    parse_provider="textin",
    chunk_strategy="basic",
    chunk_max_characters=1000,
    embed_provider="qwen",
    embed_model_name="text-embedding-v4",
)
docs = loader.load()
# docs 中的每个文档都包含向量(embedding)

异步处理与便捷参数配置

from langchain_xparse import XParseLoader
loader = XParseLoader(
    file_path="doc.pdf",
    stages=[
        {"type": "parse", "config": {"provider": "textin"}},
        {"type": "chunk", "config": {"strategy": "by_page", "max_characters": 800}},
    ],
)
docs = loader.load()

在异步应用场景里头,同步加载这种方式会使得事件循环被阻塞,进而对系统吞吐量造成影响。XParseLoader给出了异步加载的办法aload,它跟Python的asyncio机制配合得相当完美。在Web服务或者高并发API那里,运用async/await语法去调用aload便能让解析任务在后台开展执行,与此同时还能处理别的请求。经过实际测试显示,异步模式能够把并发能力提高3到5倍。

可以一步到位的解析与分块是那些便捷参数所成就的。具体而言,在创建加载器这一行为发生的时候,设置chunking_strategy参数,该操作旨在确切地指定分块策略类型,后续系统就会自动地达成内容切分这一动作。其中,常用的策略涵盖了按段落进行分块、按固定长度进行分块或者按语义边界进行分块这几种情况。对于开发者来说,不需要单独去调用分块器,如此一来,代码量缩减了,配置步骤也相应减少了。像这种方式,对于标准化的文档处理流程而言是极为适配的,所以能够迅速生产品质达标的文本块。

from langchain_xparse import XParseLoader
loader = XParseLoader(file_path=["a.pdf", "b.pdf", "c.pdf"])
for doc in loader.lazy_load():
    print(f"文件: {doc.metadata.get('source')}")
    print(f"内容预览: {doc.page_content[:50]}...")

整合向量化与高级自定义

from langchain_xparse import XParseLoader
with open("doc.pdf", "rb") as f:
    loader = XParseLoader(file=f, metadata_filename="doc.pdf")
    docs = loader.load()

若要再进一步,能够同时达成解析、分块以及向量化这三个步骤。设置vector_store参数用以指定向量数据库实例;调用load_and_vectorize方可方法,如此系统便会把分块之后的内容径直存入向量库。此过程对Chroma、FAISS、Pinecone等多种向量数据库予以支持,开发者仅需预先创建好数据库实例就行。

在存在精细控制需求的场景当中,能够选择运用自定义的stages参数。stages这一参数会接收一个配置字典,它是允许去指定很多高级选项的,像解析引擎,OCR开关,表格识别模式,公式提取规则这种。比如说,要是针对学术论文的话,就能够启用LaTeX公式识别。要是针对财务报表,那就可以强化表格结构还原。要是针对古籍扫描件,就能够开启高精度OCR。借助对这些参数进行调整,开发者是能够针对特定的文档类型来优化解析效果的。

async for doc in loader.alazy_load():
    # 处理文档

多文件处理与文件对象支持

实际开展的业务里面,常常会有需要进行批量文档处理的情况。XParseLoader具备能够传入文件路径列表的特性,即可以一次性去创建多个加载器的实例。在系统的内部,会自动地去分配资源从而进行并行处理,这样能大幅度地缩短总的耗时时间。经过测试的数据表明,当处理10个平均页数为50页的PDF文件时,在并行模式下相较于串行模式能够节省60%以上的时间。

loader = XParseLoader(file_path=["file1.pdf", "file2.pdf"])

除去文件路径之外,插件还支持直接传入文件对象,这在从Web上传或者内存缓存里获取数据之际是非常实用的,只需要保证文件对象具备read方法,与此同时必须设置metadata_filename参数,该参数是拿来记录原始文件名的,方便进行追溯以及调试,要注意,使用文件对象的时候不会自动开展格式推断,需要开发者明确地告知文件类型。

loader = XParseLoader(
    file_path="doc.pdf",
    stages=[
        {"type": "parse", "config": {"provider": "textin", "parse_mode": "auto"}},
        {"type": "chunk", "config": {"strategy": "by_title", "max_characters": 800}},
    ],
)

在您着手处理RAG应用开发之际,碰到的棘手文档格式方面的问题都有哪一些呢?欢迎于评论区域分享您置身其中的案例 ,为这份文本添加赞赏的操作并将它进行转发分享 ,以便让数量更为众多的开发者能够目睹这个具备实用价值的插件。

相关标签: # TextIn # xParse # LangChain # 文档解析 # RAG