面向 LLM 的类型安全领域特定语言,通过 schema engineering 替代 prompt engineering,编译生成多语言原生类型客户端,实现可靠的 LLM 结构化输出。
BAML(Basically a Made-up Language)由 BoundaryML 开发,是一款专为 LLM 应用设计的类型安全 DSL。开发者通过编写 .baml 声明式文件定义 LLM 函数的输入/输出 schema 与 prompt 模板,经 Rust 编译器编译后自动生成 Python(Pydantic)、TypeScript、Go 等语言的原生类型客户端代码。
核心能力
- SAP(Schema-Aligned Parsing)算法:自研解析算法,即使模型不原生支持 tool-calling API 也能可靠解析结构化输出,兼容 JSON 内嵌 markdown、chain-of-thought 等灵活格式
- 全类型安全流式输出:流式传输结构化数据时提供 Partial 类型,支持逐块自动补全
- 多模型支持:一行
client声明切换 OpenAI、Anthropic、Gemini、Vertex、Bedrock、Azure OpenAI 及 Ollama、OpenRouter、vLLM 等 OpenAI 兼容接口,内置重试、回退与模型轮转策略,支持 Client Registry 运行时动态选模型 - Checks and Asserts:输出验证与断言机制
开发者体验
- VSCode 扩展(语法高亮、测试 Playground、prompt 预览、保存自动 generate)、Cursor 扩展、JetBrains IDEs、Zed、Claude Code 支持
baml-cli test测试框架支持 CI/CD 集成与并行测试- 在线 Playground:Prompt Fiddle
架构概览
| 模块 | 实现语言 | 职责 |
|---|---|---|
| BAML 编译器 | Rust | 解析 .baml 文件、类型检查、代码生成 |
| baml-cli | — | 命令行工具(init、generate、test) |
| baml_client | 多语言 | 自动生成的客户端,封装 LLM 调用、JSON 解析修复、错误处理、重试 |
| baml_language | — | 语言服务器,为 IDE 提供语言特性 |
| BEPS | — | BAML Enhancement Proposals(类 RFC 机制) |
工程管理采用 pnpm workspace + turbo 的 Monorepo 结构,支持 Nix 构建,文档使用 Fern 框架。
适用场景
结构化数据提取(简历、PDF)、AI Agent 构建(链式 BAML 函数 + 状态循环)、Chatbot/RAG、多模型 A/B 测试、流式 AI UI(Next.js/React)、企业级 prompt 版本管理(纳入 Git)。BAML 文件可纳入版本控制,实现 prompt 变更的 diff 与 review。编译器与 CLI 100% 离线运行,仅模型调用时产生网络请求。
安装示例
# Python
pip install baml-py && baml-cli init && baml-cli generate
# TypeScript
npm install @boundaryml/baml && npx baml-cli init && npx baml-cli generate
# Go
go install github.com/boundaryml/baml/baml-cli@latest && baml-cli init
go get github.com/boundaryml/baml && baml-cli generate
支持宿主语言:Python、TypeScript、Go、Ruby、Rust、Java、C#、Elixir(REST API)。
待确认信息:具体发布日期(CITATION.cff 标注 2024)、Java/C# 客户端成熟度(可能通过 REST API 支持)、Boundary Cloud 功能范围、SAP 算法技术报告、性能基准数据、生产采用案例。