baml
BAML 是一款专为构建可靠 AI 工作流和智能体设计的提示工程框架。它巧妙地将原本依赖直觉的“提示词编写”转化为严谨的“模式工程”,让开发者通过定义清晰的输入参数和输出类型来约束大模型行为,从而显著提升输出的稳定性和可预测性。
传统提示工程常面临输出格式不可控、难以调试和缺乏类型安全等痛点,BAML 通过其独特的“提示即函数”理念解决了这些问题。在 BAML 中,每个提示都被定义为一个强类型的函数,支持条件逻辑、循环及工具调用。其核心亮点在于拥有独立的编译器,能生成类型安全的客户端代码,完美融入 Python、TypeScript、Go、Rust 等多种主流开发语言。此外,BAML 还内置了流式输出、自动重试、多模型兼容以及 IDE 原生测试工具,即便面对不支持原生工具调用的模型,也能实现可靠的函数调用能力。
这款工具非常适合需要将 AI 功能深度集成到应用中的软件工程师、全栈开发者以及 AI 架构师。如果你希望像编写普通代码一样管理提示词,享受编译期的错误检查与高效的迭代体验,同时保持技术栈的灵活性,BAML 将是一个理想的选择。它让复杂的 AI 代理开发变得像调用普通函数一样简单直观。
使用场景
某电商公司的后端团队正在开发一个多语言智能客服系统,需要让 AI 根据用户情绪动态调整回复语气,并精准识别何时结束对话。
没有 baml 时
- 提示词难以维护:Prompt 散落在各个 Python 或 TypeScript 文件中,硬编码的字符串导致修改语气逻辑时需全局搜索替换,极易出错。
- 输出结构不可靠:依赖正则表达式或脆弱的 JSON 解析来提取 AI 回复,一旦模型输出格式微调,整个服务就会崩溃。
- 缺乏类型安全:开发人员无法在编写代码时预知 AI 返回的具体字段,只能等到运行时报错才发现数据结构不匹配。
- 测试迭代缓慢:调整 Prompt 后必须重启服务并手动构造请求才能验证效果,无法在编辑器内快速试错。
使用 baml 后
- 提示词工程化:将 Prompt 定义为带参数的强类型函数(如
ChatAgent),集中管理语气和逻辑,修改只需调整一处定义。 - 结构化输出保障:通过定义
ReplyTool和StopTool等类,baml 强制模型输出符合架构的数据,彻底消除解析错误。 - 端到端类型安全:编译器自动生成客户端代码,IDE 能实时提示
tool.response等字段,让调用 AI 像调用普通函数一样安心。 - 即时调试体验:直接在 VS Code 插件中修改 Prompt 并运行测试用例,无需重启应用即可看到不同语气下的生成结果,效率提升十倍。
baml 通过将模糊的提示词转化为严谨的模式工程,让构建高可靠、易维护的 AI 工作流变得像传统软件开发一样规范高效。
运行环境要求
- 未说明
未说明
未说明

