LangExtract 的 Gemini 模型怎么选:兼顾质量、成本与复杂推理任务
2026/9/11 14:17:12 网站建设 项目流程

LangExtract 的 Gemini 模型怎么选:兼顾质量、成本与复杂推理任务

【免费下载链接】langextractA Python library for extracting structured information from unstructured text using LLMs with precise source grounding and interactive visualization.项目地址: https://gitcode.com/GitHub_Trending/la/langextract

用 LangExtract 配合 Gemini 做结构化抽取时,每一次lx.extract()调用都要通过model_id参数指定模型。实际使用中有三个选择要回答:日常抽取任务用哪个模型、量大且在意成本时换哪个、任务需要复杂推理时该切到哪个。项目文档对这三种情况都给出了明确的选择口径,本文按配置密钥、运行抽取、切换模型、核对结果的操作顺序把这条路走一遍。

准备环境与 API 密钥

安装:

pip install langextract

README 建议隔离环境下使用虚拟环境。Gemini 属于云端模型,需要 API 密钥。按 Provider 参考 的说明,Gemini provider 先读取GEMINI_API_KEY,再回退到LANGEXTRACT_API_KEY

export GEMINI_API_KEY="your_key" # README 中记录的是通用变量写法,两者任选其一即可: # export LANGEXTRACT_API_KEY="your_key"

README 推荐把密钥写入.env文件并把.env加入.gitignore。在代码里直接传api_key=...是文档给出的测试/开发便利方式,README 明确不推荐生产环境使用。如果后面要走 Vertex AI Batch 路径,认证改用 Vertex AI 服务账号,通过language_model_params传入vertexai=Trueprojectlocation

三种情况的选择口径

把文档里的选型依据按情况整理如下:

情况文档给出的模型选择
默认、多数任务gemini-3.5-flash(README 的推荐默认值,称其在 LangExtract 的 schema 约束工作流中提供强抽取质量);SKILL.md 与 Provider 参考 写的是gemini-2.5-flash
高量、成本敏感gemini-3.1-flash-lite(README:当前的稳定 Flash-Lite 模型)
复杂推理README:按官方模型文档评估当前的 Gemini Pro 模型;SKILL.md、Provider 参考明确写gemini-2.5-pro,用药抽取示例 两个场景也都用gemini-2.5-pro
大规模/生产README:建议使用付费 Gemini 档位以提升吞吐、避免限流

注意两套文档给出的模型名不一致:README 用gemini-3.5-flash/gemini-3.1-flash-lite,skills 文档用gemini-2.5-flash/gemini-2.5-pro。两套文档一致的是选型逻辑——Flash 作默认、Flash-Lite 对应高量低成本、Pro 对应复杂推理。README 同时说明 Gemini 模型有生命周期和明确的退役日期,并建议查阅官方模型版本文档了解最新的稳定版与 legacy 版本,所以运行前应以官方模型版本文档核对当前可用的模型名。

还有两条与成本直接相关的文档事实:

  • extraction_passes大于 1 会成倍增加处理时间和成本,SKILL.md 的建议是从 1 开始,召回不足时再加大。
  • 长文档示例 处理约 44,000 tokens 的文本,文档明确警告会产生费用,并建议大规模使用时采用 Tier 2 的 Gemini 配额以避免限流。

运行默认模型并核对结果

直接使用 README Quick Start 的示例,模型取推荐默认值:

import langextract as lx import textwrap prompt = textwrap.dedent("""\ Extract characters, emotions, and relationships in order of appearance. Use exact text for extractions. Do not paraphrase or overlap entities. Provide meaningful attributes for each entity to add context.""") 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"} ), ] ) ] 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-3.5-flash", )

核对结果分两步。第一步,打印每个实体的类别、文本和位置:

for e in result.extractions: print(e.extraction_class, e.extraction_text) print(f" char_interval: {e.char_interval}")

文档说明 LLM 偶尔会产出无法在源文本中定位的内容,这类抽取的char_interval = None;用[e for e in result.extractions if e.char_interval]过滤后只剩落在源文本中的结果。第二步,存成 JSONL 并生成交互式 HTML,在原文语境中逐条查看实体:

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) # For Jupyter/Colab else: f.write(html_content)

如果默认模型的结果满足你对质量的要求,就把它固定为工作流默认值;不满足时再按下一节的思路换模型。

复杂推理任务切到 Pro 模型

