开源,LangExtract-Python库用LLM从非结构化文本提取结构化信息

摘要:
LangExtract是一个Python库,利用大语言模型(LLM)根据用户定义指令从非结构化文本文档中提取结构化信息。它具备精确源定位、可靠结构化输出、长文档优化、交互式可视化、灵活LLM支持、适应任意领域等特点。可通过几行代码快速开始提取,支持云模型和本地LLM,还提供多种安装方式、API密钥设置方法、自定义模型提供商方式等。有丰富示例,如罗密欧与朱丽叶全文提取、药物提取等,且欢迎贡献,有测试和开发相关流程。

LangExtract

简介

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

为何选择LangExtract?

  • 精确的源定位:将每个提取内容映射到源文本中的准确位置,支持视觉突出显示,便于追溯和验证。
  • 可靠的结构化输出:基于少量示例强制实施一致的输出架构,利用Gemini等支持模型的受控生成来保证可靠、结构化的结果。
  • 适用于长文档:通过文本分块、并行处理和多次传递的优化策略,克服大文档提取中“大海捞针”的挑战,提高召回率。
  • 交互式可视化:立即生成自包含的交互式HTML文件,可视化并查看数千个提取实体在原始上下文中的情况。
  • 灵活的LLM支持:支持多种模型,从谷歌Gemini系列等云托管LLM到通过内置Ollama接口的本地开源模型。
  • 适应任何领域:仅用少量示例就能为任何领域定义提取任务,无需模型微调即可适应需求。
  • 利用LLM世界知识:利用精确的提示措辞和少量示例来影响提取任务对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可能提供更优结果。对于大规模或生产使用,建议使用二级Gemini配额以提高吞吐量并避免速率限制。有关详细信息,请参阅速率限制文档。

模型生命周期:请注意,Gemini模型有定义的退休日期的生命周期。用户应咨询官方模型版本文档以了解最新的稳定和旧版本。

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/Colabelse:f.write(html_content)

这将创建一个动画和交互式HTML文件:罗密欧与朱丽叶基本可视化。

关于LLM知识利用的说明:

此示例演示了与文本证据密切相关的提取:提取“longing”作为朱丽叶女士的情绪状态,并从“gazed longingly at the stars”识别出“yearning”。可以修改任务以生成更多利用LLM世界知识的属性(例如,添加“identity”: “Capulet family daughter”或“literary_context”: “tragic heroine”)。文本证据和知识推断之间的平衡由提示指令和示例属性控制。

扩展到更长文档

对于较大的文本,可以直接通过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文件中的数百个实体变得容易。请参阅完整的罗密欧与朱丽叶提取示例以获取详细结果和性能见解。

安装

从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 .# 开发安装(包括代码检查工具):
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密钥:

  • 用于Gemini模型的AI Studio
  • 用于企业使用的Vertex AI
  • 用于OpenAI模型的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 lxresult = 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"  # 仅用于测试/开发
)

添加自定义模型提供商

LangExtract通过轻量级插件系统支持自定义LLM提供商。您可以在不更改核心代码的情况下添加对新模型的支持。

  • 独立于核心库添加新模型支持
  • 将您的提供商作为单独的Python包分发
  • 隔离自定义依赖项
  • 通过基于优先级的解析覆盖或扩展内置提供商

请参阅提供商系统文档中的详细指南,了解如何:

  • 使用@registry.register(…)注册提供商
  • 发布入口点以进行发现
  • 可选地通过get_schema_class()提供具有结构化输出的架构
  • 通过create_model(…)与工厂集成

使用OpenAI模型

LangExtract支持OpenAI模型(需要可选依赖项:pip install langextract[openai]):

import langextract as lxresult = 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=True和use_schema_constraints=False,因为LangExtract目前还没有为OpenAI实现架构约束。

使用本地LLM与Ollama

LangExtract支持使用Ollama进行本地推理,允许您在没有API密钥的情况下运行模型:

import langextract as lxresult = 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安装Ollama,运行ollama pull gemma2:2b,然后ollama serve。

有关详细安装、Docker设置和示例,请参阅examples/ollama/。

更多示例

LangExtract的其他应用示例:

罗密欧与朱丽叶全文提取

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

查看罗密欧与朱丽叶全文示例→

药物提取

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

LangExtract擅长从临床文本中提取结构化医疗信息。这些示例演示了基本实体识别(药物名称、剂量、途径)和关系提取(将药物与其属性连接),展示了LangExtract在医疗保健应用中的有效性。

查看药物示例→

