Open Responses API 출시를 발표하게 되어 기쁩니다! 이 새로운 API는 다음과 같은 기능을 제공합니다:
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을 고급 AI 에이전트를 구축하는 데 도움이 되는 클라이언트 측과 서버 측 구성 요소를 결합한 플랫폼으로 생각해 보세요. 다음과 같이 시각화할 수 있습니다:
애플리케이션 코드:
Julep 백엔드 서비스:
도구 및 API 통합:
Julep을 시작하려면 npm 또는 pip을 사용하여 설치하세요:
npm install @julep/sdk
# or
bun add @julep/sdk
pip install julep
[!NOTE] 🔑 API 키는 여기에서 얻을 수 있습니다.
Julep에 대해 더 알고 싶다면 Discord로 문의하세요.
Julep CLI는 터미널에서 직접 Julep 플랫폼과 상호작용할 수 있는 명령줄 도구입니다. 코드를 작성할 필요 없이 AI 워크플로우, 작업 및 에이전트를 관리할 수 있는 편리한 방법을 제공합니다.
pip install julep-cli
자세한 내용은 **Julep CLI 문서**를 확인하세요.
[!NOTE] CLI는 현재 베타 버전이며 Python에서만 사용할 수 있습니다. Node.js 지원은 곧 제공될 예정입니다!
다음과 같은 기능을 가진 연구 AI 에이전트를 상상해 보세요:
[!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를 사용하여 위 워크플로우를 실행하는 방법입니다:
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}")
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의 정의와 범위:
- AI는 학습, 추론, 문제 해결 등 인간과 유사한 지능이 필요한 작업을 수행할 수 있는 시스템을 만드는 컴퓨터 과학의 한 분야로 정의됩니다(Wikipedia).
- 머신러닝, 자연어 처리, 로봇공학, 컴퓨터 비전 등 다양한 하위 분야를 포함합니다.
영향 및 응용 분야:
- AI 기술은 자율 주행 차량과 의료 진단부터 고객 서비스 자동화 및 금융 예측에 이르기까지 다양한 분야에 통합되어 효율성과 생산성을 향상시키고 있습니다(OpenAI).
- Google의 AI를 모든 사람에게 유익하게 만들겠다는 약속은 다양한 플랫폼에서 사용자 경험을 향상시켜 일상 생활을 크게 개선할 수 있는 잠재력을 강조합니다(Google AI).
윤리적 고려 사항:
- AI의 윤리적 함의에 대한 논의가 계속되고 있으며, 개인정보 보호, 편향, 의사 결정 과정의 책임성에 대한 우려가 포함됩니다. AI 기술의 안전하고 책임 있는 사용을 보장하는 프레임워크의 필요성이 강조됩니다(OpenAI).
학습 메커니즘:
- AI 시스템은 지도 학습, 비지도 학습, 강화 학습과 같은 다양한 학습 메커니즘을 사용합니다. 이러한 방법을 통해 AI는 과거 경험과 데이터로부터 학습하여 시간이 지남에 따라 성능을 향상시킬 수 있습니다(Wikipedia).
- 지도 학습과 비지도 학습의 차이는 중요합니다. 지도 학습은 레이블이 지정된 데이터에 의존하는 반면, 비지도 학습은 미리 정의된 레이블 없이 패턴을 식별합니다(Unsupervised).
미래 방향:
- 향후 AI 개발은 AI 시스템의 해석 가능성과 투명성을 향상시켜 정당한 결정과 행동을 제공할 수 있도록 하는 데 초점을 맞출 것으로 예상됩니다(OpenAI).
- 또한 AI 시스템을 더 접근하기 쉽고 사용자 친화적으로 만들어 다양한 인구 통계 및 산업에서 더 널리 채택될 수 있도록 하는 노력이 있습니다(Google AI).
결론
AI는 여러 분야에서 변혁적인 힘을 나타내며 산업을 재구성하고 삶의 질을 향상시킬 것을 약속합니다. 그러나 그 능력이 확장됨에 따라 발생하는 윤리적 및 사회적 함의를 해결하는 것이 중요합니다. 기술자, 윤리학자 및 정책 입안자 간의 지속적인 연구와 협력은 AI의 미래를 탐색하는 데 필수적일 것입니다.
[!TIP] 💡 문서의 튜토리얼 섹션에서 더 많은 튜토리얼을 확인하세요.
💡 초보자라면 빠른 시작 가이드부터 시작하는 것을 추천합니다.
💡 더 많은 아이디어를 원한다면 저장소의 아이디어 섹션을 확인하세요.
💡 요리책 스타일의 레시피를 원한다면 저장소의 Cookbook 섹션을 확인하세요.
에이전트, 작업, 도구 및 Julep CLI에 대해 더 알아보려면 API 문서를 확인하세요: API 참조
선호하는 소스에서 저장소를 복제하세요:
git clone <repository_url>
프로젝트의 루트 디렉토리로 이동하세요:
cd <repository_root>
.env
파일을 생성하세요..env.example
파일을 참조하세요..env
파일에 모든 필수 변수가 설정되어 있는지 확인하세요.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
싱글 테넌트 또는 멀티 테넌트 모드 중 하나를 선택하여 프로젝트를 실행할 수 있습니다. 요구 사항에 따라 다음 명령 중 하나를 선택하세요:
싱글 테넌트 모드로 프로젝트를 실행하세요:
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와 직접 상호작용할 수 있습니다.
멀티 테넌트 모드로 프로젝트를 실행하세요:
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 토큰을 생성합니다.
.env
파일에 지정된 포트를 통해 Temporal UI에 액세스할 수 있습니다.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
로 설정하면 됩니다.
.env
파일에 누락된 환경 변수가 있는지 확인하세요.docker compose logs
명령을 사용하여 디버깅을 위한 상세 로그를 확인하세요.Julep 프로젝트에 새로운 기여자를 환영합니다! 시작하기 쉽도록 몇 가지 "good first issues"를 만들었습니다.
크고 작은 모든 기여는 저희에게 소중합니다. 함께 멋진 것을 만들어 봅시다! 🚀
Julep는 Apache License 2.0 하에 라이선스가 부여됩니다.
자세한 내용은 LICENSE 파일을 참조하세요.