Skip to content

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

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

LangExtract 是什么?

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

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

  1. 精准溯源 (Grounding): 每一个提取的字段都能精确映射回原文的坐标,方便人工验证。
  2. Schema 强约束: 保证输出内容严格符合 Pydantic 定义的数据结构,杜绝字段幻觉。
  3. 模型无关性: 虽为 Google Gemini 原生打造,但完美兼容 DeepSeekOpenAI 以及 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:2bollama 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=Trueuse_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 与 LlamaExtractDocling 有何区别?

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

社区维护指南。