放射学报告结构化:RadExtract

探索RadExtract,这是一个在HuggingFace Spaces上的实时交互式演示,展示了LangExtract如何自动结构化放射学报告。无需设置即可直接在浏览器中尝试。

查看RadExtract演示→

贡献

欢迎贡献!请参阅CONTRIBUTING.md以开始开发、测试和拉取请求。提交补丁前必须签署贡献者许可协议。

测试

要从源码本地运行测试:

# 克隆仓库
git clone https://github.com/google/langextract.git
cd langextract# 安装带有测试依赖项的包
pip install -e ".[test]"# 运行所有测试
pytest tests

或使用tox重现完整的CI矩阵:

tox  # 在Python 3.10和3.11上运行pylint + pytest

Ollama集成测试

如果本地安装了Ollama,可以运行集成测试:

# 测试Ollama集成(需要运行带有gemma2:2b模型的Ollama)
tox -e ollama-integration

此测试将自动检测Ollama是否可用并运行真实推理测试。

开发

代码格式化

该项目使用自动化格式化工具来保持一致的代码风格:

# 自动格式化所有代码
./autoformat.sh# 或单独运行格式化程序
isort langextract tests --profile google --line-length 80
pyink langextract tests --config pyproject.toml

预提交钩子

用于自动格式化检查:

pre-commit install  # 一次性设置
pre-commit run --all-files  # 手动运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96298.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何根据团队技术能力选择最适合的PHP框架?

作为一名PHP开发者&#xff0c;面对众多的PHP框架&#xff0c;你是否曾感到选择困难&#xff1f;Laravel、Symfony、CodeIgniter、ThinkPHP…每个框架都有其特色和优势&#xff0c;但没有最好的框架&#xff0c;只有最适合的框架。而选择合适框架的关键因素之一&#xff0c;就是…

多人同时导出 Excel 导致内存溢出

1、问题根因分析多人同时导出Excel导致内存溢出&#xff08;OOM&#xff09;的核心原因是&#xff1a;在短时间内&#xff0c;大量数据被加载到JVM堆内存中&#xff0c;且创建了大量大对象&#xff08;如Apache POI的Cell、Row、Sheet对象&#xff09;&#xff0c;超过了堆内存…

深入 RAG(检索增强生成)系统架构:如何构建一个能查资料的大语言模型系统

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、LLM 的局限&#xff1a;模型知识“封闭” vs 现实知识…

linux tftpboot烧写地址分析

1&#xff0c;loadaddr 是一个环境变量&#xff0c;用于指定文件&#xff08;如内核镜像、设备树等&#xff09;加载到内存的起始地址。setenv loadaddr 0x82000000setenv loadaddr 0x80008000saveenv //.保存配置将 loadaddr 设置为 0x82000000&#xff0c;表示后续文件将加载…

硬件工程师9月实战项目分享

目录 简介 人员情况 实战项目简介 功能需求 需求分析 方案设计 电源树设计 时钟树设计 主芯片外围设计 接口设计 模拟链路设计 PCB设计检查要点 测试方案设计 硬件测试培训 测试代码学习 培训目标 掌握基本的硬件设计流程 掌握以FPGA为核心的硬件设计业务知识 …

力扣刷题——59.螺旋矩阵II

力扣刷题——59.螺旋矩阵II 题目 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1&#xff1a;输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输…

win11系统还原点恢复系统

背景 系统换位bug11后&#xff0c;真的是各种以前的操作和设置找不到&#xff0c;太烦了&#xff0c;我是没想到&#xff0c;连系统恢复还原点都这么难找。然后搜了一圈都是恢复系统之类的&#xff0c;真的崩溃。只好自己记录了。 ✍内容找到设置—>系统–>系统信息系统信…

DHCP 原理与配置(一)

应用场景随着网络规模的不断扩大&#xff0c;网络复杂度不断提升&#xff0c;网络中的终端设备例如主机、手机、 平板等&#xff0c;位置经常变化。终端设备访问网络时需要配置IP地址、网关地址、DNS服务器 地址等。采用手工方式为终端配置这些参数非常低效且不够灵活。 IETF于…

SARibbon的编译构建及详细用法

目录 1.1 源码构建 1.2 搭建项目 1.3 详细用法 1.4 不同风格 1.5 完整代码 引言:SARibbon是一个专门为Qt框架设计的开源Ribbon风格界面控件库,它模仿了微软Office和WPS的Ribbon UI风格,适用于需要复杂菜单和工具栏的大型桌面程序。本文从源码编译构建到详细使用,做了一…

