# 智能工具的 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。因此，工具应在此限制范围内完成执行。


---

# 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/zh-cn/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.
