Last translated: 17 Jun 2025

Translation Not Available Yet

This repository's README hasn't been translated yet. Once translated, it will be easier to read and understand in your native language (中文).

After translating, add the links to README so others can view it directly.

julep

Get API Key   Documentation

NPM Version   PyPI - Version   Docker Image Version   GitHub License

Discord · 𝕏 · LinkedIn

데이터 및 ML 팀을 위한 서버리스 AI 워크플로우

🎉 발표: Julep Open Responses API (알파 버전)

Open Responses API 출시를 발표하게 되어 기쁩니다! 이 새로운 API는 다음과 같은 기능을 제공합니다:

  1. OpenAI 호환 인터페이스 - 기존 코드와 바로 호환 가능
  2. 자체 호스팅 오픈소스 구현 - 모든 LLM 백엔드와 연동 가능
  3. 모델 공급자 독립적 - OpenAI, Anthropic 등 어떤 LLM 공급자와도 연결 가능

Open Responses API는 기존 애플리케이션과 쉽게 통합할 수 있도록 하면서 강력한 새로운 기능을 추가합니다.

사용해 보시겠습니까? Open Responses API 문서를 확인해 보세요!

Julep은 데이터 및 ML 팀이 정교한 AI 워크플로우를 구축할 수 있도록 도와주는 서버리스 플랫폼입니다. 복잡한 AI 작업을 오케스트레이션하고, 상호작용 간 상태를 관리하며, 기존 데이터 인프라 및 도구와 통합할 수 있는 견고한 기반을 제공합니다.

데이터 파이프라인을 구축하거나 AI 워크플로우를 생성할 때, Julep은 인프라 관리 없이 LLM 기반 워크플로우를 구성하고 확장할 수 있도록 합니다. 단순한 질문에 답변하는 것 이상의 복잡한 작업을 처리하고, 과거 상호작용을 기억하며, 다른 도구나 API를 사용할 수 있는 AI 에이전트를 구축하고 싶다면 Julep이 적합합니다. 당사 플랫폼이 힘든 작업을 처리하므로 비즈니스를 위한 지능형 솔루션 구축에 집중할 수 있습니다.

💡 Julep에 대해 더 알아보려면 **문서**를 확인하세요.

📖 목차


✨ 주요 기능

🧠스마트 메모리컨텍스트를 기억하고 과거 상호작용에서 학습하는 에이전트
🔄워크플로우 엔진분기와 루프가 있는 복잡한 다단계 프로세스 구축
병렬 처리최대 효율을 위해 여러 작업을 동시에 실행
🛠️도구 통합외부 API 및 서비스와 원활하게 연결
🔌쉬운 설정Python 및 Node.js SDK로 빠르게 시작
🔒안정적 & 보안내장된 오류 처리, 재시도 및 보안 기능
📊모니터링실시간으로 작업 진행 상황 및 성능 추적

💡 Julep에 대해 더 알아보려면 **문서**를 확인하세요.


🧠 개념 모델

Julep은 다음 구성 요소로 이루어져 있습니다:

  • Julep 플랫폼: 워크플로우를 실행하는 클라우드 서비스입니다. 워크플로우를 설명하는 언어, 해당 워크플로우를 실행하는 서버, 플랫폼과 상호작용하기 위한 SDK가 포함됩니다.
  • Julep SDK: 워크플로우를 구축하기 위한 라이브러리 세트입니다. 현재 Python과 JavaScript용 SDK가 있으며, 더 많은 언어가 추가될 예정입니다.
  • Julep CLI: 터미널에서 직접 Julep 플랫폼과 상호작용할 수 있는 명령줄 도구입니다.
  • Julep API: Julep 플랫폼과 상호작용할 수 있는 RESTful API입니다.

