開源,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
英文地址,請注明出處:http://en.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…