Skip to content

Latest commit

 

History

History
695 lines (549 loc) · 31.6 KB

README-JP.md

File metadata and controls

695 lines (549 loc) · 31.6 KB

English | 中文翻译 | 日本語

julep


ドキュメントを探索する · Discord · 𝕏 · LinkedIn

NPM Version   PyPI - Version   Docker Image Version   GitHub License


Tip

👨‍💻 devfest.aiイベントに参加されましたか?私たちのDiscordに参加して、以下の詳細をご確認ください。

🌟 コントリビューターとDevFest.AI参加者の皆様へ:

🌟 コントリビューター募集!

Julepプロジェクトに新しいコントリビューターを歓迎します!スタートに役立つ「初心者向けの問題」をいくつか作成しました。以下は、貢献する方法です:

  1. CONTRIBUTING.mdファイルを確認して、貢献のガイドラインを確認してください。
  2. 初心者向けの問題を閲覧して、興味のあるタスクを見つけてください。
  3. 質問がある場合や助けが必要な場合は、Discordチャンネルでお気軽にお問い合わせください。

あなたの貢献、大きいものでも小さいものでも、私たちにとっては貴重です。一緒に素晴らしいものを作りましょう!🚀

🎉 DevFest.AI 2024年10月

エキサイティングなニュース!2024年10月中、DevFest.AIに参加します!🗓️

  • このイベント中にJulepに貢献し、素晴らしいJulepのグッズや景品を獲得するチャンスを得ましょう!🎁
  • 世界中の開発者と一緒にAIリポジトリに貢献し、素晴らしいイベントに参加しましょう。
  • この素晴らしいイニシアチブを組織してくれたDevFest.AIに大きな感謝を!

[!TIP] 楽しみに参加する準備はできましたか?**ツイートして参加を開始**し、コーディングを始めましょう!🖥️

Julep DevFest.AI

📖 Table of Contents

紹介

Julepは、カスタマイズ可能なワークフローを持つ持続可能なAIエージェントを作成するためのオープンソースプラットフォームです。柔軟性と使いやすさに重点を置いて、AI駆動のアプリケーションを開発、管理、展開するためのツールを提供します。

Julepを使用すると、次のことができます:

  • 複数のインタラクションにわたってコンテキストと状態を保持するAIエージェントを迅速に開発する
  • AIエージェントに合わせた洗練されたワークフローを設計および実行する
  • さまざまなツールやAPIをAIワークフローにシームレスに統合する
  • 持続的なセッションとユーザーインタラクションを簡単に管理する

チャットボットの開発、タスクの自動化、または複雑なAIアシスタントの構築を行う場合でも、Julepはアイデアを迅速かつ効率的に現実に変えるために必要な柔軟性と機能を提供します。

ここに簡単なPythonの例があります:

from julep import Julep, AsyncJulep

# 🔑 Julepクライアントを初期化する
#     または、非同期操作のためにAsyncJulepを使用する
client = Julep(api_key="your_api_key")

##################
## 🤖 エージェント 🤖 ##
##################

# 研究エージェントを作成する
agent = client.agents.create(
    name="Research Agent",
    model="claude-3.5-sonnet",
    about="You are a research agent designed to handle research inquiries.",
)

# 🔍 エージェントにウェブ検索ツールを追加する
client.agents.tools.create(
    agent_id=agent.id,
    name="web_search",  # Pythonの有効な変数名である必要があります
    description="Use this tool to research inquiries.",
    integration={
        "provider": "brave",
        "method": "search",
        "setup": {
            "api_key": "your_brave_api_key",
        },
    },
)

#################
## 💬 チャット 💬 ##
#################

# エージェントとのインタラクティブなチャットセッションを開始する
session = client.sessions.create(
    agent_id=agent.id,
    context_overflow="adaptive",  # 🧠 必要に応じてJulepがコンテキストウィンドウを動的に計算します
)

# 🔄 チャットループ
while (user_input := input("You: ")) != "exit":
    response = client.sessions.chat(
        session_id=session.id,
        message=user_input,
    )

    print("Agent: ", response.choices[0].message.content)


#################
## 📋 タスク 📋 ##
#################

