精准溯源 (Source Grounding)
每一个提取结果都能精确映射回原文位置,方便人工核查。
LangExtract 是 Google 官方开源 的 Python 库,专为从文本、PDF 和发票中提取结构化数据 (JSON, Pydantic 对象) 而设计。
与普通的 Prompt 工程不同,LangExtract 专为企业级数据提取打造,具备三大核心优势:
它是替代脆弱的正则表达式或不稳定 Prompt 的最佳生产级方案。
官方文档虽然全面,但在国内环境配置、本地模型适配(如 DeepSeek/Llama)以及生产环境落地上往往语焉不详。
本指南源于真实项目经验,涵盖了网络配置、API 成本优化以及长文档处理技巧,助你少走弯路。
30秒内跑通过第一个提取任务。
通过 pip 安装。需要 Python 3.9+。
pip install langextract国内加速
如果下载慢,可以使用清华源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple langextract
默认使用 Google Gemini。你需要从 Google AI Studio 获取 Key。
export LANGEXTRACT_API_KEY="your-api-key-here"🔑 langextract_api_key 怎么获取?
LANGEXTRACT_API_KEY 其实就是 Google Gemini API Key。 请访问 Google AI Studio 免费申请。获取后将其赋值给环境变量 LANGEXTRACT_API_KEY 即可。
从一段简单的文本中提取角色信息。需要提供少样本示例 (few-shot example)。
import langextract as lx
# 定义提取 prompt
prompt = "提取文本中的角色及其情绪。"
# 提供少样本示例来引导模型
examples = [
lx.data.ExampleData(
text="罗密欧: 嘘!那边窗户透过来的是什么光?",
extractions=[
lx.data.Extraction(
extraction_class="角色",
extraction_text="罗密欧",
attributes={"情绪状态": "惊奇"}
),
]
)
]
# 输入文本
text = "朱丽叶望着星空,思念着罗密欧。"
# 运行提取 (默认使用 Gemini Flash 模型)
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="gemini-2.5-flash",
)
print(result.extractions)LangExtract 的杀手级功能。生成交互式 HTML 报告,方便人工核查。
# 1. 保存为 JSONL
lx.io.save_annotated_documents([result], output_name="extraction_results.jsonl", output_dir=".")
# 2. 生成交互式 HTML
html_content = lx.visualize("extraction_results.jsonl")
with open("visualization.html", "w") as f:
f.write(html_content.data if hasattr(html_content, 'data') else html_content)LangExtract 可以无缝融入你现有的 AI 技术栈。
结合 LlamaIndex 强大的 RAG (检索增强生成) 能力与 LangExtract 的精准提取。使用 LlamaIndex 检索相关文档切片,再通过 LangExtract 生成清洗后的标准 JSON 数据。
轻松将 LangExtract 封装为 LangChain 管道中的 Runnable 组件。非常适合构建需要可靠地“阅读”文档并填充数据库的复杂 Agent。
如何接入不同的模型?
隐私安全、零成本。推荐国内用户使用。
ollama pull gemma2:2b 或 ollama pull llama3ollama serveimport langextract as lx
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="gemma2:2b", # 自动选择 Ollama provider
model_url="http://localhost:11434",
fence_output=False,
use_schema_constraints=False
)适合复杂推理任务。需要安装依赖:pip install langextract[openai]
export OPENAI_API_KEY="sk-..."import os
import langextract as lx
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="gpt-4o", # 自动选择 OpenAI provider
api_key=os.environ.get('OPENAI_API_KEY'),
fence_output=True,
use_schema_constraints=False
)大规模任务建议开启 Batch 模式以节省成本。
result = lx.extract(
...,
language_model_params={"vertexai": True, "batch": {"enabled": True}}
)不污染本地环境,直接运行:
docker run --rm -e LANGEXTRACT_API_KEY="your-key" langextract python your_script.py注意
OpenAI 模型需要 fence_output=True 和 use_schema_constraints=False,因为 LangExtract 尚未为 OpenAI 实现 schema 约束。
LangExtract 支持所有兼容 OpenAI 协议的国产大模型。已实测支持:
import langextract as lx
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="deepseek-chat", # DeepSeek V3/R1
api_key="your-api-key",
language_model_params={
"base_url": "https://api.deepseek.com/v1"
},
fence_output=True,
use_schema_constraints=False
)import langextract as lx
result = lx.extract(
text_or_documents=text,
prompt_description=prompt,
examples=examples,
model_id="qwen-turbo", # 或 qwen-plus, qwen-max
api_key="sk-...", # 阿里云 DashScope API Key
language_model_params={
"base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1"
},
fence_output=True,
use_schema_constraints=False
)# 适用于 豆包 (Doubao), MiniMax, GLM-4 等
result = lx.extract(
...,
model_id="your-model-id",
api_key="your-api-key",
language_model_params={
"base_url": "https://your-provider-api.com/v1"
},
fence_output=True,
use_schema_constraints=False
)如何处理超过 Context Window 的长书或 PDF?LangExtract 内置了分块 (Chunking) 和 并行处理 机制。
无需手动切分文本,直接传入 URL 或长文本即可:
# 例如:处理整本《罗密欧与朱丽叶》
result = lx.extract(
text_or_documents="https://www.gutenberg.org/files/1513/1513-0.txt",
prompt_description=prompt,
examples=examples,
# 核心参数
extraction_passes=3, # 多轮提取,提高召回率 (Recall)
max_workers=20, # 并行 Worker 数量,极大提升速度
max_char_buffer=1000 # 控制上下文缓冲区大小
)从病历文本中提取药品名称、剂量和服用频率。 查看完整案例
处理超过 token 限制的长文(如 PDF、书籍)。 查看完整案例
处理中文、日文等非英语文本。 查看完整案例
LangExtract 与 LlamaExtract 或 Docling 有何区别?
| 特性 | LangExtract 🚀 | LlamaExtract | Docling |
|---|---|---|---|
| 核心定位 | 结构化数据提取 | 文档解析 / RAG | 文档格式转换 (PDF转MD) |
| 溯源能力 | ✅ 原生支持 (字符级) | ❌ | ❌ |
| Schema 验证 | ✅ 严格 (Pydantic) | ✅ | ❌ |
| 模型支持 | Gemini, DeepSeek, 任意LLM | OpenAI 为主 | 本地 / 云端 |
| 适用场景 | 复杂结构提取, 需要溯源 | 快速 RAG 搭建 | Markdown 转换 |
Q: LangExtract 和 Docling 有什么区别? A: Docling 专注于将 PDF/文档解析为 Markdown 格式,擅长文档版面分析。而 LangExtract 专注于从文本中提取结构化数据(如 JSON)。你可以结合使用:先用 Docling 解析文档,再用 LangExtract 提取关键数据。
Q: LangExtract 是 Google 官方产品吗? A: 是的,LangExtract 是 Google 官方开源库 (GitHub: google/langextract)。本指南旨在填补官方文档在本地化部署和中文实践上的空白,帮助开发者更好地应用。
Q: 我可以使用 DeepSeek 或其他国产大模型吗? A: 完全可以。 LangExtract 支持所有兼容 OpenAI 接口的模型。你只需要将 base_url 设置为 DeepSeek/豆包/千问 的 API 地址即可。不管是 V3 还是 R1 版本都能完美运行。
Q: 如何处理超过 Context Window 的长文档(如书籍/长 PDF)? A: LangExtract 内置了分块处理机制(Chunking)。参考我们的 长文档提取示例,它可以自动将长文切分,并行或串行提取后再合并结果,无需你手动编写复杂的切分逻辑。
Q: 支持本地私有化部署吗? A: 支持。 通过集成 Ollama,你可以在本地运行 Llama 3、Qwen、Gemma 等模型。这不仅完全免费,而且数据不出本地,非常适合处理敏感隐私数据(如合同、病历)。
Q: LangExtract 收费吗? A: LangExtract 库本身是 100% 开源免费的。费用仅取决于你使用的 LLM 提供商(如 Google Gemini 或 OpenAI 的 token 费用)。如果你使用 Ollama 本地模型,则完全免费。