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. モデルプロバイダー非依存 - あらゆるLLMプロバイダー(OpenAI、Anthropicなど)に接続可能

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との統合:

    • ワークフロー内で外部ツールやサービスを統合できます。
    • バックエンドはこれらの統合を容易にし、エージェントがWeb検索、データベースアクセス、サードパーティ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. それらのWeb検索を並列実行
  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] 💡 ドキュメントのチュートリアルセクションでさらに多くのチュートリアルをチェックしてください。

💡 初心者の方は、クイックスタートガイドから始めることをお勧めします。

💡 さらにアイデアが必要な場合は、リポジトリのアイデアセクションをチェックしてください。

💡 クックブックスタイルのレシピに興味がある場合は、リポジトリのクックブックセクションをチェックしてください。


🔍 リファレンス

📚 SDKリファレンス

🛠️ APIリファレンス

エージェント、タスク、ツール、Julep CLIに関する詳細は、APIドキュメントを参照してください: APIリファレンス


💻 ローカルセットアップ

1. リポジトリをクローン

希望するソースからリポジトリをクローン:

git clone <repository_url>

2. ルートディレクトリに移動

プロジェクトのルートディレクトリに移動:

cd <repository_root>

3. 環境変数を設定

  • ルートディレクトリに.envファイルを作成
  • 必要な変数のリストについては.env.exampleファイルを参照
  • .envファイルですべての必要な変数が設定されていることを確認

4. バックアップ用Dockerボリュームを作成

grafana_datamemory_store_datatemporal-db-dataprometheus_dataseaweedfs_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でプロジェクトを実行

シングルテナントまたはマルチテナントの2つのモードでプロジェクトを実行できます。要件に基づいて以下のいずれかのコマンドを選択:

  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キーなしで直接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と対話するためにAPIキーとして機能するJWTトークンをローカルで生成する必要があります。

JWTトークンの生成(マルチテナントモードのみ)

JWTトークンを生成するには、jwt-cliが必要です。次の手順に進む前にインストールしてください。

以下のコマンドを使用し、.envファイルの対応するキーでJWT_SHARED_KEYを置き換えてJWTトークンを生成:

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と対話するためにAPIキーとして機能するJWTトークンをローカルで生成する必要があります。さらに、クライアントを初期化する際に、環境をlocal_multi_tenantに設定し、APIキーを前のステップで生成したJWTトークンに設定する必要があります。一方、シングルテナントモードでは、APIキーなしで直接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 ファイルをご覧ください。