# エージェントのための定期的な研究タスクを作成する
task = client.tasks.create(
    agent_id=agent.id,
    name="Research Task",
    description="Research the given topic every 24 hours.",
    #
    # 🛠️ タスク固有のツール
    tools=[
        {
            "name": "send_email",
            "description": "Send an email to the user with the results.",
            "api_call": {
                "method": "post",
                "url": "https://api.sendgrid.com/v3/mail/send",
                "headers": {"Authorization": "Bearer YOUR_SENDGRID_API_KEY"},
            },
        }
    ],
    #
    # 🔢 タスクの主なステップ
    main=[
        #
        # ステップ1:トピックを調査する
        {
            # `_`(アンダースコア)変数は前のステップの出力を指します
            # ここでは、ユーザーからのトピック入力を指します
            "prompt": "Look up topic '{{_.topic}}' and summarize the results.",
            "tools": [{"ref": {"name": "web_search"}}],  # 🔍 エージェントのウェブ検索ツールを使用する
            "unwrap": True,
        },
        #
        # ステップ2:研究結果を含むメールを送信する
        {
            "tool": "send_email",
            "arguments": {
                "subject": "Research Results",
                "body": "'Here are the research results for today: ' + _.content",
                "to": "inputs[0].email",  # ユーザーの入力からメールを参照する
            },
        },
        #
        # ステップ3:繰り返す前に24時間待つ
        {"sleep": "24 * 60 * 60"},
    ],
)

# 🚀 定期的なタスクを開始する
client.executions.create(task_id=task.id, input={"topic": "Python"})

# 🔁 これにより、タスクは24時間ごとに実行され、
#    "Python"のトピックを調査し、
#    結果をユーザーのメールに送信します

特徴

Julepは、カスタマイズ可能なワークフローを持つ持続可能なAIエージェントの構築プロセスを簡素化します。主な特徴は次のとおりです:

  • 持続可能なAIエージェント:複数のインタラクションにわたってコンテキストを保持するAIエージェントを作成および管理します。
  • カスタマイズ可能なワークフロー:タスクを使用して複雑な多段階のAIワークフローを設計します。
  • ツール統合:さまざまなツールやAPIをAIワークフローにシームレスに統合します。
  • ドキュメント管理:エージェントのためのドキュメントを効率的に管理および検索します。
  • セッション管理:継続的なインタラクションのための持続的なセッションを処理します。
  • 柔軟な実行:ワークフローでの並行処理、条件ロジック、およびエラー処理をサポートします。

インストール

Julepを始めるには、npmまたはpipを使用してインストールします:

npm install @julep/sdk

または

pip install julep

Tip

APIキーをこちらから取得してください。

ベータ版の間、APIキーを取得するにはDiscordでお問い合わせください。

クイックスタートガイド

ステップ1:Julepをインポートする

まず、Julep SDKをプロジェクトにインポートします:

const Julep = require('@julep/sdk');

または

from julep import AsyncJulep

ステップ2:エージェントを初期化する

基本設定で新しいエージェントを作成します:

const julep = new Julep({ apiKey: 'your-api-key' });

const agent = await julep.agents.create({
  name: 'ResearchAssistant',
  model: 'gpt-4-turbo',
  about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.",
});

または

client = AsyncJulep(api_key="your_api_key")

agent = await client.agents.create(
    name="Storytelling Agent",
    model="gpt-4-turbo",
    about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.",
)

ステップ3:エージェントとチャットする

エージェントとのインタラクティブなチャットセッションを開始します:

const session = await julep.sessions.create({
  agentId: agent.id,
}); 

// エージェントにメッセージを送信する
const response = await julep.sessions.chat({
  sessionId: session.id,
  message: 'Hello, can you tell me a story?',
});

console.log(response);

または

session = await client.sessions.create(agent_id=agent.id)

# エージェントにメッセージを送信する
response = await client.sessions.chat(
    session_id=session.id,
    message="Hello, can you tell me a story?",
)

print(response)

ステップ4:多段階タスクを作成する

入力されたアイデアに基づいてストーリーを作成し、パネル化されたコミックストリップを生成する多段階タスクを定義しましょう:

# 🛠️ エージェントに画像生成ツール(DALL·E)を追加する
await client.agents.tools.create(
    agent_id=agent.id,
    name="image_generator",
    description="Use this tool to generate images based on descriptions.",
    integration={
        "provider": "dalle",
        "method": "generate_image",
        "setup": {
            "api_key": "your_dalle_api_key",
        },
    },
)

# 📋 タスク
# アイデアを受け取り、ストーリーと4コマ漫画を作成するタスクを作成する
task = await client.tasks.create(
    agent_id=agent.id,
    name="Story and Comic Creator",
    description="Create a story based on an idea and generate a 4-panel comic strip illustrating the story.",
    main=[
        # ステップ1:ストーリーを生成し、4つのパネルに要約する
        {
            "prompt": [
                {
                    "role": "system",
                    "content": "You are {{agent.name}}. {{agent.about}}"
                },
                {
                    "role": "user",
                    "content": (
                        "Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. "
                        "Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story."
                    ),
                },
            ],
            "unwrap": True,
        },
        # ステップ2:パネルの説明とストーリーを抽出する
        {
            "evaluate": {
                "story": "_.split('1. ')[0].strip()",
                "panels": "re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _)",
            }
        },
        # ステップ3:画像生成ツールを使用して各パネルの画像を生成する
        {
            "foreach": {
                "in": "_.panels",
                "do": {
                    "tool": "image_generator",
                    "arguments": {
                        "description": "_",
                    },
                },
            },
        },
        # ステップ4:ストーリーのキャッチーなタイトルを生成する
        {
            "prompt": [
                {
                    "role": "system",
                    "content": "You are {{agent.name}}. {{agent.about}}"
                },
                {
                    "role": "user",
                    "content": "Based on the story below, generate a catchy title.\n\nStory: {{outputs[1].story}}",
                },
            ],
            "unwrap": True,
        },
        # ステップ5:ストーリー、生成された画像、およびタイトルを返す
        {
            "return": {
                "title": "outputs[3]",
                "story": "outputs[1].story",
                "comic_panels": "[output.image.url for output in outputs[2]]",
            }
        },
    ],
)

