在做 LLM 应用开发时,大家最头疼的往往不是 Prompt 怎么写,而是提取出来的数据“敢不敢用”。
比如你让 AI 读一份几十页的合同提取金额,它确实给了你一个数字。但这个数字是哪一页哪一行写的?还是模型产生幻觉自己编的?如果无法验证出处,这种数据在严肃的业务场景里几乎就是废的。
为了解决这个问题,Google 最近开源了一个 Python 库 —— LangExtract。它不搞那些花里胡哨的概念,就专心解决两个事:提取和溯源。
它是怎么解决“幻觉”的?
LangExtract 和普通的 Prompt 工程最大的区别在于,它引入了 Grounding(溯源) 机制。
简单来说,当它提取出一个字段(比如 {"revenue": "100M"})时,它不仅给你值,还会附带一个 Span 对象,里面记录了这段信息在原始文本中的 字符级坐标(Offset)。
这就很有用了。前端拿到这个坐标,直接就能在原文里高亮显示出处。对于需要人工复核(Human-in-the-loop)的金融、法律或医疗场景,这能极大降低审计成本 —— 你不再需要满屏找数据在哪,点一下就定位了。
我们在 云栈社区 讨论 RAG 落地时,很多开发者都反馈过长文档切分的痛点。LangExtract 在这方面做得也很地道:
- 自动切分长文:不用自己写正则去切段落。它内置了 Adaptive Chunking 算法,根据 Token 限制自动把长文章切块。
- 坐标自动还原:切片处理完后,它会自动把提取结果的坐标映射回全文的绝对坐标,不用你自己去算偏移量。
几行代码就能跑
这个库的设计非常符合后端开发者的直觉,支持 Google Gemini,也支持 OpenAI 和本地的 Ollama。
对于想在企业内部落地 人工智能 应用的朋友,这意味着你可以先用 GPT-4 跑通流程,再无缝切换到本地模型降本增效。
看个最简单的 Demo:
import langextract as lx
# 1. 告诉它你想提什么(给个例子就行,Few-shot)
examples = [
lx.Extraction(
type="city",
value="Paris",
span=lx.Span(start=0, end=5, text="Paris")
)
]
# 2. 扔进去一段文本
doc = lx.extract(
text="My flight lands in Tokyo at 9 PM.",
examples=examples,
model_id="gemini-1.5-flash" # 这里也可以换成 gpt-4o 或 ollama
)
# 3. 直接生成一个 HTML 看看效果
lx.visualize(doc)
运行完,它会直接生成一个 HTML 文件。左边是提取出来的 JSON,右边是高亮的原文,哪里提取的哪里亮,非常直观。
总结
LangExtract 不是那种大而全的框架,它更像是一把趁手的“手术刀”。
如果你正在做 ETL 数据清洗、构建知识库或者处理非结构化文档,强烈建议把这个库加到你的工具箱里。它代码量不大,且设计模式用得很标准,哪怕不直接用,读读源码也是很好的学习材料。
配套资源
项目地址:github.com/google/langextract
学开发:https://yunpan.plus/f/14
学 AI:https://yunpan.plus/f/15
更多优质的 开源实战 项目解析,可以关注《云栈开源日记》多逛逛,我们下期见。
标签:#langextract #Github #数据清洗 #LLM #Python #Google