Vellum
Vellum
Vellum은 AI 제품을 아이디어 단계에서 프로덕션급 기능까지 만들어 가는 엔드투엔드(end-to-end) AI 개발 플랫폼이에요. 프롬프트 엔지니어링(prompt engineering)과 워크플로(workflow) 구축, 실험, 평가, 배포, 모니터링까지 한곳에서 처리할 수 있도록 도와주죠. 기술적인 사람과 비기술적인 사람이 모두 참여해 협업할 수 있는 환경을 제공하고, OpenAI, Anthropic 등 주요 LLM 제공업체를 모두 지원해요.
Vellum은 특히 'vibe check(느낌만으로 검증하기)'가 아닌 엄격한 평가(evals)로 AI 시스템을 출시하고, 프로덕션에서 사용 사례를 충분히 모니터링하는 것을 중요하게 생각해요. 이를 위해 실험, 평가, 배포, 모니터링, 협업을 위한 도구를 통합 제공합니다.
출처: 문서
본문
주요 기능
Vellum은 크게 Build(구축), Test & Deploy(테스트 및 배포) 영역으로 나뉘어요.
프롬프트 엔지니어링 (Prompt Engineering)
프롬프트는 LLM에 응답을 생성하도록 지시하는 '명령'이에요. Vellum의 프롬프트는 단순한 정적 문자열이 아니라, 런타임에 내용이 결정되는 동적 템플릿입니다. 변수 치환(variable substitution), jinja 템플릿, 함수 호출(function calling)을 지원해요.
프롬프트에서 입력 변수를 참조하는 방법은 두 가지가 있어요.
- Rich Text Blocks: 간단한 변수 치환에 적합해요.
{{또는/를 입력하면 사용 가능한 변수 드롭다운이 나옵니다. - Jinja Blocks: 조건 분기나 반복 등 복잡한 로직이 필요할 때 사용해요.
예를 들어 jinja 템플릿으로 변수를 참조하고 조건 분기를 넣을 수 있어요.
You are a {{ personality_type }} AI assistant.
{% if personality_type == "rude" %}
You end every message with a frowning emoji.
{% else %}
You end every message with a smiling emoji.
{% endif %}
주석을 남길 수도 있어요. 주석은 컴파일될 때 토큰을 소모하지 않습니다.
{# This is a comment #}
Hello, world!
JSON 입력 변수도 지원해요. 예를 들어 traits라는 변수의 값이 다음과 같다면,
{
"hair_color": "brown",
"personality": "happy go lucky"
}
Jinja 블록에서 이렇게 참조할 수 있어요.
You are a {{ traits.personality }} AI assistant.
함수 호출(Function Calling) 도 지원합니다. 모델에 함수 정의를 제공하면, 모델이 함수 중 하나를 호출할지 아니면 표준 텍스트 응답을 반환할지 결정해요. 함수를 호출하기로 하면 어떤 함수를 어떤 파라미터로 호출할지 알려주는 JSON을 반환합니다. 실제 함수 실행은 애플리케이션 개발자가 수행하며, 좋은 함수 후보로는 런타임/최신 데이터, 독점 데이터, 가중치를 부여하고 싶은 데이터가 있어요.
워크플로 (Workflows)
Vellum Workflows는 여러 LLM 호출과 그걸 연결하는 비즈니스 로직을 빠르게 프로토타이핑하고, 버전 관리하며, 배포하고, 모니터링할 수 있게 해줘요. 로우코드(low-code) 인터페이스로 체인을 정의하므로 다양한 테스트 케이스에서 어떻게 동작하는지 빠르게 피드백을 받을 수 있습니다. 워크플로를 '배포(deploy)'하면 API를 호출해 애플리케이션에서 사용할 수 있어요.
배포된 이후에는 워크플로 정의가 변경되면 버전이 관리되고, 애플리케이션에서의 모든 호출이 로깅됩니다. 각 호출마다 단계별 입력·출력·지연 시간(latency)을 확인할 수 있어요.
워크플로는 다음 개념을 사용해요.
- Input Variables - 워크플로가 의존하는 동적 입력(예:
query) - Scenarios - 입력 변수에 대한 값의 조합. 여러 시나리오를 정의하고 바꿔가며 테스트할 수 있어요.
- Nodes - 동작이 일어나는 단계. 예를 들어
Prompt Node는 입력 변수를 프롬프트에 넘겨 LLM을 실행하고, 출력을 하위 노드의 입력으로 사용할 수 있게 해줘요. - Edges - 노드를 연결하고 실행 순서를 정의해요.
- Final Outputs - 워크플로의 최종 출력으로 표시하고 싶은 노드 출력을 지정하는 특별한 노드예요. 배포 후 API로 호출하면 기본적으로 Final Output Node가 구독하는 데이터만 반환됩니다.
평가 (Evaluation)
Vellum은 AI 시스템의 품질을 규모 있게 평가할 수 있는 도구를 제공해요. 테스트 스위트(test suite)와 메트릭으로 AI 애플리케이션을 테스트하고, 배포된 애플리케이션에는 Online Evaluations 기능으로 구성된 메트릭을 모든 실행에 자동 적용할 수 있습니다. 이를 통해 실시간 성능을 모니터링하고, 회귀(regression)를 감지하며, 릴리스 간 성능을 비교할 수 있어요.
배포 (Deployment)
혼자 배포하는 대신 버전 관리와 배포를 지원합니다. 프롬프트 배포(Prompt Deployment)는 "Overview" 탭에서 API를 통해 호출할 수 있는 코드 스니펫을 제공해요. 배포는 애플리케이션 코드와 분리되어 있어 AI 시스템 업데이트를 원클릭 배포로 쉽게 반영할 수 있어요.
관측성 (Observability) & 모니터링
Vellum은 프로덕션에서 프롬프트와 워크플로의 모든 실행을 자동으로 추적하는 관측성 도구를 제공해요. 배포 후 각 실행에 대한 자세한 정보가 Executions 테이블에 기록되며, 필터·정렬·분석이 가능합니다. 각 실행에서 입력 변수, 전체 출력, 사용된 모델 파라미터, 실행 시간과 비용, 원본 요청/응답 데이터를 확인할 수 있어요.
워크플로 실행에는 두 가지 분석 뷰가 있어요.
- Trace View: 각 노드 실행을 타임라인 막대로 표시해 가장 느리거나 비용이 많이 드는 단계를 빠르게 파악할 수 있어요.
- Graph View: 워크플로를 대화형 다이어그램으로 표시해 조건 분기가 어떻게 실행됐는지, 각 노드의 입출력을 확인할 수 있어요.
또 replay scrubber 기능으로 시간에 따라 워크플로 실행을 단계별로 재생하며 디버깅할 수 있어요. 실행을 'Save as Scenario'로 저장해 샌드박스에서 계속 실험하거나, 'Save to Test Suite'로 테스트 스위트에 추가해 회귀를 방지할 수도 있어요.
Actuals API로는 특정 요청의 출력이 '어땠어야 하는지'와 품질 점수를 캡처할 수 있어요. 예를 들어 AI 채용 이메일 생성기에서 사용자가 편집 없이 'Send'를 누르면 품질 1.0, 'Discard'를 누르면 0.0으로 추론하거나 5성급 평점 시스템을 연동하는 식이죠. 이를 통해 프로덕션 품질을 시간에 따라 모니터링하고 프롬프트 최적화용 데이터셋을 만들 수 있어요.
SDK 설치
Vellum은 공식 Python, Node/TypeScript, Go 클라이언트를 제공해요. Python SDK 설치는 다음과 같아요.
pip install vellum-ai
클라우드 호스팅 Vellum은 별도 지정이 없으면 모든 엔드포인트가 https://api.vellum.ai를 기본 URL로 사용해요. 자체 호스팅(VPC) 환경에서는 base URL을 달리 지정해야 합니다. Python SDK에서 자체 호스팅 환경을 설정하는 예시예요.
from vellum import Vellum, VellumEnvironment
# For self-hosted/VPC deployments
client = Vellum(
api_key="your-api-key",
environment=VellumEnvironment(
default="https://api.vellum.company.com",
predict="https://api.vellum.company.com",
documents="https://api.vellum.company.com"
)
)
사용 예시
배포한 프롬프트를 Python SDK로 실행하는 간단한 예시예요.
import vellum
from vellum.client import Vellum
client = Vellum(api_key="YOUR_API_KEY")
result = client.generate(
deployment_name="my-deployment",
requests=[vellum.GenerateRequest(input_values={"question": "Can I get a refund?"})]
)
print(result.text)
REST API로 직접 호출할 수도 있어요. execute-prompt 엔드포인트는 https://predict.vellum.ai/v1/execute-prompt이고, X-API-KEY 헤더로 인증합니다.
import requests
url = "https://predict.vellum.ai/v1/execute-prompt"
payload = { "inputs": [
{
"name": "string",
"type": "STRING",
"value": "string"
}
] }
headers = {
"X-API-KEY": "<apiKey>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
고수준 Workflows SDK도 제공하며, 이는 복잡한 AI 시스템의 제어 흐름(control flow)을 선언적 그래프로 정의하고 실행하는 프레임워크예요.