From 2e5f20a1ebd4d05c1c9a11f8d30cfa292c5d223c Mon Sep 17 00:00:00 2001 From: Champion1583 Date: Thu, 10 Oct 2024 00:38:52 +0530 Subject: [PATCH 01/13] feat(script): python script for translating readme --- scripts/readme_translator.py | 72 ++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 scripts/readme_translator.py diff --git a/scripts/readme_translator.py b/scripts/readme_translator.py new file mode 100644 index 000000000..4b0a2125a --- /dev/null +++ b/scripts/readme_translator.py @@ -0,0 +1,72 @@ +from deep_translator import GoogleTranslator +from pathlib import Path +import re +from typing import List + +def create_translator(target: str) -> GoogleTranslator: + """ + Create a translator for a given target language. + """ + return GoogleTranslator(source="en", target=target) + +def translate_raw_html(translator: GoogleTranslator, html_content: str) -> str: + """ + Translate a given raw html content using the provided translator, preserving HTML tags and newlines. + """ + html_tags_pattern = r"(<[^>]+>)" + segments = re.split(html_tags_pattern, html_content) + + translated_segments = [] + for segment in segments: + if re.fullmatch(html_tags_pattern, segment): + translated_segments.append(segment) + else: + try: + if re.fullmatch(r'^[!"#$%&\'()*+,\-./:;<=>?@[\]^_`{|}~]+$', segment): + translated_segments.append(segment) + continue + translated = translator.translate(segment) + translated_segments.append(translated if translated else segment) + except Exception as e: + print(f"Error translating segment '{segment}': {e}") + translated_segments.append(segment) + return "".join(translated_segments) + +def translate_readme(source: str, target: str) -> str: + """ + Translate a README file from source to target language, preserving code blocks and newlines. + """ + file_content = Path(source).read_text(encoding='utf-8') + translator = create_translator(target) + code_block_pattern = r"(```[\s\S]*?```|\n)" + segments = re.split(code_block_pattern, file_content) + + translated_segments = [] + for segment in segments: + if re.fullmatch(code_block_pattern, segment) or segment == '\n': + translated_segments.append(segment) + else: + translated_segments.append(translate_raw_html(translator, segment)) + return ''.join(translated_segments) + +def save_translated_readme(translated_content: str, lang: str) -> None: + """ + Save the translated README content to a file. + """ + filename = f"README_{lang.split('-')[-1].upper()}.md" + with open(filename, "w", encoding='utf-8') as file: + file.write(translated_content) + +def main() -> None: + """ + Main function to translate README.md to multiple languages. + """ + source_file = "README.md" + destination_langs = ["zh-CN", "ja", "fr"] + + for lang in destination_langs: + translated_readme = translate_readme(source_file, lang) + save_translated_readme(translated_readme, lang) + +if __name__ == "__main__": + main() \ No newline at end of file From c2f4dff3431018fa4bf1d1aba8b9b5cac72dacba Mon Sep 17 00:00:00 2001 From: ItsAmziii <75982382+itsamziii@users.noreply.github.com> Date: Thu, 10 Oct 2024 00:40:16 +0530 Subject: [PATCH 02/13] feat(ci): readme translator GitHub action --- .github/workflows/translate-readme.yml | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .github/workflows/translate-readme.yml diff --git a/.github/workflows/translate-readme.yml b/.github/workflows/translate-readme.yml new file mode 100644 index 000000000..fd40e9215 --- /dev/null +++ b/.github/workflows/translate-readme.yml @@ -0,0 +1,37 @@ +name: Translate ReadME + +on: + push: + paths: + - "README.md" + +jobs: + readme-translator: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Setup Python v3.10.12 + uses: actions/setup-python@v5 + with: + python-version: '3.10.12' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install deep-translator + + - name: Run translator script + run: python scripts/readme_translator.py + + - name: Commit changes + run: | + git config --global user.name 'github-actions[bot]' + git config --global user.email 'github-actions[bot]@users.noreply.github.com' + git add README_*.md + git commit -m "chore(readme): translate README.md" + + - name: Push changes + uses: ad-m/github-push-action@v0.6.0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} From 5b932f6eb20a53fc14dc5d928a25aec987bfa816 Mon Sep 17 00:00:00 2001 From: Champion1583 Date: Thu, 10 Oct 2024 00:43:50 +0530 Subject: [PATCH 03/13] test --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d57877707..cfdb026d0 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ ***** > [!NOTE] -> 👨‍💻 Here for the devfest.ai event? Join our [Discord](https://discord.com/invite/JTSBGRZrzj) and check out the details below. +> 👨‍💻 Here for the devfest.ai event? Join our [Discord](https://discord.com/invite/JTSBGRZrzj) and check out the details below. Testing this
🌟 Contributors and DevFest.AI Participants (Click to expand) From 15fa044e256f9286af9d57721ef7cf78058892e8 Mon Sep 17 00:00:00 2001 From: Champion1583 Date: Thu, 10 Oct 2024 00:50:01 +0530 Subject: [PATCH 04/13] chore(ci): push changes to the same branch --- .github/workflows/translate-readme.yml | 7 ++++--- README.md | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/translate-readme.yml b/.github/workflows/translate-readme.yml index fd40e9215..b63e89584 100644 --- a/.github/workflows/translate-readme.yml +++ b/.github/workflows/translate-readme.yml @@ -14,8 +14,8 @@ jobs: - name: Setup Python v3.10.12 uses: actions/setup-python@v5 with: - python-version: '3.10.12' - + python-version: "3.10.12" + - name: Install dependencies run: | python -m pip install --upgrade pip @@ -30,8 +30,9 @@ jobs: git config --global user.email 'github-actions[bot]@users.noreply.github.com' git add README_*.md git commit -m "chore(readme): translate README.md" - + - name: Push changes uses: ad-m/github-push-action@v0.6.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} + branch: ${{ github.ref }} diff --git a/README.md b/README.md index cfdb026d0..d57877707 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ ***** > [!NOTE] -> 👨‍💻 Here for the devfest.ai event? Join our [Discord](https://discord.com/invite/JTSBGRZrzj) and check out the details below. Testing this +> 👨‍💻 Here for the devfest.ai event? Join our [Discord](https://discord.com/invite/JTSBGRZrzj) and check out the details below.
🌟 Contributors and DevFest.AI Participants (Click to expand) From 06a0a31df6a9ab9287df502a6002b8e14f78301f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 9 Oct 2024 19:31:03 +0000 Subject: [PATCH 05/13] chore(readme): translate README.md --- README_CN.md | 948 +++++++++++++++++++++++++++++++++++++++++++++++++++ README_FR.md | 948 +++++++++++++++++++++++++++++++++++++++++++++++++++ README_JA.md | 948 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2844 insertions(+) create mode 100644 README_CN.md create mode 100644 README_FR.md create mode 100644 README_JA.md diff --git a/README_CN.md b/README_CN.md new file mode 100644 index 000000000..717bcf0fa --- /dev/null +++ b/README_CN.md @@ -0,0 +1,948 @@ +English | [中文翻译](https://github.com/julep-ai/julep/blob/dev/README-CN.md) | [日本語翻訳](https://github.com/julep-ai/julep/blob/dev/README-JP.md) + +
+ julep +
+ +

+
+ 探索文档 + · + 不和谐 + · + 𝕏 + · + LinkedIn +

+ + +

+ NPM Version +   + PyPI - Version +   + Docker Image Version +   + GitHub License +

+ +***** + +> [!注意] +> 👨‍💻 来参加 devfest.ai 活动了吗?加入我们的 [Discord](https://discord.com/invite/JTSBGRZrzj) 并查看以下详细信息。 + +
+🌟 贡献者和 DevFest.AI 参与者(点击展开) + +## 🌟 招募贡献者! + +我们很高兴欢迎新贡献者加入 Julep 项目!我们创建了几个“好的第一个问题”来帮助您入门。以下是您可以做出贡献的方式: + +1. 查看我们的 [CONTRIBUTING.md](CONTRIBUTING.md) 文件以获取有关如何贡献的指南。 +2. 浏览我们的 [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 以找到您感兴趣的任务。 +3. 如果您有任何疑问或需要帮助,请随时通过我们的 [Discord](https://discord.com/invite/JTSBGRZrzj) 频道联系我们。 + +您的贡献,无论大小,对我们来说都是宝贵的。让我们一起创造一些了不起的东西!🚀 + +### 🎉 DevFest.AI 2024 年 10 月 + +令人兴奋的消息!我们将参加 2024 年 10 月的 DevFest.AI!🗓️ + +- 在本次活动期间为 Julep 做出贡献,就有机会赢得超棒的 Julep 商品和赃物!🎁 +- 与来自世界各地的开发人员一起为 AI 资源库做出贡献并参与精彩的活动。 +- 非常感谢 DevFest.AI 组织这次精彩的活动! + +> [!提示] +> 准备好加入这场有趣的活动了吗?**[发推文表示你正在参与](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)** 让我们开始编码吧!🖥️ + +> [!注意] +> 从[此处](https://dashboard-dev.julep.ai)获取您的 API 密钥。 +> +> 虽然我们处于测试阶段,但您也可以通过 [Discord](https://discord.com/invite/JTSBGRZrzj) 联系,以解除 API 密钥的速率限制。 + +![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) + +
+ + + +
+

📖 目录

+ +- [简介](#introduction) +- [快速示例](#quick-example) +- [主要特点](#key-features) +- [为什么选择 Julep 而不是 LangChain?](#why-julep-vs-langchain) +- [不同用例](#different-use-cases) +- [不同的外形尺寸](#different-form-factor) +- [总结](#in-summary) +- [安装](#安装) +- [Python 快速入门 🐍](#python-quick-start-) +- [步骤 1:创建代理](#step-1-create-an-agent) +- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [步骤 3:执行任务](#step-3-execute-the-task) +- [步骤 4:与代理聊天](#step-4-chat-with-the-agent) +- [Node.js 快速入门🟩](#nodejs-quick-start-) +- [步骤 1:创建代理](#step-1-create-an-agent-1) +- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [步骤 3:执行任务](#step-3-execute-the-task-1) +- [步骤 4:与代理聊天](#step-4-chat-with-the-agent-1) +- [组件](#components) +- [心智模型](#mental-model) +- [概念](#concepts) +- [理解任务](#understanding-tasks) +- [工作流步骤的类型](#types-of-workflow-steps) +- [高级功能](#advanced-features) +- [向代理添加工具](#adding-tools-to-agents) +- [管理会话和用户](#managing-sessions-and-users) +- [文档集成与搜索](#document-integration-and-search) +- [集成](#integrations) +- [勇敢搜索](#brave-search) +- [BrowserBase](#browserbase) +- [电子邮件](#email) +- [蜘蛛](#蜘蛛) +- [天气](#天气) +- [维基百科](#wikipedia) +- [SDK 参考](#sdk-reference) +- [API 参考](#api-reference) + +
+ + +## 介绍 + +Julep 是一个用于创建 AI 代理的平台,这些代理可以记住过去的互动并执行复杂的任务。它提供长期记忆并管理多步骤流程。 + +Julep 支持创建多步骤任务,包括决策、循环、并行处理以及与众多外部工具和 API 的集成。 + +虽然许多人工智能应用程序仅限于简单、线性的提示链和 API 调用,并且分支很少,但 Julep 可以处理更复杂的场景。 + +它支持: +- 复杂、多步骤的流程 +- 动态决策 +- 并行执行 + +> [!提示] +> 想象一下,您想要构建一个 AI 代理,它不仅可以回答简单的问题,还可以处理复杂的任务,记住过去的交互,甚至可能使用其他工具或 API。这就是 Julep 的作用所在。 + +快速示例 + +想象一下一个可以执行以下操作的研究 AI 代理: +1. 选择一个主题, +2. 针对该主题提出 100 个搜索查询, +3. 同时进行网页搜索, +4. 总结结果, +5. 将摘要发送至 Discord + +在 Julep 中,这将是一个单一的任务80行代码然后运行完全托管一切都是独立的。所有步骤都在 Julep 自己的服务器上执行,您无需动手。这是一个工作示例: + +```yaml +name: Research Agent + +# Optional: Define the input schema for the task +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to research + +# 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: "YOUR_DISCORD_WEBHOOK_URL" + method: POST + headers: + Content-Type: application/json + +# Special variables: +# - inputs: for accessing the input to the task +# - outputs: for accessing the output of previous steps +# - _: for accessing the output of the previous step + +# Define the main workflow +main: +- prompt: + - role: system + content: >- + You are a research assistant. + Generate 100 diverse search queries related to the topic: + {{inputs[0].topic}} + + Write one query per line. + unwrap: true + +# Evaluate the search queries using a simple python expression +- evaluate: + search_queries: "_.split('\n')" + +# Run the web search in parallel for each query +- over: "_.search_queries" + map: + tool: web_search + arguments: + query: "_" + parallelism: 100 + +# Collect the results from the web search +- evaluate: + results: "'\n'.join([item.result for item in _])" + +# Summarize the results +- prompt: + - role: system + content: > + You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. + The summary should be well-structured, informative, and highlight key findings and insights: + {{_.results}} + unwrap: true + +# Send the summary to Discord +- tool: discord_webhook + arguments: + content: > + **Research Summary for {{inputs[0].topic}}** + + {{_}} +``` + +> [!提示] +> 当您想要构建能够在长期交互​​中保持上下文和状态的 AI 代理时,Julep 非常有用。它非常适合设计复杂的多步骤工作流程,并将各种工具和 API 直接集成到代理的流程中。 +> +> 在此示例中,Julep 将自动管理并行执行,重试失败的步骤,重新发送 API 请求,并保持任务可靠运行直至完成。 + +## 主要特点 + +1. 🧠 **持久 AI 代理**:在长期交互​​中记住背景和信息。 +2. 💾 **状态会话**:跟踪过去的互动以获得个性化回应。 +3. 🔄 **多步骤任务**:通过循环和决策构建复杂的多步骤流程。 +4. ⏳ **任务管理**:处理可以无限期运行的长时间运行的任务。 +5.🛠️**内置工具**:在您的任务中使用内置工具和外部 API。 +6. 🔧 **自我修复**:Julep 将自动重试失败的步骤、重新发送消息,并确保您的任务顺利运行。 +7. 📚 **RAG**:使用 Julep 的文档存储构建一个用于检索和使用您自己的数据的系统。 + +Julep 非常适合需要超越简单的提示响应模型的 AI 用例的应用程序。 + +## 为什么选择 Julep 而不是 LangChain? + +### 不同的用例 + +可以将 LangChain 和 Julep 视为 AI 开发堆栈中具有不同重点的工具。 + +LangChain 非常适合创建提示序列和管理与 AI 模型的交互。它拥有庞大的生态系统,包含大量预构建的集成,如果您想快速启动和运行某些功能,这会非常方便。LangChain 非常适合涉及线性提示链和 API 调用的简单用例。 + +另一方面,Julep 更注重构建持久的 AI 代理,这些代理可以在长期交互​​中记住事物。当您需要涉及多个步骤、决策以及在代理流程中直接与各种工具或 API 集成的复杂任务时,它会大放异彩。它从头开始设计,以管理持久会话和复杂任务。 + +如果您想构建一个需要执行以下操作的复杂 AI 助手,请使用 Julep: + +- 跟踪几天或几周内的用户互动。 +- 执行计划任务,例如发送每日摘要或监控数据源。 +- 根据之前的互动或存储的数据做出决策。 +- 作为其任务的一部分,与多个外部服务进行交互。 + +然后 Julep 提供支持所有这些的基础设施,而无需您从头开始构建。 + +### 不同的外形尺寸 + +Julep 是一个**平台**,其中包括用于描述任务的语言、用于运行这些任务的服务器以及用于与平台交互的 SDK。要使用 Julep 构建某些东西,您需要在“YAML”中编写任务描述,然后在云中运行该任务。 + +Julep 专为繁重、多步骤和长时间运行的任务而设计,并且对任务的复杂程度没有限制。 + +LangChain 是一个**库**,其中包含一些工具和一个用于构建线性提示和工具链的框架。要使用 LangChain 构建某些东西,您通常需要编写 Python 代码来配置和运行要使用的模型链。 + +对于涉及线性提示和 API 调用链的简单用例,LangChain 可能足够并且能够更快地实现。 + +### 总之 + +当您需要在无状态或短期环境中管理 AI 模型交互和提示序列时,请使用 LangChain。 + +当您需要一个具有高级任务功能、持久会话和复杂任务管理的状态代理的强大框架时,请选择 Julep。 + +## 安装 + +要开始使用 Julep,请使用 [npm](https://www.npmjs.com/package/@julep/sdk) 或 [pip](https://pypi.org/project/julep/) 安装它: + +```bash +npm install @julep/sdk +``` + +或者 + +```bash +pip install julep +``` + +> [!注意] +> 从[此处](https://dashboard-dev.julep.ai)获取您的 API 密钥。 +> +> 虽然我们处于测试阶段,但您也可以通过 [Discord](https://discord.com/invite/JTSBGRZrzj) 联系,以解除 API 密钥的速率限制。 + +> [!提示] +> 💻 你是“向我展示代码!”的那种人吗?我们创建了大量的烹饪书供您入门。**查看 [烹饪书](https://github.com/julep-ai/julep/tree/dev/cookbooks)** 以浏览示例。 +> +> 💡 您还可以在 Julep 的基础上构建许多想法。**查看[想法列表](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** 以获取一些灵感。 + +## Python 快速入门🐍 + +### 步骤 1:创建代理 + +```python +import yaml +from julep import Julep # or AsyncJulep + +client = Julep(api_key="your_julep_api_key") + +agent = client.agents.create( + name="Storytelling Agent", + model="gpt-4o", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) + +# 🛠️ Add an image generation tool (DALL·E) to the agent +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_openai_api_key", + }, + }, +) +``` + +### 步骤 2:创建一个生成故事和漫画的任务 + +让我们定义一个多步骤任务来创建一个故事并根据输入的想法生成面板漫画: + +```python +# 📋 Task +# Create a task that takes an idea and creates a story and a 4-panel comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" + +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) +) +``` + +### 步骤 3:执行任务 + +```python +# 🚀 Execute the task with an input idea +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} +) + +# 🎉 Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) + +# 📦 Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) +``` + +### 步骤 4:与代理聊天 + +开始与代理进行交互式聊天会话: + +```python +session = client.sessions.create(agent_id=agent.id) + +# 💬 Send messages to the agent +while (message := input("Enter a message: ")) != "quit": + response = client.sessions.chat( + session_id=session.id, + message=message, + ) + + print(response) +``` + +> [!提示] +> 您可以在[这里](example.py)找到完整的 python 示例。 + + +## Node.js 快速入门 🟩 + +### 步骤 1:创建代理 + +```javascript +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; + +const client = new Julep({ apiKey: 'your_julep_api_key' }); + +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); + + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(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_openai_api_key", + }, + }, + }); + + return agent; +} +``` + +### 步骤 2:创建一个生成故事和漫画的任务 + +```javascript +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} +``` + +### 步骤 3:执行任务 + +```javascript +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); + + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } + + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} +``` + +### 步骤 4:与代理聊天 + +```javascript +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); +``` + +> [!提示] +> 您可以在[这里](example.js)找到完整的 Node.js 示例。 + +## 成分 + +Julep 由以下成分组成: + +- **Julep 平台**:Julep 平台是运行您的工作流程的云服务。它包括用于描述工作流程的语言、用于运行这些工作流程的服务器以及用于与平台交互的 SDK。 +- **Julep SDKs**:Julep SDKs 是一组用于构建工作流的库。目前有适用于 Python 和 JavaScript 的 SDKs,还有更多 SDKs 正在开发中。 +- **Julep API**:Julep API 是一个 RESTful API,您可以使用它与 Julep 平台进行交互。 + +### 心智模型 + +
+ +
+ +您可以将 Julep 视为一个结合了客户端和服务器端组件的平台,以帮助您构建高级 AI 代理。以下是它的可视化方法: + +1. **您的申请代码:** +- 您可以在应用程序中使用 Julep SDK 来定义代理、任务和工作流。 +- SDK 提供的函数和类使得设置和管理这些组件变得容易。 + +2. **Julep 后端服务:** +- SDK 通过网络与 Julep 后端通信。 +- 后端处理任务的执行,维护会话状态,存储文档并协调工作流程。 + +3. **与工具和 API 集成:** +- 在您的工作流程中,您可以集成外部工具和服务。 +- 后端促进这些集成,因此您的代理可以执行网络搜索、访问数据库或调用第三方 API。 + +简单来说: +- Julep 是一个用于构建有状态 AI 代理的平台。 +- 您在代码中使用 SDK(类似于工具包)来定义代理的功能。 +- 后端服务(您可以将其视为引擎)运行这些定义、管理状态并处理复杂性。 + +## 概念 + +Julep 基于几个关键技术组件构建,这些组件共同协作以创建强大的 AI 工作流程: + +```mermaid +graph TD + User[User] ==> Session[Session] + Session --> Agent[Agent] + Agent --> Tasks[Tasks] + Agent --> LLM[Large Language Model] + Tasks --> Tools[Tools] + Agent --> Documents[Documents] + Documents --> VectorDB[Vector Database] + Tasks --> Executions[Executions] + + classDef client fill:#9ff,stroke:#333,stroke-width:1px; + class User client; + + classDef core fill:#f9f,stroke:#333,stroke-width:2px; + class Agent,Tasks,Session core; +``` + +- **代理**:由大型语言模型(LLM)支持的人工智能实体,可执行任务并与用户交互。 +- **用户**:通过会话与代理交互的实体。 +- **会话**:代理和用户之间的状态交互,在多个交换之间维护上下文。 +- **任务**:代理可以执行的多步骤、程序化工作流,包括提示、工具调用和条件逻辑等各种类型的步骤。 +- **工具**:扩展代理功能的集成,包括用户定义的函数、系统工具或第三方 API 集成。 +- **文档**:与代理或用户相关的文本或数据对象,矢量化并存储以用于语义搜索和检索。 +- **执行**:通过特定输入启动的任务实例,具有自己的生命周期和状态机。 + +有关这些概念及其相互作用的更详细说明,请参阅我们的[概念文档](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)。 + +## 理解任务 + +任务是 Julep 工作流系统的核心。它们允许您定义代理可以执行的复杂、多步骤 AI 工作流。以下是任务组件的简要概述: + +- **名称和描述**:每个任务都有唯一的名称和描述,以便于识别。 +- **主要步骤**:任务的核心,定义要执行的操作顺序。 +- **工具**:可选集成,可在任务执行期间扩展代理的功能。 + +### 工作流步骤的类型 + +Julep 中的任务可以包含各种类型的步骤,让您可以创建复杂而强大的工作流程。以下是按类别组织的可用步骤类型的概述: + +#### 常见步骤 + +1. **提示**:向AI模型发送消息并收到回复。 + ```yaml + - prompt: "Analyze the following data: {{data}}" + ``` + +2. **工具调用**:执行集成的工具或API。 + ```yaml + - tool: web_search + arguments: + query: "Latest AI developments" + ``` + +3. **评估**:执行计算或处理数据。 + ```yaml + - evaluate: + average_score: "sum(scores) / len(scores)" + ``` + +4. **等待输入**:暂停工作流程,直到收到输入。 + ```yaml + - wait_for_input: + info: + message: "Please provide additional information." + ``` + +5. **日志**:记录指定的值或消息。 + ```yaml + - log: "Processing completed for item {{item_id}}" + ``` + +#### 键值步骤 + +6. **获取**:从键值存储中检索值。 + ```yaml + - get: "user_preference" + ``` + +7. **设置**:为键值存储中的键分配一个值。 + ```yaml + - set: + user_preference: "dark_mode" + ``` + +#### 迭代步骤 + +8. **Foreach**:遍历集合并对每个项目执行步骤。 + ```yaml + - foreach: + in: "data_list" + do: + - log: "Processing item {{_}}" + ``` + +9. **Map-Reduce**:对集合进行映射并减少结果。 + ```yaml + - map_reduce: + over: "numbers" + map: + - evaluate: + squared: "_ ** 2" + reduce: "sum(results)" + ``` + +10.**并行**:并行运行多个步骤。 + ```yaml + - parallel: + - tool: web_search + arguments: + query: "AI news" + - tool: weather_check + arguments: + location: "New York" + ``` + +#### 条件步骤 + +11. **If-Else**:条件执行步骤。 + ```yaml + - if: "score > 0.8" + then: + - log: "High score achieved" + else: + - log: "Score needs improvement" + ``` + +12.**Switch**:根据多种条件执行步骤。 + ```yaml + - switch: + - case: "category == 'A'" + then: + - log: "Category A processing" + - case: "category == 'B'" + then: + - log: "Category B processing" + - case: "_" # Default case + then: + - log: "Unknown category" + ``` + +#### 其他控制流 + +13. **睡眠**:暂停工作流一段指定的时间。 + ```yaml + - sleep: + seconds: 30 + ``` + +14. **返回**:从工作流返回一个值。 + ```yaml + - return: + result: "Task completed successfully" + ``` + +15. **收益**:运行子工作流并等待其完成。 + ```yaml + - yield: + workflow: "data_processing_subflow" + arguments: + input_data: "{{raw_data}}" + ``` + +16.**错误**:通过指定错误消息来处理错误。 + ```yaml + - error: "Invalid input provided" + ``` + +每种步骤类型在构建复杂的 AI 工作流中都有特定的用途。此分类有助于理解 Julep 任务中可用的各种控制流程和操作。 + +## 高级功能 + +Julep 提供一系列高级功能来增强您的 AI 工作流程: + +### 向代理添加工具 + +通过集成外部工具和 API 来扩展代理的功能: + +```python +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 为持久交互提供了强大的会话管理: + +```python +session = client.sessions.create( + agent_id=agent.id, + user_id=user.id, + context_overflow="adaptive" +) + +# Continue conversation in the same session +response = client.sessions.chat( + session_id=session.id, + messages=[ + { + "role": "user", + "content": "Follow up on the previous conversation." + } + ] +) +``` + +### 文档集成与搜索 + +轻松管理和搜索代理的文档: + +```python +# Upload a document +document = client.agents.docs.create( + title="AI advancements", + content="AI is changing the world...", + metadata={"category": "research_paper"} +) + +# Search documents +results = client.agents.docs.search( + text="AI advancements", + metadata_filter={"category": "research_paper"} +) +``` + +有关更多高级功能和详细用法,请参阅我们的[高级功能文档](https://docs.julep.ai/advanced-features)。 + +## 集成 + +Julep 支持各种集成,可以扩展您的 AI 代理的功能。以下是可用集成及其支持的参数的列表: + +### 勇敢搜索 + +```yaml +setup: + api_key: string # The API key for Brave Search + +arguments: + query: string # The search query for searching with Brave + +output: + result: string # The result of the Brave Search +``` + +### 浏览器基础 + +```yaml +setup: + api_key: string # The API key for BrowserBase + project_id: string # The project ID for BrowserBase + session_id: string # (Optional) The session ID for BrowserBase + +arguments: + urls: list[string] # The URLs for loading with BrowserBase + +output: + documents: list # The documents loaded from the URLs +``` + +### 电子邮件 + +```yaml +setup: + host: string # The host of the email server + port: integer # The port of the email server + user: string # The username of the email server + password: string # The password of the email server + +arguments: + to: string # The email address to send the email to + from: string # The email address to send the email from + subject: string # The subject of the email + body: string # The body of the email + +output: + success: boolean # Whether the email was sent successfully +``` + +### 蜘蛛 + +```yaml +setup: + spider_api_key: string # The API key for Spider + +arguments: + url: string # The URL for which to fetch data + mode: string # The type of crawlers (default: "scrape") + params: dict # (Optional) The parameters for the Spider API + +output: + documents: list # The documents returned from the spider +``` + +### 天气 + +```yaml +setup: + openweathermap_api_key: string # The API key for OpenWeatherMap + +arguments: + location: string # The location for which to fetch weather data + +output: + result: string # The weather data for the specified location +``` + +维基百科 + +```yaml +arguments: + query: string # The search query string + load_max_docs: integer # Maximum number of documents to load (default: 2) + +output: + documents: list # The documents returned from the Wikipedia search +``` + +这些集成可用于您的任务中,以扩展您的 AI 代理的功能。有关如何在您的工作流程中使用这些集成的详细信息,请参阅我们的 [集成文档](https://docs.julep.ai/integrations)。 + +## SDK 参考 + +- [Node.js SDK](https://github.com/julep-ai/node-sdk/blob/main/api.md) +- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/api.md) + +API 参考 + +浏览我们全面的 API 文档,以了解有关代理、任务和执行的更多信息: + +- [代理 API](https://api.julep.ai/api/docs#tag/agents) +- [任务 API](https://api.julep.ai/api/docs#tag/tasks) +- [执行 API](https://api.julep.ai/api/docs#tag/executions) diff --git a/README_FR.md b/README_FR.md new file mode 100644 index 000000000..5e42f6e85 --- /dev/null +++ b/README_FR.md @@ -0,0 +1,948 @@ +English | [中文翻译](https://github.com/julep-ai/julep/blob/dev/README-CN.md) | [日本語翻訳](https://github.com/julep-ai/julep/blob/dev/README-JP.md) + +
+ julep +
+ +

+
+ Explorer les documents + · + Discorde + · + 𝕏 + · + LinkedIn +

+ + +

+ NPM Version +   + PyPI - Version +   + Docker Image Version +   + GitHub License +

+ +***** + +> [!REMARQUE] +> 👨‍💻 Vous êtes ici pour l'événement devfest.ai ? Rejoignez notre [Discord](https://discord.com/invite/JTSBGRZrzj) et consultez les détails ci-dessous. + +
+🌟 Contributeurs et participants au DevFest.AI(Cliquez pour agrandir) + +## 🌟 Appel aux contributeurs ! + +Nous sommes ravis d'accueillir de nouveaux contributeurs au projet Julep ! Nous avons créé plusieurs « bons premiers numéros » pour vous aider à démarrer. Voici comment vous pouvez contribuer : + +1. Consultez notre fichier [CONTRIBUTING.md](CONTRIBUTING.md) pour obtenir des instructions sur la manière de contribuer. +2. Parcourez nos [bons premiers numéros](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) pour trouver une tâche qui vous intéresse. +3. Si vous avez des questions ou avez besoin d'aide, n'hésitez pas à nous contacter sur notre chaîne [Discord](https://discord.com/invite/JTSBGRZrzj). + +Vos contributions, grandes ou petites, nous sont précieuses. Construisons ensemble quelque chose d'extraordinaire ! 🚀 + +### 🎉 DevFest.AI octobre 2024 + +Des nouvelles passionnantes ! Nous participons au DevFest.AI tout au long du mois d'octobre 2024 ! 🗓️ + +- Contribuez à Julep pendant cet événement et obtenez une chance de gagner de superbes produits et cadeaux Julep ! 🎁 +- Rejoignez des développeurs du monde entier pour contribuer aux référentiels d'IA et participer à des événements incroyables. +- Un grand merci à DevFest.AI pour l'organisation de cette fantastique initiative ! + +> [!TIP] +> Prêt à vous joindre à la fête ? **[Tweetez que vous participez](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)** et commençons à coder ! 🖥️ + +> [!REMARQUE] +> Obtenez votre clé API [ici](https://dashboard-dev.julep.ai). +> +> Pendant que nous sommes en version bêta, vous pouvez également nous contacter sur [Discord](https://discord.com/invite/JTSBGRZrzj) pour obtenir la levée des limites de débit sur votre clé API. + +![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) + +
+ + + +
+

📖 Table des matières

+ +- [Présentation](#introduction) +- [Exemple rapide](#quick-example) +- [Caractéristiques principales](#key-features) +- [Pourquoi Julep vs. LangChain ?](#pourquoi-julep-vs-langchain) +- [Différents cas d'utilisation](#different-use-cases) +- [Facteur de forme différent](#different-form-factor) +- [En résumé](#en-resumé) +- [Installation](#installation) +- [Démarrage rapide de Python 🐍](#python-quick-start-) +- [Étape 1 : Créer un agent](#step-1-create-an-agent) +- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task) +- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent) +- [Démarrage rapide de Node.js 🟩](#nodejs-quick-start-) +- [Étape 1 : Créer un agent](#step-1-create-an-agent-1) +- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task-1) +- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent-1) +- [Composants](#composants) +- [Modèle mental](#mental-model) +- [Concepts](#concepts) +- [Comprendre les tâches](#understanding-tasks) +- [Types d'étapes de flux de travail](#types-of-workflow-steps) +- [Fonctionnalités avancées](#advanced-features) +- [Ajout d'outils aux agents](#adding-tools-to-agents) +- [Gestion des sessions et des utilisateurs](#managing-sessions-and-users) +- [Intégration et recherche de documents](#document-integration-and-search) +- [Intégrations](#intégrations) +- [Recherche courageuse](#brave-search) +- [Base du navigateur](#basedunavigateur) +- [Courriel](#courriel) +- [Araignée](#araignée) +- [Météo](#météo) +- [Wikipédia](#wikipédia) +- [Référence SDK](#sdk-reference) +- [Référence API](#api-reference) + +
+ + +## Introduction + +Julep est une plateforme permettant de créer des agents IA qui se souviennent des interactions passées et peuvent effectuer des tâches complexes. Elle offre une mémoire à long terme et gère des processus en plusieurs étapes. + +Julep permet la création de tâches en plusieurs étapes intégrant la prise de décision, les boucles, le traitement parallèle et l'intégration avec de nombreux outils et API externes. + +Alors que de nombreuses applications d’IA se limitent à des chaînes simples et linéaires d’invites et d’appels d’API avec une ramification minimale, Julep est conçu pour gérer des scénarios plus complexes. + +Il prend en charge : +- Processus complexes en plusieurs étapes +- Prise de décision dynamique +- Exécution parallèle + +> [!TIP] +> Imaginez que vous souhaitiez créer un agent d'IA capable de faire plus que simplement répondre à des questions simples : il doit gérer des tâches complexes, se souvenir des interactions passées et peut-être même utiliser d'autres outils ou API. C'est là qu'intervient Julep. + +## Exemple rapide + +Imaginez un agent d’IA de recherche capable d’effectuer les opérations suivantes : +1. Prenez un sujet, +2. Proposez 100 requêtes de recherche pour ce sujet, +3. Effectuez ces recherches sur le Web en parallèle, +4. Résumez les résultats, +5. Envoyez le résumé sur Discord + +Dans Julep, ce serait une tâche unique sous80 lignes de codeet courirentièrement gérétout seul. Toutes les étapes sont exécutées sur les propres serveurs de Julep et vous n'avez pas besoin de lever le petit doigt. Voici un exemple fonctionnel : + +```yaml +name: Research Agent + +# Optional: Define the input schema for the task +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to research + +# 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: "YOUR_DISCORD_WEBHOOK_URL" + method: POST + headers: + Content-Type: application/json + +# Special variables: +# - inputs: for accessing the input to the task +# - outputs: for accessing the output of previous steps +# - _: for accessing the output of the previous step + +# Define the main workflow +main: +- prompt: + - role: system + content: >- + You are a research assistant. + Generate 100 diverse search queries related to the topic: + {{inputs[0].topic}} + + Write one query per line. + unwrap: true + +# Evaluate the search queries using a simple python expression +- evaluate: + search_queries: "_.split('\n')" + +# Run the web search in parallel for each query +- over: "_.search_queries" + map: + tool: web_search + arguments: + query: "_" + parallelism: 100 + +# Collect the results from the web search +- evaluate: + results: "'\n'.join([item.result for item in _])" + +# Summarize the results +- prompt: + - role: system + content: > + You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. + The summary should be well-structured, informative, and highlight key findings and insights: + {{_.results}} + unwrap: true + +# Send the summary to Discord +- tool: discord_webhook + arguments: + content: > + **Research Summary for {{inputs[0].topic}}** + + {{_}} +``` + +> [!TIP] +> Julep est vraiment utile lorsque vous souhaitez créer des agents IA capables de conserver le contexte et l'état lors d'interactions à long terme. Il est idéal pour concevoir des flux de travail complexes en plusieurs étapes et pour intégrer divers outils et API directement dans les processus de votre agent. +> +> Dans cet exemple, Julep gérera automatiquement les exécutions parallèles, réessayera les étapes ayant échoué, renverra les requêtes API et maintiendra les tâches en cours d'exécution de manière fiable jusqu'à leur achèvement. + +## Principales caractéristiques + +1. 🧠 **Agents IA persistants** : mémorisent le contexte et les informations au cours d'interactions à long terme. +2. 💾 **Sessions avec état** : gardez une trace des interactions passées pour des réponses personnalisées. +3. 🔄 **Tâches en plusieurs étapes** : créez des processus complexes en plusieurs étapes avec des boucles et une prise de décision. +4. ⏳ **Gestion des tâches** : gérez les tâches de longue durée qui peuvent s'exécuter indéfiniment. +5. 🛠️ **Outils intégrés** : utilisez des outils intégrés et des API externes dans vos tâches. +6. 🔧 **Auto-réparation** : Julep réessaiera automatiquement les étapes ayant échoué, renverra les messages et assurera généralement le bon déroulement de vos tâches. +7. 📚 **RAG** ​​: Utilisez le magasin de documents de Julep pour créer un système permettant de récupérer et d'utiliser vos propres données. + +Julep est idéal pour les applications qui nécessitent des cas d’utilisation de l’IA au-delà des simples modèles de réponse rapide. + +## Pourquoi Julep vs. LangChain ? + +### Différents cas d'utilisation + +Considérez LangChain et Julep comme des outils avec des objectifs différents au sein de la pile de développement de l’IA. + +LangChain est idéal pour créer des séquences d'invites et gérer les interactions avec les modèles d'IA. Il dispose d'un vaste écosystème avec de nombreuses intégrations prédéfinies, ce qui le rend pratique si vous souhaitez mettre en place quelque chose rapidement. LangChain s'adapte bien aux cas d'utilisation simples qui impliquent une chaîne linéaire d'invites et d'appels d'API. + +Julep, en revanche, s'intéresse davantage à la création d'agents d'IA persistants capables de mémoriser des éléments au cours d'interactions à long terme. Il est particulièrement efficace lorsque vous avez besoin de tâches complexes impliquant plusieurs étapes, une prise de décision et une intégration avec divers outils ou API directement dans le processus de l'agent. Il est conçu dès le départ pour gérer les sessions persistantes et les tâches complexes. + +Utilisez Julep si vous imaginez créer un assistant IA complexe qui doit : + +- Suivez les interactions des utilisateurs sur plusieurs jours ou semaines. +- Exécutez des tâches planifiées, comme l'envoi de résumés quotidiens ou la surveillance de sources de données. +- Prendre des décisions basées sur des interactions antérieures ou des données stockées. +- Interagir avec plusieurs services externes dans le cadre de sa mission. + +Ensuite, Julep fournit l’infrastructure pour prendre en charge tout cela sans que vous ayez à le construire à partir de zéro. + +### Facteur de forme différent + +Julep est une **plateforme** qui comprend un langage pour décrire les tâches, un serveur pour exécuter ces tâches et un SDK pour interagir avec la plateforme. Pour créer quelque chose avec Julep, vous écrivez une description de la tâche en YAML, puis vous exécutez la tâche dans le cloud. + +Julep est conçu pour les tâches lourdes, en plusieurs étapes et de longue durée, et il n'y a aucune limite à la complexité de la tâche. + +LangChain est une **bibliothèque** qui inclut quelques outils et un framework pour créer des chaînes linéaires d'invites et d'outils. Pour créer quelque chose avec LangChain, vous écrivez généralement du code Python qui configure et exécute les chaînes de modèles que vous souhaitez utiliser. + +LangChain pourrait être suffisant et plus rapide à mettre en œuvre pour les cas d'utilisation simples impliquant une chaîne linéaire d'invites et d'appels d'API. + +### En résumé + +Utilisez LangChain lorsque vous devez gérer les interactions des modèles d’IA et les séquences d’invite dans un contexte sans état ou à court terme. + +Choisissez Julep lorsque vous avez besoin d'un framework robuste pour les agents avec état avec des capacités de tâches avancées, des sessions persistantes et une gestion de tâches complexes. + +## Installation + +Pour commencer à utiliser Julep, installez-le en utilisant [npm](https://www.npmjs.com/package/@julep/sdk) ou [pip](https://pypi.org/project/julep/) : + +```bash +npm install @julep/sdk +``` + +ou + +```bash +pip install julep +``` + +> [!REMARQUE] +> Obtenez votre clé API [ici](https://dashboard-dev.julep.ai). +> +> Pendant que nous sommes en version bêta, vous pouvez également nous contacter sur [Discord](https://discord.com/invite/JTSBGRZrzj) pour obtenir la levée des limites de débit sur votre clé API. + +> [!TIP] +> 💻 Êtes-vous du genre à vouloir _montrer le code !™_ ? Nous avons créé une multitude de livres de recettes pour vous aider à démarrer. **Consultez les [livres de recettes](https://github.com/julep-ai/julep/tree/dev/cookbooks)** pour parcourir les exemples. +> +> 💡 Il existe également de nombreuses idées que vous pouvez développer en plus de Julep. **Consultez la [liste d'idées](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** pour vous inspirer. + +## Démarrage rapide de Python 🐍 + +### Étape 1 : Créer un agent + +```python +import yaml +from julep import Julep # or AsyncJulep + +client = Julep(api_key="your_julep_api_key") + +agent = client.agents.create( + name="Storytelling Agent", + model="gpt-4o", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) + +# 🛠️ Add an image generation tool (DALL·E) to the agent +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_openai_api_key", + }, + }, +) +``` + +### Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée + +Définissons une tâche en plusieurs étapes pour créer une histoire et générer une bande dessinée à panneaux basée sur une idée d'entrée : + +```python +# 📋 Task +# Create a task that takes an idea and creates a story and a 4-panel comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" + +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) +) +``` + +### Étape 3 : Exécuter la tâche + +```python +# 🚀 Execute the task with an input idea +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} +) + +# 🎉 Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) + +# 📦 Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) +``` + +### Étape 4 : Discuter avec l'agent + +Démarrez une session de chat interactive avec l'agent : + +```python +session = client.sessions.create(agent_id=agent.id) + +# 💬 Send messages to the agent +while (message := input("Enter a message: ")) != "quit": + response = client.sessions.chat( + session_id=session.id, + message=message, + ) + + print(response) +``` + +> [!TIP] +> Vous pouvez trouver l'exemple Python complet [ici](example.py). + + +## Démarrage rapide de Node.js 🟩 + +### Étape 1 : Créer un agent + +```javascript +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; + +const client = new Julep({ apiKey: 'your_julep_api_key' }); + +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); + + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(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_openai_api_key", + }, + }, + }); + + return agent; +} +``` + +### Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée + +```javascript +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} +``` + +### Étape 3 : Exécuter la tâche + +```javascript +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); + + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } + + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} +``` + +### Étape 4 : Discuter avec l'agent + +```javascript +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); +``` + +> [!TIP] +> Vous pouvez trouver l'exemple complet de Node.js [ici](example.js). + +## Composants + +Julep est composé des éléments suivants : + +- **Plateforme Julep** : la plateforme Julep est un service cloud qui exécute vos workflows. Elle comprend un langage pour décrire les workflows, un serveur pour exécuter ces workflows et un SDK pour interagir avec la plateforme. +- **SDK Julep** : les SDK Julep sont un ensemble de bibliothèques permettant de créer des workflows. Il existe des SDK pour Python et JavaScript, et d'autres sont en cours de développement. +- **API Julep** : L'API Julep est une API RESTful que vous pouvez utiliser pour interagir avec la plateforme Julep. + +### Modèle mental + +
+ +
+ +Considérez Julep comme une plateforme qui combine des composants côté client et côté serveur pour vous aider à créer des agents d'IA avancés. Voici comment le visualiser : + +1. **Votre code d'application :** +- Vous utilisez le SDK Julep dans votre application pour définir des agents, des tâches et des workflows. +- Le SDK fournit des fonctions et des classes qui facilitent la configuration et la gestion de ces composants. + +2. **Service back-end Julep :** +- Le SDK communique avec le backend Julep via le réseau. +- Le backend gère l'exécution des tâches, maintient l'état de la session, stocke les documents et orchestre les flux de travail. + +3. **Intégration avec les outils et les API :** +- Au sein de vos workflows, vous pouvez intégrer des outils et services externes. +- Le backend facilite ces intégrations, afin que vos agents puissent, par exemple, effectuer des recherches sur le Web, accéder à des bases de données ou appeler des API tierces. + +En termes plus simples : +- Julep est une plateforme permettant de créer des agents d'IA avec état. +- Vous utilisez le SDK (comme une boîte à outils) dans votre code pour définir ce que font vos agents. +- Le service backend (que vous pouvez considérer comme le moteur) exécute ces définitions, gère l'état et gère la complexité. + +## Concepts + +Julep s'appuie sur plusieurs composants techniques clés qui fonctionnent ensemble pour créer de puissants flux de travail d'IA : + +```mermaid +graph TD + User[User] ==> Session[Session] + Session --> Agent[Agent] + Agent --> Tasks[Tasks] + Agent --> LLM[Large Language Model] + Tasks --> Tools[Tools] + Agent --> Documents[Documents] + Documents --> VectorDB[Vector Database] + Tasks --> Executions[Executions] + + classDef client fill:#9ff,stroke:#333,stroke-width:1px; + class User client; + + classDef core fill:#f9f,stroke:#333,stroke-width:2px; + class Agent,Tasks,Session core; +``` + +- **Agents** : entités alimentées par l'IA et soutenues par de grands modèles linguistiques (LLM) qui exécutent des tâches et interagissent avec les utilisateurs. +- **Utilisateurs** : entités qui interagissent avec les agents via des sessions. +- **Sessions** : interactions avec état entre agents et utilisateurs, maintenant le contexte sur plusieurs échanges. +- **Tâches** : flux de travail programmatiques en plusieurs étapes que les agents peuvent exécuter, y compris différents types d'étapes telles que des invites, des appels d'outils et une logique conditionnelle. +- **Outils** : intégrations qui étendent les capacités d'un agent, y compris les fonctions définies par l'utilisateur, les outils système ou les intégrations d'API tierces. +- **Documents** : Objets textes ou données associés à des agents ou utilisateurs, vectorisés et stockés pour la recherche et la récupération sémantiques. +- **Exécutions** : instances de tâches qui ont été initiées avec des entrées spécifiques, avec leur propre cycle de vie et leur propre machine d'état. + +Pour une explication plus détaillée de ces concepts et de leurs interactions, veuillez vous référer à notre [Documentation sur les concepts](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md). + +## Comprendre les tâches + +Les tâches sont au cœur du système de workflow de Julep. Elles vous permettent de définir des workflows IA complexes en plusieurs étapes que vos agents peuvent exécuter. Voici un bref aperçu des composants des tâches : + +- **Nom et description** : Chaque tâche a un nom et une description uniques pour une identification facile. +- **Étapes principales** : Le cœur d’une tâche, définissant la séquence d’actions à effectuer. +- **Outils** : intégrations facultatives qui étendent les capacités de votre agent pendant l'exécution des tâches. + +### Types d'étapes de flux de travail + +Les tâches dans Julep peuvent inclure différents types d'étapes, ce qui vous permet de créer des flux de travail complexes et puissants. Voici un aperçu des types d'étapes disponibles, organisés par catégorie : + +#### Étapes courantes + +1. **Invite** : envoyez un message au modèle d’IA et recevez une réponse. + ```yaml + - prompt: "Analyze the following data: {{data}}" + ``` + +2. **Appel d'outil** : Exécutez un outil ou une API intégrée. + ```yaml + - tool: web_search + arguments: + query: "Latest AI developments" + ``` + +3. **Évaluer** : Effectuer des calculs ou manipuler des données. + ```yaml + - evaluate: + average_score: "sum(scores) / len(scores)" + ``` + +4. **Attendre l'entrée** : mettre le flux de travail en pause jusqu'à ce que l'entrée soit reçue. + ```yaml + - wait_for_input: + info: + message: "Please provide additional information." + ``` + +5. **Journal** : Enregistrer une valeur ou un message spécifié. + ```yaml + - log: "Processing completed for item {{item_id}}" + ``` + +#### Étapes clé-valeur + +6. **Get** : récupérer une valeur à partir d'un magasin clé-valeur. + ```yaml + - get: "user_preference" + ``` + +7. **Set** : attribuez une valeur à une clé dans un magasin clé-valeur. + ```yaml + - set: + user_preference: "dark_mode" + ``` + +#### Étapes d'itération + +8. **Foreach** : itérer sur une collection et effectuer des étapes pour chaque élément. + ```yaml + - foreach: + in: "data_list" + do: + - log: "Processing item {{_}}" + ``` + +9. **Map-Reduce** : Cartographiez une collection et réduisez les résultats. + ```yaml + - map_reduce: + over: "numbers" + map: + - evaluate: + squared: "_ ** 2" + reduce: "sum(results)" + ``` + +10. **Parallèle** : exécuter plusieurs étapes en parallèle. + ```yaml + - parallel: + - tool: web_search + arguments: + query: "AI news" + - tool: weather_check + arguments: + location: "New York" + ``` + +#### Étapes conditionnelles + +11. **If-Else** : Exécution conditionnelle des étapes. + ```yaml + - if: "score > 0.8" + then: + - log: "High score achieved" + else: + - log: "Score needs improvement" + ``` + +12. **Switch** : exécuter des étapes en fonction de plusieurs conditions. + ```yaml + - switch: + - case: "category == 'A'" + then: + - log: "Category A processing" + - case: "category == 'B'" + then: + - log: "Category B processing" + - case: "_" # Default case + then: + - log: "Unknown category" + ``` + +#### Autre flux de contrôle + +13. **Veille** : met le flux de travail en pause pendant une durée spécifiée. + ```yaml + - sleep: + seconds: 30 + ``` + +14. **Retour** : renvoie une valeur du flux de travail. + ```yaml + - return: + result: "Task completed successfully" + ``` + +15. **Rendement** : Exécutez un sous-flux de travail et attendez sa fin. + ```yaml + - yield: + workflow: "data_processing_subflow" + arguments: + input_data: "{{raw_data}}" + ``` + +16. **Erreur** : gérez les erreurs en spécifiant un message d’erreur. + ```yaml + - error: "Invalid input provided" + ``` + +Chaque type d'étape remplit un objectif spécifique dans la création de workflows d'IA sophistiqués. Cette catégorisation permet de comprendre les différents flux de contrôle et opérations disponibles dans les tâches Julep. + +## Fonctionnalités avancées + +Julep propose une gamme de fonctionnalités avancées pour améliorer vos flux de travail d'IA : + +### Ajout d'outils aux agents + +Étendez les capacités de votre agent en intégrant des outils et des API externes : + +```python +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"}, + }, +) +``` + +### Gestion des sessions et des utilisateurs + +Julep fournit une gestion de session robuste pour les interactions persistantes : + +```python +session = client.sessions.create( + agent_id=agent.id, + user_id=user.id, + context_overflow="adaptive" +) + +# Continue conversation in the same session +response = client.sessions.chat( + session_id=session.id, + messages=[ + { + "role": "user", + "content": "Follow up on the previous conversation." + } + ] +) +``` + +### Intégration et recherche de documents + +Gérez et recherchez facilement des documents pour vos agents : + +```python +# Upload a document +document = client.agents.docs.create( + title="AI advancements", + content="AI is changing the world...", + metadata={"category": "research_paper"} +) + +# Search documents +results = client.agents.docs.search( + text="AI advancements", + metadata_filter={"category": "research_paper"} +) +``` + +Pour des fonctionnalités plus avancées et une utilisation détaillée, veuillez vous référer à notre [Documentation sur les fonctionnalités avancées](https://docs.julep.ai/advanced-features). + +## Intégrations + +Julep prend en charge diverses intégrations qui étendent les capacités de vos agents IA. Voici une liste des intégrations disponibles et de leurs arguments pris en charge : + +### Recherche courageuse + +```yaml +setup: + api_key: string # The API key for Brave Search + +arguments: + query: string # The search query for searching with Brave + +output: + result: string # The result of the Brave Search +``` + +### Base de navigateur + +```yaml +setup: + api_key: string # The API key for BrowserBase + project_id: string # The project ID for BrowserBase + session_id: string # (Optional) The session ID for BrowserBase + +arguments: + urls: list[string] # The URLs for loading with BrowserBase + +output: + documents: list # The documents loaded from the URLs +``` + +### E-mail + +```yaml +setup: + host: string # The host of the email server + port: integer # The port of the email server + user: string # The username of the email server + password: string # The password of the email server + +arguments: + to: string # The email address to send the email to + from: string # The email address to send the email from + subject: string # The subject of the email + body: string # The body of the email + +output: + success: boolean # Whether the email was sent successfully +``` + +### Araignée + +```yaml +setup: + spider_api_key: string # The API key for Spider + +arguments: + url: string # The URL for which to fetch data + mode: string # The type of crawlers (default: "scrape") + params: dict # (Optional) The parameters for the Spider API + +output: + documents: list # The documents returned from the spider +``` + +### Météo + +```yaml +setup: + openweathermap_api_key: string # The API key for OpenWeatherMap + +arguments: + location: string # The location for which to fetch weather data + +output: + result: string # The weather data for the specified location +``` + +### Wikipédia + +```yaml +arguments: + query: string # The search query string + load_max_docs: integer # Maximum number of documents to load (default: 2) + +output: + documents: list # The documents returned from the Wikipedia search +``` + +Ces intégrations peuvent être utilisées dans vos tâches pour étendre les capacités de vos agents IA. Pour des informations plus détaillées sur la manière d'utiliser ces intégrations dans vos workflows, veuillez consulter notre [Documentation sur les intégrations](https://docs.julep.ai/integrations). + +## Référence du SDK + +- [Kit de développement logiciel Node.js](https://github.com/julep-ai/node-sdk/blob/main/api.md) +- [SDK Python](https://github.com/julep-ai/python-sdk/blob/main/api.md) + +## Référence API + +Explorez notre documentation API complète pour en savoir plus sur les agents, les tâches et les exécutions : + +- [API des agents](https://api.julep.ai/api/docs#tag/agents) +- [API des tâches](https://api.julep.ai/api/docs#tag/tasks) +- [API d'exécution](https://api.julep.ai/api/docs#tag/executions) diff --git a/README_JA.md b/README_JA.md new file mode 100644 index 000000000..1da8a87a1 --- /dev/null +++ b/README_JA.md @@ -0,0 +1,948 @@ +English | [中文翻译](https://github.com/julep-ai/julep/blob/dev/README-CN.md) | [日本語翻訳](https://github.com/julep-ai/julep/blob/dev/README-JP.md) + +
+ julep +
+ +

+
+ ドキュメントを見る + · + 不和 + · + 𝕏 + · + リンクトイン +

+ + +

+ NPM Version +   + PyPI - Version +   + Docker Image Version +   + GitHub License +

+ +***** + +> [!注意] +> 👨‍💻 devfest.ai イベントに参加しませんか? [Discord](https://discord.com/invite/JTSBGRZrzj) に参加して、以下の詳細を確認してください。 + +
+🌟 貢献者とDevFest.AI参加者(クリックして拡大) + +## 🌟 貢献者を募集します! + +Julep プロジェクトに新しい貢献者を迎えられることを嬉しく思います。プロジェクトを始めるのに役立つ「最初の良い問題」をいくつか作成しました。貢献する方法は次のとおりです。 + +1. 貢献方法に関するガイドラインについては、[CONTRIBUTING.md](CONTRIBUTING.md) ファイルをご覧ください。 +2. [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) を参照して、興味のあるタスクを見つけます。 +3. ご質問やご不明な点がございましたら、[Discord](https://discord.com/invite/JTSBGRZrzj) チャンネルまでお気軽にお問い合わせください。 + +あなたの貢献は、大小を問わず私たちにとって貴重です。一緒に素晴らしいものを作りましょう!🚀 + +### 🎉 DevFest.AI 2024年10月 + +嬉しいニュースです!2024 年 10 月を通して DevFest.AI に参加します!🗓️ + +- このイベント中に Julep に貢献すると、素晴らしい Julep のグッズや景品を獲得するチャンスが得られます! 🎁 +- 世界中の開発者とともに AI リポジトリに貢献し、素晴らしいイベントに参加しましょう。 +- この素晴らしい取り組みを企画してくださった DevFest.AI に心から感謝します。 + +> [!ヒント] +> 楽しみに参加する準備はできましたか? **[参加することをツイート](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)**して、コーディングを始めましょう! 🖥️ + +> [!注意] +> API キーを [こちら](https://dashboard-dev.julep.ai) から取得します。 +> +> ベータ版では、[Discord](https://discord.com/invite/JTSBGRZrzj) に連絡して、API キーのレート制限を解除することもできます。 + +![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) + +
+ + + +
+

📖 目次

+ +- [はじめに](#introduction) +- [簡単な例](#quick-example) +- [主な機能](#key-features) +- [なぜ Julep と LangChain を比較するのか?](#why-julep-vs-langchain) +- [さまざまなユースケース](#different-use-cases) +- [異なるフォームファクター](#different-form-factor) +- [要約](#in-summary) +- [インストール](#installation) +- [Python クイックスタート 🐍](#python-quick-start-) +- [ステップ 1: エージェントを作成する](#step-1-create-an-agent) +- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [ステップ 3: タスクを実行する](#step-3-execute-the-task) +- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent) +- [Node.js クイック スタート 🟩](#nodejs-quick-start-) +- [ステップ 1: エージェントを作成する](#step-1-create-an-agent-1) +- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [ステップ 3: タスクを実行する](#step-3-execute-the-task-1) +- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent-1) +- [コンポーネント](#components) +- [メンタルモデル](#mental-model) +- [コンセプト](#concepts) +- [タスクの理解](#understanding-tasks) +- [ワークフロー ステップの種類](#types-of-workflow-steps) +- [高度な機能](#advanced-features) +- [エージェントへのツールの追加](#adding-tools-to-agents) +- [セッションとユーザーの管理](#managing-sessions-and-users) +- [ドキュメントの統合と検索](#document-integration-and-search) +- [統合](#integrations) +- [勇敢な検索](#brave-search) +- [ブラウザベース](#browserbase) +- [メールアドレス](#email) +- [スパイダー](#spider) +- [天気](#weather) +- [ウィキペディア](#wikipedia) +- [SDKリファレンス](#sdk-reference) +- [APIリファレンス](#api-reference) + +
+ + +## 導入 + +Julep は、過去のやり取りを記憶し、複雑なタスクを実行できる AI エージェントを作成するためのプラットフォームです。長期記憶を提供し、複数ステップのプロセスを管理します。 + +Julep を使用すると、意思決定、ループ、並列処理、多数の外部ツールや API との統合を組み込んだ複数ステップのタスクを作成できます。 + +多くの AI アプリケーションは、分岐が最小限の、プロンプトと API 呼び出しの単純な線形チェーンに制限されていますが、Julep はより複雑なシナリオを処理できるように構築されています。 + +サポート対象: +- 複雑で多段階のプロセス +- ダイナミックな意思決定 +- 並列実行 + +> [!ヒント] +> 単純な質問に答えるだけでなく、複雑なタスクを処理し、過去のやり取りを記憶し、場合によっては他のツールや API も使用できる AI エージェントを構築したいとします。そこで Julep の出番です。 + +## 簡単な例 + +次のことができる研究 AI エージェントを想像してください。 +1. トピックを取り上げ、 +2. そのトピックについて100個の検索クエリを考えます。 +3. ウェブ検索を並行して実行する +4. 結果をまとめる +5.要約をDiscordに送信する + +Julepでは、これは単一のタスクになります80行のコードそして走る完全に管理されたすべては Julep のサーバー上で実行されます。すべての手順は Julep のサーバー上で実行されるため、何もする必要はありません。次に動作例を示します。 + +```yaml +name: Research Agent + +# Optional: Define the input schema for the task +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to research + +# 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: "YOUR_DISCORD_WEBHOOK_URL" + method: POST + headers: + Content-Type: application/json + +# Special variables: +# - inputs: for accessing the input to the task +# - outputs: for accessing the output of previous steps +# - _: for accessing the output of the previous step + +# Define the main workflow +main: +- prompt: + - role: system + content: >- + You are a research assistant. + Generate 100 diverse search queries related to the topic: + {{inputs[0].topic}} + + Write one query per line. + unwrap: true + +# Evaluate the search queries using a simple python expression +- evaluate: + search_queries: "_.split('\n')" + +# Run the web search in parallel for each query +- over: "_.search_queries" + map: + tool: web_search + arguments: + query: "_" + parallelism: 100 + +# Collect the results from the web search +- evaluate: + results: "'\n'.join([item.result for item in _])" + +# Summarize the results +- prompt: + - role: system + content: > + You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. + The summary should be well-structured, informative, and highlight key findings and insights: + {{_.results}} + unwrap: true + +# Send the summary to Discord +- tool: discord_webhook + arguments: + content: > + **Research Summary for {{inputs[0].topic}}** + + {{_}} +``` + +> [!ヒント] +> Julep は、長期的なインタラクションを通じてコン​​テキストと状態を維持できる AI エージェントを構築する場合に非常に便利です。複雑な複数ステップのワークフローを設計し、さまざまなツールや API をエージェントのプロセスに直接統合するのに最適です。 +> +> この例では、Julep は並列実行を自動的に管理し、失敗したステップを再試行し、API リクエストを再送信し、タスクが完了するまで確実に実行し続けます。 + +## 主な特徴 + +1. 🧠 **永続的な AI エージェント**: 長期にわたるやり取りを通じてコン​​テキストと情報を記憶します。 +2. 💾 **ステートフル セッション**: 過去のやり取りを追跡して、パーソナライズされた応答を提供します。 +3. 🔄 **複数ステップのタスク**: ループと意思決定を使用して、複雑な複数ステップのプロセスを構築します。 +4. ⏳ **タスク管理**: 無期限に実行される可能性のある長時間実行タスクを処理します。 +5. 🛠️ **組み込みツール**: タスクで組み込みツールと外部 API を使用します。 +6. 🔧 **自己修復**: Julep は失敗したステップを自動的に再試行し、メッセージを再送信し、タスクがスムーズに実行されるようにします。 +7. 📚 **RAG**: Julep のドキュメント ストアを使用して、独自のデータを取得して使用するためのシステムを構築します。 + +Julep は、単純なプロンプト応答モデルを超えた AI ユースケースを必要とするアプリケーションに最適です。 + +## Julep と LangChain を比較する理由 + +### さまざまなユースケース + +LangChain と Julep は、AI 開発スタック内で異なる重点を置いたツールと考えてください。 + +LangChain は、プロンプトのシーケンスを作成し、AI モデルとのやり取りを管理するのに最適です。多数の事前構築された統合を備えた大規模なエコシステムを備えているため、何かをすぐに立ち上げて実行したい場合に便利です。LangChain は、プロンプトと API 呼び出しの線形チェーンを含む単純なユースケースに適しています。 + +一方、Julep は、長期的なインタラクションを通じて物事を記憶できる永続的な AI エージェントの構築に重点を置いています。エージェントのプロセス内で複数のステップ、意思決定、さまざまなツールや API との直接統合を伴う複雑なタスクが必要な場合に効果を発揮します。永続的なセッションと複雑なタスクを管理するために、ゼロから設計されています。 + +以下のことを必要とする複雑な AI アシスタントの構築を考えている場合には、Julep を使用してください。 + +- 数日または数週間にわたってユーザーのインタラクションを追跡します。 +- 毎日のサマリーの送信やデータ ソースの監視などのスケジュールされたタスクを実行します。 +- 以前のやり取りや保存されたデータに基づいて決定を下します。 +- タスクの一部として複数の外部サービスと対話します。 + +そして、Julep は、ゼロから構築する必要なく、これらすべてをサポートするインフラストラクチャを提供します。 + +### 異なるフォームファクタ + +Julep は、タスクを記述するための言語、それらのタスクを実行するためのサーバー、プラットフォームと対話するための SDK を含む **プラットフォーム** です。Julep で何かを構築するには、タスクの説明を `YAML` で記述し、クラウドでタスクを実行します。 + +Julep は、負荷の高い、複数のステップから成る、長時間実行されるタスク向けに構築されており、タスクの複雑さに制限はありません。 + +LangChain は、プロンプトとツールの線形チェーンを構築するためのいくつかのツールとフレームワークを含む **ライブラリ** です。LangChain を使用して何かを構築するには、通常、使用するモデル チェーンを設定して実行する Python コードを記述します。 + +LangChain は、プロンプトと API 呼び出しの線形チェーンを含む単純なユースケースでは十分であり、実装も迅速です。 + +### 要約すれば + +ステートレスまたは短期的なコンテキストで AI モデルのインタラクションとプロンプト シーケンスを管理する必要がある場合は、LangChain を使用します。 + +高度なタスク機能、永続的なセッション、複雑なタスク管理を備えたステートフル エージェント用の堅牢なフレームワークが必要な場合は、Julep を選択してください。 + +## インストール + +Julep を使い始めるには、[npm](https://www.npmjs.com/package/@julep/sdk) または [pip](https://pypi.org/project/julep/) を使用してインストールします。 + +```bash +npm install @julep/sdk +``` + +または + +```bash +pip install julep +``` + +> [!注意] +> API キーを [こちら](https://dashboard-dev.julep.ai) から取得します。 +> +> ベータ版では、[Discord](https://discord.com/invite/JTSBGRZrzj) に連絡して、API キーのレート制限を解除することもできます。 + +> [!ヒント] +> 💻 あなたは「コードを見せてください!™」タイプの人ですか? 始めるにあたって役立つクックブックを多数作成しました。**[クックブック](https://github.com/julep-ai/julep/tree/dev/cookbooks)** をチェックして、例を参照してください。 +> +> 💡 Julep をベースに構築できるアイデアもたくさんあります。**[アイデアのリスト](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** をチェックして、インスピレーションを得てください。 + +## Python クイックスタート 🐍 + +### ステップ 1: エージェントを作成する + +```python +import yaml +from julep import Julep # or AsyncJulep + +client = Julep(api_key="your_julep_api_key") + +agent = client.agents.create( + name="Storytelling Agent", + model="gpt-4o", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) + +# 🛠️ Add an image generation tool (DALL·E) to the agent +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_openai_api_key", + }, + }, +) +``` + +### ステップ2: ストーリーと漫画を生成するタスクを作成する + +入力されたアイデアに基づいてストーリーを作成し、パネル化された漫画を生成するためのマルチステップタスクを定義しましょう。 + +```python +# 📋 Task +# Create a task that takes an idea and creates a story and a 4-panel comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" + +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) +) +``` + +### ステップ3: タスクを実行する + +```python +# 🚀 Execute the task with an input idea +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} +) + +# 🎉 Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) + +# 📦 Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) +``` + +### ステップ4: エージェントとチャットする + +エージェントとの対話型チャット セッションを開始します。 + +```python +session = client.sessions.create(agent_id=agent.id) + +# 💬 Send messages to the agent +while (message := input("Enter a message: ")) != "quit": + response = client.sessions.chat( + session_id=session.id, + message=message, + ) + + print(response) +``` + +> [!ヒント] +> 完全な Python の例は [ここ](example.py) にあります。 + + +## Node.js クイックスタート 🟩 + +### ステップ 1: エージェントを作成する + +```javascript +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; + +const client = new Julep({ apiKey: 'your_julep_api_key' }); + +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); + + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(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_openai_api_key", + }, + }, + }); + + return agent; +} +``` + +### ステップ2: ストーリーと漫画を生成するタスクを作成する + +```javascript +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} +``` + +### ステップ3: タスクを実行する + +```javascript +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); + + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } + + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} +``` + +### ステップ4: エージェントとチャットする + +```javascript +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); +``` + +> [!ヒント] +> 完全な Node.js の例は [ここ](example.js) にあります。 + +## コンポーネント + +Julep は次のコンポーネントで構成されています。 + +- **Julep プラットフォーム**: Julep プラットフォームは、ワークフローを実行するクラウド サービスです。ワークフローを記述するための言語、ワークフローを実行するためのサーバー、プラットフォームと対話するための SDK が含まれています。 +- **Julep SDK**: Julep SDK は、ワークフローを構築するためのライブラリのセットです。Python 用と JavaScript 用の SDK があり、今後さらに追加される予定です。 +- **Julep API**: Julep API は、Julep プラットフォームと対話するために使用できる RESTful API です。 + +### メンタルモデル + +
+ +
+ +Julep は、クライアント側とサーバー側の両方のコンポーネントを組み合わせて、高度な AI エージェントの構築を支援するプラットフォームと考えてください。これを視覚化する方法は次のとおりです。 + +1. **アプリケーションコード:** +- アプリケーションで Julep SDK を使用して、エージェント、タスク、ワークフローを定義します。 +- SDK は、これらのコンポーネントのセットアップと管理を容易にする関数とクラスを提供します。 + +2. **Julep バックエンド サービス:** +- SDK はネットワーク経由で Julep バックエンドと通信します。 +- バックエンドは、タスクの実行を処理し、セッション状態を維持し、ドキュメントを保存し、ワークフローを調整します。 + +3. **ツールとAPIとの統合:** +- ワークフロー内で、外部ツールやサービスを統合できます。 +- バックエンドはこれらの統合を容易にするため、エージェントは、たとえば、Web 検索を実行したり、データベースにアクセスしたり、サードパーティの API を呼び出したりすることができます。 + +もっと簡単に言うと: +- Julep は、ステートフル AI エージェントを構築するためのプラットフォームです。 +- コード内で SDK (ツールキットのようなもの) を使用して、エージェントの動作を定義します。 +- バックエンド サービス (エンジンと考えることができます) は、これらの定義を実行し、状態を管理し、複雑さを処理します。 + +## コンセプト + +Julep は、強力な AI ワークフローを作成するために連携するいくつかの主要な技術コンポーネントに基づいて構築されています。 + +```mermaid +graph TD + User[User] ==> Session[Session] + Session --> Agent[Agent] + Agent --> Tasks[Tasks] + Agent --> LLM[Large Language Model] + Tasks --> Tools[Tools] + Agent --> Documents[Documents] + Documents --> VectorDB[Vector Database] + Tasks --> Executions[Executions] + + classDef client fill:#9ff,stroke:#333,stroke-width:1px; + class User client; + + classDef core fill:#f9f,stroke:#333,stroke-width:2px; + class Agent,Tasks,Session core; +``` + +- **エージェント**: タスクを実行し、ユーザーと対話する大規模言語モデル (LLM) を搭載した AI 搭載エンティティ。 +- **ユーザー**: セッションを通じてエージェントと対話するエンティティ。 +- **セッション**: エージェントとユーザー間のステートフルなやり取り。複数のやり取りにわたってコンテキストを維持します。 +- **タスク**: プロンプト、ツール呼び出し、条件付きロジックなどのさまざまな種類のステップを含む、エージェントが実行できる複数ステップのプログラム ワークフロー。 +- **ツール**: ユーザー定義関数、システム ツール、サードパーティ API 統合など、エージェントの機能を拡張する統合。 +- **ドキュメント**: エージェントまたはユーザーに関連付けられたテキストまたはデータ オブジェクト。セマンティック検索と取得のためにベクトル化され、保存されます。 +- **実行**: 特定の入力で開始され、独自のライフサイクルとステート マシンを持つタスクのインスタンス。 + +これらの概念とその相互作用の詳細な説明については、[概念ドキュメント](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)を参照してください。 + +## タスクを理解する + +タスクは Julep のワークフロー システムの中核です。タスクを使用すると、エージェントが実行できる複雑な複数ステップの AI ワークフローを定義できます。タスク コンポーネントの概要は次のとおりです。 + +- **名前と説明**: 各タスクには、簡単に識別できるように一意の名前と説明が付いています。 +- **メインステップ**: タスクの中核であり、実行されるアクションのシーケンスを定義します。 +- **ツール**: タスク実行中にエージェントの機能を拡張するオプションの統合。 + +### ワークフローステップの種類 + +Julep のタスクにはさまざまな種類のステップを含めることができるため、複雑で強力なワークフローを作成できます。利用可能なステップの種類の概要をカテゴリ別にまとめると次のようになります。 + +#### 一般的な手順 + +1. **プロンプト**: AI モデルにメッセージを送信し、応答を受信します。 + ```yaml + - prompt: "Analyze the following data: {{data}}" + ``` + +2. **ツール呼び出し**: 統合ツールまたは API を実行します。 + ```yaml + - tool: web_search + arguments: + query: "Latest AI developments" + ``` + +3. **評価**: 計算を実行したり、データを操作したりします。 + ```yaml + - evaluate: + average_score: "sum(scores) / len(scores)" + ``` + +4. **入力を待機**: 入力が受信されるまでワークフローを一時停止します。 + ```yaml + - wait_for_input: + info: + message: "Please provide additional information." + ``` + +5. **ログ**: 指定された値またはメッセージをログに記録します。 + ```yaml + - log: "Processing completed for item {{item_id}}" + ``` + +#### キー値ステップ + +6. **Get**: キー値ストアから値を取得します。 + ```yaml + - get: "user_preference" + ``` + +7. **Set**: キー値ストア内のキーに値を割り当てます。 + ```yaml + - set: + user_preference: "dark_mode" + ``` + +#### 反復ステップ + +8. **Foreach**: コレクションを反復処理し、各項目に対して手順を実行します。 + ```yaml + - foreach: + in: "data_list" + do: + - log: "Processing item {{_}}" + ``` + +9. **Map-Reduce**: コレクションをマップし、結果を縮小します。 + ```yaml + - map_reduce: + over: "numbers" + map: + - evaluate: + squared: "_ ** 2" + reduce: "sum(results)" + ``` + +10. **並列**: 複数のステップを並列に実行します。 + ```yaml + - parallel: + - tool: web_search + arguments: + query: "AI news" + - tool: weather_check + arguments: + location: "New York" + ``` + +#### 条件付きステップ + +11. **If-Else**: ステップの条件付き実行。 + ```yaml + - if: "score > 0.8" + then: + - log: "High score achieved" + else: + - log: "Score needs improvement" + ``` + +12. **スイッチ**: 複数の条件に基づいてステップを実行します。 + ```yaml + - switch: + - case: "category == 'A'" + then: + - log: "Category A processing" + - case: "category == 'B'" + then: + - log: "Category B processing" + - case: "_" # Default case + then: + - log: "Unknown category" + ``` + +#### その他の制御フロー + +13. **スリープ**: 指定した期間、ワークフローを一時停止します。 + ```yaml + - sleep: + seconds: 30 + ``` + +14. **Return**: ワークフローから値を返します。 + ```yaml + - return: + result: "Task completed successfully" + ``` + +15. **Yield**: サブワークフローを実行し、完了を待ちます。 + ```yaml + - yield: + workflow: "data_processing_subflow" + arguments: + input_data: "{{raw_data}}" + ``` + +16. **エラー**: エラー メッセージを指定してエラーを処理します。 + ```yaml + - error: "Invalid input provided" + ``` + +各ステップ タイプは、高度な AI ワークフローを構築する上で特定の目的を果たします。この分類は、Julep タスクで使用できるさまざまな制御フローと操作を理解するのに役立ちます。 + +## 高度な機能 + +Julep は、AI ワークフローを強化するためのさまざまな高度な機能を提供します。 + +### エージェントへのツールの追加 + +外部ツールと API を統合してエージェントの機能を拡張します。 + +```python +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 は、永続的なインタラクションのための堅牢なセッション管理を提供します。 + +```python +session = client.sessions.create( + agent_id=agent.id, + user_id=user.id, + context_overflow="adaptive" +) + +# Continue conversation in the same session +response = client.sessions.chat( + session_id=session.id, + messages=[ + { + "role": "user", + "content": "Follow up on the previous conversation." + } + ] +) +``` + +### ドキュメントの統合と検索 + +エージェントのドキュメントを簡単に管理および検索できます。 + +```python +# Upload a document +document = client.agents.docs.create( + title="AI advancements", + content="AI is changing the world...", + metadata={"category": "research_paper"} +) + +# Search documents +results = client.agents.docs.search( + text="AI advancements", + metadata_filter={"category": "research_paper"} +) +``` + +より高度な機能と詳細な使用方法については、[高度な機能のドキュメント](https://docs.julep.ai/advanced-features)を参照してください。 + +## 統合 + +Julep は、AI エージェントの機能を拡張するさまざまな統合をサポートしています。利用可能な統合とサポートされている引数のリストは次のとおりです。 + +### ブレイブサーチ + +```yaml +setup: + api_key: string # The API key for Brave Search + +arguments: + query: string # The search query for searching with Brave + +output: + result: string # The result of the Brave Search +``` + +### ブラウザベース + +```yaml +setup: + api_key: string # The API key for BrowserBase + project_id: string # The project ID for BrowserBase + session_id: string # (Optional) The session ID for BrowserBase + +arguments: + urls: list[string] # The URLs for loading with BrowserBase + +output: + documents: list # The documents loaded from the URLs +``` + +### メール + +```yaml +setup: + host: string # The host of the email server + port: integer # The port of the email server + user: string # The username of the email server + password: string # The password of the email server + +arguments: + to: string # The email address to send the email to + from: string # The email address to send the email from + subject: string # The subject of the email + body: string # The body of the email + +output: + success: boolean # Whether the email was sent successfully +``` + +### スパイダー + +```yaml +setup: + spider_api_key: string # The API key for Spider + +arguments: + url: string # The URL for which to fetch data + mode: string # The type of crawlers (default: "scrape") + params: dict # (Optional) The parameters for the Spider API + +output: + documents: list # The documents returned from the spider +``` + +### 天気 + +```yaml +setup: + openweathermap_api_key: string # The API key for OpenWeatherMap + +arguments: + location: string # The location for which to fetch weather data + +output: + result: string # The weather data for the specified location +``` + +### ウィキペディア + +```yaml +arguments: + query: string # The search query string + load_max_docs: integer # Maximum number of documents to load (default: 2) + +output: + documents: list # The documents returned from the Wikipedia search +``` + +これらの統合をタスク内で使用して、AI エージェントの機能を拡張できます。ワークフローでこれらの統合を使用する方法の詳細については、[統合ドキュメント](https://docs.julep.ai/integrations)を参照してください。 + +## SDK リファレンス + +- [Node.js SDK](https://github.com/julep-ai/node-sdk/blob/main/api.md) +- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/api.md) + +## APIリファレンス + +エージェント、タスク、実行の詳細については、包括的な API ドキュメントをご覧ください。 + +- [エージェント API](https://api.julep.ai/api/docs#tag/agents) +- [タスク API](https://api.julep.ai/api/docs#tag/tasks) +- [実行API](https://api.julep.ai/api/docs#tag/executions) From 74a7a4e0fcad3057d4ee37c2c4cce6de9378279b Mon Sep 17 00:00:00 2001 From: Champion1583 Date: Thu, 10 Oct 2024 01:06:10 +0530 Subject: [PATCH 06/13] chore(ci): update base name for translated readme --- .github/workflows/translate-readme.yml | 2 +- README_CN.md | 948 ------------------------- README_FR.md | 948 ------------------------- README_JA.md | 948 ------------------------- scripts/readme_translator.py | 2 +- 5 files changed, 2 insertions(+), 2846 deletions(-) delete mode 100644 README_CN.md delete mode 100644 README_FR.md delete mode 100644 README_JA.md diff --git a/.github/workflows/translate-readme.yml b/.github/workflows/translate-readme.yml index b63e89584..cd48334f2 100644 --- a/.github/workflows/translate-readme.yml +++ b/.github/workflows/translate-readme.yml @@ -28,7 +28,7 @@ jobs: run: | git config --global user.name 'github-actions[bot]' git config --global user.email 'github-actions[bot]@users.noreply.github.com' - git add README_*.md + git add README-*.md git commit -m "chore(readme): translate README.md" - name: Push changes diff --git a/README_CN.md b/README_CN.md deleted file mode 100644 index 717bcf0fa..000000000 --- a/README_CN.md +++ /dev/null @@ -1,948 +0,0 @@ -English | [中文翻译](https://github.com/julep-ai/julep/blob/dev/README-CN.md) | [日本語翻訳](https://github.com/julep-ai/julep/blob/dev/README-JP.md) - -
- julep -
- -

-
- 探索文档 - · - 不和谐 - · - 𝕏 - · - LinkedIn -

- - -

- NPM Version -   - PyPI - Version -   - Docker Image Version -   - GitHub License -

- -***** - -> [!注意] -> 👨‍💻 来参加 devfest.ai 活动了吗?加入我们的 [Discord](https://discord.com/invite/JTSBGRZrzj) 并查看以下详细信息。 - -
-🌟 贡献者和 DevFest.AI 参与者(点击展开) - -## 🌟 招募贡献者! - -我们很高兴欢迎新贡献者加入 Julep 项目!我们创建了几个“好的第一个问题”来帮助您入门。以下是您可以做出贡献的方式: - -1. 查看我们的 [CONTRIBUTING.md](CONTRIBUTING.md) 文件以获取有关如何贡献的指南。 -2. 浏览我们的 [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 以找到您感兴趣的任务。 -3. 如果您有任何疑问或需要帮助,请随时通过我们的 [Discord](https://discord.com/invite/JTSBGRZrzj) 频道联系我们。 - -您的贡献,无论大小,对我们来说都是宝贵的。让我们一起创造一些了不起的东西!🚀 - -### 🎉 DevFest.AI 2024 年 10 月 - -令人兴奋的消息!我们将参加 2024 年 10 月的 DevFest.AI!🗓️ - -- 在本次活动期间为 Julep 做出贡献,就有机会赢得超棒的 Julep 商品和赃物!🎁 -- 与来自世界各地的开发人员一起为 AI 资源库做出贡献并参与精彩的活动。 -- 非常感谢 DevFest.AI 组织这次精彩的活动! - -> [!提示] -> 准备好加入这场有趣的活动了吗?**[发推文表示你正在参与](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)** 让我们开始编码吧!🖥️ - -> [!注意] -> 从[此处](https://dashboard-dev.julep.ai)获取您的 API 密钥。 -> -> 虽然我们处于测试阶段,但您也可以通过 [Discord](https://discord.com/invite/JTSBGRZrzj) 联系,以解除 API 密钥的速率限制。 - -![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) - -
- - - -
-

📖 目录

- -- [简介](#introduction) -- [快速示例](#quick-example) -- [主要特点](#key-features) -- [为什么选择 Julep 而不是 LangChain?](#why-julep-vs-langchain) -- [不同用例](#different-use-cases) -- [不同的外形尺寸](#different-form-factor) -- [总结](#in-summary) -- [安装](#安装) -- [Python 快速入门 🐍](#python-quick-start-) -- [步骤 1:创建代理](#step-1-create-an-agent) -- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip) -- [步骤 3:执行任务](#step-3-execute-the-task) -- [步骤 4:与代理聊天](#step-4-chat-with-the-agent) -- [Node.js 快速入门🟩](#nodejs-quick-start-) -- [步骤 1:创建代理](#step-1-create-an-agent-1) -- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) -- [步骤 3:执行任务](#step-3-execute-the-task-1) -- [步骤 4:与代理聊天](#step-4-chat-with-the-agent-1) -- [组件](#components) -- [心智模型](#mental-model) -- [概念](#concepts) -- [理解任务](#understanding-tasks) -- [工作流步骤的类型](#types-of-workflow-steps) -- [高级功能](#advanced-features) -- [向代理添加工具](#adding-tools-to-agents) -- [管理会话和用户](#managing-sessions-and-users) -- [文档集成与搜索](#document-integration-and-search) -- [集成](#integrations) -- [勇敢搜索](#brave-search) -- [BrowserBase](#browserbase) -- [电子邮件](#email) -- [蜘蛛](#蜘蛛) -- [天气](#天气) -- [维基百科](#wikipedia) -- [SDK 参考](#sdk-reference) -- [API 参考](#api-reference) - -
- - -## 介绍 - -Julep 是一个用于创建 AI 代理的平台,这些代理可以记住过去的互动并执行复杂的任务。它提供长期记忆并管理多步骤流程。 - -Julep 支持创建多步骤任务,包括决策、循环、并行处理以及与众多外部工具和 API 的集成。 - -虽然许多人工智能应用程序仅限于简单、线性的提示链和 API 调用,并且分支很少,但 Julep 可以处理更复杂的场景。 - -它支持: -- 复杂、多步骤的流程 -- 动态决策 -- 并行执行 - -> [!提示] -> 想象一下,您想要构建一个 AI 代理,它不仅可以回答简单的问题,还可以处理复杂的任务,记住过去的交互,甚至可能使用其他工具或 API。这就是 Julep 的作用所在。 - -快速示例 - -想象一下一个可以执行以下操作的研究 AI 代理: -1. 选择一个主题, -2. 针对该主题提出 100 个搜索查询, -3. 同时进行网页搜索, -4. 总结结果, -5. 将摘要发送至 Discord - -在 Julep 中,这将是一个单一的任务80行代码然后运行完全托管一切都是独立的。所有步骤都在 Julep 自己的服务器上执行,您无需动手。这是一个工作示例: - -```yaml -name: Research Agent - -# Optional: Define the input schema for the task -input_schema: - type: object - properties: - topic: - type: string - description: The main topic to research - -# 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: "YOUR_DISCORD_WEBHOOK_URL" - method: POST - headers: - Content-Type: application/json - -# Special variables: -# - inputs: for accessing the input to the task -# - outputs: for accessing the output of previous steps -# - _: for accessing the output of the previous step - -# Define the main workflow -main: -- prompt: - - role: system - content: >- - You are a research assistant. - Generate 100 diverse search queries related to the topic: - {{inputs[0].topic}} - - Write one query per line. - unwrap: true - -# Evaluate the search queries using a simple python expression -- evaluate: - search_queries: "_.split('\n')" - -# Run the web search in parallel for each query -- over: "_.search_queries" - map: - tool: web_search - arguments: - query: "_" - parallelism: 100 - -# Collect the results from the web search -- evaluate: - results: "'\n'.join([item.result for item in _])" - -# Summarize the results -- prompt: - - role: system - content: > - You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. - The summary should be well-structured, informative, and highlight key findings and insights: - {{_.results}} - unwrap: true - -# Send the summary to Discord -- tool: discord_webhook - arguments: - content: > - **Research Summary for {{inputs[0].topic}}** - - {{_}} -``` - -> [!提示] -> 当您想要构建能够在长期交互​​中保持上下文和状态的 AI 代理时,Julep 非常有用。它非常适合设计复杂的多步骤工作流程,并将各种工具和 API 直接集成到代理的流程中。 -> -> 在此示例中,Julep 将自动管理并行执行,重试失败的步骤,重新发送 API 请求,并保持任务可靠运行直至完成。 - -## 主要特点 - -1. 🧠 **持久 AI 代理**:在长期交互​​中记住背景和信息。 -2. 💾 **状态会话**:跟踪过去的互动以获得个性化回应。 -3. 🔄 **多步骤任务**:通过循环和决策构建复杂的多步骤流程。 -4. ⏳ **任务管理**:处理可以无限期运行的长时间运行的任务。 -5.🛠️**内置工具**:在您的任务中使用内置工具和外部 API。 -6. 🔧 **自我修复**:Julep 将自动重试失败的步骤、重新发送消息,并确保您的任务顺利运行。 -7. 📚 **RAG**:使用 Julep 的文档存储构建一个用于检索和使用您自己的数据的系统。 - -Julep 非常适合需要超越简单的提示响应模型的 AI 用例的应用程序。 - -## 为什么选择 Julep 而不是 LangChain? - -### 不同的用例 - -可以将 LangChain 和 Julep 视为 AI 开发堆栈中具有不同重点的工具。 - -LangChain 非常适合创建提示序列和管理与 AI 模型的交互。它拥有庞大的生态系统,包含大量预构建的集成,如果您想快速启动和运行某些功能,这会非常方便。LangChain 非常适合涉及线性提示链和 API 调用的简单用例。 - -另一方面,Julep 更注重构建持久的 AI 代理,这些代理可以在长期交互​​中记住事物。当您需要涉及多个步骤、决策以及在代理流程中直接与各种工具或 API 集成的复杂任务时,它会大放异彩。它从头开始设计,以管理持久会话和复杂任务。 - -如果您想构建一个需要执行以下操作的复杂 AI 助手,请使用 Julep: - -- 跟踪几天或几周内的用户互动。 -- 执行计划任务,例如发送每日摘要或监控数据源。 -- 根据之前的互动或存储的数据做出决策。 -- 作为其任务的一部分,与多个外部服务进行交互。 - -然后 Julep 提供支持所有这些的基础设施,而无需您从头开始构建。 - -### 不同的外形尺寸 - -Julep 是一个**平台**,其中包括用于描述任务的语言、用于运行这些任务的服务器以及用于与平台交互的 SDK。要使用 Julep 构建某些东西,您需要在“YAML”中编写任务描述,然后在云中运行该任务。 - -Julep 专为繁重、多步骤和长时间运行的任务而设计,并且对任务的复杂程度没有限制。 - -LangChain 是一个**库**,其中包含一些工具和一个用于构建线性提示和工具链的框架。要使用 LangChain 构建某些东西,您通常需要编写 Python 代码来配置和运行要使用的模型链。 - -对于涉及线性提示和 API 调用链的简单用例,LangChain 可能足够并且能够更快地实现。 - -### 总之 - -当您需要在无状态或短期环境中管理 AI 模型交互和提示序列时,请使用 LangChain。 - -当您需要一个具有高级任务功能、持久会话和复杂任务管理的状态代理的强大框架时,请选择 Julep。 - -## 安装 - -要开始使用 Julep,请使用 [npm](https://www.npmjs.com/package/@julep/sdk) 或 [pip](https://pypi.org/project/julep/) 安装它: - -```bash -npm install @julep/sdk -``` - -或者 - -```bash -pip install julep -``` - -> [!注意] -> 从[此处](https://dashboard-dev.julep.ai)获取您的 API 密钥。 -> -> 虽然我们处于测试阶段,但您也可以通过 [Discord](https://discord.com/invite/JTSBGRZrzj) 联系,以解除 API 密钥的速率限制。 - -> [!提示] -> 💻 你是“向我展示代码!”的那种人吗?我们创建了大量的烹饪书供您入门。**查看 [烹饪书](https://github.com/julep-ai/julep/tree/dev/cookbooks)** 以浏览示例。 -> -> 💡 您还可以在 Julep 的基础上构建许多想法。**查看[想法列表](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** 以获取一些灵感。 - -## Python 快速入门🐍 - -### 步骤 1:创建代理 - -```python -import yaml -from julep import Julep # or AsyncJulep - -client = Julep(api_key="your_julep_api_key") - -agent = client.agents.create( - name="Storytelling Agent", - model="gpt-4o", - about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", -) - -# 🛠️ Add an image generation tool (DALL·E) to the agent -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_openai_api_key", - }, - }, -) -``` - -### 步骤 2:创建一个生成故事和漫画的任务 - -让我们定义一个多步骤任务来创建一个故事并根据输入的想法生成面板漫画: - -```python -# 📋 Task -# Create a task that takes an idea and creates a story and a 4-panel comic strip -task_yaml = """ -name: Story and Comic Creator -description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. - -main: - # Step 1: Generate a story and outline into 4 panels - - 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 - - # Step 2: Extract the panel descriptions and story - - evaluate: - story: _.split('1. ')[0].strip() - panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) - - # Step 3: Generate images for each panel using the image generator tool - - foreach: - in: _.panels - do: - tool: image_generator - arguments: - description: _ - - # Step 4: Generate a catchy title for the story - - prompt: - - role: system - content: You are {{agent.name}}. {{agent.about}} - - role: user - content: > - Based on the story below, generate a catchy title. - - Story: {{outputs[1].story}} - unwrap: true - - # Step 5: Return the story, the generated images, and the title - - return: - title: outputs[3] - story: outputs[1].story - comic_panels: "[output.image.url for output in outputs[2]]" -""" - -task = client.tasks.create( - agent_id=agent.id, - **yaml.safe_load(task_yaml) -) -``` - -### 步骤 3:执行任务 - -```python -# 🚀 Execute the task with an input idea -execution = client.executions.create( - task_id=task.id, - input={"idea": "A cat who learns to fly"} -) - -# 🎉 Watch as the story and comic panels are generated -for transition in client.executions.transitions.stream(execution_id=execution.id): - print(transition) - -# 📦 Once the execution is finished, retrieve the results -result = client.executions.get(execution_id=execution.id) -``` - -### 步骤 4:与代理聊天 - -开始与代理进行交互式聊天会话: - -```python -session = client.sessions.create(agent_id=agent.id) - -# 💬 Send messages to the agent -while (message := input("Enter a message: ")) != "quit": - response = client.sessions.chat( - session_id=session.id, - message=message, - ) - - print(response) -``` - -> [!提示] -> 您可以在[这里](example.py)找到完整的 python 示例。 - - -## Node.js 快速入门 🟩 - -### 步骤 1:创建代理 - -```javascript -import { Julep } from '@julep/sdk'; -import yaml from 'js-yaml'; - -const client = new Julep({ apiKey: 'your_julep_api_key' }); - -async function createAgent() { - const agent = await client.agents.create({ - name: "Storytelling Agent", - model: "gpt-4", - about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", - }); - - // 🛠️ Add an image generation tool (DALL·E) to the agent - await client.agents.tools.create(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_openai_api_key", - }, - }, - }); - - return agent; -} -``` - -### 步骤 2:创建一个生成故事和漫画的任务 - -```javascript -const taskYaml = ` -name: Story and Comic Creator -description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. - -main: - # Step 1: Generate a story and outline into 4 panels - - 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 - - # Step 2: Extract the panel descriptions and story - - evaluate: - story: _.split('1. ')[0].trim() - panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) - - # Step 3: Generate images for each panel using the image generator tool - - foreach: - in: _.panels - do: - tool: image_generator - arguments: - description: _ - - # Step 4: Generate a catchy title for the story - - prompt: - - role: system - content: You are {{agent.name}}. {{agent.about}} - - role: user - content: > - Based on the story below, generate a catchy title. - - Story: {{outputs[1].story}} - unwrap: true - - # Step 5: Return the story, the generated images, and the title - - return: - title: outputs[3] - story: outputs[1].story - comic_panels: outputs[2].map(output => output.image.url) -`; - -async function createTask(agent) { - const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); - return task; -} -``` - -### 步骤 3:执行任务 - -```javascript -async function executeTask(task) { - const execution = await client.executions.create(task.id, { - input: { idea: "A cat who learns to fly" } - }); - - // 🎉 Watch as the story and comic panels are generated - for await (const transition of client.executions.transitions.stream(execution.id)) { - console.log(transition); - } - - // 📦 Once the execution is finished, retrieve the results - const result = await client.executions.get(execution.id); - return result; -} -``` - -### 步骤 4:与代理聊天 - -```javascript -async function chatWithAgent(agent) { - const session = await client.sessions.create({ agent_id: agent.id }); - - // 💬 Send messages to the agent - const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout - }); - - const chat = async () => { - rl.question("Enter a message (or 'quit' to exit): ", async (message) => { - if (message.toLowerCase() === 'quit') { - rl.close(); - return; - } - - const response = await client.sessions.chat(session.id, { message }); - console.log(response); - chat(); - }); - }; - - chat(); -} - -// Run the example -async function runExample() { - const agent = await createAgent(); - const task = await createTask(agent); - const result = await executeTask(task); - console.log("Task Result:", result); - await chatWithAgent(agent); -} - -runExample().catch(console.error); -``` - -> [!提示] -> 您可以在[这里](example.js)找到完整的 Node.js 示例。 - -## 成分 - -Julep 由以下成分组成: - -- **Julep 平台**:Julep 平台是运行您的工作流程的云服务。它包括用于描述工作流程的语言、用于运行这些工作流程的服务器以及用于与平台交互的 SDK。 -- **Julep SDKs**:Julep SDKs 是一组用于构建工作流的库。目前有适用于 Python 和 JavaScript 的 SDKs,还有更多 SDKs 正在开发中。 -- **Julep API**:Julep API 是一个 RESTful API,您可以使用它与 Julep 平台进行交互。 - -### 心智模型 - -
- -
- -您可以将 Julep 视为一个结合了客户端和服务器端组件的平台,以帮助您构建高级 AI 代理。以下是它的可视化方法: - -1. **您的申请代码:** -- 您可以在应用程序中使用 Julep SDK 来定义代理、任务和工作流。 -- SDK 提供的函数和类使得设置和管理这些组件变得容易。 - -2. **Julep 后端服务:** -- SDK 通过网络与 Julep 后端通信。 -- 后端处理任务的执行,维护会话状态,存储文档并协调工作流程。 - -3. **与工具和 API 集成:** -- 在您的工作流程中,您可以集成外部工具和服务。 -- 后端促进这些集成,因此您的代理可以执行网络搜索、访问数据库或调用第三方 API。 - -简单来说: -- Julep 是一个用于构建有状态 AI 代理的平台。 -- 您在代码中使用 SDK(类似于工具包)来定义代理的功能。 -- 后端服务(您可以将其视为引擎)运行这些定义、管理状态并处理复杂性。 - -## 概念 - -Julep 基于几个关键技术组件构建,这些组件共同协作以创建强大的 AI 工作流程: - -```mermaid -graph TD - User[User] ==> Session[Session] - Session --> Agent[Agent] - Agent --> Tasks[Tasks] - Agent --> LLM[Large Language Model] - Tasks --> Tools[Tools] - Agent --> Documents[Documents] - Documents --> VectorDB[Vector Database] - Tasks --> Executions[Executions] - - classDef client fill:#9ff,stroke:#333,stroke-width:1px; - class User client; - - classDef core fill:#f9f,stroke:#333,stroke-width:2px; - class Agent,Tasks,Session core; -``` - -- **代理**:由大型语言模型(LLM)支持的人工智能实体,可执行任务并与用户交互。 -- **用户**:通过会话与代理交互的实体。 -- **会话**:代理和用户之间的状态交互,在多个交换之间维护上下文。 -- **任务**:代理可以执行的多步骤、程序化工作流,包括提示、工具调用和条件逻辑等各种类型的步骤。 -- **工具**:扩展代理功能的集成,包括用户定义的函数、系统工具或第三方 API 集成。 -- **文档**:与代理或用户相关的文本或数据对象,矢量化并存储以用于语义搜索和检索。 -- **执行**:通过特定输入启动的任务实例,具有自己的生命周期和状态机。 - -有关这些概念及其相互作用的更详细说明,请参阅我们的[概念文档](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)。 - -## 理解任务 - -任务是 Julep 工作流系统的核心。它们允许您定义代理可以执行的复杂、多步骤 AI 工作流。以下是任务组件的简要概述: - -- **名称和描述**:每个任务都有唯一的名称和描述,以便于识别。 -- **主要步骤**:任务的核心,定义要执行的操作顺序。 -- **工具**:可选集成,可在任务执行期间扩展代理的功能。 - -### 工作流步骤的类型 - -Julep 中的任务可以包含各种类型的步骤,让您可以创建复杂而强大的工作流程。以下是按类别组织的可用步骤类型的概述: - -#### 常见步骤 - -1. **提示**:向AI模型发送消息并收到回复。 - ```yaml - - prompt: "Analyze the following data: {{data}}" - ``` - -2. **工具调用**:执行集成的工具或API。 - ```yaml - - tool: web_search - arguments: - query: "Latest AI developments" - ``` - -3. **评估**:执行计算或处理数据。 - ```yaml - - evaluate: - average_score: "sum(scores) / len(scores)" - ``` - -4. **等待输入**:暂停工作流程,直到收到输入。 - ```yaml - - wait_for_input: - info: - message: "Please provide additional information." - ``` - -5. **日志**:记录指定的值或消息。 - ```yaml - - log: "Processing completed for item {{item_id}}" - ``` - -#### 键值步骤 - -6. **获取**:从键值存储中检索值。 - ```yaml - - get: "user_preference" - ``` - -7. **设置**:为键值存储中的键分配一个值。 - ```yaml - - set: - user_preference: "dark_mode" - ``` - -#### 迭代步骤 - -8. **Foreach**:遍历集合并对每个项目执行步骤。 - ```yaml - - foreach: - in: "data_list" - do: - - log: "Processing item {{_}}" - ``` - -9. **Map-Reduce**:对集合进行映射并减少结果。 - ```yaml - - map_reduce: - over: "numbers" - map: - - evaluate: - squared: "_ ** 2" - reduce: "sum(results)" - ``` - -10.**并行**:并行运行多个步骤。 - ```yaml - - parallel: - - tool: web_search - arguments: - query: "AI news" - - tool: weather_check - arguments: - location: "New York" - ``` - -#### 条件步骤 - -11. **If-Else**:条件执行步骤。 - ```yaml - - if: "score > 0.8" - then: - - log: "High score achieved" - else: - - log: "Score needs improvement" - ``` - -12.**Switch**:根据多种条件执行步骤。 - ```yaml - - switch: - - case: "category == 'A'" - then: - - log: "Category A processing" - - case: "category == 'B'" - then: - - log: "Category B processing" - - case: "_" # Default case - then: - - log: "Unknown category" - ``` - -#### 其他控制流 - -13. **睡眠**:暂停工作流一段指定的时间。 - ```yaml - - sleep: - seconds: 30 - ``` - -14. **返回**:从工作流返回一个值。 - ```yaml - - return: - result: "Task completed successfully" - ``` - -15. **收益**:运行子工作流并等待其完成。 - ```yaml - - yield: - workflow: "data_processing_subflow" - arguments: - input_data: "{{raw_data}}" - ``` - -16.**错误**:通过指定错误消息来处理错误。 - ```yaml - - error: "Invalid input provided" - ``` - -每种步骤类型在构建复杂的 AI 工作流中都有特定的用途。此分类有助于理解 Julep 任务中可用的各种控制流程和操作。 - -## 高级功能 - -Julep 提供一系列高级功能来增强您的 AI 工作流程: - -### 向代理添加工具 - -通过集成外部工具和 API 来扩展代理的功能: - -```python -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 为持久交互提供了强大的会话管理: - -```python -session = client.sessions.create( - agent_id=agent.id, - user_id=user.id, - context_overflow="adaptive" -) - -# Continue conversation in the same session -response = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": "Follow up on the previous conversation." - } - ] -) -``` - -### 文档集成与搜索 - -轻松管理和搜索代理的文档: - -```python -# Upload a document -document = client.agents.docs.create( - title="AI advancements", - content="AI is changing the world...", - metadata={"category": "research_paper"} -) - -# Search documents -results = client.agents.docs.search( - text="AI advancements", - metadata_filter={"category": "research_paper"} -) -``` - -有关更多高级功能和详细用法,请参阅我们的[高级功能文档](https://docs.julep.ai/advanced-features)。 - -## 集成 - -Julep 支持各种集成,可以扩展您的 AI 代理的功能。以下是可用集成及其支持的参数的列表: - -### 勇敢搜索 - -```yaml -setup: - api_key: string # The API key for Brave Search - -arguments: - query: string # The search query for searching with Brave - -output: - result: string # The result of the Brave Search -``` - -### 浏览器基础 - -```yaml -setup: - api_key: string # The API key for BrowserBase - project_id: string # The project ID for BrowserBase - session_id: string # (Optional) The session ID for BrowserBase - -arguments: - urls: list[string] # The URLs for loading with BrowserBase - -output: - documents: list # The documents loaded from the URLs -``` - -### 电子邮件 - -```yaml -setup: - host: string # The host of the email server - port: integer # The port of the email server - user: string # The username of the email server - password: string # The password of the email server - -arguments: - to: string # The email address to send the email to - from: string # The email address to send the email from - subject: string # The subject of the email - body: string # The body of the email - -output: - success: boolean # Whether the email was sent successfully -``` - -### 蜘蛛 - -```yaml -setup: - spider_api_key: string # The API key for Spider - -arguments: - url: string # The URL for which to fetch data - mode: string # The type of crawlers (default: "scrape") - params: dict # (Optional) The parameters for the Spider API - -output: - documents: list # The documents returned from the spider -``` - -### 天气 - -```yaml -setup: - openweathermap_api_key: string # The API key for OpenWeatherMap - -arguments: - location: string # The location for which to fetch weather data - -output: - result: string # The weather data for the specified location -``` - -维基百科 - -```yaml -arguments: - query: string # The search query string - load_max_docs: integer # Maximum number of documents to load (default: 2) - -output: - documents: list # The documents returned from the Wikipedia search -``` - -这些集成可用于您的任务中,以扩展您的 AI 代理的功能。有关如何在您的工作流程中使用这些集成的详细信息,请参阅我们的 [集成文档](https://docs.julep.ai/integrations)。 - -## SDK 参考 - -- [Node.js SDK](https://github.com/julep-ai/node-sdk/blob/main/api.md) -- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/api.md) - -API 参考 - -浏览我们全面的 API 文档,以了解有关代理、任务和执行的更多信息: - -- [代理 API](https://api.julep.ai/api/docs#tag/agents) -- [任务 API](https://api.julep.ai/api/docs#tag/tasks) -- [执行 API](https://api.julep.ai/api/docs#tag/executions) diff --git a/README_FR.md b/README_FR.md deleted file mode 100644 index 5e42f6e85..000000000 --- a/README_FR.md +++ /dev/null @@ -1,948 +0,0 @@ -English | [中文翻译](https://github.com/julep-ai/julep/blob/dev/README-CN.md) | [日本語翻訳](https://github.com/julep-ai/julep/blob/dev/README-JP.md) - -
- julep -
- -

-
- Explorer les documents - · - Discorde - · - 𝕏 - · - LinkedIn -

- - -

- NPM Version -   - PyPI - Version -   - Docker Image Version -   - GitHub License -

- -***** - -> [!REMARQUE] -> 👨‍💻 Vous êtes ici pour l'événement devfest.ai ? Rejoignez notre [Discord](https://discord.com/invite/JTSBGRZrzj) et consultez les détails ci-dessous. - -
-🌟 Contributeurs et participants au DevFest.AI(Cliquez pour agrandir) - -## 🌟 Appel aux contributeurs ! - -Nous sommes ravis d'accueillir de nouveaux contributeurs au projet Julep ! Nous avons créé plusieurs « bons premiers numéros » pour vous aider à démarrer. Voici comment vous pouvez contribuer : - -1. Consultez notre fichier [CONTRIBUTING.md](CONTRIBUTING.md) pour obtenir des instructions sur la manière de contribuer. -2. Parcourez nos [bons premiers numéros](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) pour trouver une tâche qui vous intéresse. -3. Si vous avez des questions ou avez besoin d'aide, n'hésitez pas à nous contacter sur notre chaîne [Discord](https://discord.com/invite/JTSBGRZrzj). - -Vos contributions, grandes ou petites, nous sont précieuses. Construisons ensemble quelque chose d'extraordinaire ! 🚀 - -### 🎉 DevFest.AI octobre 2024 - -Des nouvelles passionnantes ! Nous participons au DevFest.AI tout au long du mois d'octobre 2024 ! 🗓️ - -- Contribuez à Julep pendant cet événement et obtenez une chance de gagner de superbes produits et cadeaux Julep ! 🎁 -- Rejoignez des développeurs du monde entier pour contribuer aux référentiels d'IA et participer à des événements incroyables. -- Un grand merci à DevFest.AI pour l'organisation de cette fantastique initiative ! - -> [!TIP] -> Prêt à vous joindre à la fête ? **[Tweetez que vous participez](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)** et commençons à coder ! 🖥️ - -> [!REMARQUE] -> Obtenez votre clé API [ici](https://dashboard-dev.julep.ai). -> -> Pendant que nous sommes en version bêta, vous pouvez également nous contacter sur [Discord](https://discord.com/invite/JTSBGRZrzj) pour obtenir la levée des limites de débit sur votre clé API. - -![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) - -
- - - -
-

📖 Table des matières

- -- [Présentation](#introduction) -- [Exemple rapide](#quick-example) -- [Caractéristiques principales](#key-features) -- [Pourquoi Julep vs. LangChain ?](#pourquoi-julep-vs-langchain) -- [Différents cas d'utilisation](#different-use-cases) -- [Facteur de forme différent](#different-form-factor) -- [En résumé](#en-resumé) -- [Installation](#installation) -- [Démarrage rapide de Python 🐍](#python-quick-start-) -- [Étape 1 : Créer un agent](#step-1-create-an-agent) -- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip) -- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task) -- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent) -- [Démarrage rapide de Node.js 🟩](#nodejs-quick-start-) -- [Étape 1 : Créer un agent](#step-1-create-an-agent-1) -- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) -- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task-1) -- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent-1) -- [Composants](#composants) -- [Modèle mental](#mental-model) -- [Concepts](#concepts) -- [Comprendre les tâches](#understanding-tasks) -- [Types d'étapes de flux de travail](#types-of-workflow-steps) -- [Fonctionnalités avancées](#advanced-features) -- [Ajout d'outils aux agents](#adding-tools-to-agents) -- [Gestion des sessions et des utilisateurs](#managing-sessions-and-users) -- [Intégration et recherche de documents](#document-integration-and-search) -- [Intégrations](#intégrations) -- [Recherche courageuse](#brave-search) -- [Base du navigateur](#basedunavigateur) -- [Courriel](#courriel) -- [Araignée](#araignée) -- [Météo](#météo) -- [Wikipédia](#wikipédia) -- [Référence SDK](#sdk-reference) -- [Référence API](#api-reference) - -
- - -## Introduction - -Julep est une plateforme permettant de créer des agents IA qui se souviennent des interactions passées et peuvent effectuer des tâches complexes. Elle offre une mémoire à long terme et gère des processus en plusieurs étapes. - -Julep permet la création de tâches en plusieurs étapes intégrant la prise de décision, les boucles, le traitement parallèle et l'intégration avec de nombreux outils et API externes. - -Alors que de nombreuses applications d’IA se limitent à des chaînes simples et linéaires d’invites et d’appels d’API avec une ramification minimale, Julep est conçu pour gérer des scénarios plus complexes. - -Il prend en charge : -- Processus complexes en plusieurs étapes -- Prise de décision dynamique -- Exécution parallèle - -> [!TIP] -> Imaginez que vous souhaitiez créer un agent d'IA capable de faire plus que simplement répondre à des questions simples : il doit gérer des tâches complexes, se souvenir des interactions passées et peut-être même utiliser d'autres outils ou API. C'est là qu'intervient Julep. - -## Exemple rapide - -Imaginez un agent d’IA de recherche capable d’effectuer les opérations suivantes : -1. Prenez un sujet, -2. Proposez 100 requêtes de recherche pour ce sujet, -3. Effectuez ces recherches sur le Web en parallèle, -4. Résumez les résultats, -5. Envoyez le résumé sur Discord - -Dans Julep, ce serait une tâche unique sous80 lignes de codeet courirentièrement gérétout seul. Toutes les étapes sont exécutées sur les propres serveurs de Julep et vous n'avez pas besoin de lever le petit doigt. Voici un exemple fonctionnel : - -```yaml -name: Research Agent - -# Optional: Define the input schema for the task -input_schema: - type: object - properties: - topic: - type: string - description: The main topic to research - -# 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: "YOUR_DISCORD_WEBHOOK_URL" - method: POST - headers: - Content-Type: application/json - -# Special variables: -# - inputs: for accessing the input to the task -# - outputs: for accessing the output of previous steps -# - _: for accessing the output of the previous step - -# Define the main workflow -main: -- prompt: - - role: system - content: >- - You are a research assistant. - Generate 100 diverse search queries related to the topic: - {{inputs[0].topic}} - - Write one query per line. - unwrap: true - -# Evaluate the search queries using a simple python expression -- evaluate: - search_queries: "_.split('\n')" - -# Run the web search in parallel for each query -- over: "_.search_queries" - map: - tool: web_search - arguments: - query: "_" - parallelism: 100 - -# Collect the results from the web search -- evaluate: - results: "'\n'.join([item.result for item in _])" - -# Summarize the results -- prompt: - - role: system - content: > - You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. - The summary should be well-structured, informative, and highlight key findings and insights: - {{_.results}} - unwrap: true - -# Send the summary to Discord -- tool: discord_webhook - arguments: - content: > - **Research Summary for {{inputs[0].topic}}** - - {{_}} -``` - -> [!TIP] -> Julep est vraiment utile lorsque vous souhaitez créer des agents IA capables de conserver le contexte et l'état lors d'interactions à long terme. Il est idéal pour concevoir des flux de travail complexes en plusieurs étapes et pour intégrer divers outils et API directement dans les processus de votre agent. -> -> Dans cet exemple, Julep gérera automatiquement les exécutions parallèles, réessayera les étapes ayant échoué, renverra les requêtes API et maintiendra les tâches en cours d'exécution de manière fiable jusqu'à leur achèvement. - -## Principales caractéristiques - -1. 🧠 **Agents IA persistants** : mémorisent le contexte et les informations au cours d'interactions à long terme. -2. 💾 **Sessions avec état** : gardez une trace des interactions passées pour des réponses personnalisées. -3. 🔄 **Tâches en plusieurs étapes** : créez des processus complexes en plusieurs étapes avec des boucles et une prise de décision. -4. ⏳ **Gestion des tâches** : gérez les tâches de longue durée qui peuvent s'exécuter indéfiniment. -5. 🛠️ **Outils intégrés** : utilisez des outils intégrés et des API externes dans vos tâches. -6. 🔧 **Auto-réparation** : Julep réessaiera automatiquement les étapes ayant échoué, renverra les messages et assurera généralement le bon déroulement de vos tâches. -7. 📚 **RAG** ​​: Utilisez le magasin de documents de Julep pour créer un système permettant de récupérer et d'utiliser vos propres données. - -Julep est idéal pour les applications qui nécessitent des cas d’utilisation de l’IA au-delà des simples modèles de réponse rapide. - -## Pourquoi Julep vs. LangChain ? - -### Différents cas d'utilisation - -Considérez LangChain et Julep comme des outils avec des objectifs différents au sein de la pile de développement de l’IA. - -LangChain est idéal pour créer des séquences d'invites et gérer les interactions avec les modèles d'IA. Il dispose d'un vaste écosystème avec de nombreuses intégrations prédéfinies, ce qui le rend pratique si vous souhaitez mettre en place quelque chose rapidement. LangChain s'adapte bien aux cas d'utilisation simples qui impliquent une chaîne linéaire d'invites et d'appels d'API. - -Julep, en revanche, s'intéresse davantage à la création d'agents d'IA persistants capables de mémoriser des éléments au cours d'interactions à long terme. Il est particulièrement efficace lorsque vous avez besoin de tâches complexes impliquant plusieurs étapes, une prise de décision et une intégration avec divers outils ou API directement dans le processus de l'agent. Il est conçu dès le départ pour gérer les sessions persistantes et les tâches complexes. - -Utilisez Julep si vous imaginez créer un assistant IA complexe qui doit : - -- Suivez les interactions des utilisateurs sur plusieurs jours ou semaines. -- Exécutez des tâches planifiées, comme l'envoi de résumés quotidiens ou la surveillance de sources de données. -- Prendre des décisions basées sur des interactions antérieures ou des données stockées. -- Interagir avec plusieurs services externes dans le cadre de sa mission. - -Ensuite, Julep fournit l’infrastructure pour prendre en charge tout cela sans que vous ayez à le construire à partir de zéro. - -### Facteur de forme différent - -Julep est une **plateforme** qui comprend un langage pour décrire les tâches, un serveur pour exécuter ces tâches et un SDK pour interagir avec la plateforme. Pour créer quelque chose avec Julep, vous écrivez une description de la tâche en YAML, puis vous exécutez la tâche dans le cloud. - -Julep est conçu pour les tâches lourdes, en plusieurs étapes et de longue durée, et il n'y a aucune limite à la complexité de la tâche. - -LangChain est une **bibliothèque** qui inclut quelques outils et un framework pour créer des chaînes linéaires d'invites et d'outils. Pour créer quelque chose avec LangChain, vous écrivez généralement du code Python qui configure et exécute les chaînes de modèles que vous souhaitez utiliser. - -LangChain pourrait être suffisant et plus rapide à mettre en œuvre pour les cas d'utilisation simples impliquant une chaîne linéaire d'invites et d'appels d'API. - -### En résumé - -Utilisez LangChain lorsque vous devez gérer les interactions des modèles d’IA et les séquences d’invite dans un contexte sans état ou à court terme. - -Choisissez Julep lorsque vous avez besoin d'un framework robuste pour les agents avec état avec des capacités de tâches avancées, des sessions persistantes et une gestion de tâches complexes. - -## Installation - -Pour commencer à utiliser Julep, installez-le en utilisant [npm](https://www.npmjs.com/package/@julep/sdk) ou [pip](https://pypi.org/project/julep/) : - -```bash -npm install @julep/sdk -``` - -ou - -```bash -pip install julep -``` - -> [!REMARQUE] -> Obtenez votre clé API [ici](https://dashboard-dev.julep.ai). -> -> Pendant que nous sommes en version bêta, vous pouvez également nous contacter sur [Discord](https://discord.com/invite/JTSBGRZrzj) pour obtenir la levée des limites de débit sur votre clé API. - -> [!TIP] -> 💻 Êtes-vous du genre à vouloir _montrer le code !™_ ? Nous avons créé une multitude de livres de recettes pour vous aider à démarrer. **Consultez les [livres de recettes](https://github.com/julep-ai/julep/tree/dev/cookbooks)** pour parcourir les exemples. -> -> 💡 Il existe également de nombreuses idées que vous pouvez développer en plus de Julep. **Consultez la [liste d'idées](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** pour vous inspirer. - -## Démarrage rapide de Python 🐍 - -### Étape 1 : Créer un agent - -```python -import yaml -from julep import Julep # or AsyncJulep - -client = Julep(api_key="your_julep_api_key") - -agent = client.agents.create( - name="Storytelling Agent", - model="gpt-4o", - about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", -) - -# 🛠️ Add an image generation tool (DALL·E) to the agent -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_openai_api_key", - }, - }, -) -``` - -### Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée - -Définissons une tâche en plusieurs étapes pour créer une histoire et générer une bande dessinée à panneaux basée sur une idée d'entrée : - -```python -# 📋 Task -# Create a task that takes an idea and creates a story and a 4-panel comic strip -task_yaml = """ -name: Story and Comic Creator -description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. - -main: - # Step 1: Generate a story and outline into 4 panels - - 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 - - # Step 2: Extract the panel descriptions and story - - evaluate: - story: _.split('1. ')[0].strip() - panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) - - # Step 3: Generate images for each panel using the image generator tool - - foreach: - in: _.panels - do: - tool: image_generator - arguments: - description: _ - - # Step 4: Generate a catchy title for the story - - prompt: - - role: system - content: You are {{agent.name}}. {{agent.about}} - - role: user - content: > - Based on the story below, generate a catchy title. - - Story: {{outputs[1].story}} - unwrap: true - - # Step 5: Return the story, the generated images, and the title - - return: - title: outputs[3] - story: outputs[1].story - comic_panels: "[output.image.url for output in outputs[2]]" -""" - -task = client.tasks.create( - agent_id=agent.id, - **yaml.safe_load(task_yaml) -) -``` - -### Étape 3 : Exécuter la tâche - -```python -# 🚀 Execute the task with an input idea -execution = client.executions.create( - task_id=task.id, - input={"idea": "A cat who learns to fly"} -) - -# 🎉 Watch as the story and comic panels are generated -for transition in client.executions.transitions.stream(execution_id=execution.id): - print(transition) - -# 📦 Once the execution is finished, retrieve the results -result = client.executions.get(execution_id=execution.id) -``` - -### Étape 4 : Discuter avec l'agent - -Démarrez une session de chat interactive avec l'agent : - -```python -session = client.sessions.create(agent_id=agent.id) - -# 💬 Send messages to the agent -while (message := input("Enter a message: ")) != "quit": - response = client.sessions.chat( - session_id=session.id, - message=message, - ) - - print(response) -``` - -> [!TIP] -> Vous pouvez trouver l'exemple Python complet [ici](example.py). - - -## Démarrage rapide de Node.js 🟩 - -### Étape 1 : Créer un agent - -```javascript -import { Julep } from '@julep/sdk'; -import yaml from 'js-yaml'; - -const client = new Julep({ apiKey: 'your_julep_api_key' }); - -async function createAgent() { - const agent = await client.agents.create({ - name: "Storytelling Agent", - model: "gpt-4", - about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", - }); - - // 🛠️ Add an image generation tool (DALL·E) to the agent - await client.agents.tools.create(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_openai_api_key", - }, - }, - }); - - return agent; -} -``` - -### Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée - -```javascript -const taskYaml = ` -name: Story and Comic Creator -description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. - -main: - # Step 1: Generate a story and outline into 4 panels - - 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 - - # Step 2: Extract the panel descriptions and story - - evaluate: - story: _.split('1. ')[0].trim() - panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) - - # Step 3: Generate images for each panel using the image generator tool - - foreach: - in: _.panels - do: - tool: image_generator - arguments: - description: _ - - # Step 4: Generate a catchy title for the story - - prompt: - - role: system - content: You are {{agent.name}}. {{agent.about}} - - role: user - content: > - Based on the story below, generate a catchy title. - - Story: {{outputs[1].story}} - unwrap: true - - # Step 5: Return the story, the generated images, and the title - - return: - title: outputs[3] - story: outputs[1].story - comic_panels: outputs[2].map(output => output.image.url) -`; - -async function createTask(agent) { - const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); - return task; -} -``` - -### Étape 3 : Exécuter la tâche - -```javascript -async function executeTask(task) { - const execution = await client.executions.create(task.id, { - input: { idea: "A cat who learns to fly" } - }); - - // 🎉 Watch as the story and comic panels are generated - for await (const transition of client.executions.transitions.stream(execution.id)) { - console.log(transition); - } - - // 📦 Once the execution is finished, retrieve the results - const result = await client.executions.get(execution.id); - return result; -} -``` - -### Étape 4 : Discuter avec l'agent - -```javascript -async function chatWithAgent(agent) { - const session = await client.sessions.create({ agent_id: agent.id }); - - // 💬 Send messages to the agent - const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout - }); - - const chat = async () => { - rl.question("Enter a message (or 'quit' to exit): ", async (message) => { - if (message.toLowerCase() === 'quit') { - rl.close(); - return; - } - - const response = await client.sessions.chat(session.id, { message }); - console.log(response); - chat(); - }); - }; - - chat(); -} - -// Run the example -async function runExample() { - const agent = await createAgent(); - const task = await createTask(agent); - const result = await executeTask(task); - console.log("Task Result:", result); - await chatWithAgent(agent); -} - -runExample().catch(console.error); -``` - -> [!TIP] -> Vous pouvez trouver l'exemple complet de Node.js [ici](example.js). - -## Composants - -Julep est composé des éléments suivants : - -- **Plateforme Julep** : la plateforme Julep est un service cloud qui exécute vos workflows. Elle comprend un langage pour décrire les workflows, un serveur pour exécuter ces workflows et un SDK pour interagir avec la plateforme. -- **SDK Julep** : les SDK Julep sont un ensemble de bibliothèques permettant de créer des workflows. Il existe des SDK pour Python et JavaScript, et d'autres sont en cours de développement. -- **API Julep** : L'API Julep est une API RESTful que vous pouvez utiliser pour interagir avec la plateforme Julep. - -### Modèle mental - -
- -
- -Considérez Julep comme une plateforme qui combine des composants côté client et côté serveur pour vous aider à créer des agents d'IA avancés. Voici comment le visualiser : - -1. **Votre code d'application :** -- Vous utilisez le SDK Julep dans votre application pour définir des agents, des tâches et des workflows. -- Le SDK fournit des fonctions et des classes qui facilitent la configuration et la gestion de ces composants. - -2. **Service back-end Julep :** -- Le SDK communique avec le backend Julep via le réseau. -- Le backend gère l'exécution des tâches, maintient l'état de la session, stocke les documents et orchestre les flux de travail. - -3. **Intégration avec les outils et les API :** -- Au sein de vos workflows, vous pouvez intégrer des outils et services externes. -- Le backend facilite ces intégrations, afin que vos agents puissent, par exemple, effectuer des recherches sur le Web, accéder à des bases de données ou appeler des API tierces. - -En termes plus simples : -- Julep est une plateforme permettant de créer des agents d'IA avec état. -- Vous utilisez le SDK (comme une boîte à outils) dans votre code pour définir ce que font vos agents. -- Le service backend (que vous pouvez considérer comme le moteur) exécute ces définitions, gère l'état et gère la complexité. - -## Concepts - -Julep s'appuie sur plusieurs composants techniques clés qui fonctionnent ensemble pour créer de puissants flux de travail d'IA : - -```mermaid -graph TD - User[User] ==> Session[Session] - Session --> Agent[Agent] - Agent --> Tasks[Tasks] - Agent --> LLM[Large Language Model] - Tasks --> Tools[Tools] - Agent --> Documents[Documents] - Documents --> VectorDB[Vector Database] - Tasks --> Executions[Executions] - - classDef client fill:#9ff,stroke:#333,stroke-width:1px; - class User client; - - classDef core fill:#f9f,stroke:#333,stroke-width:2px; - class Agent,Tasks,Session core; -``` - -- **Agents** : entités alimentées par l'IA et soutenues par de grands modèles linguistiques (LLM) qui exécutent des tâches et interagissent avec les utilisateurs. -- **Utilisateurs** : entités qui interagissent avec les agents via des sessions. -- **Sessions** : interactions avec état entre agents et utilisateurs, maintenant le contexte sur plusieurs échanges. -- **Tâches** : flux de travail programmatiques en plusieurs étapes que les agents peuvent exécuter, y compris différents types d'étapes telles que des invites, des appels d'outils et une logique conditionnelle. -- **Outils** : intégrations qui étendent les capacités d'un agent, y compris les fonctions définies par l'utilisateur, les outils système ou les intégrations d'API tierces. -- **Documents** : Objets textes ou données associés à des agents ou utilisateurs, vectorisés et stockés pour la recherche et la récupération sémantiques. -- **Exécutions** : instances de tâches qui ont été initiées avec des entrées spécifiques, avec leur propre cycle de vie et leur propre machine d'état. - -Pour une explication plus détaillée de ces concepts et de leurs interactions, veuillez vous référer à notre [Documentation sur les concepts](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md). - -## Comprendre les tâches - -Les tâches sont au cœur du système de workflow de Julep. Elles vous permettent de définir des workflows IA complexes en plusieurs étapes que vos agents peuvent exécuter. Voici un bref aperçu des composants des tâches : - -- **Nom et description** : Chaque tâche a un nom et une description uniques pour une identification facile. -- **Étapes principales** : Le cœur d’une tâche, définissant la séquence d’actions à effectuer. -- **Outils** : intégrations facultatives qui étendent les capacités de votre agent pendant l'exécution des tâches. - -### Types d'étapes de flux de travail - -Les tâches dans Julep peuvent inclure différents types d'étapes, ce qui vous permet de créer des flux de travail complexes et puissants. Voici un aperçu des types d'étapes disponibles, organisés par catégorie : - -#### Étapes courantes - -1. **Invite** : envoyez un message au modèle d’IA et recevez une réponse. - ```yaml - - prompt: "Analyze the following data: {{data}}" - ``` - -2. **Appel d'outil** : Exécutez un outil ou une API intégrée. - ```yaml - - tool: web_search - arguments: - query: "Latest AI developments" - ``` - -3. **Évaluer** : Effectuer des calculs ou manipuler des données. - ```yaml - - evaluate: - average_score: "sum(scores) / len(scores)" - ``` - -4. **Attendre l'entrée** : mettre le flux de travail en pause jusqu'à ce que l'entrée soit reçue. - ```yaml - - wait_for_input: - info: - message: "Please provide additional information." - ``` - -5. **Journal** : Enregistrer une valeur ou un message spécifié. - ```yaml - - log: "Processing completed for item {{item_id}}" - ``` - -#### Étapes clé-valeur - -6. **Get** : récupérer une valeur à partir d'un magasin clé-valeur. - ```yaml - - get: "user_preference" - ``` - -7. **Set** : attribuez une valeur à une clé dans un magasin clé-valeur. - ```yaml - - set: - user_preference: "dark_mode" - ``` - -#### Étapes d'itération - -8. **Foreach** : itérer sur une collection et effectuer des étapes pour chaque élément. - ```yaml - - foreach: - in: "data_list" - do: - - log: "Processing item {{_}}" - ``` - -9. **Map-Reduce** : Cartographiez une collection et réduisez les résultats. - ```yaml - - map_reduce: - over: "numbers" - map: - - evaluate: - squared: "_ ** 2" - reduce: "sum(results)" - ``` - -10. **Parallèle** : exécuter plusieurs étapes en parallèle. - ```yaml - - parallel: - - tool: web_search - arguments: - query: "AI news" - - tool: weather_check - arguments: - location: "New York" - ``` - -#### Étapes conditionnelles - -11. **If-Else** : Exécution conditionnelle des étapes. - ```yaml - - if: "score > 0.8" - then: - - log: "High score achieved" - else: - - log: "Score needs improvement" - ``` - -12. **Switch** : exécuter des étapes en fonction de plusieurs conditions. - ```yaml - - switch: - - case: "category == 'A'" - then: - - log: "Category A processing" - - case: "category == 'B'" - then: - - log: "Category B processing" - - case: "_" # Default case - then: - - log: "Unknown category" - ``` - -#### Autre flux de contrôle - -13. **Veille** : met le flux de travail en pause pendant une durée spécifiée. - ```yaml - - sleep: - seconds: 30 - ``` - -14. **Retour** : renvoie une valeur du flux de travail. - ```yaml - - return: - result: "Task completed successfully" - ``` - -15. **Rendement** : Exécutez un sous-flux de travail et attendez sa fin. - ```yaml - - yield: - workflow: "data_processing_subflow" - arguments: - input_data: "{{raw_data}}" - ``` - -16. **Erreur** : gérez les erreurs en spécifiant un message d’erreur. - ```yaml - - error: "Invalid input provided" - ``` - -Chaque type d'étape remplit un objectif spécifique dans la création de workflows d'IA sophistiqués. Cette catégorisation permet de comprendre les différents flux de contrôle et opérations disponibles dans les tâches Julep. - -## Fonctionnalités avancées - -Julep propose une gamme de fonctionnalités avancées pour améliorer vos flux de travail d'IA : - -### Ajout d'outils aux agents - -Étendez les capacités de votre agent en intégrant des outils et des API externes : - -```python -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"}, - }, -) -``` - -### Gestion des sessions et des utilisateurs - -Julep fournit une gestion de session robuste pour les interactions persistantes : - -```python -session = client.sessions.create( - agent_id=agent.id, - user_id=user.id, - context_overflow="adaptive" -) - -# Continue conversation in the same session -response = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": "Follow up on the previous conversation." - } - ] -) -``` - -### Intégration et recherche de documents - -Gérez et recherchez facilement des documents pour vos agents : - -```python -# Upload a document -document = client.agents.docs.create( - title="AI advancements", - content="AI is changing the world...", - metadata={"category": "research_paper"} -) - -# Search documents -results = client.agents.docs.search( - text="AI advancements", - metadata_filter={"category": "research_paper"} -) -``` - -Pour des fonctionnalités plus avancées et une utilisation détaillée, veuillez vous référer à notre [Documentation sur les fonctionnalités avancées](https://docs.julep.ai/advanced-features). - -## Intégrations - -Julep prend en charge diverses intégrations qui étendent les capacités de vos agents IA. Voici une liste des intégrations disponibles et de leurs arguments pris en charge : - -### Recherche courageuse - -```yaml -setup: - api_key: string # The API key for Brave Search - -arguments: - query: string # The search query for searching with Brave - -output: - result: string # The result of the Brave Search -``` - -### Base de navigateur - -```yaml -setup: - api_key: string # The API key for BrowserBase - project_id: string # The project ID for BrowserBase - session_id: string # (Optional) The session ID for BrowserBase - -arguments: - urls: list[string] # The URLs for loading with BrowserBase - -output: - documents: list # The documents loaded from the URLs -``` - -### E-mail - -```yaml -setup: - host: string # The host of the email server - port: integer # The port of the email server - user: string # The username of the email server - password: string # The password of the email server - -arguments: - to: string # The email address to send the email to - from: string # The email address to send the email from - subject: string # The subject of the email - body: string # The body of the email - -output: - success: boolean # Whether the email was sent successfully -``` - -### Araignée - -```yaml -setup: - spider_api_key: string # The API key for Spider - -arguments: - url: string # The URL for which to fetch data - mode: string # The type of crawlers (default: "scrape") - params: dict # (Optional) The parameters for the Spider API - -output: - documents: list # The documents returned from the spider -``` - -### Météo - -```yaml -setup: - openweathermap_api_key: string # The API key for OpenWeatherMap - -arguments: - location: string # The location for which to fetch weather data - -output: - result: string # The weather data for the specified location -``` - -### Wikipédia - -```yaml -arguments: - query: string # The search query string - load_max_docs: integer # Maximum number of documents to load (default: 2) - -output: - documents: list # The documents returned from the Wikipedia search -``` - -Ces intégrations peuvent être utilisées dans vos tâches pour étendre les capacités de vos agents IA. Pour des informations plus détaillées sur la manière d'utiliser ces intégrations dans vos workflows, veuillez consulter notre [Documentation sur les intégrations](https://docs.julep.ai/integrations). - -## Référence du SDK - -- [Kit de développement logiciel Node.js](https://github.com/julep-ai/node-sdk/blob/main/api.md) -- [SDK Python](https://github.com/julep-ai/python-sdk/blob/main/api.md) - -## Référence API - -Explorez notre documentation API complète pour en savoir plus sur les agents, les tâches et les exécutions : - -- [API des agents](https://api.julep.ai/api/docs#tag/agents) -- [API des tâches](https://api.julep.ai/api/docs#tag/tasks) -- [API d'exécution](https://api.julep.ai/api/docs#tag/executions) diff --git a/README_JA.md b/README_JA.md deleted file mode 100644 index 1da8a87a1..000000000 --- a/README_JA.md +++ /dev/null @@ -1,948 +0,0 @@ -English | [中文翻译](https://github.com/julep-ai/julep/blob/dev/README-CN.md) | [日本語翻訳](https://github.com/julep-ai/julep/blob/dev/README-JP.md) - -
- julep -
- -

-
- ドキュメントを見る - · - 不和 - · - 𝕏 - · - リンクトイン -

- - -

- NPM Version -   - PyPI - Version -   - Docker Image Version -   - GitHub License -

- -***** - -> [!注意] -> 👨‍💻 devfest.ai イベントに参加しませんか? [Discord](https://discord.com/invite/JTSBGRZrzj) に参加して、以下の詳細を確認してください。 - -
-🌟 貢献者とDevFest.AI参加者(クリックして拡大) - -## 🌟 貢献者を募集します! - -Julep プロジェクトに新しい貢献者を迎えられることを嬉しく思います。プロジェクトを始めるのに役立つ「最初の良い問題」をいくつか作成しました。貢献する方法は次のとおりです。 - -1. 貢献方法に関するガイドラインについては、[CONTRIBUTING.md](CONTRIBUTING.md) ファイルをご覧ください。 -2. [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) を参照して、興味のあるタスクを見つけます。 -3. ご質問やご不明な点がございましたら、[Discord](https://discord.com/invite/JTSBGRZrzj) チャンネルまでお気軽にお問い合わせください。 - -あなたの貢献は、大小を問わず私たちにとって貴重です。一緒に素晴らしいものを作りましょう!🚀 - -### 🎉 DevFest.AI 2024年10月 - -嬉しいニュースです!2024 年 10 月を通して DevFest.AI に参加します!🗓️ - -- このイベント中に Julep に貢献すると、素晴らしい Julep のグッズや景品を獲得するチャンスが得られます! 🎁 -- 世界中の開発者とともに AI リポジトリに貢献し、素晴らしいイベントに参加しましょう。 -- この素晴らしい取り組みを企画してくださった DevFest.AI に心から感謝します。 - -> [!ヒント] -> 楽しみに参加する準備はできましたか? **[参加することをツイート](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)**して、コーディングを始めましょう! 🖥️ - -> [!注意] -> API キーを [こちら](https://dashboard-dev.julep.ai) から取得します。 -> -> ベータ版では、[Discord](https://discord.com/invite/JTSBGRZrzj) に連絡して、API キーのレート制限を解除することもできます。 - -![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) - -
- - - -
-

📖 目次

- -- [はじめに](#introduction) -- [簡単な例](#quick-example) -- [主な機能](#key-features) -- [なぜ Julep と LangChain を比較するのか?](#why-julep-vs-langchain) -- [さまざまなユースケース](#different-use-cases) -- [異なるフォームファクター](#different-form-factor) -- [要約](#in-summary) -- [インストール](#installation) -- [Python クイックスタート 🐍](#python-quick-start-) -- [ステップ 1: エージェントを作成する](#step-1-create-an-agent) -- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip) -- [ステップ 3: タスクを実行する](#step-3-execute-the-task) -- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent) -- [Node.js クイック スタート 🟩](#nodejs-quick-start-) -- [ステップ 1: エージェントを作成する](#step-1-create-an-agent-1) -- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) -- [ステップ 3: タスクを実行する](#step-3-execute-the-task-1) -- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent-1) -- [コンポーネント](#components) -- [メンタルモデル](#mental-model) -- [コンセプト](#concepts) -- [タスクの理解](#understanding-tasks) -- [ワークフロー ステップの種類](#types-of-workflow-steps) -- [高度な機能](#advanced-features) -- [エージェントへのツールの追加](#adding-tools-to-agents) -- [セッションとユーザーの管理](#managing-sessions-and-users) -- [ドキュメントの統合と検索](#document-integration-and-search) -- [統合](#integrations) -- [勇敢な検索](#brave-search) -- [ブラウザベース](#browserbase) -- [メールアドレス](#email) -- [スパイダー](#spider) -- [天気](#weather) -- [ウィキペディア](#wikipedia) -- [SDKリファレンス](#sdk-reference) -- [APIリファレンス](#api-reference) - -
- - -## 導入 - -Julep は、過去のやり取りを記憶し、複雑なタスクを実行できる AI エージェントを作成するためのプラットフォームです。長期記憶を提供し、複数ステップのプロセスを管理します。 - -Julep を使用すると、意思決定、ループ、並列処理、多数の外部ツールや API との統合を組み込んだ複数ステップのタスクを作成できます。 - -多くの AI アプリケーションは、分岐が最小限の、プロンプトと API 呼び出しの単純な線形チェーンに制限されていますが、Julep はより複雑なシナリオを処理できるように構築されています。 - -サポート対象: -- 複雑で多段階のプロセス -- ダイナミックな意思決定 -- 並列実行 - -> [!ヒント] -> 単純な質問に答えるだけでなく、複雑なタスクを処理し、過去のやり取りを記憶し、場合によっては他のツールや API も使用できる AI エージェントを構築したいとします。そこで Julep の出番です。 - -## 簡単な例 - -次のことができる研究 AI エージェントを想像してください。 -1. トピックを取り上げ、 -2. そのトピックについて100個の検索クエリを考えます。 -3. ウェブ検索を並行して実行する -4. 結果をまとめる -5.要約をDiscordに送信する - -Julepでは、これは単一のタスクになります80行のコードそして走る完全に管理されたすべては Julep のサーバー上で実行されます。すべての手順は Julep のサーバー上で実行されるため、何もする必要はありません。次に動作例を示します。 - -```yaml -name: Research Agent - -# Optional: Define the input schema for the task -input_schema: - type: object - properties: - topic: - type: string - description: The main topic to research - -# 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: "YOUR_DISCORD_WEBHOOK_URL" - method: POST - headers: - Content-Type: application/json - -# Special variables: -# - inputs: for accessing the input to the task -# - outputs: for accessing the output of previous steps -# - _: for accessing the output of the previous step - -# Define the main workflow -main: -- prompt: - - role: system - content: >- - You are a research assistant. - Generate 100 diverse search queries related to the topic: - {{inputs[0].topic}} - - Write one query per line. - unwrap: true - -# Evaluate the search queries using a simple python expression -- evaluate: - search_queries: "_.split('\n')" - -# Run the web search in parallel for each query -- over: "_.search_queries" - map: - tool: web_search - arguments: - query: "_" - parallelism: 100 - -# Collect the results from the web search -- evaluate: - results: "'\n'.join([item.result for item in _])" - -# Summarize the results -- prompt: - - role: system - content: > - You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. - The summary should be well-structured, informative, and highlight key findings and insights: - {{_.results}} - unwrap: true - -# Send the summary to Discord -- tool: discord_webhook - arguments: - content: > - **Research Summary for {{inputs[0].topic}}** - - {{_}} -``` - -> [!ヒント] -> Julep は、長期的なインタラクションを通じてコン​​テキストと状態を維持できる AI エージェントを構築する場合に非常に便利です。複雑な複数ステップのワークフローを設計し、さまざまなツールや API をエージェントのプロセスに直接統合するのに最適です。 -> -> この例では、Julep は並列実行を自動的に管理し、失敗したステップを再試行し、API リクエストを再送信し、タスクが完了するまで確実に実行し続けます。 - -## 主な特徴 - -1. 🧠 **永続的な AI エージェント**: 長期にわたるやり取りを通じてコン​​テキストと情報を記憶します。 -2. 💾 **ステートフル セッション**: 過去のやり取りを追跡して、パーソナライズされた応答を提供します。 -3. 🔄 **複数ステップのタスク**: ループと意思決定を使用して、複雑な複数ステップのプロセスを構築します。 -4. ⏳ **タスク管理**: 無期限に実行される可能性のある長時間実行タスクを処理します。 -5. 🛠️ **組み込みツール**: タスクで組み込みツールと外部 API を使用します。 -6. 🔧 **自己修復**: Julep は失敗したステップを自動的に再試行し、メッセージを再送信し、タスクがスムーズに実行されるようにします。 -7. 📚 **RAG**: Julep のドキュメント ストアを使用して、独自のデータを取得して使用するためのシステムを構築します。 - -Julep は、単純なプロンプト応答モデルを超えた AI ユースケースを必要とするアプリケーションに最適です。 - -## Julep と LangChain を比較する理由 - -### さまざまなユースケース - -LangChain と Julep は、AI 開発スタック内で異なる重点を置いたツールと考えてください。 - -LangChain は、プロンプトのシーケンスを作成し、AI モデルとのやり取りを管理するのに最適です。多数の事前構築された統合を備えた大規模なエコシステムを備えているため、何かをすぐに立ち上げて実行したい場合に便利です。LangChain は、プロンプトと API 呼び出しの線形チェーンを含む単純なユースケースに適しています。 - -一方、Julep は、長期的なインタラクションを通じて物事を記憶できる永続的な AI エージェントの構築に重点を置いています。エージェントのプロセス内で複数のステップ、意思決定、さまざまなツールや API との直接統合を伴う複雑なタスクが必要な場合に効果を発揮します。永続的なセッションと複雑なタスクを管理するために、ゼロから設計されています。 - -以下のことを必要とする複雑な AI アシスタントの構築を考えている場合には、Julep を使用してください。 - -- 数日または数週間にわたってユーザーのインタラクションを追跡します。 -- 毎日のサマリーの送信やデータ ソースの監視などのスケジュールされたタスクを実行します。 -- 以前のやり取りや保存されたデータに基づいて決定を下します。 -- タスクの一部として複数の外部サービスと対話します。 - -そして、Julep は、ゼロから構築する必要なく、これらすべてをサポートするインフラストラクチャを提供します。 - -### 異なるフォームファクタ - -Julep は、タスクを記述するための言語、それらのタスクを実行するためのサーバー、プラットフォームと対話するための SDK を含む **プラットフォーム** です。Julep で何かを構築するには、タスクの説明を `YAML` で記述し、クラウドでタスクを実行します。 - -Julep は、負荷の高い、複数のステップから成る、長時間実行されるタスク向けに構築されており、タスクの複雑さに制限はありません。 - -LangChain は、プロンプトとツールの線形チェーンを構築するためのいくつかのツールとフレームワークを含む **ライブラリ** です。LangChain を使用して何かを構築するには、通常、使用するモデル チェーンを設定して実行する Python コードを記述します。 - -LangChain は、プロンプトと API 呼び出しの線形チェーンを含む単純なユースケースでは十分であり、実装も迅速です。 - -### 要約すれば - -ステートレスまたは短期的なコンテキストで AI モデルのインタラクションとプロンプト シーケンスを管理する必要がある場合は、LangChain を使用します。 - -高度なタスク機能、永続的なセッション、複雑なタスク管理を備えたステートフル エージェント用の堅牢なフレームワークが必要な場合は、Julep を選択してください。 - -## インストール - -Julep を使い始めるには、[npm](https://www.npmjs.com/package/@julep/sdk) または [pip](https://pypi.org/project/julep/) を使用してインストールします。 - -```bash -npm install @julep/sdk -``` - -または - -```bash -pip install julep -``` - -> [!注意] -> API キーを [こちら](https://dashboard-dev.julep.ai) から取得します。 -> -> ベータ版では、[Discord](https://discord.com/invite/JTSBGRZrzj) に連絡して、API キーのレート制限を解除することもできます。 - -> [!ヒント] -> 💻 あなたは「コードを見せてください!™」タイプの人ですか? 始めるにあたって役立つクックブックを多数作成しました。**[クックブック](https://github.com/julep-ai/julep/tree/dev/cookbooks)** をチェックして、例を参照してください。 -> -> 💡 Julep をベースに構築できるアイデアもたくさんあります。**[アイデアのリスト](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** をチェックして、インスピレーションを得てください。 - -## Python クイックスタート 🐍 - -### ステップ 1: エージェントを作成する - -```python -import yaml -from julep import Julep # or AsyncJulep - -client = Julep(api_key="your_julep_api_key") - -agent = client.agents.create( - name="Storytelling Agent", - model="gpt-4o", - about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", -) - -# 🛠️ Add an image generation tool (DALL·E) to the agent -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_openai_api_key", - }, - }, -) -``` - -### ステップ2: ストーリーと漫画を生成するタスクを作成する - -入力されたアイデアに基づいてストーリーを作成し、パネル化された漫画を生成するためのマルチステップタスクを定義しましょう。 - -```python -# 📋 Task -# Create a task that takes an idea and creates a story and a 4-panel comic strip -task_yaml = """ -name: Story and Comic Creator -description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. - -main: - # Step 1: Generate a story and outline into 4 panels - - 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 - - # Step 2: Extract the panel descriptions and story - - evaluate: - story: _.split('1. ')[0].strip() - panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) - - # Step 3: Generate images for each panel using the image generator tool - - foreach: - in: _.panels - do: - tool: image_generator - arguments: - description: _ - - # Step 4: Generate a catchy title for the story - - prompt: - - role: system - content: You are {{agent.name}}. {{agent.about}} - - role: user - content: > - Based on the story below, generate a catchy title. - - Story: {{outputs[1].story}} - unwrap: true - - # Step 5: Return the story, the generated images, and the title - - return: - title: outputs[3] - story: outputs[1].story - comic_panels: "[output.image.url for output in outputs[2]]" -""" - -task = client.tasks.create( - agent_id=agent.id, - **yaml.safe_load(task_yaml) -) -``` - -### ステップ3: タスクを実行する - -```python -# 🚀 Execute the task with an input idea -execution = client.executions.create( - task_id=task.id, - input={"idea": "A cat who learns to fly"} -) - -# 🎉 Watch as the story and comic panels are generated -for transition in client.executions.transitions.stream(execution_id=execution.id): - print(transition) - -# 📦 Once the execution is finished, retrieve the results -result = client.executions.get(execution_id=execution.id) -``` - -### ステップ4: エージェントとチャットする - -エージェントとの対話型チャット セッションを開始します。 - -```python -session = client.sessions.create(agent_id=agent.id) - -# 💬 Send messages to the agent -while (message := input("Enter a message: ")) != "quit": - response = client.sessions.chat( - session_id=session.id, - message=message, - ) - - print(response) -``` - -> [!ヒント] -> 完全な Python の例は [ここ](example.py) にあります。 - - -## Node.js クイックスタート 🟩 - -### ステップ 1: エージェントを作成する - -```javascript -import { Julep } from '@julep/sdk'; -import yaml from 'js-yaml'; - -const client = new Julep({ apiKey: 'your_julep_api_key' }); - -async function createAgent() { - const agent = await client.agents.create({ - name: "Storytelling Agent", - model: "gpt-4", - about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", - }); - - // 🛠️ Add an image generation tool (DALL·E) to the agent - await client.agents.tools.create(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_openai_api_key", - }, - }, - }); - - return agent; -} -``` - -### ステップ2: ストーリーと漫画を生成するタスクを作成する - -```javascript -const taskYaml = ` -name: Story and Comic Creator -description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. - -main: - # Step 1: Generate a story and outline into 4 panels - - 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 - - # Step 2: Extract the panel descriptions and story - - evaluate: - story: _.split('1. ')[0].trim() - panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) - - # Step 3: Generate images for each panel using the image generator tool - - foreach: - in: _.panels - do: - tool: image_generator - arguments: - description: _ - - # Step 4: Generate a catchy title for the story - - prompt: - - role: system - content: You are {{agent.name}}. {{agent.about}} - - role: user - content: > - Based on the story below, generate a catchy title. - - Story: {{outputs[1].story}} - unwrap: true - - # Step 5: Return the story, the generated images, and the title - - return: - title: outputs[3] - story: outputs[1].story - comic_panels: outputs[2].map(output => output.image.url) -`; - -async function createTask(agent) { - const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); - return task; -} -``` - -### ステップ3: タスクを実行する - -```javascript -async function executeTask(task) { - const execution = await client.executions.create(task.id, { - input: { idea: "A cat who learns to fly" } - }); - - // 🎉 Watch as the story and comic panels are generated - for await (const transition of client.executions.transitions.stream(execution.id)) { - console.log(transition); - } - - // 📦 Once the execution is finished, retrieve the results - const result = await client.executions.get(execution.id); - return result; -} -``` - -### ステップ4: エージェントとチャットする - -```javascript -async function chatWithAgent(agent) { - const session = await client.sessions.create({ agent_id: agent.id }); - - // 💬 Send messages to the agent - const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout - }); - - const chat = async () => { - rl.question("Enter a message (or 'quit' to exit): ", async (message) => { - if (message.toLowerCase() === 'quit') { - rl.close(); - return; - } - - const response = await client.sessions.chat(session.id, { message }); - console.log(response); - chat(); - }); - }; - - chat(); -} - -// Run the example -async function runExample() { - const agent = await createAgent(); - const task = await createTask(agent); - const result = await executeTask(task); - console.log("Task Result:", result); - await chatWithAgent(agent); -} - -runExample().catch(console.error); -``` - -> [!ヒント] -> 完全な Node.js の例は [ここ](example.js) にあります。 - -## コンポーネント - -Julep は次のコンポーネントで構成されています。 - -- **Julep プラットフォーム**: Julep プラットフォームは、ワークフローを実行するクラウド サービスです。ワークフローを記述するための言語、ワークフローを実行するためのサーバー、プラットフォームと対話するための SDK が含まれています。 -- **Julep SDK**: Julep SDK は、ワークフローを構築するためのライブラリのセットです。Python 用と JavaScript 用の SDK があり、今後さらに追加される予定です。 -- **Julep API**: Julep API は、Julep プラットフォームと対話するために使用できる RESTful API です。 - -### メンタルモデル - -
- -
- -Julep は、クライアント側とサーバー側の両方のコンポーネントを組み合わせて、高度な AI エージェントの構築を支援するプラットフォームと考えてください。これを視覚化する方法は次のとおりです。 - -1. **アプリケーションコード:** -- アプリケーションで Julep SDK を使用して、エージェント、タスク、ワークフローを定義します。 -- SDK は、これらのコンポーネントのセットアップと管理を容易にする関数とクラスを提供します。 - -2. **Julep バックエンド サービス:** -- SDK はネットワーク経由で Julep バックエンドと通信します。 -- バックエンドは、タスクの実行を処理し、セッション状態を維持し、ドキュメントを保存し、ワークフローを調整します。 - -3. **ツールとAPIとの統合:** -- ワークフロー内で、外部ツールやサービスを統合できます。 -- バックエンドはこれらの統合を容易にするため、エージェントは、たとえば、Web 検索を実行したり、データベースにアクセスしたり、サードパーティの API を呼び出したりすることができます。 - -もっと簡単に言うと: -- Julep は、ステートフル AI エージェントを構築するためのプラットフォームです。 -- コード内で SDK (ツールキットのようなもの) を使用して、エージェントの動作を定義します。 -- バックエンド サービス (エンジンと考えることができます) は、これらの定義を実行し、状態を管理し、複雑さを処理します。 - -## コンセプト - -Julep は、強力な AI ワークフローを作成するために連携するいくつかの主要な技術コンポーネントに基づいて構築されています。 - -```mermaid -graph TD - User[User] ==> Session[Session] - Session --> Agent[Agent] - Agent --> Tasks[Tasks] - Agent --> LLM[Large Language Model] - Tasks --> Tools[Tools] - Agent --> Documents[Documents] - Documents --> VectorDB[Vector Database] - Tasks --> Executions[Executions] - - classDef client fill:#9ff,stroke:#333,stroke-width:1px; - class User client; - - classDef core fill:#f9f,stroke:#333,stroke-width:2px; - class Agent,Tasks,Session core; -``` - -- **エージェント**: タスクを実行し、ユーザーと対話する大規模言語モデル (LLM) を搭載した AI 搭載エンティティ。 -- **ユーザー**: セッションを通じてエージェントと対話するエンティティ。 -- **セッション**: エージェントとユーザー間のステートフルなやり取り。複数のやり取りにわたってコンテキストを維持します。 -- **タスク**: プロンプト、ツール呼び出し、条件付きロジックなどのさまざまな種類のステップを含む、エージェントが実行できる複数ステップのプログラム ワークフロー。 -- **ツール**: ユーザー定義関数、システム ツール、サードパーティ API 統合など、エージェントの機能を拡張する統合。 -- **ドキュメント**: エージェントまたはユーザーに関連付けられたテキストまたはデータ オブジェクト。セマンティック検索と取得のためにベクトル化され、保存されます。 -- **実行**: 特定の入力で開始され、独自のライフサイクルとステート マシンを持つタスクのインスタンス。 - -これらの概念とその相互作用の詳細な説明については、[概念ドキュメント](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)を参照してください。 - -## タスクを理解する - -タスクは Julep のワークフロー システムの中核です。タスクを使用すると、エージェントが実行できる複雑な複数ステップの AI ワークフローを定義できます。タスク コンポーネントの概要は次のとおりです。 - -- **名前と説明**: 各タスクには、簡単に識別できるように一意の名前と説明が付いています。 -- **メインステップ**: タスクの中核であり、実行されるアクションのシーケンスを定義します。 -- **ツール**: タスク実行中にエージェントの機能を拡張するオプションの統合。 - -### ワークフローステップの種類 - -Julep のタスクにはさまざまな種類のステップを含めることができるため、複雑で強力なワークフローを作成できます。利用可能なステップの種類の概要をカテゴリ別にまとめると次のようになります。 - -#### 一般的な手順 - -1. **プロンプト**: AI モデルにメッセージを送信し、応答を受信します。 - ```yaml - - prompt: "Analyze the following data: {{data}}" - ``` - -2. **ツール呼び出し**: 統合ツールまたは API を実行します。 - ```yaml - - tool: web_search - arguments: - query: "Latest AI developments" - ``` - -3. **評価**: 計算を実行したり、データを操作したりします。 - ```yaml - - evaluate: - average_score: "sum(scores) / len(scores)" - ``` - -4. **入力を待機**: 入力が受信されるまでワークフローを一時停止します。 - ```yaml - - wait_for_input: - info: - message: "Please provide additional information." - ``` - -5. **ログ**: 指定された値またはメッセージをログに記録します。 - ```yaml - - log: "Processing completed for item {{item_id}}" - ``` - -#### キー値ステップ - -6. **Get**: キー値ストアから値を取得します。 - ```yaml - - get: "user_preference" - ``` - -7. **Set**: キー値ストア内のキーに値を割り当てます。 - ```yaml - - set: - user_preference: "dark_mode" - ``` - -#### 反復ステップ - -8. **Foreach**: コレクションを反復処理し、各項目に対して手順を実行します。 - ```yaml - - foreach: - in: "data_list" - do: - - log: "Processing item {{_}}" - ``` - -9. **Map-Reduce**: コレクションをマップし、結果を縮小します。 - ```yaml - - map_reduce: - over: "numbers" - map: - - evaluate: - squared: "_ ** 2" - reduce: "sum(results)" - ``` - -10. **並列**: 複数のステップを並列に実行します。 - ```yaml - - parallel: - - tool: web_search - arguments: - query: "AI news" - - tool: weather_check - arguments: - location: "New York" - ``` - -#### 条件付きステップ - -11. **If-Else**: ステップの条件付き実行。 - ```yaml - - if: "score > 0.8" - then: - - log: "High score achieved" - else: - - log: "Score needs improvement" - ``` - -12. **スイッチ**: 複数の条件に基づいてステップを実行します。 - ```yaml - - switch: - - case: "category == 'A'" - then: - - log: "Category A processing" - - case: "category == 'B'" - then: - - log: "Category B processing" - - case: "_" # Default case - then: - - log: "Unknown category" - ``` - -#### その他の制御フロー - -13. **スリープ**: 指定した期間、ワークフローを一時停止します。 - ```yaml - - sleep: - seconds: 30 - ``` - -14. **Return**: ワークフローから値を返します。 - ```yaml - - return: - result: "Task completed successfully" - ``` - -15. **Yield**: サブワークフローを実行し、完了を待ちます。 - ```yaml - - yield: - workflow: "data_processing_subflow" - arguments: - input_data: "{{raw_data}}" - ``` - -16. **エラー**: エラー メッセージを指定してエラーを処理します。 - ```yaml - - error: "Invalid input provided" - ``` - -各ステップ タイプは、高度な AI ワークフローを構築する上で特定の目的を果たします。この分類は、Julep タスクで使用できるさまざまな制御フローと操作を理解するのに役立ちます。 - -## 高度な機能 - -Julep は、AI ワークフローを強化するためのさまざまな高度な機能を提供します。 - -### エージェントへのツールの追加 - -外部ツールと API を統合してエージェントの機能を拡張します。 - -```python -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 は、永続的なインタラクションのための堅牢なセッション管理を提供します。 - -```python -session = client.sessions.create( - agent_id=agent.id, - user_id=user.id, - context_overflow="adaptive" -) - -# Continue conversation in the same session -response = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": "Follow up on the previous conversation." - } - ] -) -``` - -### ドキュメントの統合と検索 - -エージェントのドキュメントを簡単に管理および検索できます。 - -```python -# Upload a document -document = client.agents.docs.create( - title="AI advancements", - content="AI is changing the world...", - metadata={"category": "research_paper"} -) - -# Search documents -results = client.agents.docs.search( - text="AI advancements", - metadata_filter={"category": "research_paper"} -) -``` - -より高度な機能と詳細な使用方法については、[高度な機能のドキュメント](https://docs.julep.ai/advanced-features)を参照してください。 - -## 統合 - -Julep は、AI エージェントの機能を拡張するさまざまな統合をサポートしています。利用可能な統合とサポートされている引数のリストは次のとおりです。 - -### ブレイブサーチ - -```yaml -setup: - api_key: string # The API key for Brave Search - -arguments: - query: string # The search query for searching with Brave - -output: - result: string # The result of the Brave Search -``` - -### ブラウザベース - -```yaml -setup: - api_key: string # The API key for BrowserBase - project_id: string # The project ID for BrowserBase - session_id: string # (Optional) The session ID for BrowserBase - -arguments: - urls: list[string] # The URLs for loading with BrowserBase - -output: - documents: list # The documents loaded from the URLs -``` - -### メール - -```yaml -setup: - host: string # The host of the email server - port: integer # The port of the email server - user: string # The username of the email server - password: string # The password of the email server - -arguments: - to: string # The email address to send the email to - from: string # The email address to send the email from - subject: string # The subject of the email - body: string # The body of the email - -output: - success: boolean # Whether the email was sent successfully -``` - -### スパイダー - -```yaml -setup: - spider_api_key: string # The API key for Spider - -arguments: - url: string # The URL for which to fetch data - mode: string # The type of crawlers (default: "scrape") - params: dict # (Optional) The parameters for the Spider API - -output: - documents: list # The documents returned from the spider -``` - -### 天気 - -```yaml -setup: - openweathermap_api_key: string # The API key for OpenWeatherMap - -arguments: - location: string # The location for which to fetch weather data - -output: - result: string # The weather data for the specified location -``` - -### ウィキペディア - -```yaml -arguments: - query: string # The search query string - load_max_docs: integer # Maximum number of documents to load (default: 2) - -output: - documents: list # The documents returned from the Wikipedia search -``` - -これらの統合をタスク内で使用して、AI エージェントの機能を拡張できます。ワークフローでこれらの統合を使用する方法の詳細については、[統合ドキュメント](https://docs.julep.ai/integrations)を参照してください。 - -## SDK リファレンス - -- [Node.js SDK](https://github.com/julep-ai/node-sdk/blob/main/api.md) -- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/api.md) - -## APIリファレンス - -エージェント、タスク、実行の詳細については、包括的な API ドキュメントをご覧ください。 - -- [エージェント API](https://api.julep.ai/api/docs#tag/agents) -- [タスク API](https://api.julep.ai/api/docs#tag/tasks) -- [実行API](https://api.julep.ai/api/docs#tag/executions) diff --git a/scripts/readme_translator.py b/scripts/readme_translator.py index 4b0a2125a..20c63b830 100644 --- a/scripts/readme_translator.py +++ b/scripts/readme_translator.py @@ -53,7 +53,7 @@ def save_translated_readme(translated_content: str, lang: str) -> None: """ Save the translated README content to a file. """ - filename = f"README_{lang.split('-')[-1].upper()}.md" + filename = f"README-{lang.split('-')[-1].upper()}.md" with open(filename, "w", encoding='utf-8') as file: file.write(translated_content) From f78e5ff46c83b216958b4e8778d9a99a3f189737 Mon Sep 17 00:00:00 2001 From: Champion1583 Date: Thu, 10 Oct 2024 01:07:13 +0530 Subject: [PATCH 07/13] test(ci): invoke readme translator gh action --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d57877707..630d3bae8 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ ***** > [!NOTE] -> 👨‍💻 Here for the devfest.ai event? Join our [Discord](https://discord.com/invite/JTSBGRZrzj) and check out the details below. +> 👨‍💻 Here for the devfest.ai event ? Join our [Discord](https://discord.com/invite/JTSBGRZrzj) and check out the details below.
🌟 Contributors and DevFest.AI Participants (Click to expand) From c88693e0c4ce5b7cf301a64aaa7ff0e1e5814428 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 9 Oct 2024 19:48:28 +0000 Subject: [PATCH 08/13] chore(readme): translate README.md --- README-CN.md | 1197 ++++++++++++++++++++++++++++++-------------------- README-FR.md | 948 +++++++++++++++++++++++++++++++++++++++ README-JA.md | 948 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 2623 insertions(+), 470 deletions(-) create mode 100644 README-FR.md create mode 100644 README-JA.md diff --git a/README-CN.md b/README-CN.md index b8f19f31a..d384fdcee 100644 --- a/README-CN.md +++ b/README-CN.md @@ -1,59 +1,64 @@ -[English](README.md) | 中文 | [日本語](README-JP.md) +English | [中文翻译](https://github.com/julep-ai/julep/blob/dev/README-CN.md) | [日本語翻訳](https://github.com/julep-ai/julep/blob/dev/README-JP.md)
- julep + julep


探索文档 · - Discord + 不和谐 · 𝕏 · - 领英 + LinkedIn

- NPM 版本 + NPM Version   - PyPI - 版本 + PyPI - Version   - Docker 镜像版本 + Docker Image Version   - GitHub 许可证 + GitHub License

***** -> [!TIP] -> 👨‍💻 来参加 devfest.ai 活动?加入我们的 [Discord](https://discord.com/invite/JTSBGRZrzj) 并查看下方详情。 +> [!注意] +> 👨‍💻 来参加 devfest.ai 活动了吗?加入我们的 [Discord](https://discord.com/invite/JTSBGRZrzj) 并查看以下详细信息。
-🌟 贡献者和 DevFest.AI 参与者: +🌟 贡献者和 DevFest.AI 参与者(点击展开) -## 🌟 诚邀贡献者! +## 🌟 招募贡献者! -我们很高兴欢迎新的贡献者加入 Julep 项目!我们创建了几个"适合新手的问题"来帮助您入门。以下是您可以贡献的方式: +我们很高兴欢迎新贡献者加入 Julep 项目!我们创建了几个“好的第一个问题”来帮助您入门。以下是您可以做出贡献的方式: -1. 查看我们的 [CONTRIBUTING.md](CONTRIBUTING.md) 文件,了解如何贡献的指南。 -2. 浏览我们的[适合新手的问题](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22),找到一个您感兴趣的任务。 -3. 如果您有任何问题或需要帮助,请随时在我们的 [Discord](https://discord.com/invite/JTSBGRZrzj) 频道上联系我们。 +1. 查看我们的 [CONTRIBUTING.md](CONTRIBUTING.md) 文件以获取有关如何贡献的指南。 +2. 浏览我们的 [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 以找到您感兴趣的任务。 +3. 如果您有任何疑问或需要帮助,请随时通过我们的 [Discord](https://discord.com/invite/JTSBGRZrzj) 频道联系我们。 -您的贡献,无论大小,对我们都很宝贵。让我们一起创造令人惊叹的东西吧!🚀 +您的贡献,无论大小,对我们来说都是宝贵的。让我们一起创造一些了不起的东西!🚀 -### 🎉 DevFest.AI 2024年10月 +### 🎉 DevFest.AI 2024 年 10 月 -激动人心的消息!我们将在整个2024年10月参与 DevFest.AI 活动!🗓️ +令人兴奋的消息!我们将参加 2024 年 10 月的 DevFest.AI!🗓️ -- 在此活动期间为 Julep 做出贡献,有机会赢得超棒的 Julep 周边和礼品!🎁 -- 加入来自世界各地的开发者,为 AI 仓库做出贡献并参与精彩的活动。 -- 非常感谢 DevFest.AI 组织这个fantastic的活动! +- 在本次活动期间为 Julep 做出贡献,就有机会赢得超棒的 Julep 商品和赃物!🎁 +- 与来自世界各地的开发人员一起为 AI 资源库做出贡献并参与精彩的活动。 +- 非常感谢 DevFest.AI 组织这次精彩的活动! -> [!TIP] -> 准备好加入这场盛会了吗?**[发推文开始参与](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)**,让我们开始编码吧!🖥️ +> [!提示] +> 准备好加入这场有趣的活动了吗?**[发推文表示你正在参与](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)** 让我们开始编码吧!🖥️ + +> [!注意] +> 从[此处](https://dashboard-dev.julep.ai)获取您的 API 密钥。 +> +> 虽然我们处于测试阶段,但您也可以通过 [Discord](https://discord.com/invite/JTSBGRZrzj) 联系,以解除 API 密钥的速率限制。 ![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) @@ -62,539 +67,729 @@
-

📖 Table of Contents

- -- [简介](#%E7%AE%80%E4%BB%8B) -- [特性](#%E7%89%B9%E6%80%A7) -- [安装](#%E5%AE%89%E8%A3%85) -- [快速入门指南](#%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97) - - [步骤 1:导入 Julep](#%E6%AD%A5%E9%AA%A4-1%E5%AF%BC%E5%85%A5-julep) - - [步骤 2:初始化代理](#%E6%AD%A5%E9%AA%A4-2%E5%88%9D%E5%A7%8B%E5%8C%96%E4%BB%A3%E7%90%86) - - [步骤 3:与代理聊天](#%E6%AD%A5%E9%AA%A4-3%E4%B8%8E%E4%BB%A3%E7%90%86%E8%81%8A%E5%A4%A9) - - [步骤 4:创建多步骤任务](#%E6%AD%A5%E9%AA%A4-4%E5%88%9B%E5%BB%BA%E5%A4%9A%E6%AD%A5%E9%AA%A4%E4%BB%BB%E5%8A%A1) - - [步骤 5:执行任务](#%E6%AD%A5%E9%AA%A4-5%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1) -- [概念](#%E6%A6%82%E5%BF%B5) - - [代理](#%E4%BB%A3%E7%90%86) - - [用户](#%E7%94%A8%E6%88%B7) - - [会话](#%E4%BC%9A%E8%AF%9D) - - [任务](#%E4%BB%BB%E5%8A%A1) - - [工具](#%E5%B7%A5%E5%85%B7) - - [文档](#%E6%96%87%E6%A1%A3) - - [执行](#%E6%89%A7%E8%A1%8C) -- [理解任务](#%E7%90%86%E8%A7%A3%E4%BB%BB%E5%8A%A1) - - [工作流步骤类型](#%E5%B7%A5%E4%BD%9C%E6%B5%81%E6%AD%A5%E9%AA%A4%E7%B1%BB%E5%9E%8B) -- [高级功能](#%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD) - - [为代理添加工具](#%E4%B8%BA%E4%BB%A3%E7%90%86%E6%B7%BB%E5%8A%A0%E5%B7%A5%E5%85%B7) - - [管理会话和用户](#%E7%AE%A1%E7%90%86%E4%BC%9A%E8%AF%9D%E5%92%8C%E7%94%A8%E6%88%B7) - - [文档集成和搜索](#%E6%96%87%E6%A1%A3%E9%9B%86%E6%88%90%E5%92%8C%E6%90%9C%E7%B4%A2) -- [SDK 参考](#sdk-%E5%8F%82%E8%80%83) -- [API 参考](#api-%E5%8F%82%E8%80%83) -- [示例和教程](#%E7%A4%BA%E4%BE%8B%E5%92%8C%E6%95%99%E7%A8%8B) -- [贡献](#%E8%B4%A1%E7%8C%AE) -- [支持和社区](#%E6%94%AF%E6%8C%81%E5%92%8C%E7%A4%BE%E5%8C%BA) -- [许可证](#%E8%AE%B8%E5%8F%AF%E8%AF%81) -- [致谢](#%E8%87%B4%E8%B0%A2) +

📖 目录

+ +- [简介](#introduction) +- [快速示例](#quick-example) +- [主要特点](#key-features) +- [为什么选择 Julep 而不是 LangChain?](#why-julep-vs-langchain) +- [不同用例](#different-use-cases) +- [不同的外形尺寸](#different-form-factor) +- [总结](#in-summary) +- [安装](#安装) +- [Python 快速入门 🐍](#python-quick-start-) +- [步骤 1:创建代理](#step-1-create-an-agent) +- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [步骤 3:执行任务](#step-3-execute-the-task) +- [步骤 4:与代理聊天](#step-4-chat-with-the-agent) +- [Node.js 快速入门🟩](#nodejs-quick-start-) +- [步骤 1:创建代理](#step-1-create-an-agent-1) +- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [步骤 3:执行任务](#step-3-execute-the-task-1) +- [步骤 4:与代理聊天](#step-4-chat-with-the-agent-1) +- [组件](#components) +- [心智模型](#mental-model) +- [概念](#concepts) +- [理解任务](#understanding-tasks) +- [工作流步骤的类型](#types-of-workflow-steps) +- [高级功能](#advanced-features) +- [向代理添加工具](#adding-tools-to-agents) +- [管理会话和用户](#managing-sessions-and-users) +- [文档集成与搜索](#document-integration-and-search) +- [集成](#integrations) +- [勇敢搜索](#brave-search) +- [BrowserBase](#browserbase) +- [电子邮件](#email) +- [蜘蛛](#spider) +- [天气](#天气) +- [维基百科](#wikipedia) +- [SDK 参考](#sdk-reference) +- [API 参考](#api-reference)
-## 简介 - -Julep 是一个开源平台,用于创建具有可定制工作流的持久 AI 代理。它提供了开发、管理和部署 AI 驱动应用程序的工具,注重灵活性和易用性。 - -使用 Julep,您可以: -- 快速开发能够在多次交互中保持上下文和状态的 AI 代理 -- 设计和执行针对您的 AI 代理定制的复杂工作流 -- 无缝集成各种工具和 API 到您的 AI 工作流中 -- 轻松管理持久会话和用户交互 +## 介绍 + +Julep 是一个用于创建 AI 代理的平台,这些代理可以记住过去的互动并执行复杂的任务。它提供长期记忆并管理多步骤流程。 + +Julep 支持创建多步骤任务,包括决策、循环、并行处理以及与众多外部工具和 API 的集成。 + +虽然许多人工智能应用程序仅限于简单、线性的提示链和 API 调用,并且分支很少,但 Julep 可以处理更复杂的场景。 + +它支持: +- 复杂、多步骤的流程 +- 动态决策 +- 并行执行 + +> [!提示] +> 想象一下,您想要构建一个 AI 代理,它不仅可以回答简单的问题,还可以处理复杂的任务,记住过去的交互,甚至可能使用其他工具或 API。这就是 Julep 的作用所在。 + +快速示例 + +想象一下一个可以执行以下操作的研究 AI 代理: +1. 选择一个主题, +2. 针对该主题提出 100 个搜索查询, +3. 同时进行网页搜索, +4. 总结结果, +5. 将摘要发送至 Discord + +在 Julep 中,这将是一个单一的任务80行代码然后运行完全托管一切都是独立的。所有步骤都在 Julep 自己的服务器上执行,您无需动手。这是一个工作示例: + +```yaml +name: Research Agent + +# Optional: Define the input schema for the task +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to research + +# 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: "YOUR_DISCORD_WEBHOOK_URL" + method: POST + headers: + Content-Type: application/json + +# Special variables: +# - inputs: for accessing the input to the task +# - outputs: for accessing the output of previous steps +# - _: for accessing the output of the previous step + +# Define the main workflow +main: +- prompt: + - role: system + content: >- + You are a research assistant. + Generate 100 diverse search queries related to the topic: + {{inputs[0].topic}} + + Write one query per line. + unwrap: true + +# Evaluate the search queries using a simple python expression +- evaluate: + search_queries: "_.split('\n')" + +# Run the web search in parallel for each query +- over: "_.search_queries" + map: + tool: web_search + arguments: + query: "_" + parallelism: 100 + +# Collect the results from the web search +- evaluate: + results: "'\n'.join([item.result for item in _])" + +# Summarize the results +- prompt: + - role: system + content: > + You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. + The summary should be well-structured, informative, and highlight key findings and insights: + {{_.results}} + unwrap: true + +# Send the summary to Discord +- tool: discord_webhook + arguments: + content: > + **Research Summary for {{inputs[0].topic}}** + + {{_}} +``` -无论您是在开发聊天机器人、自动化任务,还是构建复杂的 AI 助手,Julep 都能为您提供所需的灵活性和功能,帮助您快速高效地将想法转化为现实。 +> [!提示] +> 当您想要构建能够在长期交互​​中保持上下文和状态的 AI 代理时,Julep 非常有用。它非常适合设计复杂的多步骤工作流程,并将各种工具和 API 直接集成到代理的流程中。 +> +> 在此示例中,Julep 将自动管理并行执行,重试失败的步骤,重新发送 API 请求,并保持任务可靠运行直至完成。 - +主要特点 -
-这里有一个简单的 Python 示例: +1. 🧠 **持久 AI 代理**:在长期交互​​中记住背景和信息。 +2. 💾 **状态会话**:跟踪过去的互动以获得个性化回应。 +3. 🔄 **多步骤任务**:通过循环和决策构建复杂的多步骤流程。 +4. ⏳ **任务管理**:处理可以无限期运行的长时间运行的任务。 +5.🛠️**内置工具**:在您的任务中使用内置工具和外部 API。 +6. 🔧 **自我修复**:Julep 将自动重试失败的步骤、重新发送消息,并确保您的任务顺利运行。 +7. 📚 **RAG**:使用 Julep 的文档存储构建一个用于检索和使用您自己的数据的系统。 - +Julep 非常适合需要超越简单的提示响应模型的 AI 用例的应用程序。 -

-from julep import Julep, AsyncJulep
+## 为什么选择 Julep 而不是 LangChain?
 
-# 🔑 初始化 Julep 客户端
-#     或者使用 AsyncJulep 进行异步操作
-client = Julep(api_key="your_api_key")
+### 不同的用例
 
-##################
-## 🤖 代理 🤖 ##
-##################
+可以将 LangChain 和 Julep 视为 AI 开发堆栈中具有不同重点的工具。
 
-# 创建一个研究代理
-agent = client.agents.create(
-    name="研究代理",
-    model="claude-3.5-sonnet",
-    about="您是一个设计用于处理研究查询的研究代理。",
-)
-
-# 🔍 为代理添加工具
-client.agents.tools.create(
-    agent_id=agent.id,
-    name="web_search",  # 应该是有效的 Python 变量名
-    description="使用此工具进行研究查询。",
-    integration={
-        "provider": "brave",
-        "method": "search",
-        "setup": {
-            "api_key": "your_brave_api_key",
-        },
-    },
-)
+LangChain 非常适合创建提示序列和管理与 AI 模型的交互。它拥有庞大的生态系统,包含大量预构建的集成,如果您想快速启动和运行某些功能,这会非常方便。LangChain 非常适合涉及线性提示链和 API 调用的简单用例。
 
-#################
-## 💬 聊天 💬 ##
-#################
+另一方面,Julep 更注重构建持久的 AI 代理,这些代理可以在长期交互​​中记住事物。当您需要涉及多个步骤、决策以及在代理流程中直接与各种工具或 API 集成的复杂任务时,它会大放异彩。它从头开始设计,以管理持久会话和复杂任务。
 
-# 与代理开始交互式聊天会话
-session = client.sessions.create(
-    agent_id=agent.id,
-    context_overflow="adaptive",  # 🧠 Julep 将在需要时动态计算上下文窗口
-)
+如果您想构建一个需要执行以下操作的复杂 AI 助手,请使用 Julep:
 
-# 🔄 聊天循环
-while (user_input := input("您:")) != "退出":
-    response = client.sessions.chat(
-        session_id=session.id,
-        message=user_input,
-    )
+- 跟踪几天或几周内的用户互动。
+- 执行计划任务,例如发送每日摘要或监控数据源。
+- 根据之前的互动或存储的数据做出决策。
+- 作为其任务的一部分,与多个外部服务进行交互。
 
-    print("代理:", response.choices[0].message.content)
+然后 Julep 提供支持所有这些的基础设施,而无需您从头开始构建。
 
+### 不同的外形尺寸
 
-#################
-## 📋 任务 📋 ##
-#################
+Julep 是一个**平台**,其中包括用于描述任务的语言、用于运行这些任务的服务器以及用于与平台交互的 SDK。要使用 Julep 构建某些东西,您需要在“YAML”中编写任务描述,然后在云中运行该任务。
 
-# 为代理创建一个周期性研究任务
-task = client.tasks.create(
-    agent_id=agent.id,
-    name="研究任务",
-    description="每24小时研究给定的主题。",
-    #
-    # 🛠️ 任务特定工具
-    tools=[
-        {
-            "name": "send_email",
-            "description": "向用户发送包含结果的电子邮件。",
-            "api_call": {
-                "method": "post",
-                "url": "https://api.sendgrid.com/v3/mail/send",
-                "headers": {"Authorization": "Bearer YOUR_SENDGRID_API_KEY"},
-            },
-        }
-    ],
-    #
-    # 🔢 任务主要步骤
-    main=[
-        #
-        # 步骤 1:研究主题
-        {
-            # `_`(下划线)变量指向上一步的输出
-            # 这里,它指向用户输入的主题
-            "prompt": "查找主题 '{{_.topic}}' 并总结结果。",
-            "tools": [{"ref": {"name": "web_search"}}],  # 🔍 使用代理的网络搜索工具
-            "unwrap": True,
-        },
-        #
-        # 步骤 2:发送包含研究结果的电子邮件
-        {
-            "tool": "send_email",
-            "arguments": {
-                "subject": "研究结果",
-                "body": "'以下是今天的研究结果:' + _.content",
-                "to": "inputs[0].email",  # 引用用户输入的电子邮件
-            },
-        },
-        #
-        # 步骤 3:等待 24 小时后重复
-        {"sleep": "24 * 60 * 60"},
-    ],
-)
+Julep 专为繁重、多步骤和长时间运行的任务而设计,并且对任务的复杂程度没有限制。
 
-# 🚀 启动周期性任务
-client.executions.create(task_id=task.id, input={"topic": "Python"})
+LangChain 是一个**库**,其中包含一些工具和一个用于构建线性提示和工具链的框架。要使用 LangChain 构建某些东西,您通常需要编写 Python 代码来配置和运行要使用的模型链。
 
-# 🔁 这将每 24 小时运行一次任务,
-#    研究 "Python" 主题,并
-#    将结果发送到用户的电子邮件
-
-
+对于涉及线性提示和 API 调用链的简单用例,LangChain 可能足够并且能够更快地实现。 -## 特性 +### 总之 -Julep 简化了构建具有可定制工作流的持久 AI 代理的过程。主要特性包括: +当您需要在无状态或短期环境中管理 AI 模型交互和提示序列时,请使用 LangChain。 -- **持久 AI 代理**:创建和管理能够在多次交互中保持上下文的 AI 代理。 -- **可定制工作流**:使用任务(Tasks)设计复杂的多步骤 AI 工作流。 -- **工具集成**:无缝集成各种工具和 API 到您的 AI 工作流中。 -- **文档管理**:高效管理和搜索代理的文档。 -- **会话管理**:处理持久会话以实现连续交互。 -- **灵活执行**:支持工作流中的并行处理、条件逻辑和错误处理。 +当您需要一个具有高级任务功能、持久会话和复杂任务管理的状态代理的强大框架时,请选择 Julep。 -## 安装 +## 安装 -要开始使用 Julep,请使用 [npm](https://www.npmjs.com/package/@julep/sdk) 或 [pip](https://pypi.org/project/julep/) 安装: +要开始使用 Julep,请使用 [npm](https://www.npmjs.com/package/@julep/sdk) 或 [pip](https://pypi.org/project/julep/) 安装它: ```bash npm install @julep/sdk ``` -或 +或者 ```bash pip install julep ``` -> [!TIP] -> 在测试阶段,您可以通过 [Discord](https://discord.com/invite/JTSBGRZrzj) 获取 API 密钥。 - -## 快速入门指南 +> [!注意] +> 从[此处](https://dashboard-dev.julep.ai)获取您的 API 密钥。 +> +> 虽然我们处于测试阶段,但您也可以通过 [Discord](https://discord.com/invite/JTSBGRZrzj) 联系,以解除 API 密钥的速率限制。 -### 步骤 1:导入 Julep +> [!提示] +> 💻 你是“向我展示代码!”的那种人吗?我们创建了大量的烹饪书供您入门。**查看 [烹饪书](https://github.com/julep-ai/julep/tree/dev/cookbooks)** 以浏览示例。 +> +> 💡 您还可以在 Julep 的基础上构建许多想法。**查看[想法列表](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** 以获取一些灵感。 -首先,将 Julep SDK 导入到您的项目中: +## Python 快速入门🐍 -```javascript -const Julep = require('@julep/sdk'); -``` - -或 +### 步骤 1:创建代理 ```python -from julep import AsyncJulep -``` +import yaml +from julep import Julep # or AsyncJulep -### 步骤 2:初始化代理 +client = Julep(api_key="your_julep_api_key") -使用基本设置创建一个新代理: - -```javascript -const julep = new Julep({ apiKey: 'your-api-key' }); +agent = client.agents.create( + name="Storytelling Agent", + model="gpt-4o", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) -const agent = await julep.agents.create({ - name: '研究助手', - model: 'gpt-4-turbo', - about: "您是一个创意讲故事代理,能够根据想法创作引人入胜的故事并生成漫画面板。", -}); +# 🛠️ Add an image generation tool (DALL·E) to the agent +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_openai_api_key", + }, + }, +) ``` -或 +### 步骤 2:创建一个生成故事和漫画的任务 + +让我们定义一个多步骤任务来创建一个故事并根据输入的想法生成面板漫画: ```python -client = AsyncJulep(api_key="your_api_key") +# 📋 Task +# Create a task that takes an idea and creates a story and a 4-panel comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" -agent = await client.agents.create( - name="讲故事代理", - model="gpt-4-turbo", - about="您是一个创意讲故事代理,能够根据想法创作引人入胜的故事并生成漫画面板。", +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) ) ``` -### 步骤 3:与代理聊天 - -与代理开始交互式聊天会话: +### 步骤 3:执行任务 -```javascript -const session = await julep.sessions.create({ - agentId: agent.id, -}); +```python +# 🚀 Execute the task with an input idea +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} +) -// 向代理发送消息 -const response = await julep.sessions.chat({ - sessionId: session.id, - message: '你好,能给我讲个故事吗?', -}); +# 🎉 Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) -console.log(response); +# 📦 Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) ``` -或 +### 步骤 4:与代理聊天 + +开始与代理进行交互式聊天会话: ```python -session = await client.sessions.create(agent_id=agent.id) +session = client.sessions.create(agent_id=agent.id) -# 向代理发送消息 -response = await client.sessions.chat( - session_id=session.id, - message="你好,能给我讲个故事吗?", -) +# 💬 Send messages to the agent +while (message := input("Enter a message: ")) != "quit": + response = client.sessions.chat( + session_id=session.id, + message=message, + ) -print(response) + print(response) ``` -### 步骤 4:创建多步骤任务 +> [!提示] +> 您可以在[这里](example.py)找到完整的 python 示例。 -让我们定义一个多步骤任务,根据输入的想法创建故事并生成分镜漫画: -```python -# 🛠️ 为代理添加图像生成工具(DALL·E) -await client.agents.tools.create( - agent_id=agent.id, - name="image_generator", - description="使用此工具根据描述生成图像。", - integration={ - "provider": "dalle", - "method": "generate_image", - "setup": { - "api_key": "your_dalle_api_key", - }, +## Node.js 快速入门 🟩 + +### 步骤 1:创建代理 + +```javascript +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; + +const client = new Julep({ apiKey: 'your_julep_api_key' }); + +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); + + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(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_openai_api_key", + }, }, -) + }); -# 📋 任务 -# 创建一个任务,接受一个想法并创建故事和 4 格漫画 -task = await client.tasks.create( - agent_id=agent.id, - name="故事和漫画创作器", - description="根据一个想法创作故事并生成 4 格漫画来说明故事。", - main=[ - # 步骤 1:生成故事并将其概括为 4 个面板 - { - "prompt": [ - { - "role": "system", - "content": "您是 {{agent.name}}。{{agent.about}}" - }, - { - "role": "user", - "content": ( - "基于想法 '{{_.idea}}',写一个适合 4 格漫画的短故事。" - "提供故事和一个编号列表,包含 4 个简短描述,每个描述对应一个面板,说明故事中的关键时刻。" - ), - }, - ], - "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": "您是 {{agent.name}}。{{agent.about}}" - }, - { - "role": "user", - "content": "根据以下故事,生成一个吸引人的标题。\n\n故事:{{outputs[1].story}}", - }, - ], - "unwrap": True, - }, - # 步骤 5:返回故事、生成的图像和标题 - { - "return": { - "title": "outputs[3]", - "story": "outputs[1].story", - "comic_panels": "[output.image.url for output in outputs[2]]", - } - }, - ], -) + return agent; +} ``` -> [!TIP] -> Node.js 版本的代码类似。 +### 步骤 2:创建一个生成故事和漫画的任务 -### 步骤 5:执行任务 +```javascript +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} +``` -```python -# 🚀 执行任务,输入一个想法 -execution = await client.executions.create( - task_id=task.id, - input={"idea": "一只学会飞翔的猫"} -) +### 步骤 3:执行任务 -# 🎉 观看故事和漫画面板的生成过程 -await client.executions.stream(execution_id=execution.id) +```javascript +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); + + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } + + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} ``` -这个例子展示了如何创建一个带有自定义工具的代理,定义一个复杂的多步骤任务,并执行它以生成创意输出。 +### 步骤 4:与代理聊天 - +```javascript +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); +``` -> [!TIP] -> 您可以在[这里](example.ts)找到另一个 Node.js 示例,或在[这里](example.py)找到 Python 示例。 +> [!提示] +> 您可以在[这里](example.js)找到完整的 Node.js 示例。 -## 概念 +## 成分 -Julep 建立在几个关键的技术组件之上,这些组件协同工作以创建强大的 AI 工作流: +Julep 由以下成分组成: -### 代理 -由大型语言模型(LLM)支持的 AI 实体,执行任务并与用户交互。代理是 Julep 的核心功能单元。 +- **Julep 平台**:Julep 平台是运行您的工作流程的云服务。它包括用于描述工作流程的语言、用于运行这些工作流程的服务器以及用于与平台交互的 SDK。 +- **Julep SDKs**:Julep SDKs 是一组用于构建工作流的库。目前有适用于 Python 和 JavaScript 的 SDKs,还有更多 SDKs 正在开发中。 +- **Julep API**:Julep API 是一个 RESTful API,您可以使用它与 Julep 平台进行交互。 -```mermaid -graph TD - Agent[代理] --> LLM[大型语言模型] - Agent --> Tasks[任务] - Agent --> Users[用户] - Tasks --> Tools[工具] -``` +### 心智模型 -### 用户 -与代理交互的实体。用户可以与会话关联,并拥有自己的元数据,允许个性化交互。 +
+ +
-```mermaid -graph LR - User[用户] --> Sessions[会话] - Sessions --> Agents[代理] - Sessions --> Metadata[元数据] -``` +您可以将 Julep 视为一个结合了客户端和服务器端组件的平台,以帮助您构建高级 AI 代理。以下是它的可视化方法: -### 会话 -代理和用户之间的有状态交互。会话在多次交换中保持上下文,可以配置不同的行为,包括上下文管理和溢出处理。 +1. **您的申请代码:** +- 您可以在应用程序中使用 Julep SDK 来定义代理、任务和工作流。 +- SDK 提供的函数和类使得设置和管理这些组件变得容易。 -```mermaid -graph LR - Sessions[会话] --> Agents[代理] - Sessions --> Users[用户] - Sessions --> ContextManagement[上下文管理] - Sessions --> OverflowHandling[溢出处理] -``` +2. **Julep 后端服务:** +- SDK 通过网络与 Julep 后端通信。 +- 后端处理任务的执行,维护会话状态,存储文档并协调工作流程。 -### 任务 -代理可以执行的多步骤、程序化工作流。任务定义复杂操作,可以包括各种类型的步骤,如提示、工具调用和条件逻辑。 +3. **与工具和 API 集成:** +- 在您的工作流程中,您可以集成外部工具和服务。 +- 后端促进这些集成,因此您的代理可以执行网络搜索、访问数据库或调用第三方 API。 + +简单来说: +- Julep 是一个用于构建有状态 AI 代理的平台。 +- 您在代码中使用 SDK(类似于工具包)来定义代理的功能。 +- 后端服务(您可以将其视为引擎)运行这些定义、管理状态并处理复杂性。 + +## 概念 + +Julep 基于几个关键技术组件构建,这些组件共同协作以创建强大的 AI 工作流程: ```mermaid graph TD - Tasks[任务] --> Steps[工作流步骤] - Steps --> Prompt[提示] - Steps --> ToolCalls[工具调用] - Steps --> ConditionalLogic[条件逻辑] + User[User] ==> Session[Session] + Session --> Agent[Agent] + Agent --> Tasks[Tasks] + Agent --> LLM[Large Language Model] + Tasks --> Tools[Tools] + Agent --> Documents[Documents] + Documents --> VectorDB[Vector Database] + Tasks --> Executions[Executions] + + classDef client fill:#9ff,stroke:#333,stroke-width:1px; + class User client; + + classDef core fill:#f9f,stroke:#333,stroke-width:2px; + class Agent,Tasks,Session core; ``` -### 工具 -扩展代理能力的集成。工具可以是用户定义的函数、系统工具或第三方 API 集成。它们允许代理执行超出文本生成的操作。 +- **代理**:由大型语言模型(LLM)支持的人工智能实体,可执行任务并与用户交互。 +- **用户**:通过会话与代理交互的实体。 +- **会话**:代理和用户之间的状态交互,在多个交换之间维护上下文。 +- **任务**:代理可以执行的多步骤、程序化工作流,包括提示、工具调用和条件逻辑等各种类型的步骤。 +- **工具**:扩展代理功能的集成,包括用户定义的函数、系统工具或第三方 API 集成。 +- **文档**:与代理或用户相关的文本或数据对象,矢量化并存储以用于语义搜索和检索。 +- **执行**:通过特定输入启动的任务实例,具有自己的生命周期和状态机。 -```mermaid -graph LR - Tools[工具] --> UserDefinedFunctions[用户定义函数] - Tools --> SystemTools[系统工具] - Tools --> ThirdPartyAPIs[第三方 API] -``` +有关这些概念及其相互作用的更详细说明,请参阅我们的[概念文档](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)。 -### 文档 -可以与代理或用户关联的文本或数据对象。文档被向量化并存储在向量数据库中,在代理交互期间实现语义搜索和检索。 +## 理解任务 -```mermaid -graph LR - Documents[文档] --> VectorDatabase[向量数据库] - Documents --> SemanticSearch[语义搜索] - Documents --> AgentsOrUsers[代理或用户] -``` +任务是 Julep 工作流系统的核心。它们允许您定义代理可以执行的复杂、多步骤 AI 工作流。以下是任务组件的简要概述: -### 执行 -已经用特定输入启动的任务实例。执行有自己的生命周期和状态机,允许监控、管理和恢复长时间运行的进程。 +- **名称和描述**:每个任务都有唯一的名称和描述,以便于识别。 +- **主要步骤**:任务的核心,定义要执行的操作顺序。 +- **工具**:可选集成,可在任务执行期间扩展代理的功能。 -```mermaid -graph LR - Executions[执行] --> Tasks[任务] - Executions --> Lifecycle[生命周期] - Executions --> Monitoring[监控] - Executions --> Management[管理] - Executions --> Resumption[恢复] -``` +### 工作流步骤的类型 -有关这些概念及其交互的更详细解释,请参阅我们的[概念文档](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)。 +Julep 中的任务可以包含各种类型的步骤,让您可以创建复杂而强大的工作流程。以下是按类别组织的可用步骤类型的概述: -## 理解任务 +#### 常见步骤 -任务是 Julep 工作流系统的核心。它们允许您定义复杂的多步骤 AI 工作流,供您的代理执行。以下是任务组件的简要概述: +1. **提示**:向AI模型发送消息并收到回复。 + ```yaml + - prompt: "Analyze the following data: {{data}}" + ``` -- **名称和描述**:每个任务都有唯一的名称和描述,便于识别。 -- **主要步骤**:任务的核心,定义了要执行的操作序列。 -- **工具**:可选的集成,在任务执行期间扩展代理的能力。 +2. **工具调用**:执行集成的工具或API。 + ```yaml + - tool: web_search + arguments: + query: "Latest AI developments" + ``` -### 工作流步骤类型 +3. **评估**:执行计算或处理数据。 + ```yaml + - evaluate: + average_score: "sum(scores) / len(scores)" + ``` -Julep 中的任务可以包含各种类型的步骤: +4. **等待输入**:暂停工作流程,直到收到输入。 + ```yaml + - wait_for_input: + info: + message: "Please provide additional information." + ``` -1. **提示**:向 AI 模型发送消息并接收响应。 - ```python - {"prompt": "分析以下数据:{{data}}"} +5. **日志**:记录指定的值或消息。 + ```yaml + - log: "Processing completed for item {{item_id}}" ``` -2. **工具调用**:执行集成的工具或 API。 - ```python - {"tool": "web_search", "arguments": {"query": "最新 AI 发展"}} +#### 键值步骤 + +6. **获取**:从键值存储中检索值。 + ```yaml + - get: "user_preference" ``` -3. **评估**:执行计算或操作数据。 - ```python - {"evaluate": {"average_score": "sum(scores) / len(scores)"}} +7. **设置**:为键值存储中的键分配一个值。 + ```yaml + - set: + user_preference: "dark_mode" ``` -4. **条件逻辑**:基于条件执行步骤。 - ```python - {"if": "score > 0.8", "then": [...], "else": [...]} +#### 迭代步骤 + +8. **Foreach**:遍历集合并对每个项目执行步骤。 + ```yaml + - foreach: + in: "data_list" + do: + - log: "Processing item {{_}}" ``` -5. **循环**:遍历数据或重复步骤。 - ```python - {"foreach": {"in": "data_list", "do": [...]}} +9. **Map-Reduce**:对集合进行映射并减少结果。 + ```yaml + - map_reduce: + over: "numbers" + map: + - evaluate: + squared: "_ ** 2" + reduce: "sum(results)" ``` -| 步骤类型 | 描述 | 输入 | -|---------|------|------| -| **提示** | 向 AI 模型发送消息并接收响应。 | 提示文本或模板 | -| **工具调用** | 执行集成的工具或 API。 | 工具名称和参数 | -| **评估** | 执行计算或操作数据。 | 要评估的表达式或变量 | -| **等待输入** | 暂停工作流直到收到输入。 | 任何所需的用户或系统输入 | -| **日志** | 记录指定的值或消息。 | 要记录的消息或值 | -| **嵌入** | 将文本嵌入到特定格式或系统中。 | 要嵌入的文本或内容 | -| **搜索** | 基于查询执行文档搜索。 | 搜索查询 | -| **获取** | 从键值存储中检索值。 | 键标识符 | -| **设置** | 在键值存储中为键分配值。 | 要分配的键和值 | -| **并行** | 并行运行多个步骤。 | 要同时执行的步骤列表 | -| **遍历** | 遍历集合并为每个项目执行步骤。 | 要遍历的集合或列表 | -| **映射归约** | 对集合进行映射并基于表达式归约结果。 | 要映射和归约的集合和表达式 | -| **如果-否则** | 基于条件执行步骤。 | 要评估的条件 | -| **开关** | 基于多个条件执行步骤,类似于 switch-case 语句。 | 多个条件和相应的步骤 | -| **生成** | 运行子工作流并等待其完成。 | 子工作流标识符和输入数据 | -| **错误** | 通过指定错误消息来处理错误。 | 错误消息或处理指令 | -| **睡眠** | 暂停工作流指定的持续时间。 | 持续时间(秒、分钟等) | -| **返回** | 从工作流返回值。 | 要返回的值 | - -有关每种步骤类型的详细信息和高级用法,请参阅我们的[任务文档](https://docs.julep.ai/tasks)。 +10.**并行**:并行运行多个步骤。 + ```yaml + - parallel: + - tool: web_search + arguments: + query: "AI news" + - tool: weather_check + arguments: + location: "New York" + ``` + +#### 条件步骤 + +11.**If-Else**:条件执行步骤。 + ```yaml + - if: "score > 0.8" + then: + - log: "High score achieved" + else: + - log: "Score needs improvement" + ``` + +12.**Switch**:根据多种条件执行步骤。 + ```yaml + - switch: + - case: "category == 'A'" + then: + - log: "Category A processing" + - case: "category == 'B'" + then: + - log: "Category B processing" + - case: "_" # Default case + then: + - log: "Unknown category" + ``` + +#### 其他控制流 + +13. **睡眠**:暂停工作流一段指定的时间。 + ```yaml + - sleep: + seconds: 30 + ``` + +14. **返回**:从工作流返回一个值。 + ```yaml + - return: + result: "Task completed successfully" + ``` + +15. **收益**:运行子工作流并等待其完成。 + ```yaml + - yield: + workflow: "data_processing_subflow" + arguments: + input_data: "{{raw_data}}" + ``` + +16.**错误**:通过指定错误消息来处理错误。 + ```yaml + - error: "Invalid input provided" + ``` + +每种步骤类型在构建复杂的 AI 工作流中都有特定的用途。此分类有助于理解 Julep 任务中可用的各种控制流程和操作。 ## 高级功能 -Julep 提供了一系列高级功能来增强您的 AI 工作流: +Julep 提供一系列高级功能来增强您的 AI 工作流程: -### 为代理添加工具 +### 向代理添加工具 -通过集成外部工具和 API 来扩展代理的能力: +通过集成外部工具和 API 来扩展代理的功能: ```python client.agents.tools.create( agent_id=agent.id, name="web_search", - description="搜索网络以获取信息。", + description="Search the web for information.", integration={ "provider": "brave", "method": "search", @@ -610,82 +805,144 @@ Julep 为持久交互提供了强大的会话管理: ```python session = client.sessions.create( agent_id=agent.id, - user_id="user123", + user_id=user.id, context_overflow="adaptive" ) -# 在同一会话中继续对话 +# Continue conversation in the same session response = client.sessions.chat( session_id=session.id, messages=[ - { - "role": "user", - "content": "继续我们之前的对话。" - } + { + "role": "user", + "content": "Follow up on the previous conversation." + } ] ) ``` -### 文档集成和搜索 +### 文档集成与搜索 轻松管理和搜索代理的文档: ```python -# 上传文档 +# Upload a document document = client.agents.docs.create( title="AI advancements", content="AI is changing the world...", metadata={"category": "research_paper"} ) -# 搜索文档 +# Search documents results = client.agents.docs.search( text="AI advancements", metadata_filter={"category": "research_paper"} ) ``` -有关更多高级功能和详细用法,请参阅我们的[高级功能文档](https://docs.julep.ai/advanced-features)。 +有关更多高级功能和详细用法,请参阅我们的[高级功能文档](https://docs.julep.ai/advanced-features)。 -## SDK 参考 +## 集成 -- [Node.js SDK](https://github.com/julep-ai/node-sdk/blob/main/api.md) -- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/api.md) +Julep 支持各种集成,可以扩展您的 AI 代理的功能。以下是可用集成及其支持的参数的列表: -## API 参考 +### 勇敢搜索 -探索我们全面的 API 文档,了解更多关于代理、任务和执行的信息: +```yaml +setup: + api_key: string # The API key for Brave Search -- [代理 API](https://api.julep.ai/api/docs#tag/agents) -- [任务 API](https://api.julep.ai/api/docs#tag/tasks) -- [执行 API](https://api.julep.ai/api/docs#tag/executions) +arguments: + query: string # The search query for searching with Brave + +output: + result: string # The result of the Brave Search +``` + +### 浏览器基础 + +```yaml +setup: + api_key: string # The API key for BrowserBase + project_id: string # The project ID for BrowserBase + session_id: string # (Optional) The session ID for BrowserBase + +arguments: + urls: list[string] # The URLs for loading with BrowserBase -## 示例和教程 +output: + documents: list # The documents loaded from the URLs +``` + +### 电子邮件 + +```yaml +setup: + host: string # The host of the email server + port: integer # The port of the email server + user: string # The username of the email server + password: string # The password of the email server + +arguments: + to: string # The email address to send the email to + from: string # The email address to send the email from + subject: string # The subject of the email + body: string # The body of the email + +output: + success: boolean # Whether the email was sent successfully +``` + +### 蜘蛛 + +```yaml +setup: + spider_api_key: string # The API key for Spider + +arguments: + url: string # The URL for which to fetch data + mode: string # The type of crawlers (default: "scrape") + params: dict # (Optional) The parameters for the Spider API -发现示例项目和教程,帮助您入门并基于提供的示例进行构建: +output: + documents: list # The documents returned from the spider +``` -- [示例项目](https://github.com/julep-ai/julep/tree/main/examples) -- [教程](https://docs.julep.ai/tutorials) +### 天气 -## 贡献 +```yaml +setup: + openweathermap_api_key: string # The API key for OpenWeatherMap -我们欢迎对项目的贡献!了解如何贡献以及我们的行为准则: +arguments: + location: string # The location for which to fetch weather data -- [贡献指南](https://github.com/julep-ai/julep/blob/main/CONTRIBUTING.md) -- [行为准则](https://github.com/julep-ai/julep/blob/main/CODE_OF_CONDUCT.md) +output: + result: string # The weather data for the specified location +``` -## 支持和社区 +维基百科 -加入我们的社区,获取帮助、提问和分享您的想法: +```yaml +arguments: + query: string # The search query string + load_max_docs: integer # Maximum number of documents to load (default: 2) -- [Discord](https://discord.com/invite/JTSBGRZrzj) -- [GitHub 讨论](https://github.com/julep-ai/julep/discussions) -- [Twitter](https://twitter.com/julep_ai) +output: + documents: list # The documents returned from the Wikipedia search +``` -## 许可证 +这些集成可用于您的任务中,以扩展您的 AI 代理的功能。有关如何在您的工作流程中使用这些集成的详细信息,请参阅我们的 [集成文档](https://docs.julep.ai/integrations)。 + +## SDK 参考 -本项目采用 [Apache License 2.0](https://github.com/julep-ai/julep/blob/main/LICENSE) 许可。 +- [Node.js SDK](https://github.com/julep-ai/node-sdk/blob/main/api.md) +- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/api.md) -## 致谢 +API 参考 -我们要感谢所有贡献者和开源社区为他们宝贵的资源和贡献。 +浏览我们全面的 API 文档,以了解有关代理、任务和执行的更多信息: + +- [代理 API](https://api.julep.ai/api/docs#tag/agents) +- [任务 API](https://api.julep.ai/api/docs#tag/tasks) +- [执行 API](https://api.julep.ai/api/docs#tag/executions) diff --git a/README-FR.md b/README-FR.md new file mode 100644 index 000000000..b7c08e3f4 --- /dev/null +++ b/README-FR.md @@ -0,0 +1,948 @@ +English | [中文翻译](https://github.com/julep-ai/julep/blob/dev/README-CN.md) | [日本語翻訳](https://github.com/julep-ai/julep/blob/dev/README-JP.md) + +
+ julep +
+ +

+
+ Explorer les documents + · + Discorde + · + 𝕏 + · + LinkedIn +

+ + +

+ NPM Version +   + PyPI - Version +   + Docker Image Version +   + GitHub License +

+ +***** + +> [!REMARQUE] +> 👨‍💻 Vous êtes ici pour l'événement devfest.ai ? Rejoignez notre [Discord](https://discord.com/invite/JTSBGRZrzj) et consultez les détails ci-dessous. + +
+🌟 Contributeurs et participants au DevFest.AI(Cliquez pour agrandir) + +## 🌟 Appel aux contributeurs ! + +Nous sommes ravis d'accueillir de nouveaux contributeurs au projet Julep ! Nous avons créé plusieurs « bons premiers numéros » pour vous aider à démarrer. Voici comment vous pouvez contribuer : + +1. Consultez notre fichier [CONTRIBUTING.md](CONTRIBUTING.md) pour obtenir des instructions sur la manière de contribuer. +2. Parcourez nos [bons premiers numéros](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) pour trouver une tâche qui vous intéresse. +3. Si vous avez des questions ou avez besoin d'aide, n'hésitez pas à nous contacter sur notre chaîne [Discord](https://discord.com/invite/JTSBGRZrzj). + +Vos contributions, grandes ou petites, nous sont précieuses. Construisons ensemble quelque chose d'extraordinaire ! 🚀 + +### 🎉 DevFest.AI octobre 2024 + +Des nouvelles passionnantes ! Nous participons au DevFest.AI tout au long du mois d'octobre 2024 ! 🗓️ + +- Contribuez à Julep pendant cet événement et obtenez une chance de gagner de superbes produits et cadeaux Julep ! 🎁 +- Rejoignez des développeurs du monde entier pour contribuer aux référentiels d'IA et participer à des événements incroyables. +- Un grand merci à DevFest.AI pour l'organisation de cette fantastique initiative ! + +> [!TIP] +> Prêt à vous joindre à la fête ? **[Tweetez que vous participez](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)** et commençons à coder ! 🖥️ + +> [!REMARQUE] +> Obtenez votre clé API [ici](https://dashboard-dev.julep.ai). +> +> Pendant que nous sommes en version bêta, vous pouvez également nous contacter sur [Discord](https://discord.com/invite/JTSBGRZrzj) pour obtenir la levée des limites de débit sur votre clé API. + +![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) + +
+ + + +
+

📖 Table des matières

+ +- [Présentation](#introduction) +- [Exemple rapide](#quick-example) +- [Caractéristiques principales](#key-features) +- [Pourquoi Julep vs. LangChain ?](#pourquoi-julep-vs-langchain) +- [Différents cas d'utilisation](#different-use-cases) +- [Facteur de forme différent](#different-form-factor) +- [En résumé](#en-resumé) +- [Installation](#installation) +- [Démarrage rapide de Python 🐍](#python-quick-start-) +- [Étape 1 : Créer un agent](#step-1-create-an-agent) +- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task) +- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent) +- [Démarrage rapide de Node.js 🟩](#nodejs-quick-start-) +- [Étape 1 : Créer un agent](#step-1-create-an-agent-1) +- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task-1) +- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent-1) +- [Composants](#composants) +- [Modèle mental](#mental-model) +- [Concepts](#concepts) +- [Comprendre les tâches](#understanding-tasks) +- [Types d'étapes de flux de travail](#types-of-workflow-steps) +- [Fonctionnalités avancées](#advanced-features) +- [Ajout d'outils aux agents](#adding-tools-to-agents) +- [Gestion des sessions et des utilisateurs](#managing-sessions-and-users) +- [Intégration et recherche de documents](#document-integration-and-search) +- [Intégrations](#intégrations) +- [Recherche courageuse](#brave-search) +- [Base du navigateur](#basedunavigateur) +- [Courriel](#courriel) +- [Araignée](#araignée) +- [Météo](#météo) +- [Wikipédia](#wikipédia) +- [Référence SDK](#sdk-reference) +- [Référence API](#api-reference) + +
+ + +## Introduction + +Julep est une plateforme permettant de créer des agents IA qui se souviennent des interactions passées et peuvent effectuer des tâches complexes. Elle offre une mémoire à long terme et gère des processus en plusieurs étapes. + +Julep permet la création de tâches en plusieurs étapes intégrant la prise de décision, les boucles, le traitement parallèle et l'intégration avec de nombreux outils et API externes. + +Alors que de nombreuses applications d’IA se limitent à des chaînes simples et linéaires d’invites et d’appels d’API avec une ramification minimale, Julep est conçu pour gérer des scénarios plus complexes. + +Il prend en charge : +- Processus complexes en plusieurs étapes +- Prise de décision dynamique +- Exécution parallèle + +> [!TIP] +> Imaginez que vous souhaitiez créer un agent d'IA capable de faire plus que simplement répondre à des questions simples : il doit gérer des tâches complexes, se souvenir des interactions passées et peut-être même utiliser d'autres outils ou API. C'est là qu'intervient Julep. + +## Exemple rapide + +Imaginez un agent d’IA de recherche capable d’effectuer les opérations suivantes : +1. Prenez un sujet, +2. Proposez 100 requêtes de recherche pour ce sujet, +3. Effectuez ces recherches sur le Web en parallèle, +4. Résumez les résultats, +5. Envoyez le résumé sur Discord + +Dans Julep, ce serait une tâche unique sous80 lignes de codeet courirentièrement gérétout seul. Toutes les étapes sont exécutées sur les propres serveurs de Julep et vous n'avez pas besoin de lever le petit doigt. Voici un exemple fonctionnel : + +```yaml +name: Research Agent + +# Optional: Define the input schema for the task +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to research + +# 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: "YOUR_DISCORD_WEBHOOK_URL" + method: POST + headers: + Content-Type: application/json + +# Special variables: +# - inputs: for accessing the input to the task +# - outputs: for accessing the output of previous steps +# - _: for accessing the output of the previous step + +# Define the main workflow +main: +- prompt: + - role: system + content: >- + You are a research assistant. + Generate 100 diverse search queries related to the topic: + {{inputs[0].topic}} + + Write one query per line. + unwrap: true + +# Evaluate the search queries using a simple python expression +- evaluate: + search_queries: "_.split('\n')" + +# Run the web search in parallel for each query +- over: "_.search_queries" + map: + tool: web_search + arguments: + query: "_" + parallelism: 100 + +# Collect the results from the web search +- evaluate: + results: "'\n'.join([item.result for item in _])" + +# Summarize the results +- prompt: + - role: system + content: > + You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. + The summary should be well-structured, informative, and highlight key findings and insights: + {{_.results}} + unwrap: true + +# Send the summary to Discord +- tool: discord_webhook + arguments: + content: > + **Research Summary for {{inputs[0].topic}}** + + {{_}} +``` + +> [!TIP] +> Julep est vraiment utile lorsque vous souhaitez créer des agents IA capables de conserver le contexte et l'état lors d'interactions à long terme. Il est idéal pour concevoir des flux de travail complexes en plusieurs étapes et pour intégrer divers outils et API directement dans les processus de votre agent. +> +> Dans cet exemple, Julep gérera automatiquement les exécutions parallèles, réessayera les étapes ayant échoué, renverra les requêtes API et maintiendra les tâches en cours d'exécution de manière fiable jusqu'à leur achèvement. + +## Principales caractéristiques + +1. 🧠 **Agents IA persistants** : mémorisent le contexte et les informations au cours d'interactions à long terme. +2. 💾 **Sessions avec état** : gardez une trace des interactions passées pour des réponses personnalisées. +3. 🔄 **Tâches en plusieurs étapes** : créez des processus complexes en plusieurs étapes avec des boucles et une prise de décision. +4. ⏳ **Gestion des tâches** : gérez les tâches de longue durée qui peuvent s'exécuter indéfiniment. +5. 🛠️ **Outils intégrés** : utilisez des outils intégrés et des API externes dans vos tâches. +6. 🔧 **Auto-réparation** : Julep réessaiera automatiquement les étapes ayant échoué, renverra les messages et assurera généralement le bon déroulement de vos tâches. +7. 📚 **RAG** ​​: Utilisez le magasin de documents de Julep pour créer un système permettant de récupérer et d'utiliser vos propres données. + +Julep est idéal pour les applications qui nécessitent des cas d’utilisation de l’IA au-delà des simples modèles de réponse rapide. + +## Pourquoi Julep vs. LangChain ? + +### Différents cas d'utilisation + +Considérez LangChain et Julep comme des outils avec des objectifs différents au sein de la pile de développement de l’IA. + +LangChain est idéal pour créer des séquences d'invites et gérer les interactions avec les modèles d'IA. Il dispose d'un vaste écosystème avec de nombreuses intégrations prédéfinies, ce qui le rend pratique si vous souhaitez mettre en place quelque chose rapidement. LangChain s'adapte bien aux cas d'utilisation simples qui impliquent une chaîne linéaire d'invites et d'appels d'API. + +Julep, en revanche, s'intéresse davantage à la création d'agents d'IA persistants capables de mémoriser des éléments au cours d'interactions à long terme. Il est particulièrement efficace lorsque vous avez besoin de tâches complexes impliquant plusieurs étapes, une prise de décision et une intégration avec divers outils ou API directement dans le processus de l'agent. Il est conçu dès le départ pour gérer les sessions persistantes et les tâches complexes. + +Utilisez Julep si vous imaginez créer un assistant IA complexe qui doit : + +- Suivez les interactions des utilisateurs sur plusieurs jours ou semaines. +- Exécutez des tâches planifiées, comme l'envoi de résumés quotidiens ou la surveillance de sources de données. +- Prendre des décisions basées sur des interactions antérieures ou des données stockées. +- Interagir avec plusieurs services externes dans le cadre de sa mission. + +Ensuite, Julep fournit l’infrastructure pour prendre en charge tout cela sans que vous ayez à le construire à partir de zéro. + +### Facteur de forme différent + +Julep est une **plateforme** qui comprend un langage pour décrire les tâches, un serveur pour exécuter ces tâches et un SDK pour interagir avec la plateforme. Pour créer quelque chose avec Julep, vous écrivez une description de la tâche en YAML, puis vous exécutez la tâche dans le cloud. + +Julep est conçu pour les tâches lourdes, en plusieurs étapes et de longue durée, et il n'y a aucune limite à la complexité de la tâche. + +LangChain est une **bibliothèque** qui inclut quelques outils et un framework pour créer des chaînes linéaires d'invites et d'outils. Pour créer quelque chose avec LangChain, vous écrivez généralement du code Python qui configure et exécute les chaînes de modèles que vous souhaitez utiliser. + +LangChain pourrait être suffisant et plus rapide à mettre en œuvre pour les cas d'utilisation simples impliquant une chaîne linéaire d'invites et d'appels d'API. + +### En résumé + +Utilisez LangChain lorsque vous devez gérer les interactions des modèles d’IA et les séquences d’invite dans un contexte sans état ou à court terme. + +Choisissez Julep lorsque vous avez besoin d'un framework robuste pour les agents avec état avec des capacités de tâches avancées, des sessions persistantes et une gestion de tâches complexes. + +## Installation + +Pour commencer à utiliser Julep, installez-le en utilisant [npm](https://www.npmjs.com/package/@julep/sdk) ou [pip](https://pypi.org/project/julep/) : + +```bash +npm install @julep/sdk +``` + +ou + +```bash +pip install julep +``` + +> [!REMARQUE] +> Obtenez votre clé API [ici](https://dashboard-dev.julep.ai). +> +> Pendant que nous sommes en version bêta, vous pouvez également nous contacter sur [Discord](https://discord.com/invite/JTSBGRZrzj) pour obtenir la levée des limites de débit sur votre clé API. + +> [!TIP] +> 💻 Êtes-vous du genre à vouloir _montrer le code !™_ ? Nous avons créé une multitude de livres de recettes pour vous aider à démarrer. **Consultez les [livres de recettes](https://github.com/julep-ai/julep/tree/dev/cookbooks)** pour parcourir les exemples. +> +> 💡 Il existe également de nombreuses idées que vous pouvez développer en plus de Julep. **Consultez la [liste d'idées](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** pour vous inspirer. + +## Démarrage rapide de Python 🐍 + +### Étape 1 : Créer un agent + +```python +import yaml +from julep import Julep # or AsyncJulep + +client = Julep(api_key="your_julep_api_key") + +agent = client.agents.create( + name="Storytelling Agent", + model="gpt-4o", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) + +# 🛠️ Add an image generation tool (DALL·E) to the agent +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_openai_api_key", + }, + }, +) +``` + +### Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée + +Définissons une tâche en plusieurs étapes pour créer une histoire et générer une bande dessinée à panneaux basée sur une idée d'entrée : + +```python +# 📋 Task +# Create a task that takes an idea and creates a story and a 4-panel comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" + +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) +) +``` + +### Étape 3 : Exécuter la tâche + +```python +# 🚀 Execute the task with an input idea +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} +) + +# 🎉 Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) + +# 📦 Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) +``` + +### Étape 4 : Discuter avec l'agent + +Démarrez une session de chat interactive avec l'agent : + +```python +session = client.sessions.create(agent_id=agent.id) + +# 💬 Send messages to the agent +while (message := input("Enter a message: ")) != "quit": + response = client.sessions.chat( + session_id=session.id, + message=message, + ) + + print(response) +``` + +> [!TIP] +> Vous pouvez trouver l'exemple Python complet [ici](example.py). + + +## Démarrage rapide de Node.js 🟩 + +### Étape 1 : Créer un agent + +```javascript +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; + +const client = new Julep({ apiKey: 'your_julep_api_key' }); + +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); + + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(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_openai_api_key", + }, + }, + }); + + return agent; +} +``` + +### Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée + +```javascript +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} +``` + +### Étape 3 : Exécuter la tâche + +```javascript +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); + + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } + + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} +``` + +### Étape 4 : Discuter avec l'agent + +```javascript +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); +``` + +> [!TIP] +> Vous pouvez trouver l'exemple complet de Node.js [ici](example.js). + +## Composants + +Julep est composé des éléments suivants : + +- **Plateforme Julep** : la plateforme Julep est un service cloud qui exécute vos workflows. Elle comprend un langage pour décrire les workflows, un serveur pour exécuter ces workflows et un SDK pour interagir avec la plateforme. +- **SDK Julep** : les SDK Julep sont un ensemble de bibliothèques permettant de créer des workflows. Il existe des SDK pour Python et JavaScript, et d'autres sont en cours de développement. +- **API Julep** : L'API Julep est une API RESTful que vous pouvez utiliser pour interagir avec la plateforme Julep. + +### Modèle mental + +
+ +
+ +Considérez Julep comme une plateforme qui combine des composants côté client et côté serveur pour vous aider à créer des agents d'IA avancés. Voici comment le visualiser : + +1. **Votre code d'application :** +- Vous utilisez le SDK Julep dans votre application pour définir des agents, des tâches et des workflows. +- Le SDK fournit des fonctions et des classes qui facilitent la configuration et la gestion de ces composants. + +2. **Service back-end Julep :** +- Le SDK communique avec le backend Julep via le réseau. +- Le backend gère l'exécution des tâches, maintient l'état de la session, stocke les documents et orchestre les flux de travail. + +3. **Intégration avec les outils et les API :** +- Au sein de vos workflows, vous pouvez intégrer des outils et services externes. +- Le backend facilite ces intégrations, afin que vos agents puissent, par exemple, effectuer des recherches sur le Web, accéder à des bases de données ou appeler des API tierces. + +En termes plus simples : +- Julep est une plateforme permettant de créer des agents d'IA avec état. +- Vous utilisez le SDK (comme une boîte à outils) dans votre code pour définir ce que font vos agents. +- Le service backend (que vous pouvez considérer comme le moteur) exécute ces définitions, gère l'état et gère la complexité. + +## Concepts + +Julep s'appuie sur plusieurs composants techniques clés qui fonctionnent ensemble pour créer de puissants flux de travail d'IA : + +```mermaid +graph TD + User[User] ==> Session[Session] + Session --> Agent[Agent] + Agent --> Tasks[Tasks] + Agent --> LLM[Large Language Model] + Tasks --> Tools[Tools] + Agent --> Documents[Documents] + Documents --> VectorDB[Vector Database] + Tasks --> Executions[Executions] + + classDef client fill:#9ff,stroke:#333,stroke-width:1px; + class User client; + + classDef core fill:#f9f,stroke:#333,stroke-width:2px; + class Agent,Tasks,Session core; +``` + +- **Agents** : entités alimentées par l'IA et soutenues par de grands modèles linguistiques (LLM) qui exécutent des tâches et interagissent avec les utilisateurs. +- **Utilisateurs** : entités qui interagissent avec les agents via des sessions. +- **Sessions** : interactions avec état entre agents et utilisateurs, maintenant le contexte sur plusieurs échanges. +- **Tâches** : flux de travail programmatiques en plusieurs étapes que les agents peuvent exécuter, y compris différents types d'étapes telles que des invites, des appels d'outils et une logique conditionnelle. +- **Outils** : intégrations qui étendent les capacités d'un agent, y compris les fonctions définies par l'utilisateur, les outils système ou les intégrations d'API tierces. +- **Documents** : Objets textes ou données associés à des agents ou utilisateurs, vectorisés et stockés pour la recherche et la récupération sémantiques. +- **Exécutions** : instances de tâches qui ont été initiées avec des entrées spécifiques, avec leur propre cycle de vie et leur propre machine d'état. + +Pour une explication plus détaillée de ces concepts et de leurs interactions, veuillez vous référer à notre [Documentation sur les concepts](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md). + +## Comprendre les tâches + +Les tâches sont au cœur du système de workflow de Julep. Elles vous permettent de définir des workflows IA complexes en plusieurs étapes que vos agents peuvent exécuter. Voici un bref aperçu des composants des tâches : + +- **Nom et description** : Chaque tâche a un nom et une description uniques pour une identification facile. +- **Étapes principales** : Le cœur d’une tâche, définissant la séquence d’actions à effectuer. +- **Outils** : intégrations facultatives qui étendent les capacités de votre agent pendant l'exécution des tâches. + +### Types d'étapes de flux de travail + +Les tâches dans Julep peuvent inclure différents types d'étapes, ce qui vous permet de créer des flux de travail complexes et puissants. Voici un aperçu des types d'étapes disponibles, organisés par catégorie : + +#### Étapes courantes + +1. **Invite** : envoyez un message au modèle d’IA et recevez une réponse. + ```yaml + - prompt: "Analyze the following data: {{data}}" + ``` + +2. **Appel d'outil** : Exécutez un outil ou une API intégrée. + ```yaml + - tool: web_search + arguments: + query: "Latest AI developments" + ``` + +3. **Évaluer** : Effectuer des calculs ou manipuler des données. + ```yaml + - evaluate: + average_score: "sum(scores) / len(scores)" + ``` + +4. **Attendre l'entrée** : mettre le flux de travail en pause jusqu'à ce que l'entrée soit reçue. + ```yaml + - wait_for_input: + info: + message: "Please provide additional information." + ``` + +5. **Journal** : Enregistrer une valeur ou un message spécifié. + ```yaml + - log: "Processing completed for item {{item_id}}" + ``` + +#### Étapes clé-valeur + +6. **Get** : récupérer une valeur à partir d'un magasin clé-valeur. + ```yaml + - get: "user_preference" + ``` + +7. **Set** : attribuez une valeur à une clé dans un magasin clé-valeur. + ```yaml + - set: + user_preference: "dark_mode" + ``` + +#### Étapes d'itération + +8. **Foreach** : itérer sur une collection et effectuer des étapes pour chaque élément. + ```yaml + - foreach: + in: "data_list" + do: + - log: "Processing item {{_}}" + ``` + +9. **Map-Reduce** : Cartographiez une collection et réduisez les résultats. + ```yaml + - map_reduce: + over: "numbers" + map: + - evaluate: + squared: "_ ** 2" + reduce: "sum(results)" + ``` + +10. **Parallèle** : exécuter plusieurs étapes en parallèle. + ```yaml + - parallel: + - tool: web_search + arguments: + query: "AI news" + - tool: weather_check + arguments: + location: "New York" + ``` + +#### Étapes conditionnelles + +11. **If-Else** : Exécution conditionnelle des étapes. + ```yaml + - if: "score > 0.8" + then: + - log: "High score achieved" + else: + - log: "Score needs improvement" + ``` + +12. **Switch** : exécuter des étapes en fonction de plusieurs conditions. + ```yaml + - switch: + - case: "category == 'A'" + then: + - log: "Category A processing" + - case: "category == 'B'" + then: + - log: "Category B processing" + - case: "_" # Default case + then: + - log: "Unknown category" + ``` + +#### Autre flux de contrôle + +13. **Veille** : met le flux de travail en pause pendant une durée spécifiée. + ```yaml + - sleep: + seconds: 30 + ``` + +14. **Retour** : renvoie une valeur du flux de travail. + ```yaml + - return: + result: "Task completed successfully" + ``` + +15. **Rendement** : Exécutez un sous-flux de travail et attendez sa fin. + ```yaml + - yield: + workflow: "data_processing_subflow" + arguments: + input_data: "{{raw_data}}" + ``` + +16. **Erreur** : gérez les erreurs en spécifiant un message d’erreur. + ```yaml + - error: "Invalid input provided" + ``` + +Chaque type d'étape remplit un objectif spécifique dans la création de workflows d'IA sophistiqués. Cette catégorisation permet de comprendre les différents flux de contrôle et opérations disponibles dans les tâches Julep. + +## Fonctionnalités avancées + +Julep propose une gamme de fonctionnalités avancées pour améliorer vos flux de travail d'IA : + +### Ajout d'outils aux agents + +Étendez les capacités de votre agent en intégrant des outils et des API externes : + +```python +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"}, + }, +) +``` + +### Gestion des sessions et des utilisateurs + +Julep fournit une gestion de session robuste pour les interactions persistantes : + +```python +session = client.sessions.create( + agent_id=agent.id, + user_id=user.id, + context_overflow="adaptive" +) + +# Continue conversation in the same session +response = client.sessions.chat( + session_id=session.id, + messages=[ + { + "role": "user", + "content": "Follow up on the previous conversation." + } + ] +) +``` + +### Intégration et recherche de documents + +Gérez et recherchez facilement des documents pour vos agents : + +```python +# Upload a document +document = client.agents.docs.create( + title="AI advancements", + content="AI is changing the world...", + metadata={"category": "research_paper"} +) + +# Search documents +results = client.agents.docs.search( + text="AI advancements", + metadata_filter={"category": "research_paper"} +) +``` + +Pour des fonctionnalités plus avancées et une utilisation détaillée, veuillez vous référer à notre [Documentation sur les fonctionnalités avancées](https://docs.julep.ai/advanced-features). + +## Intégrations + +Julep prend en charge diverses intégrations qui étendent les capacités de vos agents IA. Voici une liste des intégrations disponibles et de leurs arguments pris en charge : + +### Recherche courageuse + +```yaml +setup: + api_key: string # The API key for Brave Search + +arguments: + query: string # The search query for searching with Brave + +output: + result: string # The result of the Brave Search +``` + +### Base de navigateur + +```yaml +setup: + api_key: string # The API key for BrowserBase + project_id: string # The project ID for BrowserBase + session_id: string # (Optional) The session ID for BrowserBase + +arguments: + urls: list[string] # The URLs for loading with BrowserBase + +output: + documents: list # The documents loaded from the URLs +``` + +### E-mail + +```yaml +setup: + host: string # The host of the email server + port: integer # The port of the email server + user: string # The username of the email server + password: string # The password of the email server + +arguments: + to: string # The email address to send the email to + from: string # The email address to send the email from + subject: string # The subject of the email + body: string # The body of the email + +output: + success: boolean # Whether the email was sent successfully +``` + +### Araignée + +```yaml +setup: + spider_api_key: string # The API key for Spider + +arguments: + url: string # The URL for which to fetch data + mode: string # The type of crawlers (default: "scrape") + params: dict # (Optional) The parameters for the Spider API + +output: + documents: list # The documents returned from the spider +``` + +### Météo + +```yaml +setup: + openweathermap_api_key: string # The API key for OpenWeatherMap + +arguments: + location: string # The location for which to fetch weather data + +output: + result: string # The weather data for the specified location +``` + +### Wikipédia + +```yaml +arguments: + query: string # The search query string + load_max_docs: integer # Maximum number of documents to load (default: 2) + +output: + documents: list # The documents returned from the Wikipedia search +``` + +Ces intégrations peuvent être utilisées dans vos tâches pour étendre les capacités de vos agents IA. Pour des informations plus détaillées sur la manière d'utiliser ces intégrations dans vos workflows, veuillez consulter notre [Documentation sur les intégrations](https://docs.julep.ai/integrations). + +## Référence du SDK + +- [Kit de développement logiciel Node.js](https://github.com/julep-ai/node-sdk/blob/main/api.md) +- [SDK Python](https://github.com/julep-ai/python-sdk/blob/main/api.md) + +## Référence API + +Explorez notre documentation API complète pour en savoir plus sur les agents, les tâches et les exécutions : + +- [API des agents](https://api.julep.ai/api/docs#tag/agents) +- [API des tâches](https://api.julep.ai/api/docs#tag/tasks) +- [API d'exécution](https://api.julep.ai/api/docs#tag/executions) diff --git a/README-JA.md b/README-JA.md new file mode 100644 index 000000000..1da8a87a1 --- /dev/null +++ b/README-JA.md @@ -0,0 +1,948 @@ +English | [中文翻译](https://github.com/julep-ai/julep/blob/dev/README-CN.md) | [日本語翻訳](https://github.com/julep-ai/julep/blob/dev/README-JP.md) + +
+ julep +
+ +

+
+ ドキュメントを見る + · + 不和 + · + 𝕏 + · + リンクトイン +

+ + +

+ NPM Version +   + PyPI - Version +   + Docker Image Version +   + GitHub License +

+ +***** + +> [!注意] +> 👨‍💻 devfest.ai イベントに参加しませんか? [Discord](https://discord.com/invite/JTSBGRZrzj) に参加して、以下の詳細を確認してください。 + +
+🌟 貢献者とDevFest.AI参加者(クリックして拡大) + +## 🌟 貢献者を募集します! + +Julep プロジェクトに新しい貢献者を迎えられることを嬉しく思います。プロジェクトを始めるのに役立つ「最初の良い問題」をいくつか作成しました。貢献する方法は次のとおりです。 + +1. 貢献方法に関するガイドラインについては、[CONTRIBUTING.md](CONTRIBUTING.md) ファイルをご覧ください。 +2. [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) を参照して、興味のあるタスクを見つけます。 +3. ご質問やご不明な点がございましたら、[Discord](https://discord.com/invite/JTSBGRZrzj) チャンネルまでお気軽にお問い合わせください。 + +あなたの貢献は、大小を問わず私たちにとって貴重です。一緒に素晴らしいものを作りましょう!🚀 + +### 🎉 DevFest.AI 2024年10月 + +嬉しいニュースです!2024 年 10 月を通して DevFest.AI に参加します!🗓️ + +- このイベント中に Julep に貢献すると、素晴らしい Julep のグッズや景品を獲得するチャンスが得られます! 🎁 +- 世界中の開発者とともに AI リポジトリに貢献し、素晴らしいイベントに参加しましょう。 +- この素晴らしい取り組みを企画してくださった DevFest.AI に心から感謝します。 + +> [!ヒント] +> 楽しみに参加する準備はできましたか? **[参加することをツイート](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)**して、コーディングを始めましょう! 🖥️ + +> [!注意] +> API キーを [こちら](https://dashboard-dev.julep.ai) から取得します。 +> +> ベータ版では、[Discord](https://discord.com/invite/JTSBGRZrzj) に連絡して、API キーのレート制限を解除することもできます。 + +![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) + +
+ + + +
+

📖 目次

+ +- [はじめに](#introduction) +- [簡単な例](#quick-example) +- [主な機能](#key-features) +- [なぜ Julep と LangChain を比較するのか?](#why-julep-vs-langchain) +- [さまざまなユースケース](#different-use-cases) +- [異なるフォームファクター](#different-form-factor) +- [要約](#in-summary) +- [インストール](#installation) +- [Python クイックスタート 🐍](#python-quick-start-) +- [ステップ 1: エージェントを作成する](#step-1-create-an-agent) +- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [ステップ 3: タスクを実行する](#step-3-execute-the-task) +- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent) +- [Node.js クイック スタート 🟩](#nodejs-quick-start-) +- [ステップ 1: エージェントを作成する](#step-1-create-an-agent-1) +- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [ステップ 3: タスクを実行する](#step-3-execute-the-task-1) +- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent-1) +- [コンポーネント](#components) +- [メンタルモデル](#mental-model) +- [コンセプト](#concepts) +- [タスクの理解](#understanding-tasks) +- [ワークフロー ステップの種類](#types-of-workflow-steps) +- [高度な機能](#advanced-features) +- [エージェントへのツールの追加](#adding-tools-to-agents) +- [セッションとユーザーの管理](#managing-sessions-and-users) +- [ドキュメントの統合と検索](#document-integration-and-search) +- [統合](#integrations) +- [勇敢な検索](#brave-search) +- [ブラウザベース](#browserbase) +- [メールアドレス](#email) +- [スパイダー](#spider) +- [天気](#weather) +- [ウィキペディア](#wikipedia) +- [SDKリファレンス](#sdk-reference) +- [APIリファレンス](#api-reference) + +
+ + +## 導入 + +Julep は、過去のやり取りを記憶し、複雑なタスクを実行できる AI エージェントを作成するためのプラットフォームです。長期記憶を提供し、複数ステップのプロセスを管理します。 + +Julep を使用すると、意思決定、ループ、並列処理、多数の外部ツールや API との統合を組み込んだ複数ステップのタスクを作成できます。 + +多くの AI アプリケーションは、分岐が最小限の、プロンプトと API 呼び出しの単純な線形チェーンに制限されていますが、Julep はより複雑なシナリオを処理できるように構築されています。 + +サポート対象: +- 複雑で多段階のプロセス +- ダイナミックな意思決定 +- 並列実行 + +> [!ヒント] +> 単純な質問に答えるだけでなく、複雑なタスクを処理し、過去のやり取りを記憶し、場合によっては他のツールや API も使用できる AI エージェントを構築したいとします。そこで Julep の出番です。 + +## 簡単な例 + +次のことができる研究 AI エージェントを想像してください。 +1. トピックを取り上げ、 +2. そのトピックについて100個の検索クエリを考えます。 +3. ウェブ検索を並行して実行する +4. 結果をまとめる +5.要約をDiscordに送信する + +Julepでは、これは単一のタスクになります80行のコードそして走る完全に管理されたすべては Julep のサーバー上で実行されます。すべての手順は Julep のサーバー上で実行されるため、何もする必要はありません。次に動作例を示します。 + +```yaml +name: Research Agent + +# Optional: Define the input schema for the task +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to research + +# 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: "YOUR_DISCORD_WEBHOOK_URL" + method: POST + headers: + Content-Type: application/json + +# Special variables: +# - inputs: for accessing the input to the task +# - outputs: for accessing the output of previous steps +# - _: for accessing the output of the previous step + +# Define the main workflow +main: +- prompt: + - role: system + content: >- + You are a research assistant. + Generate 100 diverse search queries related to the topic: + {{inputs[0].topic}} + + Write one query per line. + unwrap: true + +# Evaluate the search queries using a simple python expression +- evaluate: + search_queries: "_.split('\n')" + +# Run the web search in parallel for each query +- over: "_.search_queries" + map: + tool: web_search + arguments: + query: "_" + parallelism: 100 + +# Collect the results from the web search +- evaluate: + results: "'\n'.join([item.result for item in _])" + +# Summarize the results +- prompt: + - role: system + content: > + You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. + The summary should be well-structured, informative, and highlight key findings and insights: + {{_.results}} + unwrap: true + +# Send the summary to Discord +- tool: discord_webhook + arguments: + content: > + **Research Summary for {{inputs[0].topic}}** + + {{_}} +``` + +> [!ヒント] +> Julep は、長期的なインタラクションを通じてコン​​テキストと状態を維持できる AI エージェントを構築する場合に非常に便利です。複雑な複数ステップのワークフローを設計し、さまざまなツールや API をエージェントのプロセスに直接統合するのに最適です。 +> +> この例では、Julep は並列実行を自動的に管理し、失敗したステップを再試行し、API リクエストを再送信し、タスクが完了するまで確実に実行し続けます。 + +## 主な特徴 + +1. 🧠 **永続的な AI エージェント**: 長期にわたるやり取りを通じてコン​​テキストと情報を記憶します。 +2. 💾 **ステートフル セッション**: 過去のやり取りを追跡して、パーソナライズされた応答を提供します。 +3. 🔄 **複数ステップのタスク**: ループと意思決定を使用して、複雑な複数ステップのプロセスを構築します。 +4. ⏳ **タスク管理**: 無期限に実行される可能性のある長時間実行タスクを処理します。 +5. 🛠️ **組み込みツール**: タスクで組み込みツールと外部 API を使用します。 +6. 🔧 **自己修復**: Julep は失敗したステップを自動的に再試行し、メッセージを再送信し、タスクがスムーズに実行されるようにします。 +7. 📚 **RAG**: Julep のドキュメント ストアを使用して、独自のデータを取得して使用するためのシステムを構築します。 + +Julep は、単純なプロンプト応答モデルを超えた AI ユースケースを必要とするアプリケーションに最適です。 + +## Julep と LangChain を比較する理由 + +### さまざまなユースケース + +LangChain と Julep は、AI 開発スタック内で異なる重点を置いたツールと考えてください。 + +LangChain は、プロンプトのシーケンスを作成し、AI モデルとのやり取りを管理するのに最適です。多数の事前構築された統合を備えた大規模なエコシステムを備えているため、何かをすぐに立ち上げて実行したい場合に便利です。LangChain は、プロンプトと API 呼び出しの線形チェーンを含む単純なユースケースに適しています。 + +一方、Julep は、長期的なインタラクションを通じて物事を記憶できる永続的な AI エージェントの構築に重点を置いています。エージェントのプロセス内で複数のステップ、意思決定、さまざまなツールや API との直接統合を伴う複雑なタスクが必要な場合に効果を発揮します。永続的なセッションと複雑なタスクを管理するために、ゼロから設計されています。 + +以下のことを必要とする複雑な AI アシスタントの構築を考えている場合には、Julep を使用してください。 + +- 数日または数週間にわたってユーザーのインタラクションを追跡します。 +- 毎日のサマリーの送信やデータ ソースの監視などのスケジュールされたタスクを実行します。 +- 以前のやり取りや保存されたデータに基づいて決定を下します。 +- タスクの一部として複数の外部サービスと対話します。 + +そして、Julep は、ゼロから構築する必要なく、これらすべてをサポートするインフラストラクチャを提供します。 + +### 異なるフォームファクタ + +Julep は、タスクを記述するための言語、それらのタスクを実行するためのサーバー、プラットフォームと対話するための SDK を含む **プラットフォーム** です。Julep で何かを構築するには、タスクの説明を `YAML` で記述し、クラウドでタスクを実行します。 + +Julep は、負荷の高い、複数のステップから成る、長時間実行されるタスク向けに構築されており、タスクの複雑さに制限はありません。 + +LangChain は、プロンプトとツールの線形チェーンを構築するためのいくつかのツールとフレームワークを含む **ライブラリ** です。LangChain を使用して何かを構築するには、通常、使用するモデル チェーンを設定して実行する Python コードを記述します。 + +LangChain は、プロンプトと API 呼び出しの線形チェーンを含む単純なユースケースでは十分であり、実装も迅速です。 + +### 要約すれば + +ステートレスまたは短期的なコンテキストで AI モデルのインタラクションとプロンプト シーケンスを管理する必要がある場合は、LangChain を使用します。 + +高度なタスク機能、永続的なセッション、複雑なタスク管理を備えたステートフル エージェント用の堅牢なフレームワークが必要な場合は、Julep を選択してください。 + +## インストール + +Julep を使い始めるには、[npm](https://www.npmjs.com/package/@julep/sdk) または [pip](https://pypi.org/project/julep/) を使用してインストールします。 + +```bash +npm install @julep/sdk +``` + +または + +```bash +pip install julep +``` + +> [!注意] +> API キーを [こちら](https://dashboard-dev.julep.ai) から取得します。 +> +> ベータ版では、[Discord](https://discord.com/invite/JTSBGRZrzj) に連絡して、API キーのレート制限を解除することもできます。 + +> [!ヒント] +> 💻 あなたは「コードを見せてください!™」タイプの人ですか? 始めるにあたって役立つクックブックを多数作成しました。**[クックブック](https://github.com/julep-ai/julep/tree/dev/cookbooks)** をチェックして、例を参照してください。 +> +> 💡 Julep をベースに構築できるアイデアもたくさんあります。**[アイデアのリスト](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** をチェックして、インスピレーションを得てください。 + +## Python クイックスタート 🐍 + +### ステップ 1: エージェントを作成する + +```python +import yaml +from julep import Julep # or AsyncJulep + +client = Julep(api_key="your_julep_api_key") + +agent = client.agents.create( + name="Storytelling Agent", + model="gpt-4o", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) + +# 🛠️ Add an image generation tool (DALL·E) to the agent +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_openai_api_key", + }, + }, +) +``` + +### ステップ2: ストーリーと漫画を生成するタスクを作成する + +入力されたアイデアに基づいてストーリーを作成し、パネル化された漫画を生成するためのマルチステップタスクを定義しましょう。 + +```python +# 📋 Task +# Create a task that takes an idea and creates a story and a 4-panel comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" + +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) +) +``` + +### ステップ3: タスクを実行する + +```python +# 🚀 Execute the task with an input idea +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} +) + +# 🎉 Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) + +# 📦 Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) +``` + +### ステップ4: エージェントとチャットする + +エージェントとの対話型チャット セッションを開始します。 + +```python +session = client.sessions.create(agent_id=agent.id) + +# 💬 Send messages to the agent +while (message := input("Enter a message: ")) != "quit": + response = client.sessions.chat( + session_id=session.id, + message=message, + ) + + print(response) +``` + +> [!ヒント] +> 完全な Python の例は [ここ](example.py) にあります。 + + +## Node.js クイックスタート 🟩 + +### ステップ 1: エージェントを作成する + +```javascript +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; + +const client = new Julep({ apiKey: 'your_julep_api_key' }); + +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); + + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(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_openai_api_key", + }, + }, + }); + + return agent; +} +``` + +### ステップ2: ストーリーと漫画を生成するタスクを作成する + +```javascript +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - 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 + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} +``` + +### ステップ3: タスクを実行する + +```javascript +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); + + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } + + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} +``` + +### ステップ4: エージェントとチャットする + +```javascript +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); +``` + +> [!ヒント] +> 完全な Node.js の例は [ここ](example.js) にあります。 + +## コンポーネント + +Julep は次のコンポーネントで構成されています。 + +- **Julep プラットフォーム**: Julep プラットフォームは、ワークフローを実行するクラウド サービスです。ワークフローを記述するための言語、ワークフローを実行するためのサーバー、プラットフォームと対話するための SDK が含まれています。 +- **Julep SDK**: Julep SDK は、ワークフローを構築するためのライブラリのセットです。Python 用と JavaScript 用の SDK があり、今後さらに追加される予定です。 +- **Julep API**: Julep API は、Julep プラットフォームと対話するために使用できる RESTful API です。 + +### メンタルモデル + +
+ +
+ +Julep は、クライアント側とサーバー側の両方のコンポーネントを組み合わせて、高度な AI エージェントの構築を支援するプラットフォームと考えてください。これを視覚化する方法は次のとおりです。 + +1. **アプリケーションコード:** +- アプリケーションで Julep SDK を使用して、エージェント、タスク、ワークフローを定義します。 +- SDK は、これらのコンポーネントのセットアップと管理を容易にする関数とクラスを提供します。 + +2. **Julep バックエンド サービス:** +- SDK はネットワーク経由で Julep バックエンドと通信します。 +- バックエンドは、タスクの実行を処理し、セッション状態を維持し、ドキュメントを保存し、ワークフローを調整します。 + +3. **ツールとAPIとの統合:** +- ワークフロー内で、外部ツールやサービスを統合できます。 +- バックエンドはこれらの統合を容易にするため、エージェントは、たとえば、Web 検索を実行したり、データベースにアクセスしたり、サードパーティの API を呼び出したりすることができます。 + +もっと簡単に言うと: +- Julep は、ステートフル AI エージェントを構築するためのプラットフォームです。 +- コード内で SDK (ツールキットのようなもの) を使用して、エージェントの動作を定義します。 +- バックエンド サービス (エンジンと考えることができます) は、これらの定義を実行し、状態を管理し、複雑さを処理します。 + +## コンセプト + +Julep は、強力な AI ワークフローを作成するために連携するいくつかの主要な技術コンポーネントに基づいて構築されています。 + +```mermaid +graph TD + User[User] ==> Session[Session] + Session --> Agent[Agent] + Agent --> Tasks[Tasks] + Agent --> LLM[Large Language Model] + Tasks --> Tools[Tools] + Agent --> Documents[Documents] + Documents --> VectorDB[Vector Database] + Tasks --> Executions[Executions] + + classDef client fill:#9ff,stroke:#333,stroke-width:1px; + class User client; + + classDef core fill:#f9f,stroke:#333,stroke-width:2px; + class Agent,Tasks,Session core; +``` + +- **エージェント**: タスクを実行し、ユーザーと対話する大規模言語モデル (LLM) を搭載した AI 搭載エンティティ。 +- **ユーザー**: セッションを通じてエージェントと対話するエンティティ。 +- **セッション**: エージェントとユーザー間のステートフルなやり取り。複数のやり取りにわたってコンテキストを維持します。 +- **タスク**: プロンプト、ツール呼び出し、条件付きロジックなどのさまざまな種類のステップを含む、エージェントが実行できる複数ステップのプログラム ワークフロー。 +- **ツール**: ユーザー定義関数、システム ツール、サードパーティ API 統合など、エージェントの機能を拡張する統合。 +- **ドキュメント**: エージェントまたはユーザーに関連付けられたテキストまたはデータ オブジェクト。セマンティック検索と取得のためにベクトル化され、保存されます。 +- **実行**: 特定の入力で開始され、独自のライフサイクルとステート マシンを持つタスクのインスタンス。 + +これらの概念とその相互作用の詳細な説明については、[概念ドキュメント](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)を参照してください。 + +## タスクを理解する + +タスクは Julep のワークフロー システムの中核です。タスクを使用すると、エージェントが実行できる複雑な複数ステップの AI ワークフローを定義できます。タスク コンポーネントの概要は次のとおりです。 + +- **名前と説明**: 各タスクには、簡単に識別できるように一意の名前と説明が付いています。 +- **メインステップ**: タスクの中核であり、実行されるアクションのシーケンスを定義します。 +- **ツール**: タスク実行中にエージェントの機能を拡張するオプションの統合。 + +### ワークフローステップの種類 + +Julep のタスクにはさまざまな種類のステップを含めることができるため、複雑で強力なワークフローを作成できます。利用可能なステップの種類の概要をカテゴリ別にまとめると次のようになります。 + +#### 一般的な手順 + +1. **プロンプト**: AI モデルにメッセージを送信し、応答を受信します。 + ```yaml + - prompt: "Analyze the following data: {{data}}" + ``` + +2. **ツール呼び出し**: 統合ツールまたは API を実行します。 + ```yaml + - tool: web_search + arguments: + query: "Latest AI developments" + ``` + +3. **評価**: 計算を実行したり、データを操作したりします。 + ```yaml + - evaluate: + average_score: "sum(scores) / len(scores)" + ``` + +4. **入力を待機**: 入力が受信されるまでワークフローを一時停止します。 + ```yaml + - wait_for_input: + info: + message: "Please provide additional information." + ``` + +5. **ログ**: 指定された値またはメッセージをログに記録します。 + ```yaml + - log: "Processing completed for item {{item_id}}" + ``` + +#### キー値ステップ + +6. **Get**: キー値ストアから値を取得します。 + ```yaml + - get: "user_preference" + ``` + +7. **Set**: キー値ストア内のキーに値を割り当てます。 + ```yaml + - set: + user_preference: "dark_mode" + ``` + +#### 反復ステップ + +8. **Foreach**: コレクションを反復処理し、各項目に対して手順を実行します。 + ```yaml + - foreach: + in: "data_list" + do: + - log: "Processing item {{_}}" + ``` + +9. **Map-Reduce**: コレクションをマップし、結果を縮小します。 + ```yaml + - map_reduce: + over: "numbers" + map: + - evaluate: + squared: "_ ** 2" + reduce: "sum(results)" + ``` + +10. **並列**: 複数のステップを並列に実行します。 + ```yaml + - parallel: + - tool: web_search + arguments: + query: "AI news" + - tool: weather_check + arguments: + location: "New York" + ``` + +#### 条件付きステップ + +11. **If-Else**: ステップの条件付き実行。 + ```yaml + - if: "score > 0.8" + then: + - log: "High score achieved" + else: + - log: "Score needs improvement" + ``` + +12. **スイッチ**: 複数の条件に基づいてステップを実行します。 + ```yaml + - switch: + - case: "category == 'A'" + then: + - log: "Category A processing" + - case: "category == 'B'" + then: + - log: "Category B processing" + - case: "_" # Default case + then: + - log: "Unknown category" + ``` + +#### その他の制御フロー + +13. **スリープ**: 指定した期間、ワークフローを一時停止します。 + ```yaml + - sleep: + seconds: 30 + ``` + +14. **Return**: ワークフローから値を返します。 + ```yaml + - return: + result: "Task completed successfully" + ``` + +15. **Yield**: サブワークフローを実行し、完了を待ちます。 + ```yaml + - yield: + workflow: "data_processing_subflow" + arguments: + input_data: "{{raw_data}}" + ``` + +16. **エラー**: エラー メッセージを指定してエラーを処理します。 + ```yaml + - error: "Invalid input provided" + ``` + +各ステップ タイプは、高度な AI ワークフローを構築する上で特定の目的を果たします。この分類は、Julep タスクで使用できるさまざまな制御フローと操作を理解するのに役立ちます。 + +## 高度な機能 + +Julep は、AI ワークフローを強化するためのさまざまな高度な機能を提供します。 + +### エージェントへのツールの追加 + +外部ツールと API を統合してエージェントの機能を拡張します。 + +```python +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 は、永続的なインタラクションのための堅牢なセッション管理を提供します。 + +```python +session = client.sessions.create( + agent_id=agent.id, + user_id=user.id, + context_overflow="adaptive" +) + +# Continue conversation in the same session +response = client.sessions.chat( + session_id=session.id, + messages=[ + { + "role": "user", + "content": "Follow up on the previous conversation." + } + ] +) +``` + +### ドキュメントの統合と検索 + +エージェントのドキュメントを簡単に管理および検索できます。 + +```python +# Upload a document +document = client.agents.docs.create( + title="AI advancements", + content="AI is changing the world...", + metadata={"category": "research_paper"} +) + +# Search documents +results = client.agents.docs.search( + text="AI advancements", + metadata_filter={"category": "research_paper"} +) +``` + +より高度な機能と詳細な使用方法については、[高度な機能のドキュメント](https://docs.julep.ai/advanced-features)を参照してください。 + +## 統合 + +Julep は、AI エージェントの機能を拡張するさまざまな統合をサポートしています。利用可能な統合とサポートされている引数のリストは次のとおりです。 + +### ブレイブサーチ + +```yaml +setup: + api_key: string # The API key for Brave Search + +arguments: + query: string # The search query for searching with Brave + +output: + result: string # The result of the Brave Search +``` + +### ブラウザベース + +```yaml +setup: + api_key: string # The API key for BrowserBase + project_id: string # The project ID for BrowserBase + session_id: string # (Optional) The session ID for BrowserBase + +arguments: + urls: list[string] # The URLs for loading with BrowserBase + +output: + documents: list # The documents loaded from the URLs +``` + +### メール + +```yaml +setup: + host: string # The host of the email server + port: integer # The port of the email server + user: string # The username of the email server + password: string # The password of the email server + +arguments: + to: string # The email address to send the email to + from: string # The email address to send the email from + subject: string # The subject of the email + body: string # The body of the email + +output: + success: boolean # Whether the email was sent successfully +``` + +### スパイダー + +```yaml +setup: + spider_api_key: string # The API key for Spider + +arguments: + url: string # The URL for which to fetch data + mode: string # The type of crawlers (default: "scrape") + params: dict # (Optional) The parameters for the Spider API + +output: + documents: list # The documents returned from the spider +``` + +### 天気 + +```yaml +setup: + openweathermap_api_key: string # The API key for OpenWeatherMap + +arguments: + location: string # The location for which to fetch weather data + +output: + result: string # The weather data for the specified location +``` + +### ウィキペディア + +```yaml +arguments: + query: string # The search query string + load_max_docs: integer # Maximum number of documents to load (default: 2) + +output: + documents: list # The documents returned from the Wikipedia search +``` + +これらの統合をタスク内で使用して、AI エージェントの機能を拡張できます。ワークフローでこれらの統合を使用する方法の詳細については、[統合ドキュメント](https://docs.julep.ai/integrations)を参照してください。 + +## SDK リファレンス + +- [Node.js SDK](https://github.com/julep-ai/node-sdk/blob/main/api.md) +- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/api.md) + +## APIリファレンス + +エージェント、タスク、実行の詳細については、包括的な API ドキュメントをご覧ください。 + +- [エージェント API](https://api.julep.ai/api/docs#tag/agents) +- [タスク API](https://api.julep.ai/api/docs#tag/tasks) +- [実行API](https://api.julep.ai/api/docs#tag/executions) From ad8586fa874abfa8218482109dbc94f7f511b27b Mon Sep 17 00:00:00 2001 From: itsamziii Date: Fri, 11 Oct 2024 12:56:23 +0000 Subject: [PATCH 09/13] chore(docs): update TOC --- README-CN.md | 65 +++++++++++++++++++--------------------------- README-FR.md | 70 ++++++++++++++++++++++++------------------------- README-JA.md | 73 +++++++++++++++++++++++++--------------------------- 3 files changed, 97 insertions(+), 111 deletions(-) diff --git a/README-CN.md b/README-CN.md index d384fdcee..262ac53b3 100644 --- a/README-CN.md +++ b/README-CN.md @@ -67,44 +67,33 @@
-

📖 目录

- -- [简介](#introduction) -- [快速示例](#quick-example) -- [主要特点](#key-features) -- [为什么选择 Julep 而不是 LangChain?](#why-julep-vs-langchain) -- [不同用例](#different-use-cases) -- [不同的外形尺寸](#different-form-factor) -- [总结](#in-summary) -- [安装](#安装) -- [Python 快速入门 🐍](#python-quick-start-) -- [步骤 1:创建代理](#step-1-create-an-agent) -- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip) -- [步骤 3:执行任务](#step-3-execute-the-task) -- [步骤 4:与代理聊天](#step-4-chat-with-the-agent) -- [Node.js 快速入门🟩](#nodejs-quick-start-) -- [步骤 1:创建代理](#step-1-create-an-agent-1) -- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) -- [步骤 3:执行任务](#step-3-execute-the-task-1) -- [步骤 4:与代理聊天](#step-4-chat-with-the-agent-1) -- [组件](#components) -- [心智模型](#mental-model) -- [概念](#concepts) -- [理解任务](#understanding-tasks) -- [工作流步骤的类型](#types-of-workflow-steps) -- [高级功能](#advanced-features) -- [向代理添加工具](#adding-tools-to-agents) -- [管理会话和用户](#managing-sessions-and-users) -- [文档集成与搜索](#document-integration-and-search) -- [集成](#integrations) -- [勇敢搜索](#brave-search) -- [BrowserBase](#browserbase) -- [电子邮件](#email) -- [蜘蛛](#spider) -- [天气](#天气) -- [维基百科](#wikipedia) -- [SDK 参考](#sdk-reference) -- [API 参考](#api-reference) +

📖 Table of Contents

+ +- [为什么选择 Julep 而不是 LangChain?](#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9-julep-%E8%80%8C%E4%B8%8D%E6%98%AF-langchain) + - [不同的用例](#%E4%B8%8D%E5%90%8C%E7%9A%84%E7%94%A8%E4%BE%8B) + - [不同的外形尺寸](#%E4%B8%8D%E5%90%8C%E7%9A%84%E5%A4%96%E5%BD%A2%E5%B0%BA%E5%AF%B8) +- [Python 快速入门🐍](#python-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8) + - [步骤 1:创建代理](#%E6%AD%A5%E9%AA%A4-1%E5%88%9B%E5%BB%BA%E4%BB%A3%E7%90%86) + - [步骤 2:创建一个生成故事和漫画的任务](#%E6%AD%A5%E9%AA%A4-2%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%94%9F%E6%88%90%E6%95%85%E4%BA%8B%E5%92%8C%E6%BC%AB%E7%94%BB%E7%9A%84%E4%BB%BB%E5%8A%A1) + - [步骤 3:执行任务](#%E6%AD%A5%E9%AA%A4-3%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1) + - [步骤 4:与代理聊天](#%E6%AD%A5%E9%AA%A4-4%E4%B8%8E%E4%BB%A3%E7%90%86%E8%81%8A%E5%A4%A9) +- [Node.js 快速入门 🟩](#nodejs-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8-) + - [步骤 1:创建代理](#%E6%AD%A5%E9%AA%A4-1%E5%88%9B%E5%BB%BA%E4%BB%A3%E7%90%86-1) + - [步骤 2:创建一个生成故事和漫画的任务](#%E6%AD%A5%E9%AA%A4-2%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%94%9F%E6%88%90%E6%95%85%E4%BA%8B%E5%92%8C%E6%BC%AB%E7%94%BB%E7%9A%84%E4%BB%BB%E5%8A%A1-1) + - [步骤 3:执行任务](#%E6%AD%A5%E9%AA%A4-3%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1-1) + - [步骤 4:与代理聊天](#%E6%AD%A5%E9%AA%A4-4%E4%B8%8E%E4%BB%A3%E7%90%86%E8%81%8A%E5%A4%A9-1) + - [心智模型](#%E5%BF%83%E6%99%BA%E6%A8%A1%E5%9E%8B) +- [概念](#%E6%A6%82%E5%BF%B5) +- [理解任务](#%E7%90%86%E8%A7%A3%E4%BB%BB%E5%8A%A1) + - [工作流步骤的类型](#%E5%B7%A5%E4%BD%9C%E6%B5%81%E6%AD%A5%E9%AA%A4%E7%9A%84%E7%B1%BB%E5%9E%8B) +- [高级功能](#%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD) + - [向代理添加工具](#%E5%90%91%E4%BB%A3%E7%90%86%E6%B7%BB%E5%8A%A0%E5%B7%A5%E5%85%B7) + - [管理会话和用户](#%E7%AE%A1%E7%90%86%E4%BC%9A%E8%AF%9D%E5%92%8C%E7%94%A8%E6%88%B7) + - [文档集成与搜索](#%E6%96%87%E6%A1%A3%E9%9B%86%E6%88%90%E4%B8%8E%E6%90%9C%E7%B4%A2) +- [集成](#%E9%9B%86%E6%88%90) + - [勇敢搜索](#%E5%8B%87%E6%95%A2%E6%90%9C%E7%B4%A2) + - [浏览器基础](#%E6%B5%8F%E8%A7%88%E5%99%A8%E5%9F%BA%E7%A1%80) +- [SDK 参考](#sdk-%E5%8F%82%E8%80%83)
diff --git a/README-FR.md b/README-FR.md index b7c08e3f4..5b4e8f010 100644 --- a/README-FR.md +++ b/README-FR.md @@ -67,44 +67,44 @@ Des nouvelles passionnantes ! Nous participons au DevFest.AI tout au long du moi
-

📖 Table des matières

- -- [Présentation](#introduction) -- [Exemple rapide](#quick-example) -- [Caractéristiques principales](#key-features) -- [Pourquoi Julep vs. LangChain ?](#pourquoi-julep-vs-langchain) -- [Différents cas d'utilisation](#different-use-cases) -- [Facteur de forme différent](#different-form-factor) -- [En résumé](#en-resumé) +

📖 Table of Contents

+ +- [Introduction](#introduction) +- [Exemple rapide](#exemple-rapide) +- [Principales caractéristiques](#principales-caract%C3%A9ristiques) +- [Pourquoi Julep vs. LangChain ?](#pourquoi-julep-vs-langchain%C2%A0) + - [Différents cas d'utilisation](#diff%C3%A9rents-cas-dutilisation) + - [Facteur de forme différent](#facteur-de-forme-diff%C3%A9rent) + - [En résumé](#en-r%C3%A9sum%C3%A9) - [Installation](#installation) -- [Démarrage rapide de Python 🐍](#python-quick-start-) -- [Étape 1 : Créer un agent](#step-1-create-an-agent) -- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip) -- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task) -- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent) -- [Démarrage rapide de Node.js 🟩](#nodejs-quick-start-) -- [Étape 1 : Créer un agent](#step-1-create-an-agent-1) -- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) -- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task-1) -- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent-1) +- [Démarrage rapide de Python 🐍](#d%C3%A9marrage-rapide-de-python-) + - [Étape 1 : Créer un agent](#%C3%89tape-1%C2%A0-cr%C3%A9er-un-agent) + - [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#%C3%89tape-2%C2%A0-cr%C3%A9er-une-t%C3%A2che-qui-g%C3%A9n%C3%A8re-une-histoire-et-une-bande-dessin%C3%A9e) + - [Étape 3 : Exécuter la tâche](#%C3%89tape-3%C2%A0-ex%C3%A9cuter-la-t%C3%A2che) + - [Étape 4 : Discuter avec l'agent](#%C3%89tape-4%C2%A0-discuter-avec-lagent) +- [Démarrage rapide de Node.js 🟩](#d%C3%A9marrage-rapide-de-nodejs-) + - [Étape 1 : Créer un agent](#%C3%89tape-1%C2%A0-cr%C3%A9er-un-agent-1) + - [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#%C3%89tape-2%C2%A0-cr%C3%A9er-une-t%C3%A2che-qui-g%C3%A9n%C3%A8re-une-histoire-et-une-bande-dessin%C3%A9e-1) + - [Étape 3 : Exécuter la tâche](#%C3%89tape-3%C2%A0-ex%C3%A9cuter-la-t%C3%A2che-1) + - [Étape 4 : Discuter avec l'agent](#%C3%89tape-4%C2%A0-discuter-avec-lagent-1) - [Composants](#composants) -- [Modèle mental](#mental-model) + - [Modèle mental](#mod%C3%A8le-mental) - [Concepts](#concepts) -- [Comprendre les tâches](#understanding-tasks) -- [Types d'étapes de flux de travail](#types-of-workflow-steps) -- [Fonctionnalités avancées](#advanced-features) -- [Ajout d'outils aux agents](#adding-tools-to-agents) -- [Gestion des sessions et des utilisateurs](#managing-sessions-and-users) -- [Intégration et recherche de documents](#document-integration-and-search) -- [Intégrations](#intégrations) -- [Recherche courageuse](#brave-search) -- [Base du navigateur](#basedunavigateur) -- [Courriel](#courriel) -- [Araignée](#araignée) -- [Météo](#météo) -- [Wikipédia](#wikipédia) -- [Référence SDK](#sdk-reference) -- [Référence API](#api-reference) +- [Comprendre les tâches](#comprendre-les-t%C3%A2ches) + - [Types d'étapes de flux de travail](#types-d%C3%A9tapes-de-flux-de-travail) +- [Fonctionnalités avancées](#fonctionnalit%C3%A9s-avanc%C3%A9es) + - [Ajout d'outils aux agents](#ajout-doutils-aux-agents) + - [Gestion des sessions et des utilisateurs](#gestion-des-sessions-et-des-utilisateurs) + - [Intégration et recherche de documents](#int%C3%A9gration-et-recherche-de-documents) +- [Intégrations](#int%C3%A9grations) + - [Recherche courageuse](#recherche-courageuse) + - [Base de navigateur](#base-de-navigateur) + - [E-mail](#e-mail) + - [Araignée](#araign%C3%A9e) + - [Météo](#m%C3%A9t%C3%A9o) + - [Wikipédia](#wikip%C3%A9dia) +- [Référence du SDK](#r%C3%A9f%C3%A9rence-du-sdk) +- [Référence API](#r%C3%A9f%C3%A9rence-api)
diff --git a/README-JA.md b/README-JA.md index 1da8a87a1..769838a0b 100644 --- a/README-JA.md +++ b/README-JA.md @@ -67,44 +67,41 @@ Julep プロジェクトに新しい貢献者を迎えられることを嬉し
-

📖 目次

- -- [はじめに](#introduction) -- [簡単な例](#quick-example) -- [主な機能](#key-features) -- [なぜ Julep と LangChain を比較するのか?](#why-julep-vs-langchain) -- [さまざまなユースケース](#different-use-cases) -- [異なるフォームファクター](#different-form-factor) -- [要約](#in-summary) -- [インストール](#installation) -- [Python クイックスタート 🐍](#python-quick-start-) -- [ステップ 1: エージェントを作成する](#step-1-create-an-agent) -- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip) -- [ステップ 3: タスクを実行する](#step-3-execute-the-task) -- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent) -- [Node.js クイック スタート 🟩](#nodejs-quick-start-) -- [ステップ 1: エージェントを作成する](#step-1-create-an-agent-1) -- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) -- [ステップ 3: タスクを実行する](#step-3-execute-the-task-1) -- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent-1) -- [コンポーネント](#components) -- [メンタルモデル](#mental-model) -- [コンセプト](#concepts) -- [タスクの理解](#understanding-tasks) -- [ワークフロー ステップの種類](#types-of-workflow-steps) -- [高度な機能](#advanced-features) -- [エージェントへのツールの追加](#adding-tools-to-agents) -- [セッションとユーザーの管理](#managing-sessions-and-users) -- [ドキュメントの統合と検索](#document-integration-and-search) -- [統合](#integrations) -- [勇敢な検索](#brave-search) -- [ブラウザベース](#browserbase) -- [メールアドレス](#email) -- [スパイダー](#spider) -- [天気](#weather) -- [ウィキペディア](#wikipedia) -- [SDKリファレンス](#sdk-reference) -- [APIリファレンス](#api-reference) +

📖 Table of Contents

+ +- [簡単な例](#%E7%B0%A1%E5%8D%98%E3%81%AA%E4%BE%8B) +- [主な特徴](#%E4%B8%BB%E3%81%AA%E7%89%B9%E5%BE%B4) +- [Julep と LangChain を比較する理由](#julep-%E3%81%A8-langchain-%E3%82%92%E6%AF%94%E8%BC%83%E3%81%99%E3%82%8B%E7%90%86%E7%94%B1) + - [さまざまなユースケース](#%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9) + - [異なるフォームファクタ](#%E7%95%B0%E3%81%AA%E3%82%8B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF) +- [インストール](#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB) +- [Python クイックスタート 🐍](#python-%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88-) + - [ステップ 1: エージェントを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%97-1-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B) + - [ステップ2: ストーリーと漫画を生成するタスクを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%972-%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AA%E3%83%BC%E3%81%A8%E6%BC%AB%E7%94%BB%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B) + - [ステップ3: タスクを実行する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%973-%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B) + - [ステップ4: エージェントとチャットする](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%974-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%A8%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%81%99%E3%82%8B) +- [Node.js クイックスタート 🟩](#nodejs-%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88-) + - [ステップ 1: エージェントを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%97-1-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-1) + - [ステップ2: ストーリーと漫画を生成するタスクを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%972-%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AA%E3%83%BC%E3%81%A8%E6%BC%AB%E7%94%BB%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-1) + - [ステップ3: タスクを実行する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%973-%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B-1) + - [ステップ4: エージェントとチャットする](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%974-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%A8%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%81%99%E3%82%8B-1) +- [コンポーネント](#%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88) + - [メンタルモデル](#%E3%83%A1%E3%83%B3%E3%82%BF%E3%83%AB%E3%83%A2%E3%83%87%E3%83%AB) +- [コンセプト](#%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%97%E3%83%88) +- [タスクを理解する](#%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B) + - [ワークフローステップの種類](#%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%AE%E7%A8%AE%E9%A1%9E) +- [高度な機能](#%E9%AB%98%E5%BA%A6%E3%81%AA%E6%A9%9F%E8%83%BD) + - [エージェントへのツールの追加](#%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%B8%E3%81%AE%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E8%BF%BD%E5%8A%A0) + - [セッションとユーザーの管理](#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%AE%A1%E7%90%86) + - [ドキュメントの統合と検索](#%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E7%B5%B1%E5%90%88%E3%81%A8%E6%A4%9C%E7%B4%A2) +- [統合](#%E7%B5%B1%E5%90%88) + - [ブレイブサーチ](#%E3%83%96%E3%83%AC%E3%82%A4%E3%83%96%E3%82%B5%E3%83%BC%E3%83%81) + - [ブラウザベース](#%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%99%E3%83%BC%E3%82%B9) + - [メール](#%E3%83%A1%E3%83%BC%E3%83%AB) + - [スパイダー](#%E3%82%B9%E3%83%91%E3%82%A4%E3%83%80%E3%83%BC) + - [ウィキペディア](#%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2) +- [SDK リファレンス](#sdk-%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9) +- [APIリファレンス](#api%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9)
From 6618a77e7dbc6effe1e92106358d1a14ae65609c Mon Sep 17 00:00:00 2001 From: Champion1583 Date: Fri, 11 Oct 2024 19:59:37 +0530 Subject: [PATCH 10/13] chore(ci): parallelize translators utilizing parmapper --- scripts/readme_translator.py | 53 +++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/scripts/readme_translator.py b/scripts/readme_translator.py index 20c63b830..011763b52 100644 --- a/scripts/readme_translator.py +++ b/scripts/readme_translator.py @@ -1,7 +1,12 @@ -from deep_translator import GoogleTranslator -from pathlib import Path import re from typing import List +from pathlib import Path +from functools import partial +from deep_translator import GoogleTranslator +import parmapper + +HTML_TAGS_PATTERN = r"(<[^>]+>)" +CODEBLOCK_PATTERN = r"(```[\s\S]*?```|\n)" def create_translator(target: str) -> GoogleTranslator: """ @@ -9,27 +14,31 @@ def create_translator(target: str) -> GoogleTranslator: """ return GoogleTranslator(source="en", target=target) -def translate_raw_html(translator: GoogleTranslator, html_content: str) -> str: +def translate_segment(translator: GoogleTranslator, segment: str) -> str: """ - Translate a given raw html content using the provided translator, preserving HTML tags and newlines. + Translate a given raw HTML content using the provided translator, preserving HTML tags and newlines. """ - html_tags_pattern = r"(<[^>]+>)" - segments = re.split(html_tags_pattern, html_content) + if re.fullmatch(CODEBLOCK_PATTERN, segment) or segment == '\n': + return segment + segments = re.split(HTML_TAGS_PATTERN, segment) translated_segments = [] - for segment in segments: - if re.fullmatch(html_tags_pattern, segment): - translated_segments.append(segment) + + for sub_segment in segments: + if re.fullmatch(HTML_TAGS_PATTERN, sub_segment): + translated_segments.append(sub_segment) else: try: - if re.fullmatch(r'^[!"#$%&\'()*+,\-./:;<=>?@[\]^_`{|}~]+$', segment): - translated_segments.append(segment) + if re.fullmatch(r'^[!"#$%&\'()*+,\-./:;<=>?@[\]^_`{|}~]+$', sub_segment): + translated_segments.append(sub_segment) continue - translated = translator.translate(segment) - translated_segments.append(translated if translated else segment) + + translated = translator.translate(sub_segment) + translated_segments.append(translated if translated else sub_segment) except Exception as e: - print(f"Error translating segment '{segment}': {e}") - translated_segments.append(segment) + print(f"Error translating segment '{sub_segment}': {e}") + translated_segments.append(sub_segment) + return "".join(translated_segments) def translate_readme(source: str, target: str) -> str: @@ -38,15 +47,9 @@ def translate_readme(source: str, target: str) -> str: """ file_content = Path(source).read_text(encoding='utf-8') translator = create_translator(target) - code_block_pattern = r"(```[\s\S]*?```|\n)" - segments = re.split(code_block_pattern, file_content) - - translated_segments = [] - for segment in segments: - if re.fullmatch(code_block_pattern, segment) or segment == '\n': - translated_segments.append(segment) - else: - translated_segments.append(translate_raw_html(translator, segment)) + segments = re.split(CODEBLOCK_PATTERN, file_content) + segment_translation = partial(translate_segment, translator) + translated_segments = list(parmapper.parmap(segment_translation, segments)) return ''.join(translated_segments) def save_translated_readme(translated_content: str, lang: str) -> None: @@ -63,7 +66,7 @@ def main() -> None: """ source_file = "README.md" destination_langs = ["zh-CN", "ja", "fr"] - + for lang in destination_langs: translated_readme = translate_readme(source_file, lang) save_translated_readme(translated_readme, lang) From a23786ca549bc355a0109888b443ad5fcd0798ef Mon Sep 17 00:00:00 2001 From: Champion1583 Date: Fri, 11 Oct 2024 20:00:27 +0530 Subject: [PATCH 11/13] feat(ci): install parmapper during gh action --- .github/workflows/translate-readme.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/translate-readme.yml b/.github/workflows/translate-readme.yml index cd48334f2..57a7c8ade 100644 --- a/.github/workflows/translate-readme.yml +++ b/.github/workflows/translate-readme.yml @@ -19,7 +19,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install deep-translator + python -m pip install deep-translator git+https://github.com/Jwink3101/parmapper - name: Run translator script run: python scripts/readme_translator.py From 8b872e9b1c8c6122c1de92f078bd0b9e4b589330 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 11 Oct 2024 19:48:25 +0000 Subject: [PATCH 12/13] chore(readme): translate README.md --- README-CN.md | 73 ++++++++++++++++++++++++++-------------------- README-FR.md | 72 +++++++++++++++++++++++----------------------- README-JA.md | 81 +++++++++++++++++++++++++++------------------------- 3 files changed, 120 insertions(+), 106 deletions(-) diff --git a/README-CN.md b/README-CN.md index 262ac53b3..4ea7f8716 100644 --- a/README-CN.md +++ b/README-CN.md @@ -38,7 +38,7 @@ 我们很高兴欢迎新贡献者加入 Julep 项目!我们创建了几个“好的第一个问题”来帮助您入门。以下是您可以做出贡献的方式: -1. 查看我们的 [CONTRIBUTING.md](CONTRIBUTING.md) 文件以获取有关如何贡献的指南。 +1. 查看我们的 [CONTRIBUTING.md](https://github.com/julep-ai/julep/blob/dev/CONTRIBUTING.md) 文件以获取有关如何贡献的指南。 2. 浏览我们的 [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 以找到您感兴趣的任务。 3. 如果您有任何疑问或需要帮助,请随时通过我们的 [Discord](https://discord.com/invite/JTSBGRZrzj) 频道联系我们。 @@ -67,33 +67,44 @@
-

📖 Table of Contents

- -- [为什么选择 Julep 而不是 LangChain?](#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9-julep-%E8%80%8C%E4%B8%8D%E6%98%AF-langchain) - - [不同的用例](#%E4%B8%8D%E5%90%8C%E7%9A%84%E7%94%A8%E4%BE%8B) - - [不同的外形尺寸](#%E4%B8%8D%E5%90%8C%E7%9A%84%E5%A4%96%E5%BD%A2%E5%B0%BA%E5%AF%B8) -- [Python 快速入门🐍](#python-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8) - - [步骤 1:创建代理](#%E6%AD%A5%E9%AA%A4-1%E5%88%9B%E5%BB%BA%E4%BB%A3%E7%90%86) - - [步骤 2:创建一个生成故事和漫画的任务](#%E6%AD%A5%E9%AA%A4-2%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%94%9F%E6%88%90%E6%95%85%E4%BA%8B%E5%92%8C%E6%BC%AB%E7%94%BB%E7%9A%84%E4%BB%BB%E5%8A%A1) - - [步骤 3:执行任务](#%E6%AD%A5%E9%AA%A4-3%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1) - - [步骤 4:与代理聊天](#%E6%AD%A5%E9%AA%A4-4%E4%B8%8E%E4%BB%A3%E7%90%86%E8%81%8A%E5%A4%A9) -- [Node.js 快速入门 🟩](#nodejs-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8-) - - [步骤 1:创建代理](#%E6%AD%A5%E9%AA%A4-1%E5%88%9B%E5%BB%BA%E4%BB%A3%E7%90%86-1) - - [步骤 2:创建一个生成故事和漫画的任务](#%E6%AD%A5%E9%AA%A4-2%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%94%9F%E6%88%90%E6%95%85%E4%BA%8B%E5%92%8C%E6%BC%AB%E7%94%BB%E7%9A%84%E4%BB%BB%E5%8A%A1-1) - - [步骤 3:执行任务](#%E6%AD%A5%E9%AA%A4-3%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1-1) - - [步骤 4:与代理聊天](#%E6%AD%A5%E9%AA%A4-4%E4%B8%8E%E4%BB%A3%E7%90%86%E8%81%8A%E5%A4%A9-1) - - [心智模型](#%E5%BF%83%E6%99%BA%E6%A8%A1%E5%9E%8B) -- [概念](#%E6%A6%82%E5%BF%B5) -- [理解任务](#%E7%90%86%E8%A7%A3%E4%BB%BB%E5%8A%A1) - - [工作流步骤的类型](#%E5%B7%A5%E4%BD%9C%E6%B5%81%E6%AD%A5%E9%AA%A4%E7%9A%84%E7%B1%BB%E5%9E%8B) -- [高级功能](#%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD) - - [向代理添加工具](#%E5%90%91%E4%BB%A3%E7%90%86%E6%B7%BB%E5%8A%A0%E5%B7%A5%E5%85%B7) - - [管理会话和用户](#%E7%AE%A1%E7%90%86%E4%BC%9A%E8%AF%9D%E5%92%8C%E7%94%A8%E6%88%B7) - - [文档集成与搜索](#%E6%96%87%E6%A1%A3%E9%9B%86%E6%88%90%E4%B8%8E%E6%90%9C%E7%B4%A2) -- [集成](#%E9%9B%86%E6%88%90) - - [勇敢搜索](#%E5%8B%87%E6%95%A2%E6%90%9C%E7%B4%A2) - - [浏览器基础](#%E6%B5%8F%E8%A7%88%E5%99%A8%E5%9F%BA%E7%A1%80) -- [SDK 参考](#sdk-%E5%8F%82%E8%80%83) +

📖 目录

+ +- [简介](#introduction) +- [快速示例](#quick-example) +- [主要特点](#key-features) +- [为什么选择 Julep 而不是 LangChain?](#why-julep-vs-langchain) +- [不同用例](#different-use-cases) +- [不同的外形尺寸](#different-form-factor) +- [总结](#in-summary) +- [安装](#安装) +- [Python 快速入门 🐍](#python-quick-start-) +- [步骤 1:创建代理](#step-1-create-an-agent) +- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [步骤 3:执行任务](#step-3-execute-the-task) +- [步骤 4:与代理聊天](#step-4-chat-with-the-agent) +- [Node.js 快速入门🟩](#nodejs-quick-start-) +- [步骤 1:创建代理](#step-1-create-an-agent-1) +- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [步骤 3:执行任务](#step-3-execute-the-task-1) +- [步骤 4:与代理聊天](#step-4-chat-with-the-agent-1) +- [组件](#components) +- [心智模型](#mental-model) +- [概念](#concepts) +- [理解任务](#understanding-tasks) +- [工作流步骤的类型](#types-of-workflow-steps) +- [高级功能](#advanced-features) +- [向代理添加工具](#adding-tools-to-agents) +- [管理会话和用户](#managing-sessions-and-users) +- [文档集成与搜索](#document-integration-and-search) +- [集成](#integrations) +- [勇敢搜索](#brave-search) +- [BrowserBase](#browserbase) +- [电子邮件](#email) +- [蜘蛛](#spider) +- [天气](#天气) +- [维基百科](#wikipedia) +- [SDK 参考](#sdk-reference) +- [API 参考](#api-reference)
@@ -213,7 +224,7 @@ main: 1. 🧠 **持久 AI 代理**:在长期交互​​中记住背景和信息。 2. 💾 **状态会话**:跟踪过去的互动以获得个性化回应。 -3. 🔄 **多步骤任务**:通过循环和决策构建复杂的多步骤流程。 +3. 🔄 **多步骤任务**:使用循环和决策构建复杂的多步骤流程。 4. ⏳ **任务管理**:处理可以无限期运行的长时间运行的任务。 5.🛠️**内置工具**:在您的任务中使用内置工具和外部 API。 6. 🔧 **自我修复**:Julep 将自动重试失败的步骤、重新发送消息,并确保您的任务顺利运行。 @@ -589,7 +600,7 @@ Julep 由以下成分组成: 简单来说: - Julep 是一个用于构建有状态 AI 代理的平台。 -- 您在代码中使用 SDK(类似于工具包)来定义代理的功能。 +- 您在代码中使用 SDK(类似工具包)来定义代理的功能。 - 后端服务(您可以将其视为引擎)运行这些定义、管理状态并处理复杂性。 ## 概念 @@ -714,7 +725,7 @@ Julep 中的任务可以包含各种类型的步骤,让您可以创建复杂 #### 条件步骤 -11.**If-Else**:条件执行步骤。 +11. **If-Else**:条件执行步骤。 ```yaml - if: "score > 0.8" then: diff --git a/README-FR.md b/README-FR.md index 5b4e8f010..daa3f5acc 100644 --- a/README-FR.md +++ b/README-FR.md @@ -38,7 +38,7 @@ Nous sommes ravis d'accueillir de nouveaux contributeurs au projet Julep ! Nous avons créé plusieurs « bons premiers numéros » pour vous aider à démarrer. Voici comment vous pouvez contribuer : -1. Consultez notre fichier [CONTRIBUTING.md](CONTRIBUTING.md) pour obtenir des instructions sur la manière de contribuer. +1. Consultez notre fichier [CONTRIBUTING.md](https://github.com/julep-ai/julep/blob/dev/CONTRIBUTING.md) pour obtenir des instructions sur la façon de contribuer. 2. Parcourez nos [bons premiers numéros](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) pour trouver une tâche qui vous intéresse. 3. Si vous avez des questions ou avez besoin d'aide, n'hésitez pas à nous contacter sur notre chaîne [Discord](https://discord.com/invite/JTSBGRZrzj). @@ -67,44 +67,44 @@ Des nouvelles passionnantes ! Nous participons au DevFest.AI tout au long du moi
-

📖 Table of Contents

- -- [Introduction](#introduction) -- [Exemple rapide](#exemple-rapide) -- [Principales caractéristiques](#principales-caract%C3%A9ristiques) -- [Pourquoi Julep vs. LangChain ?](#pourquoi-julep-vs-langchain%C2%A0) - - [Différents cas d'utilisation](#diff%C3%A9rents-cas-dutilisation) - - [Facteur de forme différent](#facteur-de-forme-diff%C3%A9rent) - - [En résumé](#en-r%C3%A9sum%C3%A9) +

📖 Table des matières

+ +- [Présentation](#introduction) +- [Exemple rapide](#quick-example) +- [Caractéristiques principales](#key-features) +- [Pourquoi Julep vs. LangChain ?](#pourquoi-julep-vs-langchain) +- [Différents cas d'utilisation](#different-use-cases) +- [Facteur de forme différent](#different-form-factor) +- [En résumé](#en-resumé) - [Installation](#installation) -- [Démarrage rapide de Python 🐍](#d%C3%A9marrage-rapide-de-python-) - - [Étape 1 : Créer un agent](#%C3%89tape-1%C2%A0-cr%C3%A9er-un-agent) - - [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#%C3%89tape-2%C2%A0-cr%C3%A9er-une-t%C3%A2che-qui-g%C3%A9n%C3%A8re-une-histoire-et-une-bande-dessin%C3%A9e) - - [Étape 3 : Exécuter la tâche](#%C3%89tape-3%C2%A0-ex%C3%A9cuter-la-t%C3%A2che) - - [Étape 4 : Discuter avec l'agent](#%C3%89tape-4%C2%A0-discuter-avec-lagent) -- [Démarrage rapide de Node.js 🟩](#d%C3%A9marrage-rapide-de-nodejs-) - - [Étape 1 : Créer un agent](#%C3%89tape-1%C2%A0-cr%C3%A9er-un-agent-1) - - [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#%C3%89tape-2%C2%A0-cr%C3%A9er-une-t%C3%A2che-qui-g%C3%A9n%C3%A8re-une-histoire-et-une-bande-dessin%C3%A9e-1) - - [Étape 3 : Exécuter la tâche](#%C3%89tape-3%C2%A0-ex%C3%A9cuter-la-t%C3%A2che-1) - - [Étape 4 : Discuter avec l'agent](#%C3%89tape-4%C2%A0-discuter-avec-lagent-1) +- [Démarrage rapide de Python 🐍](#python-quick-start-) +- [Étape 1 : Créer un agent](#step-1-create-an-agent) +- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task) +- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent) +- [Démarrage rapide de Node.js 🟩](#nodejs-quick-start-) +- [Étape 1 : Créer un agent](#step-1-create-an-agent-1) +- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task-1) +- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent-1) - [Composants](#composants) - - [Modèle mental](#mod%C3%A8le-mental) +- [Modèle mental](#mental-model) - [Concepts](#concepts) -- [Comprendre les tâches](#comprendre-les-t%C3%A2ches) - - [Types d'étapes de flux de travail](#types-d%C3%A9tapes-de-flux-de-travail) -- [Fonctionnalités avancées](#fonctionnalit%C3%A9s-avanc%C3%A9es) - - [Ajout d'outils aux agents](#ajout-doutils-aux-agents) - - [Gestion des sessions et des utilisateurs](#gestion-des-sessions-et-des-utilisateurs) - - [Intégration et recherche de documents](#int%C3%A9gration-et-recherche-de-documents) -- [Intégrations](#int%C3%A9grations) - - [Recherche courageuse](#recherche-courageuse) - - [Base de navigateur](#base-de-navigateur) - - [E-mail](#e-mail) - - [Araignée](#araign%C3%A9e) - - [Météo](#m%C3%A9t%C3%A9o) - - [Wikipédia](#wikip%C3%A9dia) -- [Référence du SDK](#r%C3%A9f%C3%A9rence-du-sdk) -- [Référence API](#r%C3%A9f%C3%A9rence-api) +- [Comprendre les tâches](#understanding-tasks) +- [Types d'étapes de flux de travail](#types-of-workflow-steps) +- [Fonctionnalités avancées](#advanced-features) +- [Ajout d'outils aux agents](#adding-tools-to-agents) +- [Gestion des sessions et des utilisateurs](#managing-sessions-and-users) +- [Intégration et recherche de documents](#document-integration-and-search) +- [Intégrations](#intégrations) +- [Recherche courageuse](#brave-search) +- [Base du navigateur](#basedunavigateur) +- [Courriel](#courriel) +- [Araignée](#araignée) +- [Météo](#météo) +- [Wikipédia](#wikipédia) +- [Référence SDK](#sdk-reference) +- [Référence API](#api-reference)
diff --git a/README-JA.md b/README-JA.md index 769838a0b..24177b0b0 100644 --- a/README-JA.md +++ b/README-JA.md @@ -38,7 +38,7 @@ Julep プロジェクトに新しい貢献者を迎えられることを嬉しく思います。プロジェクトを始めるのに役立つ「最初の良い問題」をいくつか作成しました。貢献する方法は次のとおりです。 -1. 貢献方法に関するガイドラインについては、[CONTRIBUTING.md](CONTRIBUTING.md) ファイルをご覧ください。 +1. 貢献方法に関するガイドラインについては、[CONTRIBUTING.md](https://github.com/julep-ai/julep/blob/dev/CONTRIBUTING.md) ファイルをご覧ください。 2. [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) を参照して、興味のあるタスクを見つけます。 3. ご質問やご不明な点がございましたら、[Discord](https://discord.com/invite/JTSBGRZrzj) チャンネルまでお気軽にお問い合わせください。 @@ -67,41 +67,44 @@ Julep プロジェクトに新しい貢献者を迎えられることを嬉し
-

📖 Table of Contents

- -- [簡単な例](#%E7%B0%A1%E5%8D%98%E3%81%AA%E4%BE%8B) -- [主な特徴](#%E4%B8%BB%E3%81%AA%E7%89%B9%E5%BE%B4) -- [Julep と LangChain を比較する理由](#julep-%E3%81%A8-langchain-%E3%82%92%E6%AF%94%E8%BC%83%E3%81%99%E3%82%8B%E7%90%86%E7%94%B1) - - [さまざまなユースケース](#%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9) - - [異なるフォームファクタ](#%E7%95%B0%E3%81%AA%E3%82%8B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF) -- [インストール](#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB) -- [Python クイックスタート 🐍](#python-%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88-) - - [ステップ 1: エージェントを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%97-1-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B) - - [ステップ2: ストーリーと漫画を生成するタスクを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%972-%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AA%E3%83%BC%E3%81%A8%E6%BC%AB%E7%94%BB%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B) - - [ステップ3: タスクを実行する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%973-%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B) - - [ステップ4: エージェントとチャットする](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%974-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%A8%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%81%99%E3%82%8B) -- [Node.js クイックスタート 🟩](#nodejs-%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88-) - - [ステップ 1: エージェントを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%97-1-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-1) - - [ステップ2: ストーリーと漫画を生成するタスクを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%972-%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AA%E3%83%BC%E3%81%A8%E6%BC%AB%E7%94%BB%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-1) - - [ステップ3: タスクを実行する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%973-%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B-1) - - [ステップ4: エージェントとチャットする](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%974-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%A8%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%81%99%E3%82%8B-1) -- [コンポーネント](#%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88) - - [メンタルモデル](#%E3%83%A1%E3%83%B3%E3%82%BF%E3%83%AB%E3%83%A2%E3%83%87%E3%83%AB) -- [コンセプト](#%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%97%E3%83%88) -- [タスクを理解する](#%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B) - - [ワークフローステップの種類](#%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%AE%E7%A8%AE%E9%A1%9E) -- [高度な機能](#%E9%AB%98%E5%BA%A6%E3%81%AA%E6%A9%9F%E8%83%BD) - - [エージェントへのツールの追加](#%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%B8%E3%81%AE%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E8%BF%BD%E5%8A%A0) - - [セッションとユーザーの管理](#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%AE%A1%E7%90%86) - - [ドキュメントの統合と検索](#%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E7%B5%B1%E5%90%88%E3%81%A8%E6%A4%9C%E7%B4%A2) -- [統合](#%E7%B5%B1%E5%90%88) - - [ブレイブサーチ](#%E3%83%96%E3%83%AC%E3%82%A4%E3%83%96%E3%82%B5%E3%83%BC%E3%83%81) - - [ブラウザベース](#%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%99%E3%83%BC%E3%82%B9) - - [メール](#%E3%83%A1%E3%83%BC%E3%83%AB) - - [スパイダー](#%E3%82%B9%E3%83%91%E3%82%A4%E3%83%80%E3%83%BC) - - [ウィキペディア](#%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2) -- [SDK リファレンス](#sdk-%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9) -- [APIリファレンス](#api%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9) +

📖 目次

+ +- [はじめに](#introduction) +- [簡単な例](#quick-example) +- [主な機能](#key-features) +- [なぜ Julep と LangChain を比較するのか?](#why-julep-vs-langchain) +- [さまざまなユースケース](#different-use-cases) +- [異なるフォームファクター](#different-form-factor) +- [要約](#in-summary) +- [インストール](#installation) +- [Python クイックスタート 🐍](#python-quick-start-) +- [ステップ 1: エージェントを作成する](#step-1-create-an-agent) +- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [ステップ 3: タスクを実行する](#step-3-execute-the-task) +- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent) +- [Node.js クイック スタート 🟩](#nodejs-quick-start-) +- [ステップ 1: エージェントを作成する](#step-1-create-an-agent-1) +- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [ステップ 3: タスクを実行する](#step-3-execute-the-task-1) +- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent-1) +- [コンポーネント](#components) +- [メンタルモデル](#mental-model) +- [コンセプト](#concepts) +- [タスクの理解](#understanding-tasks) +- [ワークフロー ステップの種類](#types-of-workflow-steps) +- [高度な機能](#advanced-features) +- [エージェントへのツールの追加](#adding-tools-to-agents) +- [セッションとユーザーの管理](#managing-sessions-and-users) +- [ドキュメントの統合と検索](#document-integration-and-search) +- [統合](#integrations) +- [勇敢な検索](#brave-search) +- [ブラウザベース](#browserbase) +- [メールアドレス](#email) +- [スパイダー](#spider) +- [天気](#weather) +- [ウィキペディア](#wikipedia) +- [SDKリファレンス](#sdk-reference) +- [APIリファレンス](#api-reference)
@@ -224,7 +227,7 @@ main: 3. 🔄 **複数ステップのタスク**: ループと意思決定を使用して、複雑な複数ステップのプロセスを構築します。 4. ⏳ **タスク管理**: 無期限に実行される可能性のある長時間実行タスクを処理します。 5. 🛠️ **組み込みツール**: タスクで組み込みツールと外部 API を使用します。 -6. 🔧 **自己修復**: Julep は失敗したステップを自動的に再試行し、メッセージを再送信し、タスクがスムーズに実行されるようにします。 +6. 🔧 **自己修復**: Julep は失敗したステップを自動的に再試行し、メッセージを再送信し、タスクをスムーズに実行し続けます。 7. 📚 **RAG**: Julep のドキュメント ストアを使用して、独自のデータを取得して使用するためのシステムを構築します。 Julep は、単純なプロンプト応答モデルを超えた AI ユースケースを必要とするアプリケーションに最適です。 @@ -239,7 +242,7 @@ LangChain は、プロンプトのシーケンスを作成し、AI モデルと 一方、Julep は、長期的なインタラクションを通じて物事を記憶できる永続的な AI エージェントの構築に重点を置いています。エージェントのプロセス内で複数のステップ、意思決定、さまざまなツールや API との直接統合を伴う複雑なタスクが必要な場合に効果を発揮します。永続的なセッションと複雑なタスクを管理するために、ゼロから設計されています。 -以下のことを必要とする複雑な AI アシスタントの構築を考えている場合には、Julep を使用してください。 +以下のことが必要となる複雑な AI アシスタントの構築を考えている場合には、Julep を使用してください。 - 数日または数週間にわたってユーザーのインタラクションを追跡します。 - 毎日のサマリーの送信やデータ ソースの監視などのスケジュールされたタスクを実行します。 @@ -585,7 +588,7 @@ Julep は、クライアント側とサーバー側の両方のコンポーネ 1. **アプリケーションコード:** - アプリケーションで Julep SDK を使用して、エージェント、タスク、ワークフローを定義します。 -- SDK は、これらのコンポーネントのセットアップと管理を容易にする関数とクラスを提供します。 +- SDK は、これらのコンポーネントの設定と管理を容易にする関数とクラスを提供します。 2. **Julep バックエンド サービス:** - SDK はネットワーク経由で Julep バックエンドと通信します。 From ba61398ba06578ddaa3a79b053131177d79e5619 Mon Sep 17 00:00:00 2001 From: itsamziii Date: Sun, 13 Oct 2024 14:43:18 +0000 Subject: [PATCH 13/13] chore(docs): update TOC --- README-CN.md | 65 +++++++++++++++++++--------------------------- README-FR.md | 70 ++++++++++++++++++++++++------------------------- README-JA.md | 73 +++++++++++++++++++++++++--------------------------- 3 files changed, 97 insertions(+), 111 deletions(-) diff --git a/README-CN.md b/README-CN.md index 4ea7f8716..ebf51db6e 100644 --- a/README-CN.md +++ b/README-CN.md @@ -67,44 +67,33 @@
-

📖 目录

- -- [简介](#introduction) -- [快速示例](#quick-example) -- [主要特点](#key-features) -- [为什么选择 Julep 而不是 LangChain?](#why-julep-vs-langchain) -- [不同用例](#different-use-cases) -- [不同的外形尺寸](#different-form-factor) -- [总结](#in-summary) -- [安装](#安装) -- [Python 快速入门 🐍](#python-quick-start-) -- [步骤 1:创建代理](#step-1-create-an-agent) -- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip) -- [步骤 3:执行任务](#step-3-execute-the-task) -- [步骤 4:与代理聊天](#step-4-chat-with-the-agent) -- [Node.js 快速入门🟩](#nodejs-quick-start-) -- [步骤 1:创建代理](#step-1-create-an-agent-1) -- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) -- [步骤 3:执行任务](#step-3-execute-the-task-1) -- [步骤 4:与代理聊天](#step-4-chat-with-the-agent-1) -- [组件](#components) -- [心智模型](#mental-model) -- [概念](#concepts) -- [理解任务](#understanding-tasks) -- [工作流步骤的类型](#types-of-workflow-steps) -- [高级功能](#advanced-features) -- [向代理添加工具](#adding-tools-to-agents) -- [管理会话和用户](#managing-sessions-and-users) -- [文档集成与搜索](#document-integration-and-search) -- [集成](#integrations) -- [勇敢搜索](#brave-search) -- [BrowserBase](#browserbase) -- [电子邮件](#email) -- [蜘蛛](#spider) -- [天气](#天气) -- [维基百科](#wikipedia) -- [SDK 参考](#sdk-reference) -- [API 参考](#api-reference) +

📖 Table of Contents

+ +- [为什么选择 Julep 而不是 LangChain?](#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9-julep-%E8%80%8C%E4%B8%8D%E6%98%AF-langchain) + - [不同的用例](#%E4%B8%8D%E5%90%8C%E7%9A%84%E7%94%A8%E4%BE%8B) + - [不同的外形尺寸](#%E4%B8%8D%E5%90%8C%E7%9A%84%E5%A4%96%E5%BD%A2%E5%B0%BA%E5%AF%B8) +- [Python 快速入门🐍](#python-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8) + - [步骤 1:创建代理](#%E6%AD%A5%E9%AA%A4-1%E5%88%9B%E5%BB%BA%E4%BB%A3%E7%90%86) + - [步骤 2:创建一个生成故事和漫画的任务](#%E6%AD%A5%E9%AA%A4-2%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%94%9F%E6%88%90%E6%95%85%E4%BA%8B%E5%92%8C%E6%BC%AB%E7%94%BB%E7%9A%84%E4%BB%BB%E5%8A%A1) + - [步骤 3:执行任务](#%E6%AD%A5%E9%AA%A4-3%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1) + - [步骤 4:与代理聊天](#%E6%AD%A5%E9%AA%A4-4%E4%B8%8E%E4%BB%A3%E7%90%86%E8%81%8A%E5%A4%A9) +- [Node.js 快速入门 🟩](#nodejs-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8-) + - [步骤 1:创建代理](#%E6%AD%A5%E9%AA%A4-1%E5%88%9B%E5%BB%BA%E4%BB%A3%E7%90%86-1) + - [步骤 2:创建一个生成故事和漫画的任务](#%E6%AD%A5%E9%AA%A4-2%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%94%9F%E6%88%90%E6%95%85%E4%BA%8B%E5%92%8C%E6%BC%AB%E7%94%BB%E7%9A%84%E4%BB%BB%E5%8A%A1-1) + - [步骤 3:执行任务](#%E6%AD%A5%E9%AA%A4-3%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1-1) + - [步骤 4:与代理聊天](#%E6%AD%A5%E9%AA%A4-4%E4%B8%8E%E4%BB%A3%E7%90%86%E8%81%8A%E5%A4%A9-1) + - [心智模型](#%E5%BF%83%E6%99%BA%E6%A8%A1%E5%9E%8B) +- [概念](#%E6%A6%82%E5%BF%B5) +- [理解任务](#%E7%90%86%E8%A7%A3%E4%BB%BB%E5%8A%A1) + - [工作流步骤的类型](#%E5%B7%A5%E4%BD%9C%E6%B5%81%E6%AD%A5%E9%AA%A4%E7%9A%84%E7%B1%BB%E5%9E%8B) +- [高级功能](#%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD) + - [向代理添加工具](#%E5%90%91%E4%BB%A3%E7%90%86%E6%B7%BB%E5%8A%A0%E5%B7%A5%E5%85%B7) + - [管理会话和用户](#%E7%AE%A1%E7%90%86%E4%BC%9A%E8%AF%9D%E5%92%8C%E7%94%A8%E6%88%B7) + - [文档集成与搜索](#%E6%96%87%E6%A1%A3%E9%9B%86%E6%88%90%E4%B8%8E%E6%90%9C%E7%B4%A2) +- [集成](#%E9%9B%86%E6%88%90) + - [勇敢搜索](#%E5%8B%87%E6%95%A2%E6%90%9C%E7%B4%A2) + - [浏览器基础](#%E6%B5%8F%E8%A7%88%E5%99%A8%E5%9F%BA%E7%A1%80) +- [SDK 参考](#sdk-%E5%8F%82%E8%80%83)
diff --git a/README-FR.md b/README-FR.md index daa3f5acc..b2dbc511d 100644 --- a/README-FR.md +++ b/README-FR.md @@ -67,44 +67,44 @@ Des nouvelles passionnantes ! Nous participons au DevFest.AI tout au long du moi
-

📖 Table des matières

- -- [Présentation](#introduction) -- [Exemple rapide](#quick-example) -- [Caractéristiques principales](#key-features) -- [Pourquoi Julep vs. LangChain ?](#pourquoi-julep-vs-langchain) -- [Différents cas d'utilisation](#different-use-cases) -- [Facteur de forme différent](#different-form-factor) -- [En résumé](#en-resumé) +

📖 Table of Contents

+ +- [Introduction](#introduction) +- [Exemple rapide](#exemple-rapide) +- [Principales caractéristiques](#principales-caract%C3%A9ristiques) +- [Pourquoi Julep vs. LangChain ?](#pourquoi-julep-vs-langchain%C2%A0) + - [Différents cas d'utilisation](#diff%C3%A9rents-cas-dutilisation) + - [Facteur de forme différent](#facteur-de-forme-diff%C3%A9rent) + - [En résumé](#en-r%C3%A9sum%C3%A9) - [Installation](#installation) -- [Démarrage rapide de Python 🐍](#python-quick-start-) -- [Étape 1 : Créer un agent](#step-1-create-an-agent) -- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip) -- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task) -- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent) -- [Démarrage rapide de Node.js 🟩](#nodejs-quick-start-) -- [Étape 1 : Créer un agent](#step-1-create-an-agent-1) -- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) -- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task-1) -- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent-1) +- [Démarrage rapide de Python 🐍](#d%C3%A9marrage-rapide-de-python-) + - [Étape 1 : Créer un agent](#%C3%89tape-1%C2%A0-cr%C3%A9er-un-agent) + - [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#%C3%89tape-2%C2%A0-cr%C3%A9er-une-t%C3%A2che-qui-g%C3%A9n%C3%A8re-une-histoire-et-une-bande-dessin%C3%A9e) + - [Étape 3 : Exécuter la tâche](#%C3%89tape-3%C2%A0-ex%C3%A9cuter-la-t%C3%A2che) + - [Étape 4 : Discuter avec l'agent](#%C3%89tape-4%C2%A0-discuter-avec-lagent) +- [Démarrage rapide de Node.js 🟩](#d%C3%A9marrage-rapide-de-nodejs-) + - [Étape 1 : Créer un agent](#%C3%89tape-1%C2%A0-cr%C3%A9er-un-agent-1) + - [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#%C3%89tape-2%C2%A0-cr%C3%A9er-une-t%C3%A2che-qui-g%C3%A9n%C3%A8re-une-histoire-et-une-bande-dessin%C3%A9e-1) + - [Étape 3 : Exécuter la tâche](#%C3%89tape-3%C2%A0-ex%C3%A9cuter-la-t%C3%A2che-1) + - [Étape 4 : Discuter avec l'agent](#%C3%89tape-4%C2%A0-discuter-avec-lagent-1) - [Composants](#composants) -- [Modèle mental](#mental-model) + - [Modèle mental](#mod%C3%A8le-mental) - [Concepts](#concepts) -- [Comprendre les tâches](#understanding-tasks) -- [Types d'étapes de flux de travail](#types-of-workflow-steps) -- [Fonctionnalités avancées](#advanced-features) -- [Ajout d'outils aux agents](#adding-tools-to-agents) -- [Gestion des sessions et des utilisateurs](#managing-sessions-and-users) -- [Intégration et recherche de documents](#document-integration-and-search) -- [Intégrations](#intégrations) -- [Recherche courageuse](#brave-search) -- [Base du navigateur](#basedunavigateur) -- [Courriel](#courriel) -- [Araignée](#araignée) -- [Météo](#météo) -- [Wikipédia](#wikipédia) -- [Référence SDK](#sdk-reference) -- [Référence API](#api-reference) +- [Comprendre les tâches](#comprendre-les-t%C3%A2ches) + - [Types d'étapes de flux de travail](#types-d%C3%A9tapes-de-flux-de-travail) +- [Fonctionnalités avancées](#fonctionnalit%C3%A9s-avanc%C3%A9es) + - [Ajout d'outils aux agents](#ajout-doutils-aux-agents) + - [Gestion des sessions et des utilisateurs](#gestion-des-sessions-et-des-utilisateurs) + - [Intégration et recherche de documents](#int%C3%A9gration-et-recherche-de-documents) +- [Intégrations](#int%C3%A9grations) + - [Recherche courageuse](#recherche-courageuse) + - [Base de navigateur](#base-de-navigateur) + - [E-mail](#e-mail) + - [Araignée](#araign%C3%A9e) + - [Météo](#m%C3%A9t%C3%A9o) + - [Wikipédia](#wikip%C3%A9dia) +- [Référence du SDK](#r%C3%A9f%C3%A9rence-du-sdk) +- [Référence API](#r%C3%A9f%C3%A9rence-api)
diff --git a/README-JA.md b/README-JA.md index 24177b0b0..6a4ff3ab0 100644 --- a/README-JA.md +++ b/README-JA.md @@ -67,44 +67,41 @@ Julep プロジェクトに新しい貢献者を迎えられることを嬉し
-

📖 目次

- -- [はじめに](#introduction) -- [簡単な例](#quick-example) -- [主な機能](#key-features) -- [なぜ Julep と LangChain を比較するのか?](#why-julep-vs-langchain) -- [さまざまなユースケース](#different-use-cases) -- [異なるフォームファクター](#different-form-factor) -- [要約](#in-summary) -- [インストール](#installation) -- [Python クイックスタート 🐍](#python-quick-start-) -- [ステップ 1: エージェントを作成する](#step-1-create-an-agent) -- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip) -- [ステップ 3: タスクを実行する](#step-3-execute-the-task) -- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent) -- [Node.js クイック スタート 🟩](#nodejs-quick-start-) -- [ステップ 1: エージェントを作成する](#step-1-create-an-agent-1) -- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) -- [ステップ 3: タスクを実行する](#step-3-execute-the-task-1) -- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent-1) -- [コンポーネント](#components) -- [メンタルモデル](#mental-model) -- [コンセプト](#concepts) -- [タスクの理解](#understanding-tasks) -- [ワークフロー ステップの種類](#types-of-workflow-steps) -- [高度な機能](#advanced-features) -- [エージェントへのツールの追加](#adding-tools-to-agents) -- [セッションとユーザーの管理](#managing-sessions-and-users) -- [ドキュメントの統合と検索](#document-integration-and-search) -- [統合](#integrations) -- [勇敢な検索](#brave-search) -- [ブラウザベース](#browserbase) -- [メールアドレス](#email) -- [スパイダー](#spider) -- [天気](#weather) -- [ウィキペディア](#wikipedia) -- [SDKリファレンス](#sdk-reference) -- [APIリファレンス](#api-reference) +

📖 Table of Contents

+ +- [簡単な例](#%E7%B0%A1%E5%8D%98%E3%81%AA%E4%BE%8B) +- [主な特徴](#%E4%B8%BB%E3%81%AA%E7%89%B9%E5%BE%B4) +- [Julep と LangChain を比較する理由](#julep-%E3%81%A8-langchain-%E3%82%92%E6%AF%94%E8%BC%83%E3%81%99%E3%82%8B%E7%90%86%E7%94%B1) + - [さまざまなユースケース](#%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9) + - [異なるフォームファクタ](#%E7%95%B0%E3%81%AA%E3%82%8B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF) +- [インストール](#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB) +- [Python クイックスタート 🐍](#python-%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88-) + - [ステップ 1: エージェントを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%97-1-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B) + - [ステップ2: ストーリーと漫画を生成するタスクを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%972-%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AA%E3%83%BC%E3%81%A8%E6%BC%AB%E7%94%BB%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B) + - [ステップ3: タスクを実行する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%973-%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B) + - [ステップ4: エージェントとチャットする](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%974-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%A8%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%81%99%E3%82%8B) +- [Node.js クイックスタート 🟩](#nodejs-%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88-) + - [ステップ 1: エージェントを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%97-1-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-1) + - [ステップ2: ストーリーと漫画を生成するタスクを作成する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%972-%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AA%E3%83%BC%E3%81%A8%E6%BC%AB%E7%94%BB%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-1) + - [ステップ3: タスクを実行する](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%973-%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B-1) + - [ステップ4: エージェントとチャットする](#%E3%82%B9%E3%83%86%E3%83%83%E3%83%974-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%A8%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%81%99%E3%82%8B-1) +- [コンポーネント](#%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88) + - [メンタルモデル](#%E3%83%A1%E3%83%B3%E3%82%BF%E3%83%AB%E3%83%A2%E3%83%87%E3%83%AB) +- [コンセプト](#%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%97%E3%83%88) +- [タスクを理解する](#%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B) + - [ワークフローステップの種類](#%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%AE%E7%A8%AE%E9%A1%9E) +- [高度な機能](#%E9%AB%98%E5%BA%A6%E3%81%AA%E6%A9%9F%E8%83%BD) + - [エージェントへのツールの追加](#%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%B8%E3%81%AE%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E8%BF%BD%E5%8A%A0) + - [セッションとユーザーの管理](#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%AE%A1%E7%90%86) + - [ドキュメントの統合と検索](#%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E7%B5%B1%E5%90%88%E3%81%A8%E6%A4%9C%E7%B4%A2) +- [統合](#%E7%B5%B1%E5%90%88) + - [ブレイブサーチ](#%E3%83%96%E3%83%AC%E3%82%A4%E3%83%96%E3%82%B5%E3%83%BC%E3%83%81) + - [ブラウザベース](#%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%99%E3%83%BC%E3%82%B9) + - [メール](#%E3%83%A1%E3%83%BC%E3%83%AB) + - [スパイダー](#%E3%82%B9%E3%83%91%E3%82%A4%E3%83%80%E3%83%BC) + - [ウィキペディア](#%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2) +- [SDK リファレンス](#sdk-%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9) +- [APIリファレンス](#api%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9)