본문으로 건너뛰기

© 2026 Molayo

HN요약2026. 05. 05. 14:55

Show HN: RΞASON – 오픈소스 TypeScript 프레임워크를 위한 LLM 앱

요약

RΞASON은 LLM을 새로운 프로그래밍 기본 요소(programming primitive)로 간주하고, 훌륭한 LLM 애플리케이션 구축을 위한 오픈소스 TypeScript 프레임워크입니다. 이 프레임워크는 개발자들이 친숙한 TypeScript `interface`와 JSDoc 주석을 활용하여 LLM으로부터 구조화된 출력을 얻을 수 있게 합니다. RΞASON은 복잡하고 보일러플레이트가 많은 기존의 에이전트/행동 정의 방식을 개선하여, 모든 행동과 에이전트를 단순한 JavaScript 함수로 표현함으로써 개발자 친화성과 유연성을 극대화합니다.

핵심 포인트

  • RΞASON은 LLM을 새로운 프로그래밍 기본 요소로 보고 이를 위한 추상화를 제공하는 TypeScript 프레임워크입니다.
  • TypeScript `interface`와 JSDoc 주석을 사용하여 LLM으로부터 구조화된 출력을 얻는 것이 핵심 기능입니다.
  • 기존의 복잡한 에이전트/행동 정의 방식 대신, 모든 행동과 에이전트를 단순하고 간결한 JavaScript 함수로 표현하여 개발자 경험을 개선했습니다.
  • 구조화된 출력(Structured Output) 및 스트리밍(Streaming) 기능을 네이티브하게 지원합니다.
  • 프레임워크는 미리 만들어진 프롬프트나 에이전트 템플릿을 제공하기보다, 사용자가 자신만의 로직과 에이전트를 쉽게 구축할 수 있는 '방법'에 초점을 맞춥니다.

저는 LLM 을 70 년대의 데이터베이스나 2000 년대의 웹 기술 폭발과 유사한 새로운 프로그래밍 기본 요소 (programming primitive) 로 봅니다. 그들은 개발자들에게 코드를 추론 (reasoning) 과 자연어 이해에 풍부하게 할 수 있는 독특한 능력을 제공합니다.

그러나 새로운 기본 요소는 새로운 추상화 (abstraction) 를 필요로 합니다. RΞASON 을 통해 이를 만들고자 합니다.

RΞASON 은 훌륭한 LLM 앱 구축을 위한 백엔드 오픈소스 TypeScript 프레임워크입니다.

RΞASON 의 독특한 측면 중 하나는 Typescript interface 를 사용하여 LLM 에서 구조화된 출력을 얻는 것입니다:

설치 방법:

npx use-reason@latest

src/entrypoints/joke.ts 생성:

