BAML 介绍
了解工具的详细功能和使用方法
BAML 适合想把提示词、输入参数和输出类型维护成可测试函数的开发者。典型任务包括文档字段抽取、分类、结构化总结,以及把模型结果交给现有 Python 或 TypeScript 应用处理。采用前先明确版本,再用真实失败案例检查结果:类型正确和事实正确需要分别验证。
BAML 是什么
BAML 是 Boundary 开发的开源语言与工具链。它把模型调用表达为带输入、输出类型的函数,并提供相应的开发与测试路径。官方 SDK 文档中的流程是编写 .baml 文件、生成 baml_client,然后在应用中调用函数。官方介绍
截至 2026 年 10 月 14 日,官网介绍新的独立工具链,并提示 BAML 1.0 即将 GA;文档站仍提供 v0 的 baml_src / baml_client SDK 路径。选用时应保存版本、安装命令与对应文档。本站教程固定使用 baml-py==0.226.2,避免把不同版本的命令和语法混在同一示例里。当前官网、Python SDK 包
适合哪些工作
- 文档抽取:把自由文本转换为明确字段,并附上可回查的原文证据。
- 固定分类:将业务标签定义为类型,另外评估分类是否正确。
- 团队维护提示词:审查函数参数、提示词与输出结构的变更。
- 跨语言集成:通过对应工具链生成或桥接应用可调用的接口。
SDK 的 Python 路径可以将 BAML 类型生成为 Pydantic 模型;修改类型后需要重新生成客户端,并同步 runtime 与生成器版本。Python 安装、版本同步说明
它解决了什么问题
把提示词和输出定义放在明确的函数接口里,可以让团队更容易发现字段变化和调用方影响。例如将负责人从必填改成可缺省时,调用方也需要处理“资料未给出”的状态。
但代码生成和解析没有替你审查原始资料。一个字符串字段可以包含错误日期,一个合法枚举可以是错误分类。应将格式与类型检查、来源核对、业务规则和人工验收放在不同步骤。
校验与失败处理
v0 文档提供 @assert 和 @check:前者用于严格规则,失败会影响返回结果或抛出校验异常;后者保留数据及检查结果,需要调用方处理。尤其对集合中的断言,应确认失败项是否被移除,不能把缺少记录误认为原文没有记录。Checks and Asserts
模型请求仍可能因超时、限流、输出截断、解析或校验失败而结束。给调用方提供明确失败状态,设置有限重试与预算,保留可回放的版本信息。不要把每次异常都转换为空对象,否则业务侧难以区分缺失信息与请求失败。错误处理
费用和许可证
当前官方价格页将 BAML 描述为免费开源软件,云服务处于后续推出阶段,没有可据此填写的公开云套餐价格。开源代码采用 Apache-2.0。模型 API、OCR、部署、存储与日志服务费用需要单独核算。价格页、官方仓库
一次抽取的成本也包含失败重试、长文输入和模型切换。建议按“每份通过业务验收的文档”记录费用,而不是只看一次请求的价格。
隐私与访问条件
本地编译和代码生成可以在自己的机器上进行;调用云模型会把所配置的输入发给模型服务方。调试日志、编辑器 playground 和可选观测服务也要检查数据去向。对敏感文档,应先脱敏、限制日志内容并定义保留期限。终端日志
大陆用户还需确认所选模型服务、包下载和开发工具的可达性。本文没有对各运营商网络测试,也不承诺某个模型 API 在所有地区可用。使用本地模型时,同样需要核对运行资源和具体 provider 的支持能力。
应该与哪些工具比较
- 已有 Pydantic 模型,希望直接增加抽取与校验:阅读 BAML vs Instructor。
- 需要 Python Agent 的工具、依赖与运行流程:阅读 BAML vs PydanticAI。
- 想在支持的后端约束生成过程:比较 Outlines 与 Guidance。
建议从一个小字段集合开始,保存来源、预期答案与失败样本,分别统计类型通过率和事实正确率。本站 文档抽取与事实校验教程 提供版本固定的 SDK 示例与来源校验代码;5 款结构化输出工具推荐 解释不同工具的工作层次。
本站未运行付费模型请求,也未测量厂商宣传的抽取准确率或性能提升。