LangExtract库从非结构化文本提取结构化信息2026指南
AIAI Summary (BLUF)
LangExtract 是一个Python库,借助大语言模型(LLM),依据用户指令从非结构化文本(如临床记录)中提取并定位结构化信息,支持长文档处理与交互式可视化。
引言
LangExtract 是一个 Python 库,它利用大语言模型(LLM)根据用户定义的指令,从非结构化文本文档中提取结构化信息。它能处理诸如临床记录或报告等材料,识别并组织关键细节,同时确保提取的数据与源文本相对应。
为何选择 LangExtract?
LangExtract 旨在解决从复杂文档中提取信息的核心挑战,提供一套独特的功能:
- 精确的源文本定位:将每次提取都映射到源文本中的确切位置,支持可视化高亮,便于追溯和验证。
- 可靠的结构化输出:基于您提供的少量示例强制执行一致的输出模式,并利用 Gemini 等支持受控生成的模型,保证稳健的结构化结果。
- 针对长文档优化:通过优化的文本分块、并行处理同时处理多个文本块或文档,以提高处理速度和效率。和多轮提取通过extraction_passes参数设置多次处理文档的轮数,每轮可能发现新的实体,从而提高整体召回率,特别适用于复杂的长文档。策略,克服从大型文档中寻找“大海捞针”的挑战,实现更高的召回率。
- 交互式可视化生成交互式HTML可视化,通过直观的高亮显示在上下文中查看提取的实体。:即时生成一个独立的交互式 HTML 文件,用于在原始上下文中可视化和审查数千个提取的实体。
- 灵活的 LLM 支持:支持您偏好的模型,从基于云的 LLM(如 Google Gemini 系列)到通过内置 Ollama 接口访问的本地开源模型。
- 适应任何领域:仅需几个示例即可为任何领域定义提取任务。LangExtract 无需模型微调即可适应您的需求。
- 利用 LLM 世界知识:利用精确的提示词措辞和少量示例来影响提取任务如何利用 LLM 的知识。任何推断信息的准确性及其对任务规范的遵守程度,取决于所选 LLM、任务的复杂性、提示指令的清晰度以及提示示例的性质。
快速入门
只需几行代码即可提取结构化信息。
1. 定义您的提取任务
首先,创建一个清晰描述您要提取内容的提示。然后,提供一个高质量的示例来引导模型。
import langextract as lx
import textwrap
# 1. 定义提示和提取规则
prompt = textwrap.dedent("""\
Extract characters, emotions, and relationships in order of appearance.
Use exact text for extractions. Do not paraphrase or overlap entities.
Provide meaningful attributes for each entity to add context.""")
# 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"}
),
]
)
]
2. 运行提取
将您的输入文本和提示材料提供给 lx.extract 函数。
# 要处理的输入文本
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",
)
3. 可视化结果
提取结果可以保存到 .jsonl 文件(一种用于处理语言模型数据的流行格式)。然后,LangExtract 可以从该文件生成交互式 HTML 可视化,以便在上下文中审查实体。
# 将结果保存到 JSONL 文件
lx.io.save_annotated_documents([result], output_name="extraction_results.jsonl", output_dir=".")
# 从文件生成可视化
html_content = lx.visualize("extraction_results.jsonl")
with open("visualization.html", "w") as f:
if hasattr(html_content, 'data'):
f.write(html_content.data) # 适用于 Jupyter/Colab
else:
f.write(html_content)
这将创建一个动画交互式 HTML 文件。
扩展到更长文档
对于更大的文本,您可以直接从 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 文件中探索数百个实体。请参阅完整的《罗密欧与朱丽叶》提取示例 → 以获取详细结果和性能分析。
安装
从 PyPI 安装
pip install langextract
推荐大多数用户使用。对于隔离环境,请考虑使用虚拟环境:
python -m venv langextract_env
source langextract_env/bin/activate # Windows 系统: langextract_env\Scripts\activate
pip install langextract
从源码安装
LangExtract 使用现代的 Python 打包方式,通过 pyproject.toml 进行依赖管理:
git clone https://github.com/google/langextract.git
cd langextract
# 基本安装:
pip install -e .
# 开发安装(包含代码检查工具):
pip install -e ".[dev]"
# 测试安装(包含 pytest):
pip install -e ".[test]"
Docker
docker build -t langextract .
docker run --rm -e LANGEXTRACT_API_KEY="your-api-key" langextract python your_script.py
API 密钥设置(用于云端模型)
当使用 LangExtract 与云端托管模型(如 Gemini 或 OpenAI)时,您需要设置 API 密钥。设备端模型不需要 API 密钥。对于使用本地 LLM 的开发者,LangExtract 提供了对 Ollama 的内置支持,并且可以通过更新推理端点扩展到其他第三方 API。
API 密钥来源
从以下位置获取 API 密钥:
- AI Studio:用于 Gemini 模型
- Vertex AI:用于企业用途
- OpenAI Platform:用于 OpenAI 模型
在环境中设置 API 密钥
选项 1:环境变量
export LANGEXTRACT_API_KEY="your-api-key-here"
选项 2:.env 文件(推荐)
将您的 API 密钥添加到 .env 文件:
# 将 API 密钥添加到 .env 文件
cat >> .env << 'EOF'
LANGEXTRACT_API_KEY=your-api-key-here
EOF
# 确保 API 密钥安全
echo '.env' >> .gitignore
在您的 Python 代码中:
import langextract as lx
result = lx.extract(
text_or_documents=input_text,
prompt_description="Extract information...",
examples=[...],
model_id="gemini-2.5-flash"
)
选项 3:直接提供 API 密钥(不推荐用于生产环境)
您也可以在代码中直接提供 API 密钥,但这不推荐用于生产环境:
result = lx.extract(
text_or_documents=input_text,
prompt_description="Extract information...",
examples=[...],
model_id="gemini-2.5-flash",
api_key="your-api-key-here" # 仅用于测试/开发
)
选项 4:Vertex AI(服务账号)
使用 Vertex AI 通过服务账号进行身份验证:
result = lx.extract(
text_or_documents=input_text,
prompt_description="Extract information...",
examples=[...],
model_id="gemini-2.5-flash",
language_model_params={
"vertexai": True,
"project": "your-project-id",
"location": "global" # 或区域端点
}
)
添加自定义模型提供商
LangExtract 通过轻量级插件系统支持自定义 LLM 提供商。您可以在不更改核心代码的情况下添加对新模型的支持。
- 独立于核心库添加新模型支持
- 将您的提供商作为独立的 Python 包分发
- 保持自定义依赖隔离
- 通过基于优先级的解析覆盖或扩展内置提供商
请参阅 提供商系统文档 中的详细指南,了解如何:
- 使用
@registry.register(...)注册提供商 - 发布一个用于发现的入口点
- 可选地通过
get_schema_class()提供模式以支持结构化输出 - 通过
create_model(...)与工厂集成
使用 OpenAI 模型
LangExtract 支持 OpenAI 模型(需要可选依赖:pip install langextract[openai]):
import langextract as lx
result = lx.extract(
text_or_documents=input_text,
prompt_description=prompt,
examples=examples,
model_id="gpt-4o", # 自动选择 OpenAI 提供商
api_key=os.environ.get('OPENAI_API_KEY'),
fence_output=True,
use_schema_constraints=False
)
使用本地 LLM(通过 Ollama)
LangExtract 支持使用 Ollama 进行本地推理,允许您在没有 API 密钥的情况下运行模型:
import langextract as lx
result = lx.extract(
text_or_documents=input_text,
prompt_description=prompt,
examples=examples,
model_id="gemma2:2b", # 自动选择 Ollama 提供商
model_url="http://localhost:11434",
fence_output=False,
use_schema_constraints=False
)
更多示例
LangExtract 的实际应用示例:
《罗密欧与朱丽叶》全文提取
LangExtract 可以直接从 URL 处理完整的文档。此示例演示了从古登堡计划的《罗密欧与朱丽叶》全文(147,843 字符)中提取信息,展示了并行处理、顺序提取轮次以及针对长文档处理的性能优化。
药物信息提取
LangExtract 擅长从临床文本中提取结构化医疗信息。这些示例演示了基本的实体识别(药物名称、剂量、给药途径)和关系提取(将药物与其属性关联),展示了 LangExtract 在医疗保健应用中的有效性。
放射学报告结构化:RadExtract
探索 RadExtract,这是一个在 HuggingFace Spaces 上的实时交互式演示,展示了 LangExtract 如何自动构建放射
版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。
文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。
若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。



