LangExtract - 基于LLM的结构化信息提取库

LangExtract - 基于LLM的结构化信息提取库

整理时间: 2026-02-11 20:51
来源: GitHub - google/langextract
整理人: AI助手

摘要

LangExtract 是 Google 开源的 Python 库,利用大语言模型(LLM)从非结构化文本中提取结构化信息。它支持精确的源文本定位、交互式可视化,并针对长文档进行了优化,可应用于临床笔记、报告等多种文档类型的信息提取任务。


项目概览

属性 内容
项目名称 LangExtract
开发团队 Google
GitHub https://github.com/google/langextract
PyPI https://pypi.org/project/langextract/
DOI 10.5281/zenodo.17015089

核心特性

1. 精确源文本定位

  • 将每个提取结果映射到源文本的精确位置
  • 支持可视化高亮显示
  • 便于溯源和验证

2. 可靠的结构化输出

  • 基于少样本示例(few-shot)强制执行一致的输出模式
  • 在支持的模型(如 Gemini)中利用受控生成保证结构化结果

3. 长文档优化

  • 解决大型文档提取中的”大海捞针”难题
  • 采用文本分块、并行处理和多次扫描的优化策略
  • 提高召回率

4. 交互式可视化

  • 自动生成独立的交互式 HTML 文件
  • 可视化并审查数千个提取实体在原始上下文中的位置

5. 灵活的LLM支持

  • 支持云端模型:Google Gemini 系列
  • 支持本地开源模型:通过内置 Ollama 接口

6. 领域适应性

  • 仅需少量示例即可定义任意领域的提取任务
  • 无需模型微调

快速开始

安装

# 从 PyPI 安装
pip install langextract

# 或从源码安装
git clone https://github.com/google/langextract.git
cd langextract
pip install -e .

基础使用示例

import langextract as lx
import textwrap

# 1. 定义提取任务的提示词
prompt = textwrap.dedent("""\
 提取文本中出现的角色、情绪和关系,按出现顺序排列。
 使用原文精确文本进行提取,不要改写或重叠实体。
 为每个实体提供有意义的属性以添加上下文。""")

# 2. 提供高质量的示例
examples = [
    lx.data.ExampleData(
        text="ROMEO. But soft! What light through yonder window breaks? It is the east, and Juliet is the sun.",
        extractions=[
            lx.data.Extraction(
                extraction_class="character",
                extraction_text="ROMEO",
                attributes={"emotional_state": "wonder"}
            ),
            lx.data.Extraction(
                extraction_class="emotion",
                extraction_text="But soft!",
                attributes={"feeling": "gentle awe"}
            ),
            lx.data.Extraction(
                extraction_class="relationship",
                extraction_text="Juliet is the sun",
                attributes={"type": "metaphor"}
            ),
        ]
    )
]

# 3. 运行提取
input_text = "Lady Juliet gazed longingly at the stars, her heart aching for Romeo"
result = lx.extract(
    text_or_documents=input_text,
    prompt_description=prompt,
    examples=examples,
    model_id="gemini-2.5-flash",
)

模型推荐

  • 推荐默认模型: gemini-2.5-flash - 速度、成本和质量的最佳平衡
  • 复杂任务: gemini-2.5-pro - 需要深度推理时使用
  • 大规模生产: 建议使用 Tier 2 Gemini 配额以提高吞吐量

长文档处理

对于大型文本,支持直接从 URL 处理,并启用并行处理:

result = lx.extract(
    text_or_documents="https://www.gutenberg.org/files/1513/1513-0.txt",
    prompt_description=prompt,
    examples=examples,
    model_id="gemini-2.5-flash",
    extraction_passes=3,      # 多次扫描提高召回率
    max_workers=20,           # 并行处理加速
    max_char_buffer=1000      # 更小的上下文提高精度
)

此功能可从整部小说中提取数百个实体,同时保持高准确度。


可视化结果

# 保存结果为 JSONL 格式
lx.io.save_annotated_documents([result], output_name="extraction_results.jsonl", output_dir=".")

# 生成交互式 HTML 可视化
html_content = lx.visualize("extraction_results.jsonl")
with open("visualization.html", "w") as f:
    f.write(html_content)

高级功能

Vertex AI 批处理

对于大规模任务,可使用 Vertex AI Batch API 节省成本:

language_model_params={"vertexai": True, "batch": {"enabled": True}}

本地LLM支持(Ollama)

# 使用本地模型
model_id="ollama/llama3.1"

自定义模型提供商

支持添加自定义模型提供商接口。


应用场景示例

  1. 医学文本处理
  2. 药物提取
  3. 放射学报告结构化(RadExtract)

  4. 文学作品分析

  5. 角色、关系、情感提取
  6. 《罗密欧与朱丽叶》全文分析

  7. 通用文档处理

  8. 临床笔记结构化
  9. 报告关键信息提取

注意事项

  • 少样本示例质量:示例驱动模型行为,提取文本应尽可能与示例文本完全一致
  • 提示词对齐警告:LangExtract 默认会检查示例是否符合最佳实践
  • 模型生命周期:Gemini 模型有定义的生命周期和退役日期,需关注官方文档
  • 知识利用平衡:可通过提示词和示例属性控制文本证据与模型推理之间的平衡

相关资源

  • GitHub: https://github.com/google/langextract
  • PyPI: https://pypi.org/project/langextract/
  • 文档: 项目 docs/ 目录包含详细示例
  • 许可证: 请参考项目仓库

要点提炼

  • ✅ Google 开源的 Python 信息提取库,基于 LLM
  • ✅ 支持精确源文本定位和交互式可视化
  • ✅ 针对长文档优化,支持并行处理和多次扫描
  • ✅ 支持云端(Gemini)和本地(Ollama)模型
  • ✅ 仅需少量示例即可适应任意领域,无需微调
  • ✅ 适用于医学文本、文学分析等多种场景