尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何用 LangExtract 启用 OpenAI Batch API 降低大批量非时敏提取任务成本

如何用 LangExtract 启用 OpenAI Batch API 降低大批量非时敏提取任务成本 如何用 LangExtract 启用 OpenAI Batch API 降低大批量非时敏提取任务成本【免费下载链接】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这篇文章解决一个具体任务你有一大批文档需要用 GPT 模型做结构化信息抽取结果不紧急可以接受最长 24 小时的等待希望从逐条实时调用切换到 OpenAI Batch API。LangExtract 支持这个做法在lx.extract()里通过language_model_params传入batch配置即可请求文件上传、批作业创建、状态轮询、结果下载与对齐都由库内完成。README 中的定位是对 large, non-latency-sensitive OpenAI workloads 启用 OpenAI Batch API。文档没有为 OpenAI 侧列出具体折扣百分比收益来自把所有请求放进批作业而非实时并发调用Vertex AI 侧的官方批处理示例中给出的参考数字是约 50% 的成本节省那个数字属于 Vertex 侧。前提是使用 GPT 系模型内置 OpenAI provider 只自动匹配 GPT 风格 model_id、环境中有 OpenAI API 密钥。安装 OpenAI provider 并配置密钥OpenAI provider 是随包分发但需要额外依赖的内置 provider安装时带上[openai]扩展依赖pip install langextract[openai]缺装该依赖时provider 实例化会直接报错来自 providers README 的常见问题说明InferenceConfigError: OpenAI provider requires openai package Install with: pip install langextract[openai]配置密钥。OpenAI provider 从环境变量读取OPENAI_API_KEY并回退到LANGEXTRACT_API_KEYexport OPENAI_API_KEYyour-api-key-here如果两个变量都没有provider 构造时会抛出InferenceConfigError: API key not provided.。在 lx.extract 中启用 Batch APIREADME 给出的启用方式是把batch配置放进language_model_paramsimport textwrap import langextract as lx # 抽取任务定义取自 README Quick Start 的 Romeo 示例 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( textROMEO. But soft! What light through yonder window breaks? It is the east, and Juliet is the sun., extractions[ lx.data.Extraction( extraction_classcharacter, extraction_textROMEO, attributes{emotional_state: wonder} ), lx.data.Extraction( extraction_classemotion, extraction_textBut soft!, attributes{feeling: gentle awe} ), lx.data.Extraction( extraction_classrelationship, extraction_textJuliet is the sun, attributes{type: metaphor} ), ] ) ] # documents你自己要处理的文档文本列表README 的 OpenAI Batch 示例传的就是名为 # documents 的变量。下面的占位文本请整体替换为自己的数据。 documents [文档一原文……, 文档二原文……] result lx.extract( text_or_documentsdocuments, prompt_descriptionprompt, examplesexamples, model_idgpt-4o-mini, # GPT 风格 model_id 会自动选择 OpenAI provider language_model_params{ batch: { enabled: True, threshold: 50, poll_interval: 10, } }, )batch支持三种传法True等价于启用、其余取默认值、配置字典、或openai_batch.BatchConfig对象。配置字典非空时enabled会自动置为True所以只写{threshold: 10}也算启用。batch字典支持的键及默认值来自 openai_batch.py 中的BatchConfig键用途默认值enabled是否启用批模式Falsethreshold触发 Batch API 的最少 prompt 数低于则回退实时调用50completion_window批作业完成窗口只允许24h24hpoll_interval轮询作业状态的间隔秒10timeout等待作业完成的最长秒数超时后先尝试取消作业再抛异常24 小时加 300 秒缓冲max_requests_per_job单个批作业请求数上限超过时自动拆成多个顺序执行的作业50000metadata附加到批作业的元数据None取值不合法会抛ValueError例如batch.threshold must be 1、batch.completion_window must be 24h传入不受识别的键只产生警告并被忽略。让 prompt 数量达到阈值批模式是 opt-in并按 prompt 数量分支len(prompts) threshold时走 Batch API低于阈值时自动回退实时调用并打出日志OpenAI batch mode enabled but prompt count (%d) is below the threshold (%d); using real-time API.prompt 数量取决于文档数和切块。官方批处理示例batch_api_example.md用较小的max_char_buffer500来 generate enough chunks to trigger batch processing——即把块切小、生成足够多的块让 prompt 数跨过阈值。OpenAI 侧同样适用如果你的输入只产生很少 prompt、总是看到回退日志可以把max_char_buffer调小或按数据规模下调threshold。反过来若你的真实数据量远超threshold也不必为了省钱硬等——低于阈值时走实时路径是预期行为看日志确认即可。批作业的执行过程命中批分支后openai_batch.py 中的infer_batch按以下流程处理把每个 prompt 打包成 JSONL 请求endpoint默认/v1/chat/completions通过 OpenAI Files API 以purposebatch上传创建批作业时携带completion_window24h可选metadata若创建失败已上传的输入文件会被删除并抛InferenceRuntimeError每poll_interval秒轮询一次作业状态状态变化时输出日志例如INFO - Created OpenAI Batch API job batch_xxx for 120 prompts INFO - OpenAI Batch API job batch_xxx status: in_progress作业进入终态completed、failed、expired、cancelled之一后停止轮询。状态不是completed时抛出OpenAI Batch API job did not complete (status..., error...)等待超过timeout时库会先尝试取消该作业再抛出OpenAI Batch API job timed out after {timeout}s (last_status...)作业completed后下载输出文件解析 JSONL 并按custom_id把每个请求的结果对齐回原始 prompt若 OpenAI 还给出了error_file同样会解析。与实时模式的一个关键差异单条请求出错会让整次调用失败。输出会逐条检查任何一条带error、body.error或 HTTP 状态码 ≥ 400 时都会抛出包含各问题条目信息的异常OpenAI Batch API per-item errors: ...库不会静默返回部分结果。验证结果与判断走的是哪条路径处理结果与实时模式同构按官方批处理示例中的分析方式读取print(fExtracted {len(result.extractions)} entities.) print(First 5 extractions:) for extraction in result.extractions[:5]: print(f- {extraction.extraction_class}: {extraction.extraction_text})判断本次运行实际走的是 Batch API 还是实时回退看日志最直接出现Created OpenAI Batch API job job_id for N prompts及后续状态行——走了 Batch API出现OpenAI batch mode enabled but prompt count ... below the threshold ... using real-time API——prompt 数不足回退到了实时调用。另外 README 提醒了一个与路径无关的过滤手段LLM 偶尔会从 few-shot 示例而非输入文本中抽取内容这类抽取的char_interval为None。用[e for e in result.extractions if e.char_interval]可以只保留能在源文本中定位的结果。常见故障现象输出下载返回 403OpenAI 在作业刚完成后可能短暂返回 403库会自动重试最多 3 次重试间隔取poll_interval与 5 秒的较小值。若仍失败错误信息会提示确认 API key 具备 Files Read 权限——批输出是通过 Files API 下载的。配置校验错误如batch.threshold must be 1、batch.poll_interval must be 0、batch.completion_window must be 24h都是ValueError按提示改配置即可。Provider 未自动选中内置 OpenAI provider 只自动匹配 GPT 风格 model_id如^gpt-4、^gpt-5系列模式。对 OpenAI 兼容端点自定义 base_url或非 GPT 模型 ID需要显式指定 providerREADME 示例其中api_key、base_url需替换为你自己的值from langextract.factory import ModelConfig result lx.extract( text_or_documentsinput_text, prompt_descriptionprompt, examplesexamples, configModelConfig( model_idmy-openai-compatible-model, provideropenai, provider_kwargs{api_key: sk-..., base_url: https://...}, ), )限制与相邻路径completion_window目前只支持24h即批作业最长 24 小时完成——这正是非时敏场景的边界。无法接受这个延迟的任务应保持关闭batch走实时调用。OpenAI 批配置有意不包含enable_caching、retention_days等键——那些是 Vertex AI 批处理示例中的 GCS 缓存与保留策略控制在 OpenAI 侧传入这些键只会被警告并忽略不能靠缓存跳过重复调用的模型费用。如果工作负载在 Gemini/Vertex AI 侧而非 OpenAI 侧项目另有独立的 Vertex AI Batch 示例batch_api_example.md包含 GCS 缓存、retention_days保留策略和约 50% 成本节省的说明与本文的 OpenAI 路径是两套配置不要混用。【免费下载链接】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),仅供参考
返回列表