Prompt 工程(Prompt Engineering)在大模型应用开发中至关重要,但传统的字符串拼接方式难以维护和调试。BAML(BoundaryML Language)是一个专为 AI 工作流设计的领域特定语言,将 Prompt 工程转变为Schema 工程,让 AI 输出更可靠。
项目介绍
BAML 由 BoundaryML 开发,获得了 7,900+ 颗星。BAML 的核心创新在于:它将每个 Prompt 定义为一个有类型签名的”函数”(Function),开发者可以像写 API 一样定义输入输出的数据结构,而 Prompt 本身则作为模板嵌入其中。这种方式天然支持类型检查、IDE 自动补全和版本控制。
BAML 兼容 Python、TypeScript、Ruby、Java、C#、Rust、Go 等几乎所有主流编程语言,真正做到了”一次编写,到处调用”。
特色功能
- 类型安全的 Prompt:输入输出都是强类型,编译时即可发现错误
- 多语言 SDK:Python、TypeScript、Ruby、Java、C#、Rust、Go 全支持
- 全模型兼容:支持 OpenAI、Anthropic、DeepSeek 等任何支持 Function Calling 的模型
- 内置重试机制:输出解析失败时自动重试
- 流式输出:支持实时流式响应
- Guardrails 内置:内置内容安全检查机制
- Prompt Fiddle 在线工具:提供浏览器内在线调试平台
安装步骤
# Python 安装
pip install baml-py
# TypeScript 安装
npm install @boundaryml/baml
# Ruby 安装
gem install baml
# 安装 CLI 工具(用于编译 .baml 文件)
pip install baml-cli
# 或使用 npx
npx @boundaryml/baml-cli generate
使用方法
BAML 文件示例(定义一个对话 Agent):
// 定义消息结构
class Message {
role string
content string
}
// 定义输出类型
class ReplyTool {
response string
}
class StopTool {
action "stop" @description(#"
当可能适合结束对话时触发
"#)
}
// 定义 Agent 函数
function ChatAgent(
message: Message[],
tone: "happy" | "sad"
) -> StopTool | ReplyTool {
client "openai/gpt-4o-mini"
prompt #"
你是一个对话机器人,语调要求:{{ tone }}。
{% for m in message %}
{{ _.role(m.role) }}
{{ m.content }}
{% endfor %}
"#
}
Python 中调用 BAML 函数:
from baml_py import BamlStreamEvent
from your_module import ChatAgent # 由 BAML 编译器生成
# 同步调用
result = ChatAgent(
message=[
{"role": "user", "content": "你好"}
],
tone="happy"
)
print(result) # 结构化输出,类型安全
# 异步/流式调用
async for event in ChatAgent.astream(...):
if isinstance(event, BamlStreamEvent.complete):
print(event.value)
适用场景
- AI Agent 开发:构建需要稳定结构化输出的 AI 应用
- 企业 AI 集成:将 AI 能力集成到现有企业系统
- 多模型切换:需要灵活切换不同 LLM 提供商的场景
- Prompt 版本管理:需要 Git 管理 Prompt 变更的团队
开源协议
BAML 采用 Apache-2.0 开源许可证。
项目地址:https://github.com/BoundaryML/baml
服务支持:如有兴趣不会搭建,可以联系微信:WRYD6166,开源项目搭建10-50元。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END









暂无评论内容