# スマートツールのための 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までに制限しています。したがって、ツールはこれらの制約内で実行を完了させるべきです。
