AgentScript SDK: 코드로 생각하는 AI 에이전트 구축
요약
AgentScript는 AI 에이전트 구축을 위한 오픈소스 SDK로, 기존 Re-act 방식의 한계를 극복합니다. 이 SDK는 LLM에게 JS 코드를 생성하도록 요청하고, 이를 전용 런타임에서 실행하여 재개 가능성, 상태 지속성, 상호작용성을 내장한 에이전트를 구현할 수 있게 합니다.
핵심 포인트
- LLM의 코드 생성 능력을 활용해 계획을 표현하는 코드로 에이전트 구축
- 생성된 코드는 전용 런타임(인터프리터)에서 안전하게 실행됨
- 실행 과정은 일시 중지 및 데이터베이스 직렬화가 가능하여 재개 용이
- 상호작용 루프(Human in the loop)를 지원하여 인간 개입을 통한 에이전트 제어 가능
AgentScript는 AI 에이전트를 구축하기 위한 독특한 오픈소스 SDK입니다.
npm install agentscript-ai
짧은 데모 비디오를 확인해 보세요:
또한 예제 레포지토리도 참고하세요.
무엇인가요?
일반적인 Re-act 에이전트는 다음과 같이 작동합니다:
- 사용 가능한 도구와 함께 프롬프트를 LLM에 전송합니다.
- LLM은 도구 호출을 반환합니다.
- 도구를 실행하고 결과를 다시 전송합니다.
- LLM은 또 다른 도구 호출로 응답합니다.
- ...
만약 LLM이 사용할 도구, 순서, 그리고 결과로 무엇을 할지 미리 알려준다면 더 좋지 않을까요?
LLM은 코드 생성에 능숙하므로, 계획을 표현하는 코드를 작성할 수도 있을 것입니다!
AgentScript는 바로 그 역할을 수행합니다. LLM에게 코드(JS의 부분 집합)를 생성하도록 프롬프트를 보내고, 이를 재개 가능성(resumability), 상태 지속성(state persistence), 그리고 상호작용성(interactivity)(인간 개입 루프, human in the loop)이 내장된 전용 런타임에서 실행합니다.
작동 방식은요?
- 도구(tool)와 선택적으로 입력 및 출력 변수를 갖는 런타임 정의하기
- 실행할 작업(task)을 정의합니다 (별칭: 프롬프트).
- AgentScript가 LLM에게 JS 코드를 생성하도록 요청합니다.
- 이 코드는 직접 실행되는 것이 아니라 AST로 파싱됩니다.
- [AST]는 전용의 안전한 런타임(인터프리터)에서 실행됩니다.
샌드박스가 필요하지 않습니다. 생성된 코드는 Node에서 직접 실행되는 것이 아니기 때문입니다. - 실행은 일시 중지될 수 있고, 데이터베이스에 직렬화되어 나중에 재개될 수 있습니다.
(예: 도구 호출이 인간의 상호작용이나 승인을 필요로 할 때).
코드 확인하기
Linear와 함께 작동하는 에이전트를 만들어 봅시다.
전체 예제는 여기에서 확인할 수 있습니다.
import { executeAgent, inferAgent } from 'agentscript-ai';
import * as s from 'agentscript-ai/schema';
import { addToDate, summarizeData } from 'agentscript-ai/tools';
...
inferAgent를 실행함으로써, 우리는 사용 가능한 모든 도구로 구성된 다음 프롬프트를 가지고 LLM을 호출합니다:
당신은 AgentScript라는 프로그래밍 언어를 사용하여 답변해야 합니다. 이는 다음과 같은 제한 사항이 있는 JavaScript의 하위 집합입니다:
- 정규 표현식(regex) 사용 불가
- 복잡한 계산 사용 불가
- 미리 정의된 함수만 사용할 수 있으며 그 외는 안 됨
- ...
먼저 비기술적인 방식으로 단계별 계획을 설명하세요. 코드나 함수를 참조하지 마세요.
그다음 유효한 AgentScript 코드를 작성하세요.
코드를 함수로 감싸지 마세요.
나중에 코드를 설명하지 마세요.
export type Duration = {
years?: number;
months?: number;
...
LLM은 다음과 같은 계획으로 응답합니다:
최근 작업에 대한 진행 상황 업데이트를 만드는 것을 도와드리겠습니다. 계획은 다음과 같습니다:
- 먼저, 지난주에 생성된 모든 이슈를 검색합니다.
- 그런 다음 해당 이슈들을 가져와 다음을 포함하는 요약을 생성합니다:
- 몇 개의 작업이 생성되었는지
- 현재 상태 분포
- 주요 하이라이트 또는 패턴
- 명확하고 간결한 방식으로 형식화합니다.
... 그리고 AgentScript 코드를 생성합니다:
// 참고: 이것은 LLM에 의해 실제로 생성된 코드입니다.
// 실행되는 것이 아니라 AST로 파싱되어 특수 런타임에서 실행됩니다.
...
이제 에이전트를 실행합니다:
await executeAgent({ agent });
// 출력을 확인하세요
...
어떻게 다른가요?
많은 제품들이 에이전트를 고정된 워크플로우로 정의합니다 (예: Glide).
이는 잘 정의된 작업에는 매우 좋지만, 작업이 모호하거나 사전에 알려지지 않은 경우에는 부족합니다.
그런 다음 우리는 여러 오케스트레이션 프레임워크(LangGraph, CrewAI, Inferable 등)를 갖게 됩니다.
이들은 아키텍처를 제공하고, 각 도구 호출이나 결정 지점에서 또 다른 LLM 쿼리가 필요한 클래식한 re-act 에이전트를 구축하는 것을 더 쉽게 만듭니다. 하지만 이것은 LLM 컨텍스트를 빠르게 증가시키고, 비용이 많이 들며, 느리고 충분히 유연하지 않습니다 (이런 방식으로 루프를 구현해 보세요).
AgentScript는 완전히 다른 접근 방식을 취합니다. LLM이 실행 계획을 코드로 표현하게 함으로써, 에이전트는 작업에 대해 더 추상적으로 생각할 수 있으며, 심지어 작업을 수행하거나 결정을 내리는 데 필요한 모든 데이터를 알 필요조차 없습니다. 마치 앱을 작성하는 개발자가 사용할 모든 데이터를 알 필요가 없는 것과 같습니다. 그들은 if 문과 루프를 사용하여 동적 데이터로 작동하는 코드를 작성할 수 있습니다.
데이터는 로컬 변수로 표현되며 도구에 전달될 수 있습니다. 이 도구는 일반적인 결정론적 함수일 수도 있고, LangChain 또는 다른 라이브러리를 사용하여 구축된 LLM 기반의 도구일 수도 있습니다.
상태 관리와 인간 개입(human in the loop)은 어떻습니까?
AgentScript는 실제로 생성된 코드를 실행하는 것이 아니라 AST(추상 구문 트리)를 기반으로 작동하기 때문에, 각 문장이나 도구 호출에서 실행을 일시 중지할 수 있습니다. 이는 직렬화되어 데이터베이스에 저장될 수 있으며, 이후 검색하여 멈췄던 지점부터 재개할 수 있습니다.
각 도구는 자신의 상태를 저장하고, 사용자 상호 작용, 이벤트 발생 또는 일정 시간 경과를 기다릴 수 있습니다. 따라서 내장된 상호작용 및 승인 메커니즘을 통해 인간 개입(human in the loop)을 추가하기가 쉬울 것입니다.
개발 현황
현재는 도구와 대부분의 일반적인 JS 문장을 지원하는 작동 가능한 코드 생성 및 런타임을 갖추고 있습니다.
저희 examples repo를 포크하여 자유롭게 사용해 보세요.
커뮤니티 참여 방법
AgentScript는 오픈 소스 프로젝트이며, 모든 분들의 기여를 환영합니다.
- Discord 서버 참여 - 저희와 이야기 나눠요!
- Github 이슈 확인 - 현재 작업 중인 내용을 확인하고, 아이디어를 게시해 주세요!
현재 로드맵
- 더 많은 JS 기능:
if문장,- 템플릿 리터럴(template literals)
- 화살표 함수(arrow functions)
- 단항 연산자(unary operators)
- 입력 변수(Input variables)
- 관찰 가능성 및 디버깅(Observability and debugging)
AI 자동 생성 콘텐츠
본 콘텐츠는 개발 자료 GitHub · 21e63e26의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기