Julep을 고급 AI 에이전트를 구축하는 데 도움이 되는 클라이언트 측과 서버 측 구성 요소를 결합한 플랫폼으로 생각해 보세요. 다음과 같이 시각화할 수 있습니다:

  1. 애플리케이션 코드:

    • 애플리케이션에서 Julep SDK를 사용하여 에이전트, 작업 및 워크플로우를 정의할 수 있습니다.
    • SDK는 이러한 구성 요소를 설정하고 관리하기 쉬운 함수와 클래스를 제공합니다.
    • Julep CLI를 사용하여 터미널에서 직접 Julep 플랫폼과 상호작용할 수 있습니다.
  2. Julep 백엔드 서비스:

    • SDK는 네트워크를 통해 Julep 백엔드와 통신합니다.
    • CLI는 SDK를 통해 Julep 백엔드와 통신합니다.
    • 백엔드는 작업 실행, 세션 상태 유지, 문서 저장 및 워크플로우 오케스트레이션을 처리합니다.
  3. 도구 및 API 통합:

    • 워크플로우 내에서 외부 도구 및 서비스를 통합할 수 있습니다.
    • 백엔드는 이러한 통합을 용이하게 하므로 에이전트가 웹 검색을 수행하거나 데이터베이스에 액세스하거나 타사 API를 호출할 수 있습니다.


📦 설치

🛠️ Julep SDK

Julep을 시작하려면 npm 또는 pip을 사용하여 설치하세요:

Node.js

  npm install @julep/sdk

  # or

  bun add @julep/sdk

Python

  pip install julep

[!NOTE] 🔑 API 키는 여기에서 얻을 수 있습니다.

Julep에 대해 더 알고 싶다면 Discord로 문의하세요.

🛠️ Julep CLI

Julep CLI는 터미널에서 직접 Julep 플랫폼과 상호작용할 수 있는 명령줄 도구입니다. 코드를 작성할 필요 없이 AI 워크플로우, 작업 및 에이전트를 관리할 수 있는 편리한 방법을 제공합니다.

pip install julep-cli

자세한 내용은 **Julep CLI 문서**를 확인하세요.

[!NOTE] CLI는 현재 베타 버전이며 Python에서만 사용할 수 있습니다. Node.js 지원은 곧 제공될 예정입니다!


🚀 빠른 시작

다음과 같은 기능을 가진 연구 AI 에이전트를 상상해 보세요:

  1. 주제를 받아들임,
  2. 해당 주제에 대한 30개의 검색 쿼리 생성,
  3. 웹에서 병렬로 검색 수행,
  4. 결과 요약,
  5. 요약을 Discord로 전송.

[!NOTE] Julep에서는 이 모든 것이 80줄 미만의 코드로 단일 작업으로 실행되며 완전히 관리됩니다. 모든 단계는 Julep의 서버에서 실행되며 사용자는 아무것도 할 필요가 없습니다.

다음은 작업 정의의 완전한 예시입니다:

# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/schemas/create_task_request.json
name: Research Agent
description: A research assistant that can search the web and send the summary to Discord
########################################################
####################### INPUT ##########################
########################################################

# Define the input schema for the task
input_schema:
  type: object
  properties:
    topic:
      type: string
      description: The main topic to research
    num_questions:
      type: integer
      description: The number of search queries to generate

########################################################
####################### TOOLS ##########################
########################################################

# Define the tools that the agent can use
tools:
  - name: web_search
    type: integration
    integration:
      provider: brave
      setup:
        api_key: "<your-brave-api-key>"

  - name: discord_webhook
    type: api_call
    api_call:
      url: https://discord.com/api/webhooks/<your-webhook-id>/<your-webhook-token>
      method: POST
      headers:
        Content-Type: application/json

########################################################
####################### MAIN WORKFLOW #################
########################################################

# Special variables:
# - steps[index].input: for accessing the input to the step at that index
# - steps[index].output: for accessing the output of the step at that index
# - _: for accessing the output of the previous step

# Define the main workflow
main:
# Step 0: Generate search queries
- prompt:
    - role: system
      content: >-
        $ f"""
        You are a research assistant.
        Generate {{steps[0].input.num_questions|default(30, true)}} diverse search queries related to the topic:
        {steps[0].input.topic}

        Write one query per line.
        """
  unwrap: true

