baml: 이것이 무엇인지, 어떤 문제를 해결하는지 & 왜 인기를 얻고 있는지
baml: 이것이 무엇인지, 어떤 문제를 해결하는지 & 왜 인기를 얻고 있는지
해결하는 문제
BAML은 애플리케이션 코드 내에서 프롬프트를 가공되지 않은 문자열(f-strings)로 관리하는 지저분한 프로세스를 대체하기 위해 설계된 프롬프팅 언어입니다. 이는 프롬프트 엔지니어링을 "스키마 엔지니어링"으로 변환하여, 개발자가 구조화된 데이터를 반환하는 타입 안정성이 보장된 함수로 프롬프트를 정의할 수 있게 함으로써 AI 워크플로우와 에이전트를 더욱 신뢰할 수 있고 유지보수 가능하게 만듭니다.
작동 방식
BAML은 모든 프롬프트를 정의된 입력 매개변수와 반환 타입을 가진 함수로 취급합니다. Rust 기반의 컴파일러는 이러한 BAML 정의를 Python, TypeScript, Ruby, Go와 같은 다양한 언어에서 호출할 수 있는 클라이언트(baml_client)로 변환합니다. 또한, 도구 호출(tool-calling) API를 기본적으로 지원하지 않는 모델에서도 신뢰할 수 있는 구조화된 출력을 보장하기 위해 SAP(schema-aligned parsing)라는 커스텀 알고리즘을 사용합니다.
대상 사용자
타입 안정성, IDE 통합을 통한 빠른 반복 속도, 그리고 애플리케이션 로직을 다시 작성하지 않고도 다양한 LLM 제공업체 간을 전환할 수 있는 능력을 원하는 AI 에이전트 및 복잡한 LLM 워크플로우를 구축하는 개발자입니다.
주요 특징
- 타입 안정성이 보장된 구조화된 출력: 가공되지 않은 텍스트 대신 정의된 클래스/타입으로 데이터를 반환합니다.
- 교차 언어 지원: BAML에서 정의된 프롬프트는 Python, TypeScript, Ruby, Go에서 호출할 수 있습니다.
- IDE 통합: 신속한 프롬프트 테스트 및 시각화를 위한 VS Code 및 JetBrains용 네이티브 도구 제공.
- 모델 불가지론적(Model Agnostic): 내장된 재시도 정책 및 폴백(fallback) 기능을 통해 다양한 제공업체(OpenAI, Anthropic, Gemini, Bedrock 등)를 지원합니다.
- Schema-Aligned Parsing (SAP): 모든 모델로부터 신뢰할 수 있는 도구 호출 및 구조화된 데이터 추출을 가능하게 합니다.
- 오픈 소스: Apache 2 라이선스, 설계 단계부터 프라이버시를 고려하였으며, 성능을 위해 Rust로 구축되었습니다.
Sources
- undefinedBoundaryML/baml