快速开始
BAML 是一种用于构建可靠 AI 工作流和智能体 的简单提示语言。
BAML 通过将提示工程转变为 模式工程,使提示工程变得简单——你只需专注于提示的模型结构,即可获得更可靠的输出。你无需用 BAML 编写整个应用,只需编写提示部分即可!你可以使用任何你喜欢的语言来集成你的 LLM 函数!请参阅我们的快速入门指南,适用于 Python、TypeScript、Ruby 以及 Go 等其他语言。
BAML 提供了开箱即用的功能——具备完整的类型安全、流式处理、重试机制、广泛的模型支持,即使这些模型不原生支持 工具调用 API。
试试 BAML:Prompt Fiddle • 交互式应用示例
BAML 的核心原则:LLM 提示就是函数
BAML 中的基本构建块是函数。每个提示都是一条函数,它接受参数并返回一个类型。
function ChatAgent(message: Message[], tone: "happy" | "sad") -> string
每个函数还会进一步定义它所使用的模型以及其具体的提示内容。
function ChatAgent(message: Message[], tone: "happy" | "sad") -> StopTool | ReplyTool {
client "openai/gpt-4o-mini"
prompt #"
成为一个 {{ tone }} 的机器人。
{{ ctx.output_format }}
{% for m in message %}
{{ _.role(m.role) }}
{{ m.content }}
{% endfor %}
"#
}
class Message {
role string
content string
}
class ReplyTool {
response string
}
class StopTool {
action "stop" @description(#"
当可能适合结束对话时
"#)
}
BAML 函数可以从任何语言中调用
下面我们通过 Python 调用了我们在 BAML 中定义的 ChatAgent 函数。BAML 的 Rust 编译器会生成一个“baml_client”来访问和调用这些函数。
from baml_client import b
from baml_client.types import Message, StopTool
messages = [Message(role="assistant", content="我能帮您什么?")]
while True:
print(messages[-1].content)
user_reply = input()
messages.append(Message(role="user", content=user_reply))
tool = b.ChatAgent(messages, "happy")
if isinstance(tool, StopTool):
print("再见!")
break
else:
messages.append(Message(role="assistant", content=tool.response))
你可以使用串联的 BAML 函数来编写任何类型的智能体或工作流。一个智能体就是一个循环,不断调用带有某些状态的聊天 BAML 函数。
如果你需要进行流式处理,只需再添加几行代码:
stream = b.stream.ChatAgent(messages, "happy")
# partial 是一个包含所有可选字段的 Partial 类型
for tool in stream:
if isinstance(tool, StopTool):
...
final = stream.get_final_response()
这样你就可以为流中的每一个数据块获得完全类型安全的输出。
在 IDE 中以 10 倍速度测试提示
BAML 配备了针对 VS Code 和 JetBrains IDE 的原生工具,并且对 其他编辑器 的支持也在不断扩展。
可视化完整的提示(包括任何多模态资源)以及 API 请求。BAML 让你对提示拥有完全的透明度和控制力。

使用 AI 的关键在于迭代速度。
如果测试你的流程需要 2 分钟,那么在 20 分钟内你只能尝试 10 种想法。
如果将时间缩短到 5 秒,那么在相同的时间内你可以尝试 240 种想法。

Playground 还允许你并行运行测试——从而实现更快的迭代速度 🚀。
无需登录网站,也不需要手动定义 JSON 模式。
使用任何模型实现可靠的工具调用
BAML 即使在模型不支持原生工具调用 API 的情况下也能正常工作。我们开发了 SAP(模式对齐解析)算法,以支持 LLM 可能提供的灵活输出,例如 JSON 数据块中的 Markdown 格式,或者在回答之前的一系列思考过程。了解更多关于 SAP 的信息
借助 BAML,你的结构化输出可以在模型发布的第一天就生效。你无需再去研究某个模型是否支持并行工具调用,或者是否支持递归模式、anyOf 或 oneOf 等功能。
实际效果请参见:Deepseek-R1 和 OpenAI O1。
在几行代码中切换数百种模型
function Extract() -> Resume {
+ client openai/o3-mini
prompt #"
....
"#
}
重试策略 • 回退机制 • 模型轮转。全部静态定义。
想在运行时动态选择模型吗?请查看客户端注册表。
我们支持:OpenAI • Anthropic • Gemini • Vertex • Bedrock • Azure OpenAI • 任何兼容OpenAI的模型(Ollama、OpenRouter、VLLM、LMStudio、TogetherAI,以及其他)
构建美观的流式UI
BAML为NextJS、Python(以及任何语言)生成大量实用工具,让构建流式UI变得简单。

BAML的流式接口完全类型安全。请查看流式文档,以及我们的React钩子。
完全开源且可离线使用
- 100% 开源(Apache 2)
- 100% 私密。AGI不需要互联网连接,BAML也不需要
- 除了您明确设置的模型调用外,不会发起任何网络请求
- 不会存储或用于任何训练数据
- BAML文件可以保存在本地,并提交到Github以便于比较差异。
- 使用Rust构建。速度极快,几乎感觉不到它的存在。
BAML的设计理念
在创建新语法时,一切皆有可能。只要能用代码实现,就能成为你的工具。这是我们的设计理念,旨在帮助约束想法:
- 1: 尽可能避免重复发明
- 是的,提示需要版本控制——我们有很棒的版本控制工具:git
- 是的,你需要保存提示——我们有很棒的存储工具:文件系统
- 2: 任何文本编辑器和终端都足以使用它
- 3: 运行速度快
- 4: 大学一年级的学生也应该能够理解它
为什么需要一种新的编程语言
过去我们这样编写网站:
def home():
return "<button onclick=\"() => alert(\\\"hello!\\\")\">点击</button>"
而现在我们这样做:
function Home() {
return <button onClick={() => setCount(prev => prev + 1)}>
{count} 次点击!
</button>
}
新的语法能够以惊人的效率表达新概念。此外,维护成百上千个用于提示的f-string让我们感到非常厌恶 🤮。字符串不利于代码的可维护性。我们更倾向于结构化的字符串。
BAML的目标是赋予你英语般的表达力,同时保持代码的结构化。
完整博客文章由我们撰写。
结论
随着模型性能的不断提升,我们对它们的期望也会越来越高。但不变的是,我们需要一种方式来编写可维护的代码,以充分利用这些模型。目前我们拼接字符串的方式,让人不禁想起Web开发早期的PHP/HTML混合模式。希望今天我们分享的一些想法,能够为我们共同塑造未来的编码方式带来一点小小的改变。
常见问题解答
| 我需要将整个应用都用BAML编写吗? | 不,只需要编写提示部分!BAML会将定义转换为你选择的语言!Python、TypeScript、Ruby及其他语言。 |
| BAML稳定吗? | 是的,许多公司已经在生产环境中使用它!我们每周都会发布更新! |
| 为什么需要一种新语言? | 跳转至章节 |
贡献
请查看我们的入门指南
引用
您可以按以下方式引用BAML仓库:
@software{baml,
author = {Boundary ML},
title = {BAML},
url = {https://github.com/boundaryml/baml},
year = {2024}
}
由Boundary用心打造
总部位于华盛顿州西雅图市
P.S. 我们正在招聘热爱Rust的软件工程师。请发送邮件至founders@boundaryml.com或通过Discord联系我们!

版本历史
0.221.02026/04/150.220.02026/03/110.219.02026/02/120.218.12026/01/270.218.02026/01/220.217.02026/01/120.216.02025/12/310.215.22025/12/230.215.02025/12/180.214.02025/11/240.213.02025/11/060.212.02025/10/280.211.22025/10/120.211.12025/10/100.211.02025/10/070.210.02025/10/010.209.02025/09/280.208.52025/09/250.208.42025/09/240.208.32025/09/23相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
n8n
n8n 是一款面向技术团队的公平代码(fair-code)工作流自动化平台,旨在让用户在享受低代码快速构建便利的同时,保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点,帮助用户轻松连接 400 多种应用与服务,实现复杂业务流程的自动化。 n8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”:既可以通过直观的可视化界面拖拽节点搭建流程,也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外,n8n 原生集成了基于 LangChain 的 AI 能力,支持用户利用自有数据和模型构建智能体工作流。在部署方面,n8n 提供极高的自由度,支持完全自托管以保障数据隐私和控制权,也提供云端服务选项。凭借活跃的社区生态和数百个现成模板,n8n 让构建强大且可控的自动化系统变得简单高效。
AutoGPT
AutoGPT 是一个旨在让每个人都能轻松使用和构建 AI 的强大平台,核心功能是帮助用户创建、部署和管理能够自动执行复杂任务的连续型 AI 智能体。它解决了传统 AI 应用中需要频繁人工干预、难以自动化长流程工作的痛点,让用户只需设定目标,AI 即可自主规划步骤、调用工具并持续运行直至完成任务。 无论是开发者、研究人员,还是希望提升工作效率的普通用户,都能从 AutoGPT 中受益。开发者可利用其低代码界面快速定制专属智能体;研究人员能基于开源架构探索多智能体协作机制;而非技术背景用户也可直接选用预置的智能体模板,立即投入实际工作场景。 AutoGPT 的技术亮点在于其模块化“积木式”工作流设计——用户通过连接功能块即可构建复杂逻辑,每个块负责单一动作,灵活且易于调试。同时,平台支持本地自托管与云端部署两种模式,兼顾数据隐私与使用便捷性。配合完善的文档和一键安装脚本,即使是初次接触的用户也能在几分钟内启动自己的第一个 AI 智能体。AutoGPT 正致力于降低 AI 应用门槛,让人人都能成为 AI 的创造者与受益者。
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
opencode
OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信