精准溯源 (Source Grounding)
每一个提取结果都能精确映射回原文位置,方便人工核查。
非官方指南
这是一个由开发者维护的社区指南 (Unofficial Guide),与 Google 官方无关。
官方文档虽然全面,但在国内环境配置、本地模型适配(如 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"从一段简单的文本中提取角色信息。需要提供少样本示例 (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)如何接入不同的模型?
隐私安全、零成本。推荐国内用户使用。
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",
api_key="your-api-key",
language_model_params={
"base_url": "https://api.deepseek.com/v1" # 替换为对应厂商的 Base URL
},
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、书籍)。 查看完整案例
处理中文、日文等非英语文本。 查看完整案例
Q: LangExtract 和 Docling 有什么区别? A: Docling 专注于将 PDF/文档解析为 Markdown 格式,擅长文档版面分析。而 LangExtract 专注于从文本中提取结构化数据(如 JSON)。你可以结合使用:先用 Docling 解析文档,再用 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 本地模型,则完全免费。