Skip to content

LangExtract 开发者指南搞定 Google AI 数据提取库

开源社区中文手册。教你如何用 LangExtract (Python Library) 结合 Gemini、OpenAI 和 Ollama 本地模型,从任意文本中提取结构化数据。

LangExtract 是什么? ​

LangExtract 是 Google 官方开源 的 Python 库,专为从文本、PDF 和发票中提取结构化数据 (JSON, Pydantic 对象) 而设计。

与普通的 Prompt 工程不同,LangExtract 专为企业级数据提取打造,具备三大核心优势:

  1. 精准溯源 (Grounding): 每一个提取的字段都能精确映射回原文的坐标,方便人工验证。
  2. Schema 强约束: 保证输出内容严格符合 Pydantic 定义的数据结构,杜绝字段幻觉。
  3. 模型无关性: 虽为 Google Gemini 原生打造,但完美兼容 DeepSeek、OpenAI 以及 LlamaIndex 生态。

它是替代脆弱的正则表达式或不稳定 Prompt 的最佳生产级方案。

为什么需要这个指南? ​

官方文档虽然全面,但在国内环境配置、本地模型适配(如 DeepSeek/Llama)以及生产环境落地上往往语焉不详。

本指南源于真实项目经验,涵盖了网络配置、API 成本优化以及长文档处理技巧,助你少走弯路。


快速开始 (Quick Start) ​

30秒内跑通过第一个提取任务。

1. 安装 (Install) ​

通过 pip 安装。需要 Python 3.9+。

bash
pip install langextract

国内加速

如果下载慢,可以使用清华源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple langextract

2. 配置 API Key ​

默认使用 Google Gemini。你需要从 Google AI Studio 获取 Key。

bash
export LANGEXTRACT_API_KEY="your-api-key-here"

🔑 langextract_api_key 怎么获取?

LANGEXTRACT_API_KEY 其实就是 Google Gemini API Key。 请访问 Google AI Studio 免费申请。获取后将其赋值给环境变量 LANGEXTRACT_API_KEY 即可。

3. 第一个提取示例 (Demo) ​

从一段简单的文本中提取角色信息。需要提供少样本示例 (few-shot example)。

python
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)

4. 可视化结果 (Interactive Visualization) 📊 ​

LangExtract 的杀手级功能。生成交互式 HTML 报告,方便人工核查。

python
# 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)

查看可视化效果示例


框架集成 (Integrations) ​

LangExtract 可以无缝融入你现有的 AI 技术栈。

LlamaIndex 集成 ​

结合 LlamaIndex 强大的 RAG (检索增强生成) 能力与 LangExtract 的精准提取。使用 LlamaIndex 检索相关文档切片,再通过 LangExtract 生成清洗后的标准 JSON 数据。

LangChain 支持 ​

轻松将 LangExtract 封装为 LangChain 管道中的 Runnable 组件。非常适合构建需要可靠地“阅读”文档并填充数据库的复杂 Agent。


LLM 配置指南 ​

如何接入不同的模型?

本地模型 (Ollama) 🏠 ​

隐私安全、零成本。推荐国内用户使用。

  1. 安装 Ollama: 访问 ollama.com 下载。
  2. 下载模型: ollama pull gemma2:2b 或 ollama pull llama3
  3. 启动服务: ollama serve
  4. 代码配置:
python
import 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
)

OpenAI GPT-4 🧠 ​

适合复杂推理任务。需要安装依赖:pip install langextract[openai]

bash
export OPENAI_API_KEY="sk-..."
python
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
)

Google Vertex AI Batch (企业级批处理) 🏢 ​

大规模任务建议开启 Batch 模式以节省成本。

python
result = lx.extract(
    ...,
    language_model_params={"vertexai": True, "batch": {"enabled": True}}
)

高级安装:Docker 🐳 ​

不污染本地环境,直接运行:

bash
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 约束。

国产大模型完美支持 (DeepSeek, 豆包, 千问等) 🔌 ​

LangExtract 支持所有兼容 OpenAI 协议的国产大模型。已实测支持:

  • DeepSeek (V3, R1)
  • 字节跳动 豆包 (Doubao)
  • 阿里 通义千问 (Qwen)
  • 智谱 AI (GLM-4)
  • MiniMax
python
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
)
python
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
)
python
# 适用于 豆包 (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
)

长文档处理 (Scaling to Longer Documents) 📚 ​

如何处理超过 Context Window 的长书或 PDF?LangExtract 内置了分块 (Chunking) 和 并行处理 机制。

无需手动切分文本,直接传入 URL 或长文本即可:

python
# 例如:处理整本《罗密欧与朱丽叶》
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 vs. 竞品对比 ​

LangExtract 与 LlamaExtract 或 Docling 有何区别?

特性LangExtract 🚀LlamaExtractDocling
核心定位结构化数据提取文档解析 / RAG文档格式转换 (PDF转MD)
溯源能力✅ 原生支持 (字符级)❌❌
Schema 验证✅ 严格 (Pydantic)✅❌
模型支持Gemini, DeepSeek, 任意LLMOpenAI 为主本地 / 云端
适用场景复杂结构提取, 需要溯源快速 RAG 搭建Markdown 转换

常见问题 (FAQ) ​

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 本地模型,则完全免费。

社区维护指南。