项目介绍:BAML
BAML,即“基本上,一个自创的语言”,是一个专门为编写和测试大型语言模型(LLM)函数而设计的领域特定语言。此语言通过为各种编程语言(如Python、TypeScript等)提供即插即用的功能,帮助工程师更加专注于工程问题,而减少对提示词设计的依赖。
LLM函数的强大表现
在领域内部,LLM函数是带有定义输入变量的提示模板,输出的类型可以是类、枚举、联合体等。BAML的表现超越了当前获取结构化数据的所有其他方法,即使是在使用GPT-3.5的情况下,也能优于为工具使用而微调的模型。在伯克利函数调用基准测试中的结果印证了这一点。
主要功能
BAML提供了一系列强大的功能,使其更加适合LLM操作和复杂数据处理:
- Python和Typescript的支持:与其他编程语言无缝集成。
- 类型验证:相比Pydantic或Zod更具抵抗常见LLM错误的能力。
- 广泛的模型支持:支持Ollama、Openai、Anthropic,并在小型模型如Llama2中进行了测试。
- 流式处理:流式传输结构化的部分输出。
- 实时提示预览:始终可以查看完整提示,即使它包含循环和条件语句。
- 测试支持:只需点击一次即可在游乐场中测试函数。
- 弹性和后备功能:为LLM调用添加重试和冗余。
- 观察平台:使用Boundary Studio可视化功能并通过单击重放生产请求。
资源与社区
用户可以通过Discord与社区互动,或参与办公时间来提出问题。此外,还有详细的文档以及用于监控的Boundary Studio。
初学者项目
BAML为初学者提供了多个示例项目:
如何使用BAML
BAML可以轻松进行多种语言转换,例如Python和TypeScript,与传统框架相比,BAML提供了更好的输出解析、类型保证,并且使代码更为简洁。
Python中的应用示例
from baml_client import baml as b
from baml_client.baml_types import Resume
async def main():
resume_text = """Jason Doe
Python, Rust
University of California, Berkeley, B.S.
in Computer Science, 2020
Also an expert in Tableau, SQL, and C++
"""
resume = await b.ExtractResume(resume_text)
assert isinstance(resume, Resume)
TypeScript中的应用示例
import baml as b from "@/baml_client";
import { Resume } from "@/baml_client/types";
function getResume(resumeUrl: string): Promise<Resume> {
const resume_text = await loadResume(resumeUrl);
return b.ExtractResume({ resumeText: content });
}
BAML生态系统
BAML不仅仅是一个语言工具,它是一个全方位的开发体验生态系统,专为任何类型的LLM函数调用操作而设计。其独特的功能,包括游乐场和Boundary Studio观察平台,使其在开发者中备受欢迎。
FAQ
为什么创建新语言?
- BAML的设计灵感来源于Jinja,但增加了类型和函数声明的功能。
BAML如何部署及安全性等问题也在文档中得到了详细解答。
贡献和支持
Boundary团队欢迎开发者参与贡献,并热情邀请愿意加入团队的工程师。更多信息请访问他们的Discord或电邮联系。