Google开源框架LangExtract实践(1)——Docker部署,免费、低碳、无需GPU、多种大模型灵活切换,绝对可用!

我们有一个业务场景,需要从复杂的文本中,提取关键信息,整理成结构化数据,即:将非结构化数据,提取成结构化的数据。

尽管当前的LLM已经具备了通识领域非常强大的自然语言理解能力,且具备结构化输出能力(大部分LLM)。但直接让 LLM "读文本吐结构" 仍然存在诸多痛点:不同领域(医疗、法律、金融、舆情等)的抽取需求各异,直接让模型覆盖所有领域往往力不从心,细调模型代价高昂。

Google最近发布的开源框架LangExtract,就是为了解决上述问题而生的。

相关LangExtract的基础介绍(核心特性和代码结构等)可以看这篇文章:LangExtract:基于LLM的信息抽取框架|附项目解析与实战代码

LangExtract有很多部署方式,我选择了使用docker去运行,即在docker内部调用远程大模型免费API。因为这样的地不需要占用太多资源,又可以方便切换模型,以便对比不同模型的效果,快速验证。

一、准备镜像

从github上面拉取代码仓库之后,进入目录

shell 复制代码
git clone https://github.com/google/langextract.gitcd langextract

自己打docker镜像

打镜像之前先看一下官方的Dockerfile文件:

Dockerfile 复制代码
# Production Dockerfile for LangExtract
FROM python:3.10-slim

# Set working directory
WORKDIR /app

# Install LangExtract from PyPI
RUN pip install --no-cache-dir langextract

# Set default command
CMD ["python"]

LangExtract官方提供了openai、gemini、ollama三种模型的方式来运行。

不过网上有很多文章是使用gemini和ollama模型方式来运行的,考虑到使用openai的模型兼容性比较好,因此我使用了openai provider(provider可以理解为调用模型的实现)。

因此我对Dockerfile做了几处改造,改造后的Dockerfile如下:

Dockerfile 复制代码
# Production Dockerfile for LangExtract
FROM docker.m.daocloud.io/python:3.10-slim

# Set working directory
WORKDIR /app

# Install LangExtract from PyPI
# 第二处改造:pip install默认超时时间
RUN pip install --default-timeout=100 --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple langextract[openai]

# Set default command
CMD ["python"]

改造说明(可以比对官方原始Dockerfile):

  1. 第一处改造:docker的镜像使用了docker.m.daocloud.io镜像服务,因为很多镜像在国外,就算科学上网有时候也连不上。现在还能提供国内免费docker镜像服务的真是良心企业啊!
  2. 第二处改造:pip install默认超时时间设置为100秒(非必要,超时被害妄想症使用)
  3. 第三处改造:pip install试用了清华大学的镜像
  4. 第四处改造:使用openai依赖 langextract[openai]

改造完之后打镜像,在langextract目录下执行命令docker build -t langextract-openai . (注意命令末尾的点(".")不要丢了)

接下来是短暂的等待,等打好包之后,看一下镜像情况,执行命令:docker images

二、运行示例

我从网上找了两个例子,使用openai的provider,对代码进行了修改,已验证,可以正常运行。

实战一:从 中文新闻段落抽"经济指标信息"

我们自造一段新闻式文本(非引用任何媒体)来演示抽取流程:

原文(示例数据):

8月15日(周五)09:30 将公布中国7月CPI(同比)与核心CPI。 市场预测CPI同比上涨 3.0% ,上月实际为 2.9% 。部分机构认为,食品分项涨幅扩大可能推高读数。

目标结构(你可以按需调整):

  • 指标名(如"中国7月CPI(同比)")
  • 发布时间(如"8月15日(周五)09:30")
  • 预测值(如"3.0%")
  • 上月实际值(如"2.9%")
  • 备注/依据(可选,如"食品分项涨幅扩大...")

创建一个python文件,文件名:example_01.py,代码如下:

python 复制代码
import textwrap
import langextract as lx

news_text = textwrap.dedent("""\
8月15日(周五)09:30 将公布中国7月CPI(同比)与核心CPI。
市场预测CPI同比上涨 3.0%,上月实际为 2.9%。
部分机构认为,食品分项涨幅扩大可能推高读数。
""")

prompt = textwrap.dedent("""\
请从输入的中文新闻段落中抽取与"经济指标发布"相关的信息:
- 指标名
- 发布时间
- 预测值
- 上月实际值
- 备注(若有)
要求:
- 使用输入中的原文片段作为 extraction_text
- 信息缺失时可以跳过该字段
""")

examples = [
    lx.data.ExampleData(
        text="将公布美国7月核心CPI,市场预测同比上涨 3.0%,上月为 2.9%。",
        extractions=[
            lx.data.Extraction("指标名", "美国7月核心CPI", attributes={"指标": "美国7月核心CPI"}),
            lx.data.Extraction("预测值", "3.0%", attributes={"预测值": "3.0%"}),
            lx.data.Extraction("上月实际值", "2.9%", attributes={"上月实际值": "2.9%"}),
        ]
    )
]

model_config = lx.factory.ModelConfig(
    #model_id="qwen/qwen3-30b-a3b",
    model_id="qwen/qwen3-coder",
    #model_id="qwen/qwen3-14b",
    #model_id="qwen/qwen2.5-7b",
    #model_id="deepseek/deepseek-v3-0324",
    provider="OpenAILanguageModel",
    provider_kwargs={
        "base_url": "https://platform.aitools.cfd/api/v1",  # 这里的不能使用下面的URL,要用base_url
        #"model_url": "https://platform.aitools.cfd/api/v1/chat/completions",
        "format_type": lx.data.FormatType.JSON,
        "temperature": 0.1,
        "api_key": "sk-b891a5d021********faf0a781",
    },
)

