<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>信息抽取 on KnightLi的博客</title>
        <link>https://www.knightli.com/tags/%E4%BF%A1%E6%81%AF%E6%8A%BD%E5%8F%96/</link>
        <description>Recent content in 信息抽取 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Fri, 01 May 2026 02:58:21 +0800</lastBuildDate><atom:link href="https://www.knightli.com/tags/%E4%BF%A1%E6%81%AF%E6%8A%BD%E5%8F%96/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Google LangExtract：用 LLM 从长文本里抽取结构化数据</title>
        <link>https://www.knightli.com/2026/05/01/google-langextract-llm-structured-data-extraction/</link>
        <pubDate>Fri, 01 May 2026 02:58:21 +0800</pubDate>
        
        <guid>https://www.knightli.com/2026/05/01/google-langextract-llm-structured-data-extraction/</guid>
        <description>&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 是 Google 开源的一个 Python 库，用来从非结构化文本中抽取结构化信息。&lt;/p&gt;
&lt;p&gt;它的使用场景很直接：给它一段文本、一个提示词和少量示例，让大语言模型按你定义的字段抽取内容，并把结果组织成可处理的数据。&lt;/p&gt;
&lt;p&gt;和普通“让模型总结一下”不同，&lt;code&gt;LangExtract&lt;/code&gt; 更关注三件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;按固定结构抽取信息&lt;/li&gt;
&lt;li&gt;保留抽取结果和原文位置的对应关系&lt;/li&gt;
&lt;li&gt;支持长文档和可视化检查&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你经常需要从报告、论文、病历、合同、日志或网页文本里抽取实体、事件、关系和属性，这类工具会比手写正则更灵活，也比纯聊天式提问更容易进入后续数据处理流程。&lt;/p&gt;
&lt;h2 id=&#34;它解决什么问题&#34;&gt;它解决什么问题
&lt;/h2&gt;&lt;p&gt;很多文本抽取任务看起来简单，实际做起来很麻烦。&lt;/p&gt;
&lt;p&gt;比如你想从一篇长文里抽取：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;人名、机构名、地点&lt;/li&gt;
&lt;li&gt;事件、时间、参与方&lt;/li&gt;
&lt;li&gt;药物、剂量、不良反应&lt;/li&gt;
&lt;li&gt;产品型号、参数、价格&lt;/li&gt;
&lt;li&gt;合同条款、义务、期限&lt;/li&gt;
&lt;li&gt;日志里的错误类型和上下文&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果格式固定，正则或传统解析器可以解决。&lt;br&gt;
但只要文本表达稍微自然一点，规则就会迅速变复杂。&lt;/p&gt;
&lt;p&gt;大语言模型适合理解自然语言，但直接让模型“抽一下”又容易出现几个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;输出格式不稳定&lt;/li&gt;
&lt;li&gt;不知道信息来自原文哪里&lt;/li&gt;
&lt;li&gt;长文档容易漏&lt;/li&gt;
&lt;li&gt;很难批量处理&lt;/li&gt;
&lt;li&gt;结果不方便人工复核&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 想解决的就是这一层问题：把 LLM 的理解能力包装成更可控的抽取流程。&lt;/p&gt;
&lt;h2 id=&#34;langextract-的几个特点&#34;&gt;LangExtract 的几个特点
&lt;/h2&gt;&lt;h3 id=&#34;1-用示例约束抽取格式&#34;&gt;1. 用示例约束抽取格式
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 的思路不是只给一句含糊提示词，而是通过 prompt 和 examples 告诉模型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要抽取什么&lt;/li&gt;
&lt;li&gt;字段叫什么&lt;/li&gt;
&lt;li&gt;每个字段应该怎么填&lt;/li&gt;
&lt;li&gt;不确定时应该怎么处理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种 few-shot 方式很适合信息抽取任务。&lt;br&gt;
你给的示例越贴近真实数据，模型越容易稳定输出相同结构。&lt;/p&gt;
&lt;h3 id=&#34;2-抽取结果能对应回原文&#34;&gt;2. 抽取结果能对应回原文
&lt;/h3&gt;&lt;p&gt;信息抽取最怕“看起来对，但不知道从哪来的”。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 的一个重点是把抽取结果和原文位置对齐。这样你后续检查时，不只是看到一个 JSON 结果，还能回到原文看这条信息来自哪一段。&lt;/p&gt;
&lt;p&gt;这对需要复核的场景很重要，比如医学文本、法律文本、研究资料和企业内部文档。&lt;/p&gt;
&lt;h3 id=&#34;3-支持长文档&#34;&gt;3. 支持长文档
&lt;/h3&gt;&lt;p&gt;长文档抽取容易遇到上下文窗口、漏抽和重复抽取问题。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 提供了面向长文本的处理方式，可以把长文档拆分后并行处理，再把抽取结果组织起来。&lt;/p&gt;
&lt;p&gt;这让它更适合处理完整报告、论文、长网页、批量资料，而不是只处理一小段文本。&lt;/p&gt;
&lt;h3 id=&#34;4-支持可视化检查&#34;&gt;4. 支持可视化检查
&lt;/h3&gt;&lt;p&gt;抽取结果如果只能看 JSON，很容易漏掉问题。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 支持把抽取结果可视化，让你更直观地查看模型从哪里抽了什么。&lt;br&gt;
这对调 prompt、查漏抽、查误抽都很有帮助。&lt;/p&gt;
&lt;h2 id=&#34;什么时候适合用&#34;&gt;什么时候适合用
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 适合这些场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你要从自然语言文本中抽结构化字段&lt;/li&gt;
&lt;li&gt;文本格式不完全固定&lt;/li&gt;
&lt;li&gt;需要保留抽取结果和原文的对应关系&lt;/li&gt;
&lt;li&gt;需要处理较长文档&lt;/li&gt;
&lt;li&gt;结果需要人工复核&lt;/li&gt;
&lt;li&gt;后续要进入表格、数据库或数据分析流程&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;典型例子包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从医学文本里抽取症状、药物、剂量和反应&lt;/li&gt;
&lt;li&gt;从合同里抽取甲乙方、义务、金额和期限&lt;/li&gt;
&lt;li&gt;从论文里抽取研究对象、方法、结论&lt;/li&gt;
&lt;li&gt;从产品资料里抽取规格参数&lt;/li&gt;
&lt;li&gt;从客服记录里抽取问题类型和处理结果&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果只是临时问一段文本的大意，用普通聊天模型就够。&lt;br&gt;
如果你要把文本变成后续可处理的数据，&lt;code&gt;LangExtract&lt;/code&gt; 会更合适。&lt;/p&gt;
&lt;h2 id=&#34;基本安装&#34;&gt;基本安装
&lt;/h2&gt;&lt;p&gt;项目支持通过 &lt;code&gt;pip&lt;/code&gt; 安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install langextract
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;也可以从源码安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/google/langextract.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; langextract
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -e .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果要使用模型 API，需要按对应模型提供方配置 API key。&lt;br&gt;
项目文档里重点展示了 Gemini 相关用法，也支持通过适配层接入其他模型提供方。&lt;/p&gt;
&lt;h2 id=&#34;基本使用思路&#34;&gt;基本使用思路
&lt;/h2&gt;&lt;p&gt;一个典型流程大概是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;准备原始文本&lt;/li&gt;
&lt;li&gt;写清楚抽取目标&lt;/li&gt;
&lt;li&gt;给少量示例&lt;/li&gt;
&lt;li&gt;调用 &lt;code&gt;LangExtract&lt;/code&gt; 执行抽取&lt;/li&gt;
&lt;li&gt;检查结构化结果&lt;/li&gt;
&lt;li&gt;必要时生成可视化页面复核&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这里最关键的是第二步和第三步。&lt;/p&gt;
&lt;p&gt;提示词要描述清楚任务，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;只抽取文本中明确出现的信息&lt;/li&gt;
&lt;li&gt;不要根据常识补充&lt;/li&gt;
&lt;li&gt;字段缺失时留空&lt;/li&gt;
&lt;li&gt;同一类实体保持字段结构一致&lt;/li&gt;
&lt;li&gt;输出中保留原文片段或位置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;示例要尽量接近真实输入。&lt;br&gt;
如果真实文本里有噪声、缩写、换行、表格残留，示例里最好也体现出来。&lt;/p&gt;
&lt;h2 id=&#34;用它时要注意什么&#34;&gt;用它时要注意什么
&lt;/h2&gt;&lt;p&gt;第一，不要把抽取任务写得太泛。&lt;/p&gt;
&lt;p&gt;比如“抽取有用信息”就太宽。&lt;br&gt;
更好的写法是“抽取药物名称、剂量、给药频率和不良反应”。&lt;/p&gt;
&lt;p&gt;第二，不要完全信任模型输出。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 能把结果和原文对齐，但这不等于模型永远不会漏抽或误抽。重要场景仍然需要抽样检查，必要时加人工复核。&lt;/p&gt;
&lt;p&gt;第三，示例比长篇解释更有用。&lt;/p&gt;
&lt;p&gt;信息抽取任务里，模型往往更依赖示例来理解输出格式。&lt;br&gt;
与其写一大段抽象规则，不如给几个高质量 example。&lt;/p&gt;
&lt;p&gt;第四，长文档要关注成本和速度。&lt;/p&gt;
&lt;p&gt;长文档拆分、并行抽取、模型调用都会带来成本。正式批量处理前，最好先拿一小批样本调好提示词和字段结构。&lt;/p&gt;
&lt;h2 id=&#34;和正则传统-nlp-有什么区别&#34;&gt;和正则、传统 NLP 有什么区别
&lt;/h2&gt;&lt;p&gt;正则适合格式稳定、规则清楚的文本。&lt;/p&gt;
&lt;p&gt;传统 NLP 管线适合任务边界明确、模型或词典已经准备好的场景。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 更适合格式不那么固定、但语义比较明确的文本。&lt;br&gt;
它不要求你为每种表达都写规则，而是让 LLM 根据示例理解抽取目标。&lt;/p&gt;
&lt;p&gt;但这也意味着它不是正则的完全替代品：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对格式固定的文本，正则更便宜、更稳定&lt;/li&gt;
&lt;li&gt;对高风险场景，仍然要验证和复核&lt;/li&gt;
&lt;li&gt;对大规模批处理，要考虑模型调用成本&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比较实际的做法是：规则清楚的部分用程序处理，语义变化大的部分交给 &lt;code&gt;LangExtract&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;适合怎样的开发者&#34;&gt;适合怎样的开发者
&lt;/h2&gt;&lt;p&gt;如果你正在做下面这些事情，可以关注 &lt;code&gt;LangExtract&lt;/code&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;把长文本整理成表格&lt;/li&gt;
&lt;li&gt;从文档中抽实体和关系&lt;/li&gt;
&lt;li&gt;做知识库入库前的数据清洗&lt;/li&gt;
&lt;li&gt;从业务文本中抽取字段&lt;/li&gt;
&lt;li&gt;做 LLM 驱动的信息抽取原型&lt;/li&gt;
&lt;li&gt;需要保留抽取结果和原文证据&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它不是一个“点一下就自动懂所有文档”的工具，更像是一个帮你把 LLM 抽取流程工程化的库。&lt;/p&gt;
&lt;p&gt;你仍然需要设计字段、写示例、检查结果。&lt;br&gt;
但相比每次手写模型调用、拼 prompt、解析输出，它提供了更完整的抽取框架。&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/google/langextract&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;google/langextract&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;最后一句&#34;&gt;最后一句
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 的价值在于把“让 LLM 从文本里找信息”这件事做得更可控。&lt;/p&gt;
&lt;p&gt;它适合的不是随口总结，而是有字段、有证据、有复核需求的信息抽取任务。&lt;br&gt;
如果你的工作里经常要把长文本变成结构化数据，可以把它作为一个值得试用的工具。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
