LangExtract—结构化提取利器

大模型向量数据库机器学习

简介

LangExtract 是一个 Python 库,利用大语言模型(LLMs)根据用户定义的指令,从非结构化的文本文件中提取结构化信息。它能够处理临床记录、报告等材料,识别并组织关键细节,同时确保提取的数据与源文本一致。

为什么选择 LangExtract?

精准的源文本映射 :将每次提取与源文本中的准确位置进行映射,支持可视化高亮,便于追溯和验证。•可靠的结构化输出 :基于少量示例强制输出一致的模式,利用像 Gemini 等支持的模型的控制生成特性,确保提取结果结构化且可靠。•优化长文档处理 :通过文本分块、并行处理和多轮传递等优化策略,解决大文档提取中的“干草堆中的针”问题,提升召回率。•交互式可视化 :即时生成自包含的 HTML 文件,方便查看和审查数千个提取的实体及其原始上下文。•灵活支持 LLM 模型 :支持你选择的模型,从基于云的 LLM(如 Google Gemini 系列)到通过内置 Ollama 接口的本地开源模型。•适应任意领域 :仅需少量示例即可定义任何领域的提取任务,LangExtract 无需对模型进行微调,灵活适应各种需求。•利用 LLM 的世界知识 :通过精准的提示词和少量示例,引导模型在任务中使用其已知的世界知识。提取结果的准确性和符合任务规范的程度取决于所选 LLM、任务的复杂性、提示指令的清晰度和示例的质量。

快速开始

注意 :使用像 Gemini 这样的云托管模型需要 API 密钥。请参API 密钥设置部分了解如何获取和配置密钥。

只需几行代码即可提取结构化信息。

1. 定义你的提取任务

首先,创建一个清晰描述你希望提取内容的提示词。然后,提供一个高质量的示例,帮助模型理解。

  
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"}  
),  
]  
)  
]

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",  
)

模型选择:推荐默认使用 gemini-2.5-flash,它在速度、成本和质量之间提供了极好的平衡。对于需要更深层推理的复杂任务,gemini-2.5-pro 可能会提供更优的结果。对于大规模或生产环境的使用,建议使用 Tier 2 Gemini 配额 以提高吞吐量并避免达到速率限制。有关详细信息,请参阅速率限制文档[1]。

模型生命周期:请注意,Gemini 模型具有生命周期,并且会有明确的退休日期。用户应查看官方的模型版本文档[2],以便随时了解最新的稳定版本和遗留版本。

3. 可视化结果

提取的结果可以保存为 .jsonl 文件,这是处理语言模型数据的常用格式。然后,LangExtract 可以从该文件生成一个交互式 HTML 可视化,帮助你在上下文中审查提取的实体。

  
# 将提取结果保存为 JSONL 文件  
lx.io.save_annotated_documents([result], output_name="extraction_results.jsonl", output_dir=".")  
从文件生成可视化  
python  
复制代码  
# 从文件生成可视化内容  
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 文件:

picture.image

关于 LLM 知识利用的说明:本示例展示了紧贴文本证据的提取——提取了朱丽叶的情感状态“渴望”,并从“长时间凝视星空”中识别出了“渴望”。该任务可以通过修改为生成更多依赖 LLM 世界知识的属性来进行调整(例如,添加“身份”: "Capulet 家族的女儿"“文学背景”: "悲剧女主角")。文本证据与知识推断之间的平衡由你的提示指令和示例属性控制。

扩展到更长的文档

对于较大的文本,你可以直接从 URL 处理整个文档,使用并行处理和增强的灵敏度:

  
# 从 Project Gutenberg 直接处理《罗密欧与朱丽叶》  
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 文件的数百个实体。查看完整的《罗密欧与朱丽叶》提取示例 [3]→ 以了解详细的结果和性能见解。

Vertex AI 批处理

通过启用 Vertex AI 批处理 API 来节省大规模任务的成本:language\_model\_params={"vertexai": True, "batch": {"enabled": True}}

查看此示例中 Vertex AI 批处理 API 的使用示例[4]。

安装

从 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 进行依赖管理:

使用 -e 安装包时,会将包置于开发模式,允许你在不重新安装的情况下修改代码。

  
git clone https://github.com/google/langextract.git  
cd langextract  
  
# 基本安装:  
pip install -e .  
  