model = lx.factory.create_model(model_config)

result = lx.extract(
    text_or_documents=news_text,
    prompt_description=prompt,
    examples=examples,
    model=model,
    fence_output=False,
    use_schema_constraints=False)

for e in result.extractions:
    print(e.extraction_class, e.extraction_text, e.attributes)

注意,这里使用了一个免费的大模型API,如果你也使用这个网站,需要自己去申请api key(免费,免注册)。详见这篇文章:免费大模型API,完美兼容OpenAI接口(零门槛,免注册)。不过由于是免费的大模型API,有时候有的模型会不可用,等过一阵或者换其他模型就好了。如果使用你自己部署的openai大模型,注意修改url和api_key。

执行代码使用如下命令:

shell 复制代码
docker run --rm -v $(pwd):/app langextract-openai python example_01.py

可以看到执行效果:

我尝试了几个qwen的模型,发现qwen/qwen3-coder这个模型最聪明。

实战二:从 销售日报抽"客户/合同/金额/日期/备注"

原文(示例数据):

【08-12】华东区------客户"晨光文具"签订补货单;金额 ¥189,990 ; 销售代表:王敏;备注:渠道促销返利至 9 月底有效。

创建一个python文件,文件名:example_02.py,代码如下:

python 复制代码
import textwrap
import langextract as lx

sales_text = textwrap.dedent("""\
【08-12】华东区------客户"晨光文具"签订补货单;金额 ¥189,990;
销售代表:王敏;备注:渠道促销返利至 9 月底有效。
""")

prompt = textwrap.dedent("""\
请从销售日报中抽取以下字段:
- 客户名
- 金额(原文片段)
- 日期(原文片段)
- 销售代表
- 备注(如有)
要求:extraction_text 必须取自原文,并给出尽可能多的条目。
""")

examples = [
    lx.data.ExampleData(
        text="【08-01】华北区------客户"良品铺子"复购;金额 ¥50,000;销售代表:李雷;备注:季度冲量。",
        extractions=[
            lx.data.Extraction("客户名", "良品铺子"),
            lx.data.Extraction("金额", "¥50,000"),
            lx.data.Extraction("日期", "【08-01】"),
            lx.data.Extraction("销售代表", "李雷"),
            lx.data.Extraction("备注", "季度冲量"),
        ]
    )
]

model_config = lx.factory.ModelConfig(
    model_id="qwen/qwen3-14b",
    provider="OpenAILanguageModel",
    provider_kwargs={
        "base_url": "https://platform.aitools.cfd/api/v1",  # 这里的不能使用下面的后缀,要用base_url
        #"model_url": "https://platform.aitools.cfd/api/v1/chat/completions",
        # "format_type": lx.data.FormatType.JSON,
        "temperature": 0.1,
        "api_key": "sk-b891a5d021d44416b93390fbfaf0a781",
    },
)

model = lx.factory.create_model(model_config)

result = lx.extract(
    text_or_documents=sales_text,    
    prompt_description=prompt,    
    examples=examples,    
    model=model,
    fence_output=False,
    use_schema_constraints=False)

for e in result.extractions:
    print(e.extraction_class, e.extraction_text, e.attributes)

执行效果

到这里,一个仅使用Docker、不需要使用GPU、使用免费大模型API、可尝试不同大模型进行LangExtract验证的"低碳"方案就完成了(不是GPU、付费API用不起,而是免费低碳更有性价比)

特别感谢:

  1. 提供免费大模型API的组织,如:免费大模型API,完美兼容OpenAI接口(零门槛,免注册)

  2. 提供docker镜像的组织,如:daocloud

  3. 提供pypi镜像的组织,如:清华大学

正因为有了你们无私的提供资源,我们做技术预研时,丝滑般的体验才不逊于付费服务。

本篇是第一篇LangExtract的实战,下一篇我会结合实际业务场景中的案例做分享。

相关推荐
嘀咕博客2 小时前
MiniMax - 稀宇科技推出的AI智能助手
人工智能·科技·ai工具
九章云极AladdinEdu2 小时前
深度学习优化器进化史:从SGD到AdamW的原理与选择
linux·服务器·开发语言·网络·人工智能·深度学习·gpu算力
dlraba8022 小时前
Python 实战:票据图像自动矫正技术拆解与落地教程
人工智能·opencv·计算机视觉
过河卒_zh15667662 小时前
9.13AI简报丨哈佛医学院开源AI模型,Genspark推出AI浏览器
人工智能·算法·microsoft·aigc·算法备案·生成合成类算法备案
程序员ken2 小时前
深入理解大语言模型(5)-关于token
人工智能·语言模型·自然语言处理
Codebee2 小时前
OneCode 移动套件多平台适配详细报告
前端·人工智能
sinat_286945193 小时前
Case-Based Reasoning用于RAG
人工智能·算法·chatgpt
许泽宇的技术分享3 小时前
AI时代的内容创作革命:深度解析xiaohongshu-mcp项目的技术创新与实战价值
人工智能
地平线开发者3 小时前
征程 6 灰度图部署链路介绍
人工智能·算法·自动驾驶·汽车