CSS【详解】性能优化

精简 CSS移除未使用的 CSS&#xff08;“死代码”&#xff09;&#xff0c;可借助工具如 PurgeCSS、UnCSS 自动检测并删除未被页面使用的样式。避免重复样式&#xff0c;通过提取公共样式&#xff08;如 mixin 或公共类&#xff09;减少代码冗余。利用预处理器&#xff08;Sass…

Flutter 线程模型详解:主线程、异步与 Isolate

一、主线程&#xff1a;默认的执行环境 所有代码默认运行在主线程。下面的例子展示了一个会阻塞主线程的错误示范&#xff1a; import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWidget {const MyApp({super.key});ov…

ChartDB:可视化数据库设计工具私有化部署

ChartDB:可视化数据库设计工具私有化部署一、什么是ChartDB ChartDB 是一款基于 Web 的开源数据库可视化工具&#xff0c;专为简化数据库设计与管理流程而开发。以下是其核心特性与功能概述: 1、核心功能 智能查询可视化‌&#xff1a;通过单条 SQL 查询即可生成数据库架构图&a…

单片机-FreeRTOS(ing)

目录 一、基础介绍 1.1 调度策略 1.1.1 调度方式 1.1.2 调度器 1.2 任务以及优先级 1.2.1 任务与协程 1.2.2 任务状态 1.2.3 任务优先级 1.2.4 任务优先级分配方案 1.3 任务间通信 - 信号量 1.3.1 信号量 1.3.2 任务间计数信号量的实现 1.3.3 中断方式计数信号量的…

为什么调用API总返回404,该如何调试

当调用一个应用程序接口&#xff08;API&#xff09;时&#xff0c;持续地收到“404 未找到”的错误&#xff0c;其核心原因在于客户端发起的“请求”&#xff0c;未能成功地&#xff0c;匹配到服务器上任何一个“真实存在”的、可供访问的“资源路径”。这本质上&#xff0c;是…

医疗信息化自主可控转型的实践探索 —— 以常德二院为例

目录 头雁领航 - 激发医疗新质生产力 核心支撑 - 电科金仓奠定数据底座 生态共建 - 携手护航医疗信创发展 信创产业发展是国家经济数字化转型、提升产业链发展的关键&#xff0c;是科技自立自强的核心基座&#xff0c;其本质是实现中国信息化产业的自主可控。医疗信创作为关…

Gin传参和接收参数的方式

Gin查询参数和接收参数的方式 常用 Gin 绑定方法对比方法用途特点c.Bind()自动识别 Content-Type最通用&#xff0c;根据请求头自动选择绑定方式c.ShouldBindJSON()只绑定 JSON强制使用 JSON 格式&#xff0c;类型明确c.ShouldBindXML()只绑定 XML强制使用 XML 格式c.ShouldBin…

MariaDB/MySQL 客户端工具与服务端配置精要指南

文章目录一、客户端与服务端程序二、用户账号管理三、MySQL 客户端命令3.1 命令类型​3.2 使用模式​3.3 常用选项​3.4 提示符定制​四、mysqladmin管理命令​​五、服务端配置​5.1 配置文件​​​5.2 Socket 通信配置​​六、最佳实践总结免费个人运维知识库&#xff0c;欢迎…

自动化项目日报生成工具测评与选型:如何匹配团队日报管理需求

引言在项目管理场景中&#xff0c;手动撰写日报常面临多重效率瓶颈&#xff1a;任务数据分散在协作群、Excel 表格、项目看板等多个平台&#xff0c;汇总时需反复核对&#xff1b;不同成员日报格式不统一&#xff0c;管理层整合分析耗时&#xff1b;任务进度与日报信息不同步&a…

基于SpringBoot+Vue的吴韵苏香文旅小程序(协同过滤算法、Echarts图形化分析、腾讯地图API、二维码识别)

&#x1f388;系统亮点&#xff1a;协同过滤算法、Echarts图形化分析、腾讯地图API、二维码识别&#xff1b;一.系统开发工具与环境搭建1.系统设计开发工具后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17小程序&a…

python numpy.random的基础教程(附opencv 图片转数组、数组转图片)

目录 1.在区间[a,b)随机生成n个整数。 2.在区间[a,b)随机生成n个数。 3.在区间[0,1)生成随机数 4.打乱顺序 5.从指定的列表中选择 NumPy&#xff08;Numerical Python&#xff09;是一个开源的科学计算库&#xff0c;专门用于高效处理多维数组&#xff08;ndarray&#xf…