import { reasonStream } from 'tryreason'
interface Joke {
joke: string;
...

실행 방법:

npm run dev

이 블로그 포스트는 RΞASON 의 기능과 설계 철학 (design philoshopy) 을 일부 탐구합니다.

이는 튜토리얼이 아닙니다 — RΞASON 사용법을 배우고 싶다면 우리의 문서를 참조하세요. 이것이 RΞASON 사용법을 배우는 가장 좋은 장소입니다.

위에서 언급했듯이, 저는 LLM 을 새로운 프로그래밍 기본 요소로 봅니다.

그러나 저는 LLM 을 완전히 새로운 프로그래밍 방식으로 보지 않습니다 — LLM 은 현재의 프로그래밍 패러다임에 적응되어야 하며, 그 반대는 아닙니다.

이를 달성하기 위해 올바른 추상화가 필요합니다. RΞASON 을 통해 5 가지 필수 원칙을 따르면서 이를 만들었음을 희망합니다:

LLM 의 입력과 출력 모두 텍스트입니다. 이는 인간-LLM 상호작용에는 훌륭하지만 코드-LLM 상호작용에는 매우 이상적이지 않습니다.

이 문제를 해결하기 위해 LLM 에서 구조화된 출력을 어떻게나야 합니다. 일부 프레임워크는 해결책을 제공하지만, 종종 새로운 API 를 완전히 배우는 비용으로 이어집니다.

RΞASON 은 이를 다르게 접근합니다. Typescript 의 interface 와 JSDoc 주석과 같은 친숙한 개념을 사용합니다.

import { reason } from 'tryreason'
interface Joke {
/** 이 속성은 코드의 연령 등급을 표시하는 데 사용하세요 */
...

reason() 을 사용하여 LLM 을 직접 호출하고 interface 를 전달하여 구조화된 출력을 받습니다. 예를 들어, joke 의 출력은 다음과 같습니다:

{
"joke": "I'd tell you a chemistry joke but I know I wouldn't get a reaction.",
"rating": 18,
...

프레임워크는 비즈니스/앱을 차별화하지 않는 영역에서만 도움을 주어야 합니다.

그러나 LLM 앱의 맥락에서 프레임워크는 종종 미리 만들어진 프롬프트, 에이전트 및 검색 전략을 제공합니다. 이는 앱 성공의 핵심 영역입니다. 당신이 그 일을 맡아야 합니다프레임워크가 아닙니다.

또한, LLM 이 여전히 매우 새로운 것이기 때문에, 미리 만들어진 프롬프트/에이전트/검색을 제공하는 라이브러리는 다음 중 하나일 것입니다:

이는 RΞASON 가 어떤 미리 만들어진 프롬프트나 에이전트를 제공하지 않는 이유입니다. 대신, 저는 사용자 자신의 프롬프트와 에이전트를 만드는 멋진 방법을 제공합니다.

많은 프레임워크는 다음과 같은 미리 만들어진 에이전트 템플릿을 제공합니다:

const agent = new ConversationalAgent()

이 접근 방식에는 함정이 있습니다 — 앞서 논의한 것처럼, 이는过时되거나 불필요하게 커질 위험이 있습니다.

"프레임워크가 개발자가 확장할 수 있는 기본 에이전트를 제공할 수는 없나요?"라고 묻는 것이 있을 수 있습니다. 네, 이것은 가능합니다. 그러나 개발자가 미리 만들어진 에이전트 클래스의 구조와 프레임워크의 API 를 배워야 합니다.

대안인 커스텀 에이전트 생성은 종종 더 유연한 경로입니다. 그러나 전통적인 객체 지향 프로그래밍 (OOP) 접근 방식은 많은 보일러플레이트 코드를 초래할 수 있습니다, 이는 LangChain 의 에이전트 생성 예시에서 볼 수 있습니다. 이 문제는 React 가 클래스 컴포넌트에서 함수형 컴포넌트로 전환한 이유와 유사합니다 (출처).

RΞASON 은 이를 해결하기 위해 에이전트와 행동을 함수로 표현하는 방식을 사용합니다. LangChain 에이전트가 RΞASON 에서 어떻게 보이는지 확인해 보겠습니다:

import { useAgent } from 'tryreason'
import serpApi from '../actions/serp-api'
export const actions = [
...

LLM 이 행동을 선택할 때, RΞASON 은 단순히 선택된 행동을 호출합니다. 이는 정상적인 JavaScript 함수이며, LLM 이 생성한 매개변수를 전달하고 결과를 기다린 후 다시 LLM 에 반환합니다.

행동과 에이전트는 모두 정상적인 JavaScript 함수입니다. 저는 이 접근 방식이 에이전트를 더 간결하고 개발자 친화적으로 만드는 데 매우 효과적이라고 생각합니다.

LLM 은 계산 집약적이어서 단일 완성 생성에 +20 초가 걸릴 수 있습니다. 이것이 스트리밍을 사용하여 훌륭한 LLM 경험을 제공하는 것이 필수적인 이유입니다.

그러나 텍스트만 스트리밍하는 것은 충분하지 않습니다 — 위에서 논의한 이유로 구조화된 출력도 스트리밍해야 합니다.

RΞASON 은 이를 네이티브로 지원합니다:

import { reasonStream } from 'tryreason';
interface City {
description: string;
...

훌륭한 LLM 애플리케이션을 만들기 위해서는 관측 가능성 (Observability) 이 가장 중요여야 합니다.

사용자가 무엇을 요청했는지, LLM 이 어떻게 응답했는지, 응답에 걸리는 시간, 에이전트가 어디에 멈춰있는지, 어떤 행동을 호출하는지, 행동이 어떻게 응답하는지 등을 알아야 합니다.

RΞASON 은 오픈소트메트리 (OpenTelemetry) 와 즉시 호환됩니다!

추가 패키지를 다운로드하거나, 디코레이터나 기타 것을 추가할 필요가 없습니다. RΞASON 을 사용하면 관측 가능성이 무료로 제공됩니다.

RΞASON 은 아직 초기 단계에 있습니다 — 사용 중에는 버그가 발생할 수 있지만, 가능한 한 빠르게 모든 버그를 수정하도록 노력하고 있습니다. 따라서 문제가 발견되면 GitHub 이슈를 만들어 주세요.

모두의 의견과 RΞASON 으로 무엇을 구축하는지 기대합니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 HN Claude Code Search의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
2

댓글

0