BAML 使用介绍:功能、价格与上手指南

BAML 是一门面向 LLM 结构化输出的领域特定语言,通过强类型 Schema 和自动重试机制,让开发者以声明式方式获取可靠的 JSON 结果。本文系统介绍 BAML 的核心功能、价格方案与完整上手指南,并给出实践建议与结论。

在大模型应用开发中,如何让 LLM 稳定输出结构化数据,一直是工程落地的核心痛点。BAML(Boundary AI Markup Language)正是为解决这一问题而生的领域特定语言。本文将从功能、价格与上手三个维度,带你快速了解并使用 BAML。

一、BAML 是什么

BAML 是一门用于定义 LLM 输入输出结构的 DSL。开发者用类 TypeScript 的语法声明函数与类型,BAML 编译器会自动生成类型安全的客户端代码,并负责 Prompt 渲染、结果解析与失败重试。

它的核心价值在于:把「不确定的模型输出」转化为「可预测的类型化数据」

二、BAML 核心功能

1. 强类型 Schema 定义

通过 classenum 声明数据结构,BAML 会自动生成对应语言的类型定义,编译期即可发现字段错误。

class Resume {
  name string
  skills string[]
  years int
}

function ExtractResume(text: string) -> Resume {
  client GPT4
  prompt #"
    从以下文本提取简历信息:{{ text }}
  "#
}

2. 自动重试与修复

当模型返回不符合 Schema 的内容时,BAML 会自动附加错误信息重新请求,显著提升解析成功率。

3. 多模型统一接口

同一份 BAML 定义可切换 OpenAI、Anthropic、Gemini、Ollama 等客户端,无需改写业务逻辑。

4. 流式与并行调用

支持流式返回部分结构化结果,并可将多个函数组合并行执行,降低延迟。

5. 可观测与测试

BAML 提供本地 Playground,可实时调试 Prompt、查看 Token 消耗与调用链路,并支持单元测试。

三、BAML 价格

BAML 本身是开源免费的(Apache 2.0 许可),使用它不产生额外费用。真正的成本来自底层调用的模型 API:

项目费用说明
BAML 框架免费开源
模型调用按各厂商 API 计费
云托管版(Boundary)提供团队协作与托管服务,需联系官方报价

对个人开发者和小团队而言,只需承担模型 Token 费用即可。

四、BAML 上手指南

步骤 1:安装

npm install -g @boundaryml/baml
# 或使用 Python
pip install baml-py

步骤 2:初始化项目

baml init

该命令会生成 baml_src/ 目录与基础配置文件。

步骤 3:配置模型客户端

clients.baml 中填入 API Key 对应的客户端,也可通过环境变量注入。

步骤 4:编写 BAML 函数

baml_src/ 下新建 .baml 文件,定义类型与函数,如第二部分的示例。

步骤 5:生成客户端代码

baml generate

生成 Python/TypeScript 等语言的类型安全 SDK。

步骤 6:在业务代码中调用

from baml_client import b

resume = b.ExtractResume(text="张三,5 年 Python 经验……")
print(resume.skills)

步骤 7:使用 Playground 调试

baml dev

浏览器打开本地地址即可实时测试 Prompt 效果。

五、实践建议

  • 字段命名清晰:Schema 字段名会进入 Prompt,命名越语义化,模型理解越准确。
  • 善用 enum:对分类任务使用枚举,可有效约束输出空间。
  • 设置合理重试次数:默认重试可应对偶发格式错误,但过多重试会增加成本。
  • 结合测试用例:为关键函数编写测试,防止 Prompt 修改引入回归。

六、结论

BAML 通过 DSL + 代码生成的方式,把 LLM 结构化输出从「手工解析 JSON」升级为「类型安全的函数调用」。它开源免费、上手成本低,配合自动重试与多模型支持,非常适合需要稳定结构化输出的 AI 应用。如果你正在构建抽取、分类、Agent 等场景,BAML 值得纳入技术选型。

返回 AI 教程列表