# 智能工具的 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**：工具使用的变量数组。每个变量都有一个名字，描述和默认值。界面中变量的顺序遵循此数组中的顺序。
* **expected\_output**：工具产生的输出类型。在开发阶段，值应始终为文本。
* **avatar\_type**：在工具界面中使用的头像的格式。
* **timestamp**：最后一次更新工具的日期和时间。
* **requirements：** 指定运行tool\_code中的脚本所需的包。
* **avatar**：代表此工具logo的字符串

### 工具\_代码约定： <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 = '<USER API KEY>'
    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": "图像描述",
                "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根据用户问题提供实时天气信息。通过询问有关天气的问题，如温度、降水或风情况，该工具检索最相关和最新的数据。

该工具的运作依赖于APIChain - 来自LangChain库的一个特性 - 来访问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='<用户 API 密钥>'
    )
    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
{
  "版本": "0.1",
  "元数据": {
    "工具名称": "天气报告员",
    "工具代码": "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",
    "描述": "利用Open-Meteo API获取实时天气详细信息",
    "使用说明": "在提供的字段中输入您的天气相关问题",
    "模型版本": ["gpt-3.5", "gpt-3.5-turbo", "gpt-4", "claude"],
    "创建者": {
      "姓名": "SkyDeck AI",
      "电邮": "skydeck@eastagile.com",
      "机构": "East Agile"
    },
    "变量": [
      {
        "名称": "问题",
        "描述": "询问天气条件",
        "默认": "请问德国慕尼黑当前的温度是多少，用摄氏度表示？"
      }
    ],
    "预期输出": {
      "类型": "文字"
    },
    "头像类型": "base64",
    "时间戳": "2023-07-13T10:00:00Z",
    "需求": "openai>=0.27.4\nlangchain>=0.0.229",
    "头像": ""
  }
}
```

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

AWS Lambda仅允许一个函数运行最长15分钟，RAM最多10GB。因此，工具应在此限制范围内完成执行。
