# スマートツールのための JSON 形式

## 概要 <a href="#lgmg27qgfdrg" id="lgmg27qgfdrg"></a>

SkyDeck.AIでスマートツールを作成するには、ファイル構造セクションで述べた仕様に従って、一連のファイルをアップロードする必要があります。アップロード後、当社のプラットフォームは初期設定を行い、これには数分かかるかもしれません。その後、ツールはGenStudioワークスペースで利用可能になります。

## ファイル構造 <a href="#id-7dcm0ac78x60" id="id-7dcm0ac78x60"></a>

### \<tool\_name>.json <a href="#xvdq6eic1eed" id="xvdq6eic1eed"></a>

ツールの動作はJSONファイルで設定します。ここでは、設定の主な項目を簡単に紹介します：

* **version**：ツールの現在のバージョン。
* **tool\_name**：ツールの名前。この名前はあなたのワークスペース内で一意であるべきです。
* **tool\_code**：実行されるPythonコードを含みます。このフィールドの詳細は次のセクションで説明します。
* **description**：ツールが何をするかの簡単な説明。
* **usage\_notes**：ツールの使用方法についての説明。
* **model\_version**：続きの質問に使用可能なモデルを指定します。すべてのモデルを指定する場合は、\_\["gpt-4", "gpt-3.5", "claude", "chat-bison"]\_を使用します。
* **creator**：ツールの作者に関する情報、名前、メール、組織など。
* **variables**：ツールで使用される変数の配列。各変数には名前、説明、デフォルト値があります。UIでの変数の順序は、この配列の順序に従います。
* **expected\_output**：ツールが生成する出力のタイプ。開発段階では、この値は常にテキストであるべきです。
* **avatar\_type**：ツールのUIで使用されるアバターのフォーマット。
* **timestamp**：ツールが最後に更新された日時。
* **requirements**：tool\_codeのスクリプトを実行するために必要なパッケージを指定します。
* **avatar**：このツールのロゴを表す文字列

### ツール\_コード規約: <a href="#id-177qobv2sfe9" id="id-177qobv2sfe9"></a>

このスクリプトは、ツールの動作を概説しています。このスクリプトの主要なコンポーネントは\_execute\_関数で、次の要件があります：

* この関数には *variables* と呼ばれる単一の入力パラメータが必要で、これは辞書です。この辞書の各キーは、ユーザーがツールに入力するフィールドに対応します。
* 関数は文字列を返すべきで、これはGenStudio UI上のレスポンスとして表示されます。

## 例示ツール <a href="#h9o86a5lgfut" id="h9o86a5lgfut"></a>

### DALL-E 2を使用した画像生成 <a href="#quzi31gwxka6" id="quzi31gwxka6"></a>

**説明:**

このツールは、画像の説明を入力として受け付け、該当する画像のURLを生成します。出力にはURLと有効期限の注意事項が含まれます。このツールは、クエリをOpenAI DALL-E APIに送信し、応答を取得することで機能します。

**入力:**

* 説明: 画像の説明、例えば、「白い毛皮の猫」

**出力:**

* 生成された画像のURLと有効期限の注意事項を含むメッセージ

#### Python スクリプト（これはimage\_generation.json内のフィールドとなります）： <a href="#qw9m9923kptk" id="qw9m9923kptk"></a>

```python
import openai
def execute(variables):
    openai.api_key = '<ユーザーAPIキー>'
    description = variables['Description']
    response = openai.Image.create(
        prompt=description,
        n=1,
        size="1024x1024"
    )
    image_url = response['data'][0]['url']
    return f"画像へのリンクは次のとおりです：{image_url}。リンクは1時間後に有効期限が切れます。"
```

#### image\_generation.json <a href="#id-4q3mtb2zf8gt" id="id-4q3mtb2zf8gt"></a>

