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] 💡 ドキュメントのチュートリアルセクションでさらに多くのチュートリアルをチェックしてください。
💡 初心者の方は、クイックスタートガイドから始めることをお勧めします。
💡 さらにアイデアが必要な場合は、リポジトリのアイデアセクションをチェックしてください。
💡 クックブックスタイルのレシピに興味がある場合は、リポジトリのクックブックセクションをチェックしてください。
エージェント、タスク、ツール、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
シングルテナントまたはマルチテナントの2つのモードでプロジェクトを実行できます。要件に基づいて以下のいずれかのコマンドを選択:
シングルテナントモードでプロジェクトを実行:
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と対話できます。
マルチテナントモードでプロジェクトを実行:
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トークンを生成します。
.env
ファイルで指定されたポートからTemporal UIにアクセス可能from julep import Client
client = Client(api_key="your_jwt_token")
注: マルチテナントモードのSDKでは、SDKと対話するためにAPIキーとして機能するJWTトークンをローカルで生成する必要があります。さらに、クライアントを初期化する際に、環境をlocal_multi_tenant
に設定し、APIキーを前のステップで生成したJWTトークンに設定する必要があります。一方、シングルテナントモードでは、APIキーなしで直接SDKと対話でき、環境をlocal
に設定します。
.env
ファイルで不足している環境変数をチェックdocker compose logs
コマンドを使用して詳細なログを表示Julepプロジェクトに新しいコントリビューターを迎えることを楽しみにしています!始めやすいように「good first issues」をいくつか作成しました。
大小を問わず、あなたの貢献は私たちにとって貴重です。一緒に素晴らしいものを作りましょう! 🚀
Julep は Apache License 2.0 のもとでライセンスされています。
詳細については LICENSE ファイルをご覧ください。