# Step 1: Evaluate the search queries using a simple python expression
- evaluate:
    search_queries: $ _.split(NEWLINE)

# Step 2: Run the web search in parallel for each query
- over: $ _.search_queries
  map:
    tool: web_search
    arguments:
      query: $ _
  parallelism: 5

# Step 3: Collect the results from the web search
- evaluate:
    search_results: $ _

# Step 4: Summarize the results
- prompt:
    - role: system
      content: >
        $ f"""
        You are a research summarizer. Create a comprehensive summary of the following research results on the topic {steps[0].input.topic}.
        The summary should be well-structured, informative, and highlight key findings and insights. Keep the summary concise and to the point.
        The length of the summary should be less than 150 words.
        Here are the search results:
        {_.search_results}
        """
  unwrap: true
  settings:
    model: gpt-4o-mini

# Step 5: Send the summary to Discord
- evaluate:
    discord_message: |-
      $ f'''
      **Research Summary for {steps[0].input.topic}**
      {_}
      '''

# Step 6: Send the summary to Discord
- tool: discord_webhook
  arguments:
    json_: 
      content: $ _.discord_message[:2000] # Discord has a 2000 character limit

다음은 Julep SDK를 사용하여 위 워크플로우를 실행하는 방법입니다:

Python (클릭하여 확장)
from julep import Client
import yaml
import time

# Initialize the client
client = Client(api_key=JULEP_API_KEY)

# Create the agent
agent = client.agents.create(
  name="Julep Browser Use Agent",
  description="A Julep agent that can use the computer tool to interact with the browser.",
)

# Load the task definition
with open('./research_agent.yaml', 'r') as file:
  task_definition = yaml.safe_load(file)

# Create the task
task = client.tasks.create(
  agent_id=agent.id,
  **task_definition
)

# Create the execution
execution = client.executions.create(
    task_id=task.id,
    input={
        "topic": "artificial intelligence",
        "num_questions": 30
    }
)

# Wait for the execution to complete
while (result := client.executions.get(execution.id)).status not in ['succeeded', 'failed']:
    print(result.status)
    time.sleep(1)

# Print the result
if result.status == "succeeded":
    print(result.output)
else:
    print(f"Error: {result.error}")


Node.js (클릭하여 확장)
import { Julep } from '@julep/sdk';
import yaml from 'yaml';
import fs from 'fs';

// Initialize the client
const client = new Julep({
  apiKey: 'your_julep_api_key'
});

// Create the agent
const agent = await client.agents.create({
  name: "Julep Browser Use Agent",
  description: "A Julep agent that can use the computer tool to interact with the browser.",
});

// Parse the task definition
const taskDefinition = yaml.parse(fs.readFileSync('./research_agent.yaml', 'utf8'));

// Create the task
const task = await client.tasks.create(
  agent.id,
  taskDefinition
);

// Create the execution
const execution = await client.executions.create(
  task.id,
  {
    input: { 
      "topic": "artificial intelligence",
      "num_questions": 30
    }
  }
);

// Wait for the execution to complete
let result;
while (true) {
  result = await client.executions.get(execution.id);
  if (result.status === 'succeeded' || result.status === 'failed') break;
  console.log(result.status);
  await new Promise(resolve => setTimeout(resolve, 1000));
}

// Print the result
if (result.status === 'succeeded') {
  console.log(result.output);
} else {
  console.error(`Error: ${result.error}`);
}

이 예시에서 Julep은 자동으로 병렬 실행을 관리하고, 실패한 단계를 재시도하며, API 요청을 재전송하고, 작업이 완료될 때까지 안정적으로 실행합니다.

이 작업은 30초 이내에 실행되며 다음과 같은 출력을 반환합니다:

AI에 대한 연구 요약 (클릭하여 확장)

AI에 대한 연구 요약

인공지능(AI) 연구 결과 요약

서론

인공지능(AI) 분야는 최근 몇 년 동안 기계가 환경을 인식하고, 데이터로부터 학습하며, 결정을 내릴 수 있는 방법과 기술의 개발로 상당한 발전을 이루었습니다. 이 요약의 주요 초점은 AI와 관련된 다양한 연구 결과에서 도출된 통찰력에 있습니다.

