LangExtract - 基于LLM的结构化信息提取库
LangExtract - 基于LLM的结构化信息提取库
整理时间: 2026-02-11 20:51
来源: GitHub - google/langextract
整理人: AI助手
摘要
LangExtract 是 Google 开源的 Python 库,利用大语言模型(LLM)从非结构化文本中提取结构化信息。它支持精确的源文本定位、交互式可视化,并针对长文档进行了优化,可应用于临床笔记、报告等多种文档类型的信息提取任务。
项目概览
| 属性 | 内容 |
|---|---|
| 项目名称 | LangExtract |
| 开发团队 | |
| 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"
自定义模型提供商
支持添加自定义模型提供商接口。
应用场景示例
- 医学文本处理
- 药物提取
-
放射学报告结构化(RadExtract)
-
文学作品分析
- 角色、关系、情感提取
-
《罗密欧与朱丽叶》全文分析
-
通用文档处理
- 临床笔记结构化
- 报告关键信息提取
注意事项
- 少样本示例质量:示例驱动模型行为,提取文本应尽可能与示例文本完全一致
- 提示词对齐警告:LangExtract 默认会检查示例是否符合最佳实践
- 模型生命周期:Gemini 模型有定义的生命周期和退役日期,需关注官方文档
- 知识利用平衡:可通过提示词和示例属性控制文本证据与模型推理之间的平衡
相关资源
- GitHub: https://github.com/google/langextract
- PyPI: https://pypi.org/project/langextract/
- 文档: 项目
docs/目录包含详细示例 - 许可证: 请参考项目仓库
要点提炼
- ✅ Google 开源的 Python 信息提取库,基于 LLM
- ✅ 支持精确源文本定位和交互式可视化
- ✅ 针对长文档优化,支持并行处理和多次扫描
- ✅ 支持云端(Gemini)和本地(Ollama)模型
- ✅ 仅需少量示例即可适应任意领域,无需微调
- ✅ 适用于医学文本、文学分析等多种场景