项目简介
LangExtract 是一个 Python 库,利用大型语言模型(LLMs)从非结构化文本中提取结构化信息,基于用户定义的指令。它可以处理临床笔记或报告等材料,识别并组织关键细节,同时确保提取的数据与源文本对应。
为什么选择 LangExtract?
-
精确的源文本定位:将每次提取映射到源文本中的确切位置,支持可视化高亮,便于追溯和验证。 -
可靠的结构化输出:基于少量示例强制执行一致的输出模式,利用支持的模型(如 Gemini)的受控生成功能,确保结果稳健且结构化。 -
针对长文档优化:通过优化的文本分块、并行处理和多轮提取策略,解决大文档提取中的“大海捞针”问题,提高召回率。 -
交互式可视化:即时生成独立的交互式 HTML 文件,用于在原始上下文中查看和审查数千个提取实体。 -
灵活的 LLM 支持:支持从云端 LLM(如 Google Gemini 系列)到本地开源模型(通过内置的 Ollama 接口)的多种模型。 -
适应任何领域:仅需少量示例即可定义任何领域的提取任务,无需微调模型。 -
利用 LLM 世界知识:通过精确的提示词和少量示例,引导模型在提取任务中利用其知识。推断信息的准确性及其对任务规范的遵循程度取决于所选 LLM、任务的复杂性、提示指令的清晰度以及示例的性质。
快速开始
注意:使用云端托管模型(如 Gemini)需要 API 密钥。请参阅 API 密钥设置[1] 部分了解如何获取和配置密钥。
仅需几行代码即可提取结构化信息。
1. 定义提取任务
首先,创建一个清晰描述提取内容的提示,然后提供高质量的示例以引导模型。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineimport langextract as lximport textwrap# 1. 定义提示和提取规则prompt = textwrap.dedent("""\按出现顺序提取角色、情感和关系。使用精确文本进行提取,不要改写或重叠实体。为每个实体提供有意义的属性以添加上下文。""")# 2. 提供高质量示例以引导模型examples = [lx.data.ExampleData(text="罗密欧:轻声!那边窗子里亮起来的是什么光?那就是东方,朱丽叶就是太阳。",extractions=[lx.data.Extraction(extraction_class="角色",extraction_text="罗密欧",attributes={"情感状态": "惊叹"}),lx.data.Extraction(extraction_class="情感",extraction_text="轻声!",attributes={"感受": "温柔的敬畏"}),lx.data.Extraction(extraction_class="关系",extraction_text="朱丽叶就是太阳",attributes={"类型": "隐喻"}),])]
2. 运行提取
将输入文本和提示材料提供给 lx.extract 函数。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 待处理的输入文本input_text = "朱丽叶夫人凝视着星空,心中对罗密欧充满渴望"# 运行提取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 配额以提高吞吐量并避免速率限制。详情请参阅 速率限制文档[2]。模型生命周期:请注意,Gemini 模型有生命周期和定义的退役日期。用户应查阅 官方模型版本文档[3] 以了解最新稳定版和旧版信息。
3. 可视化结果
提取结果可以保存为 .jsonl 文件(一种常用的语言模型数据格式),然后生成交互式 HTML 可视化文件以在上下文中审查实体。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 将结果保存到 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:f.write(html_content)
这将生成一个动态交互式 HTML 文件:

关于 LLM 知识利用的说明:此示例展示了基于文本证据的提取——提取朱丽叶夫人的情感状态“渴望”并从“凝视着星空”中识别“向往”。任务可以修改为生成更多依赖 LLM 世界知识的属性(例如添加
"身份": "卡普莱特家族的女儿"或"文学背景": "悲剧女主角")。文本证据与知识推断之间的平衡由提示指令和示例属性控制。
扩展到长文档
对于更长的文本,可以直接从 URL 并行处理整个文档,并提高敏感度:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 直接从古登堡计划处理《罗密欧与朱丽叶》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 文件中探索数百个实体。查看完整的《罗密欧与朱丽叶》提取示例 →[4] 了解详细结果和性能分析。
安装
通过 PyPI 安装
ounter(linepip install langextract
推荐大多数用户使用。对于隔离环境,建议使用虚拟环境:
ounter(lineounter(lineounter(linepython -m venv langextract_envsource langextract_env/bin/activate # Windows: langextract_env\Scripts\activatepip install langextract
从源码安装
LangExtract 使用现代 Python 打包工具 pyproject.toml 管理依赖:
使用 -e 参数安装为开发模式,允许修改代码而无需重新安装。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linegit clone https://github.com/google/langextract.gitcd langextract# 基本安装:pip install -e .# 开发安装(包含代码检查工具):pip install -e ".[dev]"# 测试安装(包含 pytest):pip install -e ".[test]"
Docker
ounter(lineounter(linedocker build -t langextract .docker run --rm -e LANGEXTRACT_API_KEY="your-api-key" langextract python your_script.py
云模型 API 密钥设置
使用云端托管模型(如 Gemini 或 OpenAI)时,需要设置 API 密钥。本地 LLM 不需要 API 密钥。对于使用本地 LLM 的开发者,LangExtract 内置了对 Ollama 的支持,并可通过更新推理端点扩展到其他第三方 API。
API 密钥来源
从以下平台获取 API 密钥:
-
AI Studio[5] 用于 Gemini 模型 -
Vertex AI[6] 用于企业用途 -
OpenAI Platform[7] 用于 OpenAI 模型
在环境中设置 API 密钥
选项 1:环境变量
ounter(lineexport LANGEXTRACT_API_KEY="your-api-key-here"
选项 2:.env 文件(推荐)
将 API 密钥添加到 .env 文件:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 将 API 密钥添加到 .env 文件cat >> .env << 'EOF'LANGEXTRACT_API_KEY=your-api-key-hereEOF# 保护 API 密钥安全echo '.env' >> .gitignore
在 Python 代码中:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineimport langextract as lxresult = lx.extract(text_or_documents=input_text,prompt_description="提取信息...",examples=[...],model_id="gemini-2.5-flash")
选项 3:直接提供 API 密钥(不推荐用于生产)
也可以在代码中直接提供 API 密钥,但不推荐用于生产环境:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineresult = lx.extract(text_or_documents=input_text,prompt_description="提取信息...",examples=[...],model_id="gemini-2.5-flash",api_key="your-api-key-here" # 仅用于测试/开发)
使用 OpenAI 模型
LangExtract 也支持 OpenAI 模型。OpenAI 配置示例:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linefrom langextract.inference import OpenAILanguageModelresult = lx.extract(text_or_documents=input_text,prompt_description=prompt,examples=examples,language_model_type=OpenAILanguageModel,model_id="gpt-4o",api_key=os.environ.get('OPENAI_API_KEY'),fence_output=True,use_schema_constraints=False)
注意:OpenAI 模型需要设置 fence_output=True 和 use_schema_constraints=False,因为 LangExtract 尚未为 OpenAI 实现模式约束。
项目地址
https://github.com/google/langextract/blob/main/README.md
参考资料
API 密钥设置: #云模型-api-密钥设置
[2]速率限制文档: https://ai.google.dev/gemini-api/docs/rate-limits#tier-2
[3]官方模型版本文档: https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions
[4]查看完整的《罗密欧与朱丽叶》提取示例 →: https://github.com/google/langextract/blob/main/docs/examples/longer_text_example.md
[5]AI Studio: https://aistudio.google.com/app/apikey
[6]Vertex AI: https://cloud.google.com/vertex-ai/generative-ai/docs/sdks/overview
[7]OpenAI Platform: https://platform.openai.com/api-keys
扫码加入技术交流群,备注「开发语言-城市-昵称」
(文:GitHubStore)