주요 결과

  1. AI의 정의와 범위:

    • AI는 학습, 추론, 문제 해결 등 인간과 유사한 지능이 필요한 작업을 수행할 수 있는 시스템을 만드는 컴퓨터 과학의 한 분야로 정의됩니다(Wikipedia).
    • 머신러닝, 자연어 처리, 로봇공학, 컴퓨터 비전 등 다양한 하위 분야를 포함합니다.
  2. 영향 및 응용 분야:

    • AI 기술은 자율 주행 차량과 의료 진단부터 고객 서비스 자동화 및 금융 예측에 이르기까지 다양한 분야에 통합되어 효율성과 생산성을 향상시키고 있습니다(OpenAI).
    • Google의 AI를 모든 사람에게 유익하게 만들겠다는 약속은 다양한 플랫폼에서 사용자 경험을 향상시켜 일상 생활을 크게 개선할 수 있는 잠재력을 강조합니다(Google AI).
  3. 윤리적 고려 사항:

    • AI의 윤리적 함의에 대한 논의가 계속되고 있으며, 개인정보 보호, 편향, 의사 결정 과정의 책임성에 대한 우려가 포함됩니다. AI 기술의 안전하고 책임 있는 사용을 보장하는 프레임워크의 필요성이 강조됩니다(OpenAI).
  4. 학습 메커니즘:

    • AI 시스템은 지도 학습, 비지도 학습, 강화 학습과 같은 다양한 학습 메커니즘을 사용합니다. 이러한 방법을 통해 AI는 과거 경험과 데이터로부터 학습하여 시간이 지남에 따라 성능을 향상시킬 수 있습니다(Wikipedia).
    • 지도 학습과 비지도 학습의 차이는 중요합니다. 지도 학습은 레이블이 지정된 데이터에 의존하는 반면, 비지도 학습은 미리 정의된 레이블 없이 패턴을 식별합니다(Unsupervised).
  5. 미래 방향:

    • 향후 AI 개발은 AI 시스템의 해석 가능성과 투명성을 향상시켜 정당한 결정과 행동을 제공할 수 있도록 하는 데 초점을 맞출 것으로 예상됩니다(OpenAI).
    • 또한 AI 시스템을 더 접근하기 쉽고 사용자 친화적으로 만들어 다양한 인구 통계 및 산업에서 더 널리 채택될 수 있도록 하는 노력이 있습니다(Google AI).

결론

AI는 여러 분야에서 변혁적인 힘을 나타내며 산업을 재구성하고 삶의 질을 향상시킬 것을 약속합니다. 그러나 그 능력이 확장됨에 따라 발생하는 윤리적 및 사회적 함의를 해결하는 것이 중요합니다. 기술자, 윤리학자 및 정책 입안자 간의 지속적인 연구와 협력은 AI의 미래를 탐색하는 데 필수적일 것입니다.

다음 단계?

[!TIP] 💡 문서의 튜토리얼 섹션에서 더 많은 튜토리얼을 확인하세요.

💡 초보자라면 빠른 시작 가이드부터 시작하는 것을 추천합니다.

💡 더 많은 아이디어를 원한다면 저장소의 아이디어 섹션을 확인하세요.

💡 요리책 스타일의 레시피를 원한다면 저장소의 Cookbook 섹션을 확인하세요.


🔍 참조

📚 SDK 참조

🛠️ API 참조

에이전트, 작업, 도구 및 Julep CLI에 대해 더 알아보려면 API 문서를 확인하세요: API 참조


💻 로컬 설정

1. 저장소 복제

선호하는 소스에서 저장소를 복제하세요:

git clone <repository_url>

2. 루트 디렉토리로 이동

프로젝트의 루트 디렉토리로 이동하세요:

cd <repository_root>

3. 환경 변수 설정

  • 루트 디렉토리에 .env 파일을 생성하세요.
  • 필요한 변수 목록은 .env.example 파일을 참조하세요.
  • .env 파일에 모든 필수 변수가 설정되어 있는지 확인하세요.