# 开发安装(包括 lint 工具):  
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 密钥。而对于本地模型(On-device models),则不需要 API 密钥。对于使用本地 LLM 的开发者,LangExtract 提供了对 Ollama 的内置支持,并且可以通过更新推理端点来扩展对其他第三方 API 的支持。

云模型的 API 密钥设置

在使用 LangExtract 和云托管模型(如 Gemini 或 OpenAI)时,你需要设置 API 密钥。对于本地模型(On-device models),则不需要 API 密钥。对于使用本地 LLM 的开发者,LangExtract 提供了对 Ollama 的内置支持,并且可以通过更新推理端点来扩展对其他第三方 API 的支持。

获取 API 密钥的来源

你可以从以下地方获取 API 密钥:

•AI Studio[5]:用于 Gemini 模型•Vertex AI[6]:用于企业级使用•OpenAI 平台[7]:用于 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 [8]通过服务账户进行身份验证:

  
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 包进行分发•保持自定义依赖项的隔离•通过基于优先级的解析,覆盖或扩展内置提供者

有关如何操作的详细指南,请参见 提供者系统文档[9],了解如何:

•使用 @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  
)

注意:OpenAI 模型需要 fence\_output=Trueuse\_schema\_constraints=False,因为 LangExtract 目前还没有为 OpenAI 实现模式约束。

使用本地 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  
)

快速设置 :从 ollama.com[10] 安装 Ollama,运行 ollama pull gemma2:2b,运行 ollama serve

有关详细的安装、Docker 设置和示例,请查看 examples/ollama/目录。

更多示例

以下是 LangExtract 在实际应用中的更多示例:

《罗密欧与朱丽叶》全文提取

LangExtract 可以直接从 URL 处理完整文档。本示例展示了从 Project Gutenberg 提取《罗密欧与朱丽叶》全文(147,843 个字符),展示了并行处理、顺序提取轮次以及长文档处理的性能优化。

查看《罗密欧与朱丽叶》全文提取示例 →[11]

药物提取

免责声明 :此演示仅用于展示 LangExtract 的基础能力。它不代表完成的或批准的产品,不用于诊断或建议任何疾病或病情的治疗,也不应作为医疗建议使用。

LangExtract 在从临床文本中提取结构化医疗信息方面表现出色。以下示例展示了基本的实体识别(药物名称、剂量、给药途径)和关系提取(将药物与其属性关联),展示了 LangExtract 在医疗应用中的有效性。

查看药物提取示例 →[12]

放射学报告结构化:RadExtract

探索 RadExtract ,一个在 HuggingFace Spaces 上的实时互动演示,展示了 LangExtract 如何自动化地将放射学报告进行结构化处理。你可以直接在浏览器中尝试,无需任何设置。

查看 RadExtract 演示 →[13]

好了,今天的内容就分享到这里了,下期见!

  
https://github.com/google/langextract?tab=readme-ov-file#api-key-setup-for-cloud-models

References

[1] 速率限制文档:https://ai.google.dev/gemini-api/docs/rate-limits?hl=zh-cn#tier-2
[2]官方的模型版本文档:https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions?hl=zh-cn
[3]查看完整的《罗密欧与朱丽叶》提取示例 :https://github.com/google/langextract/blob/main/docs/examples/longer\_text\_example.md
[4]使用示例:https://github.com/google/langextract/blob/main/docs/examples/batch\_api\_example.md
[5]AI Studio:https://aistudio.google.com/app/api-keys
[6]Vertex AI:https://docs.cloud.google.com/vertex-ai/generative-ai/docs/sdks/overview?hl=zh-cn
[7]OpenAI 平台:https://platform.openai.com/api-keys
[8]Vertex AI :https://docs.cloud.google.com/vertex-ai/docs/start/introduction-unified-platform?hl=zh-cn
[9]提供者系统文档:https://github.com/google/langextract/blob/main/langextract/providers/README.md
[10]ollama.com:https://ollama.com/
[11]查看《罗密欧与朱丽叶》全文提取示例 →:https://github.com/google/langextract/blob/main/docs/examples/longer\_text\_example.md
[12]查看药物提取示例 →:https://github.com/google/langextract/blob/main/docs/examples/medication\_examples.md
[13]查看 RadExtract 演示

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
IDC 大模型应用落地白皮书
大模型技术已深度融入业务实践,各企业期望其释放更大商业价值。 但大模型落地之路面临许多挑战和顾虑。 如何精准对接业务需求与发展蓝图,制定切实可行的大模型落地策略? IDC发布首个大模型应用策略与行动指南 一为您揭晓一
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论