Tip

これのnode.jsバージョンは似ています。

ステップ5:タスクを実行する

# 🚀 アイデアを入力してタスクを実行する
execution = await client.executions.create(
    task_id=task.id,
    input={"idea": "A cat who learns to fly"}
)

# 🎉 ストーリーとコミックパネルが生成される様子を見守る
await client.executions.stream(execution_id=execution.id)

この例は、カスタムツールを持つエージェントを作成し、複数のステップを持つ複雑なタスクを定義し、それを実行してクリエイティブな出力を生成する方法を示しています。

Tip

もう一つのnode.jsの例はこちらまたはpythonの例はこちらにあります。

概念

Julepは、強力なAIワークフローを作成するために連携するいくつかの主要な技術コンポーネントに基づいて構築されています:

エージェント

タスクを実行し、ユーザーと対話する大規模な言語モデル(LLM)に支えられたAIエンティティ。エージェントはJulepのコア機能ユニットです。

graph TD
    Agent[Agent] --> LLM[Large Language Model]
    Agent --> Tasks[Tasks]
    Agent --> Users[Users]
    Tasks --> Tools[Tools]
Loading

ユーザー

エージェントと対話するエンティティ。ユーザーはセッションに関連付けられ、独自のメタデータを持つことができ、個別の対話が可能になります。

graph LR
    User[User] --> Sessions[Sessions]
    Sessions --> Agents[Agents]
    Sessions --> Metadata[Metadata]
Loading

セッション

エージェントとユーザーの間の有状態の対話。セッションは複数の交換にわたってコンテキストを保持し、コンテキスト管理やオーバーフロー処理などの異なる動作に対して構成できます。

graph LR
    Sessions[Sessions] --> Agents[Agents]
    Sessions --> Users[Users]
    Sessions --> ContextManagement[Context Management]
    Sessions --> OverflowHandling[Overflow Handling]
Loading

タスク

エージェントが実行できる多段階のプログラムワークフロー。タスクは複雑な操作を定義し、プロンプト、ツール呼び出し、条件ロジックなどのさまざまなタイプのステップを含むことができます。

graph TD
    Tasks[Tasks] --> Steps[Workflow Steps]
    Steps --> Prompt[Prompt]
    Steps --> ToolCalls[Tool Calls]
    Steps --> ConditionalLogic[Conditional Logic]
Loading

ツール

エージェントの能力を拡張する統合。ツールはユーザー定義の関数、システムツール、またはサードパーティのAPI統合である可能性があります。これにより、エージェントはテキスト生成を超えたアクションを実行できます。

graph LR
    Tools[Tools] --> UserDefinedFunctions[User-Defined Functions]
    Tools --> SystemTools[System Tools]
    Tools --> ThirdPartyAPIs[Third-Party APIs]
Loading

ドキュメント

エージェントまたはユーザーに関連付けることができるテキストまたはデータオブジェクト。ドキュメントはベクトル化され、エージェントの対話中にセマンティック検索と取得を可能にするベクトルデータベースに保存されます。

graph LR
    Documents[Documents] --> VectorDatabase[Vector Database]
    Documents --> SemanticSearch[Semantic Search]
    Documents --> AgentsOrUsers[Agents or Users]
Loading

実行

特定の入力で開始されたタスクのインスタンス。実行には独自のライフサイクルと状態マシンがあり、長時間実行されるプロセスの監視、管理、および再開が可能です。

graph LR
    Executions[Executions] --> Tasks[Tasks]
    Executions --> Lifecycle[Lifecycle]
    Executions --> Monitoring[Monitoring]
    Executions --> Management[Management]
    Executions --> Resumption[Resumption]
Loading

これらの概念とその相互作用の詳細な説明については、概念ドキュメントを参照してください。

タスクの理解

