三步把百页PDF变成可分析文本:LiteLLM大规模文本提取实战指南
【免费下载链接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100+ LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]项目地址: https://gitcode.com/GitHub_Trending/li/litellm
LiteLLM 是一个开源 AI 网关与 Python SDK,除了用统一的 OpenAI 格式调用 100 多个大模型,它还内置了 PDF 文本提取、文本分块、OCR 和向量入库的完整管线。这篇文章带你完成一件事:把大量文档变成干净文本,再交给任意大模型批量分析,全程只用一套 API。
一堆产品手册变成数据泥潭?
想象这样一个场景:你拿到几十份产品手册、报价单和扫描版发票,需要从中提取型号、价格和条款,汇总成一张表。手工复制粘贴不现实;如果每换一个 PDF 库、每换一个模型 API 就要重写一遍代码,更是噩梦。你真正想要的是:文件进去,干净文本出来,分析结果自动汇总,中间不需要为不同厂商写适配层。这正是 LiteLLM 文本提取管线要做的事。
安装 LiteLLM SDK 并跑通第一个模型
环境要求 Python 3.10 以上。📄 最短路径是装两个包:litellm 本体和 pypdf(PDF 解析依赖):
pip install litellm pypdf # 安装 SDK 与 PDF 解析依赖 export OPENAI_API_KEY=sk-你的密钥 # 设置任一模型密钥pypdf 缺失时解析器会自动回退到 PyPDF2,两者都没有才会放弃本地提取、转走 OCR,这段逻辑在 litellm/rag/ingestion/file_parsers/pdf_parser.py 里,值得花两分钟读一下。
三步走完 PDF 提取到分析的全流程
下面这条主线覆盖最典型的用例:PDF 提纯文本 → 分块 → 批量让大模型提取关键信息。
第1步:把 PDF 读成纯文本
调用内置的extract_text_from_pdf,传入 PDF 的原始字节即可。注意它在提取失败时返回None而不是抛异常,所以拿到结果后要做一次判空:
from litellm.rag.ingestion.file_parsers.pdf_parser import extract_text_from_pdf text = extract_text_from_pdf(open("产品手册.pdf", "rb").read()) if text is None: # 大概率是扫描版,没有可提取的文本层 raise SystemExit("提取失败,请改用 OCR")第2步:把长文切成模型能吞下的块
按 3000 字符硬切是最保守的做法。如果想要更贴合语义的切分,可以用项目自带的递归字符切分器 litellm/rag/text_splitters/,它会优先沿段落、句子边界断开,避免把一句话拦腰斩断。
第3步:批量调用大模型并汇总结果
分好块后,用统一的completion接口逐个分析。换模型只改model参数,代码一行不用动:
from litellm import completion chunks = [text[i:i+3000] for i in range(0, len(text), 3000)] results = [] for c in chunks: resp = completion( model="openai/gpt-4o-mini", messages=[{"role": "user", "content": f"提取这段文本的关键信息:{c}"}], ) results.append(resp.choices[0].message.content) print("\n".join(results)) # 汇总所有块的分析结果用 OCR 和 RAG 摄取处理扫描件与大批量文档
文本层缺失的扫描件可以交给litellm.ocr:它把 Azure AI OCR、Vertex AI OCR 等能力包成同一个接口(源码在 litellm/ocr/main.py),不用为每家厂商写单独的 SDK。
文档量大时更推荐直接用 litellm/rag/main.py 里的 all-in-one 摄取管线,一条链路完成"上传 → OCR → 分块 → 向量化 → 存入向量库",支持 OpenAI、Bedrock、Gemini、Vertex AI、S3 Vectors 五类向量库后端。入库后随时用query按语义检索再回答,不必每次全文重跑分析。
📊 如果分析任务跑在生产环境,把 LiteLLM 代理接上 Langfuse 之后,每次调用的 token 用量、耗时和成本都能在面板里逐条看到,排查"哪类文档最烧钱"这类问题会直观很多:
代理侧部署也很简单,一条命令拉起:
uv tool install 'litellm[proxy]' # 安装代理网关 litellm --model gpt-4o # 本地启动,默认 4000 端口官方基准测试中,代理在 1k RPS 下 P95 延迟约 8ms,批量提取这类高并发短请求场景压力不大。
批量处理文本的 4 个常见坑
- 提取返回 None→ 原因是扫描件没有文本层或缺少 pypdf/PyPDF2 → 判空后对扫描件改走 OCR,或补装解析依赖。
- 分析结果被截断→ 长文档超出模型上下文窗口 → 先分块再送入,切分粒度宁小勿大,必要时换递归切分器。
- 批量跑一次成本失控→ 每个块都调用高价模型 → 用便宜模型做初筛、贵模型做复核;重复请求可在代理配置里开启缓存,参考 proxy_server_config.yaml 中的 cache 配置项。
- 走代理时模型名报错→ 请求里要写配置中
model_name定义的别名,而不是上游真实模型名 → 在model_list里补上映射即可。
动手之前:把这条管线接进你的项目
LiteLLM 的文本处理思路很朴素:提取、切分、入库、分析各是一等公民,却共用同一套接口,所以你不需要在 PDF 库、向量库、模型 SDK 之间反复切换胶水代码。先从一个小批量文档试起,跑通后再扩到整个文档库。核心代码位置:提取与摄取管线在 litellm/rag/,OCR 在 litellm/ocr/,整体设计与功能说明见 README.md 和 ARCHITECTURE.md。
【免费下载链接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100+ LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]项目地址: https://gitcode.com/GitHub_Trending/li/litellm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考