用药抽取示例 的 NER 和关系抽取两个场景都使用gemini-2.5-pro。其中关系抽取要求模型用medication_group属性把剂量、频次、症状等多个实体归到同一种药物下,文档称之为"more complex extractions",是比单实体识别更重的推理要求。核心调用:

result = lx.extract( text_or_documents=input_text, prompt_description=prompt_description, examples=examples, model_id="gemini-2.5-pro", )

文档示例输出(标注为 "will produce output similar to")显示 Lisinopril、Metformin 各自带上了自己的 dosage、frequency、condition,且每个实体都带源文本位置。对照该结构即可判断推理是否成立:每个实体都归入了正确的组,且char_interval非空;示例代码对缺少medication_group的实体会打印Warning: Missing medication_group ...

属性级约束方面,Gemini 支持output_schema(Ollama 目前不支持用户提供的输出 schema),可以把某个属性限制为枚举值,见 output schema 示例。README 对gemini-3.5-flash的质量评价正是针对这类 schema 约束工作流给出的。

成本侧:换 Flash-Lite 或走 Vertex AI Batch

省成本有两条互不依赖的路径,按任务是否有时效要求二选一。

高量且无时效要求:模型换成 Flash-Lite

一行改动:

result = lx.extract( text_or_documents=input_text, prompt_description=prompt, examples=examples, model_id="gemini-3.1-flash-lite", # README 建议的高量/成本敏感选项 )

大批量、非即时任务:Vertex AI Batch API

Batch 示例文档 说明 Vertex AI Batch 预测通常比在线预测便宜约 50%,langextract在其上做了自动路由、缓存与容错。text_subset为待处理文本(示例文档中是从 Project Gutenberg 拉取Romeo and Juliet后取前约 60,000 字符):

batch_config = { "enabled": True, "threshold": 10, # chunk 数:低于阈值走实时 API,达到阈值走 Batch API "poll_interval": 30, "timeout": 3600, "enable_caching": True, # 结果缓存到 GCS "retention_days": 30, # GCS 数据保留天数 } results = lx.extract( text_or_documents=text_subset, prompt_description=prompt, examples=examples, model_id="gemini-3.5-flash", max_char_buffer=500, batch_length=1000, language_model_params={ "vertexai": True, "project": "your-gcp-project", # TODO: Replace with your Project ID. "location": "us-central1", "batch": batch_config } )

使用这条路径时要注意:

  • project必须替换为你自己的 GCP Project ID;认证走 Vertex AI 服务账号,而不是上面的 API key。
  • 库会自动创建并管理名为langextract-{project}-{location}-batch的 GCS 桶,输入、输出、缓存分别组织在batch-input/cache/等目录下;输入/输出文件会保留用于调试,retention_days控制保留周期。
  • batch_length控制单个 batch 任务提交多少个 chunk,文档建议设高值(如1000),让所有 chunk 进入同一个 job,而不是多个串行 job。
  • enable_caching=True时,重复运行相同 prompt 会直接从缓存取结果,跳过模型推理,也就跳过对应费用。

批处理进度可以在另一个终端跟踪日志:

tail -f batch_process.log

文档给出的日志样例(示例)显示:job 创建后打印 batchPredictionJobs 路径和 Cloud Console 链接,状态从JOB_STATE_PENDING变到JOB_STATE_RUNNING;job 成功后langextract自动下载、解析并对齐结果。文档的示例输出显示从Romeo and Juliet前约 60,000 字符中抽取了 767 个实体——这是示例结果,不是固定预期。

边界与注意

  • 模型名以官方版本文档核对:两套项目文档的模型名不一致(gemini-3.5-flash系 vsgemini-2.5系),README 明确 Gemini 模型有生命周期和退役日期,运行前按官方模型版本文档确认当前稳定版。
  • 成本叠加extraction_passes > 1使成本随 pass 数成倍增加;Batch 模式降的是单价,但需要 GCP 项目并会自动创建 GCS 桶。
  • 限流:README 与长文档示例都指向付费档位(长文档示例点名 Tier 2)来避免大规模运行时的限流问题。
  • 密钥安全api_key直传仅限测试/开发;环境部署用环境变量或.env

【免费下载链接】langextractA Python library for extracting structured information from unstructured text using LLMs with precise source grounding and interactive visualization.项目地址: https://gitcode.com/GitHub_Trending/la/langextract

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询