タスクはJulepのワークフローシステムのコアです。これにより、エージェントが実行できる複雑な多段階のAIワークフローを定義できます。タスクコンポーネントの概要は次のとおりです:

  • 名前と説明:各タスクには、簡単に識別できるように一意の名前と説明があります。
  • 主要なステップ:タスクのコアであり、実行されるアクションのシーケンスを定義します。
  • ツール:タスク実行中にエージェントの能力を拡張するオプションの統合。

ワークフローステップの種類

Julepのタスクには、さまざまな種類のステップを含めることができます:

  1. プロンプト:AIモデルにメッセージを送信し、応答を受け取ります。

    {"prompt": "Analyze the following data: {{data}}"}
  2. ツール呼び出し:統合されたツールまたはAPIを実行します。

    {"tool": "web_search", "arguments": {"query": "Latest AI developments"}}
  3. 評価:計算を実行するか、データを操作します。

    {"evaluate": {"average_score": "sum(scores) / len(scores)"}}
  4. 条件ロジック:条件に基づいてステップを実行します。

    {"if": "score > 0.8", "then": [...], "else": [...]}
  5. ループ:データを反復処理するか、ステップを繰り返します。

    {"foreach": {"in": "data_list", "do": [...]}}
ステップ名 説明 入力
プロンプト AIモデルにメッセージを送信し、応答を受け取ります。 プロンプトテキストまたはテンプレート
ツール呼び出し 統合されたツールまたはAPIを実行します。 ツール名と引数
評価 計算を実行するか、データを操作します。 評価する式または変数
入力待ち 入力が受信されるまでワークフローを一時停止します。 必要なユーザーまたはシステム入力
ログ 指定された値またはメッセージを記録します。 記録するメッセージまたは値
埋め込み テキストを特定の形式またはシステムに埋め込みます。 埋め込むテキストまたはコンテンツ
検索 クエリに基づいてドキュメント検索を実行します。 検索クエリ
取得 キー値ストアから値を取得します。 キー識別子
設定 キー値ストアのキーに値を割り当てます。 割り当てるキーと値
並列 複数のステップを並行して実行します。 同時に実行するステップのリスト
反復 コレクションを反復処理し、各アイテムに対してステップを実行します。 反復するコレクションまたはリスト
マップリデュース コレクションをマップし、式に基づいて結果をリデュースします。 マップおよびリデュースするコレクションと式
条件分岐 条件に基づいてステップを実行します。 評価する条件
スイッチ 複数の条件に基づいてステップを実行します。スイッチケース文に似ています。 複数の条件と対応するステップ
生成 サブワークフローを実行し、その完了を待ちます。 サブワークフロー識別子と入力データ
エラー エラーメッセージを指定してエラーを処理します。 エラーメッセージまたは処理指示
スリープ 指定された期間ワークフローを一時停止します。 期間(秒、分など)
リターン ワークフローから値を返します。 返す値

各ステップタイプの詳細情報と高度な使用法については、タスクドキュメントを参照してください。

高度な機能

Julepは、AIワークフローを強化するための高度な機能を提供します:

エージェントにツールを追加する

外部ツールやAPIを統合してエージェントの能力を拡張します:

client.agents.tools.create(
    agent_id=agent.id,
    name="web_search",
    description="Search the web for information.",
    integration={
        "provider": "brave",
        "method": "search",
        "setup": {"api_key": "your_brave_api_key"},
    },
)

セッションとユーザーの管理

Julepは、持続的なインタラクションのための強力なセッション管理を提供します:

session = client.sessions.create(
    agent_id=agent.id,
    user_id=user.id,
    context_overflow="adaptive"
)

# 同じセッションで会話を続ける
response = client.sessions.chat(
    session_id=session.id,
    messages=[
      {
        "role": "user",
        "content": "Follow up on our previous conversation."
      }
    ]
)

ドキュメントの統合と検索

エージェントのためのドキュメントを簡単に管理および検索します:

# ドキュメントをアップロードする
document = client.agents.docs.create(
    title="AI advancements",
    content="AI is changing the world...",
    metadata={"category": "research_paper"}
)

# ドキュメントを検索する
results = client.agents.docs.search(
    text="AI advancements",
    metadata_filter={"category": "research_paper"}
)

高度な機能と詳細な使用法については、高度な機能ドキュメントを参照してください。

SDKリファレンス

APIリファレンス

エージェント、タスク、および実行について詳しく学ぶために、包括的なAPIドキュメントを探索してください:

例とチュートリアル

提供された例を基にして始めるのに役立つ例のプロジェクトとチュートリアルを見つけてください:

貢献

プロジェクトへの貢献を歓迎します!貢献方法と行動規範を学びましょう:

サポートとコミュニティ

コミュニティに参加して、助けを得たり、質問したり、アイデアを共有したりしましょう:

ライセンス

このプロジェクトはApache License 2.0の下でライセンスされています。

謝辞

貴重なリソースと貢献を提供してくれたすべての貢献者とオープンソースコミュニティに感謝します。