4. 백업용 Docker 볼륨 생성

grafana_data, memory_store_data, temporal-db-data, prometheus_data, seaweedfs_data라는 Docker 볼륨을 생성하세요:

docker volume create grafana_data
docker volume create memory_store_data
docker volume create temporal-db-data
docker volume create prometheus_data
docker volume create seaweedfs_data

5. Docker Compose로 프로젝트 실행

싱글 테넌트 또는 멀티 테넌트 모드 중 하나를 선택하여 프로젝트를 실행할 수 있습니다. 요구 사항에 따라 다음 명령 중 하나를 선택하세요:

  1. 싱글 테넌트 모드

싱글 테넌트 모드로 프로젝트를 실행하세요:

docker compose --env-file .env --profile temporal-ui --profile single-tenant --profile self-hosted-db --profile blob-store --profile temporal-ui-public up --build --force-recreate --watch

참고: 싱글 테넌트 모드에서는 API KEY 없이 SDK와 직접 상호작용할 수 있습니다.

  1. 멀티 테넌트 모드

멀티 테넌트 모드로 프로젝트를 실행하세요:

docker compose --env-file .env --profile temporal-ui --profile multi-tenant --profile embedding-cpu --profile self-hosted-db --profile blob-store --profile temporal-ui-public up --force-recreate --build --watch

참고: 멀티 테넌트 모드에서는 SDK와 상호작용하기 위해 로컬에서 JWT 토큰을 생성해야 합니다. 이 토큰은 API KEY 역할을 합니다.

JWT 토큰 생성 (멀티 테넌트 모드 전용)

JWT 토큰을 생성하려면 jwt-cli가 필요합니다. 다음 단계를 진행하기 전에 설치하세요.

.env 파일의 해당 키로 JWT_SHARED_KEY를 대체하여 다음 명령을 사용하세요:

jwt encode --secret JWT_SHARED_KEY --alg HS512 --exp=$(date -d '+10 days' +%s) --sub '00000000-0000-0000-0000-000000000000' '{}'

이 명령은 10일 동안 유효한 JWT 토큰을 생성합니다.

6. 상호작용

  • Temporal UI: .env 파일에 지정된 포트를 통해 Temporal UI에 액세스할 수 있습니다.
  • Julep SDK: Julep SDK는 Julep API와 상호작용할 수 있는 Python/Node.js 라이브러리입니다.
from julep import Client

client = Client(api_key="your_jwt_token")

참고: 멀티 테넌트 모드의 SDK는 SDK와 상호작용하기 위해 로컬에서 생성한 JWT 토큰(API KEY 역할)이 필요합니다. 또한 클라이언트를 초기화할 때 환경을 local_multi_tenant로 설정하고 API 키를 이전 단계에서 생성한 JWT 토큰으로 설정해야 합니다. 반면 싱글 테넌트 모드에서는 API KEY 없이 SDK와 직접 상호작용할 수 있으며 환경을 local로 설정하면 됩니다.

7. 문제 해결

  • 필요한 모든 Docker 이미지가 있는지 확인하세요.
  • .env 파일에 누락된 환경 변수가 있는지 확인하세요.
  • docker compose logs 명령을 사용하여 디버깅을 위한 상세 로그를 확인하세요.

👥 기여자

커뮤니티에 참여하세요! 🌟

Julep 프로젝트에 새로운 기여자를 환영합니다! 시작하기 쉽도록 몇 가지 "good first issues"를 만들었습니다.

기여 방법:

  1. 📖 CONTRIBUTING.md 파일에서 가이드라인 확인
  2. 🔍 good first issues 살펴보기
  3. 💬 Discord에 참여하여 도움을 받고 토론에 참여

크고 작은 모든 기여는 저희에게 소중합니다. 함께 멋진 것을 만들어 봅시다! 🚀

우리의 놀라운 기여자들:


📄 라이선스

Julep는 Apache License 2.0 하에 라이선스가 부여됩니다.

자세한 내용은 LICENSE 파일을 참조하세요.