ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Instructor 批量处理实战指南:一套 BatchProcessor 代码跑通三家供应商

Instructor 批量处理实战指南:一套 BatchProcessor 代码跑通三家供应商 Instructor 批量处理实战指南一套 BatchProcessor 代码跑通三家供应商【免费下载链接】instructorstructured outputs for llms项目地址: https://gitcode.com/GitHub_Trending/in/instructor这是一篇 Instructor 批量处理实战指南用 BatchProcessor 统一接口把成百上千条非结构化文本一次性抽取为 Pydantic 结构化对象支持 OpenAI、Anthropic、Google 三家供应商并提供面向 Serverless 的零磁盘 I/O 内存批处理方案。为什么同一件批处理任务要写三遍代码假设你手头有 1000 条客服会话记录需要从每条里抽出客户姓名、年龄、邮箱入库。逐条调在线 API 又慢又贵而三家供应商都提供批量 API一次打包处理价格约省一半。但落地时有两个真实痛点接口不统一。OpenAI 要求 .jsonl 文件加严格 JSON SchemaAnthropic 要求把 Schema 包装成强制工具调用Google 又是一套提交方式。同一件事写三遍逻辑还得各自处理状态码。Serverless 环境没地方落盘。传统批处理先把请求写成 .jsonl 临时文件再上传在 Lambda、Cloud Functions 里磁盘不可靠临时文件还带来 I/O 开销和安全暴露面。Instructor 的答案是一个BatchProcessor统一门面加一个内存批处理模式。下面我们以把一批文本批量抽取为结构化对象这条主线把创建、提交、轮询、取结果、校验完整走一遍。快速上手从一堆文本到结构化对象任何 Pydantic 模型都能当响应模型四步拿到结果from pydantic import BaseModel from instructor.batch import BatchProcessor class User(BaseModel): name: str age: int processor BatchProcessor(openai/gpt-4o-mini, User) messages_list [ [{role: system, content: Extract name and age.}, {role: user, content: Hi, Im Alice, 28 years old.}], [{role: system, content: Extract name and age.}, {role: user, content: Hello, Im Bob, 35 years old.}], ] processor.create_batch_from_messages(messages_list, file_pathbatch_requests.jsonl, max_tokens200, temperature0.1) batch_id processor.submit_batch(batch_requests.jsonl) print(Batch job submitted:, batch_id)BatchProcessor(openai/gpt-4o-mini, User)模型字符串里就带着供应商信息create_batch_from_messages把消息列表转成对应供应商的请求文件默认max_tokens1000、temperature0.1submit_batch提交后返回任务 ID。批任务是异步的拿到 ID 先存好稍后再查状态、取结果。仓库里 examples/batch_api/in_memory_batch_example.py 给了完整可运行版本创建、提交、轮询、取结果一条龙都有。如上图所示结构化抽取的结果最终都会经过 Pydantic 校验以类型化对象呈现——这也是批量结果解析的目标形态。内存批处理Serverless 零磁盘 I/O 如何落地文件批与内存批只差一个参数file_path。传路径得到磁盘文件传None得到io.BytesIO缓冲区读完即走不落盘。buffer processor.create_batch_from_messages( messages_list, file_pathNone, max_tokens200 ) buffer.seek(0) # 提交前把读取位置归零 batch_id processor.submit_batch(buffer)Serverless 场景的收益很直接不写磁盘、不用清理临时文件、敏感请求数据不在文件系统留痕。examples/batch_api/ 目录里的示例脚本还带了一个compare_file_vs_memory函数把两种方式并排放给你看。选型可以按这张表维度文件批内存批运行环境常规服务器、开发机Serverless、无盘容器清理成本用完需手动删除临时文件零成本随进程回收调试与审计.jsonl 可存档、可复现重放只能运行时打印或另存数据规模适合超大批量适合单次中等规模任务数据安全敏感数据短暂落盘磁盘无残留官方文档的建议Lambda、Cloud Functions 与安全敏感场景选内存需要调试留痕或批次很大选文件。一套代码跑通三家供应商模型字符串即路由键 统一接口的核心约定只有一条模型字符串写成provider/model-name斜杠前缀决定一切。BatchProcessor.__init__解析出前缀后路由到对应实现后面的请求格式、提交方式、状态映射全部由供应商层接管。三家幕后的差异是OpenAI生成 OpenAI 批量格式 .jsonl请求带严格模式 JSON Schema代码会递归补additionalProperties: false以满足严格模式Anthropic同样走文件但把 Schema 包装成强制工具调用system消息被提升到顶层参数Google测试脚本走内联提交——submit_batch直接传messages_list加use_inlineTrue无需临时文件未设置GOOGLE_API_KEY时降级为模拟模式并打印警告。理解了路由规则换供应商只需改一个字符串。仓库提供了端到端实测脚本 examples/batch_api/run_batch_test.pyexport OPENAI_API_KEYyour-openai-key export ANTHROPIC_API_KEYyour-anthropic-key export GOOGLE_API_KEYyour-google-key # 可选未设置时模拟模式运行 cd examples/batch_api python run_batch_test.py create --model openai/gpt-4o-mini python run_batch_test.py create --model anthropic/claude-3-5-sonnet-20241022 python run_batch_test.py create --model google/gemini-2.5-flashcreate使用固定测试负载——从 10 条自我介绍里抽取User(name, age)——完成后把任务 ID 存入{provider}_batch_id.txt。后续fetch --poll会每 30 秒查一次状态默认最多等 10 分钟完成后自动做成功/失败分流并逐字段与预期值比对。支持的具体模型如openai/gpt-4o、anthropic/claude-3-opus-20240229、google/gemini-pro可执行python run_batch_test.py list-models查看。批任务生命周期状态怎么轮询、结果怎么分流批任务提交后立刻返回 ID但结果要等供应商跑完。标准流程是轮询状态 → 拉取结果 → 分流成功与失败。轮询骨架来自仓库示例验证过的写法import time while True: status processor.get_batch_status(batch_id) current status.get(status) if current completed: results processor.get_results(batch_id) break elif current in [failed, cancelled, expired]: print(Batch finished with status:, current) break print(Status:, current, waiting...) time.sleep(10)状态被归一化为六个值pending / processing / completed / failed / cancelled / expired。各家原始状态在这层被抹平——OpenAI 的validating映射为pending、in_progress与finalizing映射为processingAnthropic 的in_progress映射为processing、ended映射为completed。你的代码只需处理这六个统一值。结果不是裸对象而是统一联合类型BatchResult BatchSuccess[T] | BatchError——类似 Rust 的 Result成功条目携带custom_id和解析好的result: T失败条目携带error_type与error_message。单条解析失败不会中断整个批次只会落成一条错误记录custom_id按request-0、request-1顺序自动生成可据此回溯到原始文本。分流用四个工具函数filter_successful(results)只留成功条目filter_errors(results)只留失败条目extract_results(results)直接拿到纯 Pydantic 对象列表get_results_by_custom_id(results)按 custom_id 建立映射processor.get_results(batch_id)默认把结果留在内存多任务管理用processor.list_batches(limit10)返回归一化的任务信息状态、时间戳、请求计数。不写 Python 也能管批任务仓库自带 CLI 覆盖全生命周期常用命令见 docs/cli/batch.mdinstructor batch list --provider openai --limit 3 instructor batch cancel --batch-id batch_abc123 --provider openai instructor batch results --batch-id batch_abc123 \ --output-file results.jsonl --model openai/gpt-4o-minilist还支持--poll定时检查、--live实时刷新表格、--screen全屏输出。注意delete仅对已完成任务生效且 OpenAI 不支持通过 API 删除批次。排错速查四个高频问题Q1Error: OPENAI_API_KEY environment variable is not set原因对应供应商的 API Key 环境变量未设置。处理export OPENAI_API_KEYyour-keyAnthropic 用ANTHROPIC_API_KEYGoogle 用GOOGLE_API_KEY未设置仅降级为模拟模式。Q2Model string must be in format provider/model-name原因模型字符串缺少/前缀。处理写成openai/gpt-4o-mini这种形式。Q3Unsupported provider: xyz或OpenAI is not installed原因前者是前缀不受支持后者是 SDK 未安装——供应商实现按懒加载注册缺 SDK 时抛出明确错误。处理换支持的前缀或pip install openai/pip install anthropic。Q4GoogleMissing GCS_BUCKET或Permission Denied原因真实批任务需要 Google Cloud Storage 桶与 IAM 权限。处理设置GOOGLE_CLOUD_PROJECT、GCS_BUCKET、GOOGLE_APPLICATION_CREDENTIALS并为服务账号授予roles/aiplatform.user与roles/storage.objectUser另注意 Google 批任务有 24 小时执行上限GCS 桶需与任务同区域。小结与延伸阅读Instructor 批量处理的设计思路一以贯之上层只暴露一个统一接口供应商差异全部收敛在适配层——模型字符串决定路由请求格式、提交方式、状态归一化都由 Provider 层吸收你的代码始终不需要知道自己面对的是哪家。无论是 Serverless 里的零磁盘内存批还是跨供应商的大规模异步抽取这条路径都可以直接复用。延伸阅读批量处理概念文档docs/concepts/batch.mdCLI 命令详解docs/cli/batch.md示例目录examples/batch_api/核心实现instructor/batch/processor.py【免费下载链接】instructorstructured outputs for llms项目地址: https://gitcode.com/GitHub_Trending/in/instructor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表