```json
{
    "version": "0.1",
    "metadata": {
        "tool_name": "画像生成",
        "tool_code": "import openai\n\ndef execute(variables):\n openai.api_key = ''\n description = variables['Description']\n response = openai.Image.create(\n prompt=description,\n n=1,\n size=\"1024x1024\"\n )\n\n image_url = response['data'][0]['url']\n return f\"あなたの画像へのリンクはこちら:{image_url}。 このリンクは1時間で期限が切れます。\"\n",
        "description": "OpenAIのDALL-Eモデルを用いて、説明に基づいた画像を生成します。",
        "usage_notes": "画像を詳細に記述し、それを説明フィールドに入力します。画像のURLが返されます。URLの有効期間は約1時間なので、期限が切れる前にダウンロードしてください",
        "model_version": ["gpt-3.5","gpt-3.5-turbo", "gpt-4", "claude"],
        "creator": {
            "name": "SkyDeck AI",
            "email": "skydeck@eastagile.com",
            "organization": "East Agile"
        },
        "variables": [
            {
                "name": "Description",
                "description": "画像説明",
                "default": "白いシャム猫"
            }
        ],
        "expected_output": {
            "type": "text"
        },
        "avatar_type": "base64",
        "timestamp": "2023-05-23T10:00:00Z",
        "requirements": "openai>=0.27.4",
        "avatar": ""
    }
}
```

### Open-Meteo APIを使用した対話型天候報告 <a href="#yhjv7lbl4mu0" id="yhjv7lbl4mu0"></a>

**説明**：

このツールはOpen-Meteo APIを利用して、ユーザーが質問した内容に基づくリアルタイムの天候情報を提供します。気温、降水量、風の状況など、天候に関する質問をすると、このツールは最も関連性の高く最新のデータを取得します。

このツールの動作は、LangChainライブラリの一機能であるAPIChainを利用してOpen-Meteo APIのドキュメンテーションにアクセスすることに依存しています。これにより、ツールは正しいAPI呼び出しを行い、必要な情報をシームレスに取得する方法を学習します。

**入力**：

* 質問：天候について具体的な質問をします、例："ニューヨーク市の現在の気温は何度ですか？"

**出力**：

* 要求された天候情報を提供する回答。

#### Pythonスクリプト（これはweather\_reporter.json内のフィールドになります）： <a href="#qw9m9923kptk" id="qw9m9923kptk"></a>

```python
from langchain.chains.api import open_meteo_docs
from langchain.chat_models import ChatOpenAI
from langchain.chains import APIChain
def execute(variables):
    question = variables['Question']
    llm = ChatOpenAI(
        model_name='gpt-3.5-turbo',
        openai_api_key='<USER API KEY>'
    )
    api_chain = APIChain.from_llm_and_api_docs(
        llm, open_meteo_docs.OPEN_METEO_DOCS, verbose=False
    )
    result = api_chain.run(question)
    return result
```

#### weather\_reporter.json <a href="#bgnhw14oi99h" id="bgnhw14oi99h"></a>

```json
{
  "version": "0.1",
  "metadata": {
    "tool_name": "天候レポーター",
    "tool_code": "from langchain.chains.api import open_meteo_docs\nfrom langchain.chat_models import ChatOpenAI\nfrom langchain.chains import APIChain\n\n\ndef execute(variables):\n question = variables['質問']\n llm = ChatOpenAI(model_name='gpt-3.5-turbo',\n openai_api_key='')\n api_chain = APIChain.from_llm_and_api_docs(\n llm, open_meteo_docs.OPEN_METEO_DOCS, verbose=False)\n result = api_chain.run(question)\n return result\n",
    "description": "Open-Meteo APIを活用して、リアルタイムの天候情報を取得します",
    "usage_notes": "提供されたフィールドにあなたの天候に関する質問を入力してください",
    "model_version": ["gpt-3.5", "gpt-3.5-turbo", "gpt-4", "claude"],
    "creator": {
      "name": "SkyDeck AI",
      "email": "skydeck@eastagile.com",
      "organization": "East Agile"
    },
    "variables": [
      {
        "name": "質問",
        "description": "天候状況について問い合わせる",
        "default": "現在のミュンヘン、ドイツの温度は何度ですか？"
      }
    ],
    "expected_output": {
      "type": "text"
    },
    "avatar_type": "base64",
    "timestamp": "2023-07-13T10:00:00Z",
    "requirements": "openai>=0.27.4\nlangchain>=0.0.229",
    "avatar": ""
  }
}
```

## 制限事項 <a href="#g32lfwd6xlxx" id="g32lfwd6xlxx"></a>

AWS Lambdaは、関数の実行時間を最大15分、RAMを10GBまでに制限しています。したがって、ツールはこれらの制約内で実行を完了させるべきです。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.skydeck.ai/ja/developers/develop-your-own-tools/json-format-for-smart-tools.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
