Skip to content

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

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

非官方指南

这是一个由开发者维护的社区指南 (Unofficial Guide),与 Google 官方无关。

为什么需要这个指南?

官方文档虽然全面,但在国内环境配置本地模型适配(如 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"

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)

查看可视化效果示例


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",
    api_key="your-api-key",
    language_model_params={
        "base_url": "https://api.deepseek.com/v1"  # 替换为对应厂商的 Base URL
    },
    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、书籍)。 查看完整案例

🇨🇳 多语言/中文处理

处理中文、日文等非英语文本。 查看完整案例


常见问题 (FAQ)

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

非官方指南。与 Google 无关。