스마트 도구의 JSON 형식¶
전체 개요 ¶
SkyDeck.AI에서 스마트 도구를 생성하려면 파일 구조 섹션에 명시된 사양에 따라 파일 세트를 업로드해야 합니다. 업로드 후 플랫폼이 초기 설정을 수행하며, 이 과정은 몇 분 정도 소요될 수 있습니다. 이후 도구는 GenStudio 워크스페이스에서 사용할 수 있게 됩니다.
파일 구조 ¶
\<도구_이름>.json ¶
도구의 동작은 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: 이 도구의 로고를 나타내는 문자열
tool_code 규칙: ¶
이 스크립트는 도구의 동작 방식을 설명합니다. 이 스크립트의 주요 구성 요소는 execute 함수로, 다음 요구 사항을 갖습니다:
- 이 함수는 _variables_라는 단일 입력 매개변수를 가져야 하며, 이는 딕셔너리입니다. 이 딕셔너리의 각 키는 사용자가 도구에 입력하는 필드에 해당합니다.
- 이 함수는 문자열을 반환해야 하며, 해당 문자열이 GenStudio UI의 응답으로 표시됩니다.
도구 예시 ¶
DALL-E 2를 사용한 이미지 생성 ¶
설명:
이 도구는 이미지 설명을 입력으로 받아 이미지에 해당하는 URL을 생성합니다. 출력에는 URL과 만료 안내가 포함됩니다. 이 도구는 OpenAI DALL-E API에 쿼리를 전송하고 응답을 가져오는 방식으로 작동합니다.
입력:
- 설명: 이미지 설명(예: "흰색의 복슬복슬한 고양이")
출력:
- 생성된 이미지 URL과 만료 안내가 포함된 메시지.
Python 스크립트(image_generation.json 내부의 필드가 될 항목): ¶
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"Here is the link to your image:{image_url}. The link will expire in 1 hour."
image_generation.json ¶
{
"version": "0.1",
"metadata": {
"tool_name": "Image generation",
"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\"Here is the link to your image:{image_url}. The link will be expired in 1 hour.\"\n",
"description": "Generated an image based on the description with OpenAI's DALL-E model.",
"usage_notes": "Describe the image in detail and put it in the description field. An URL of the image will be returned. The lifetime of the URL is about 1 hour, so make sure to download it before expired",
"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": "Image description",
"default": "a white siamese cat"
}
],
"expected_output": {
"type": "text"
},
"avatar_type": "base64",
"timestamp": "2023-05-23T10:00:00Z",
"requirements": "openai>=0.27.4",
"avatar": ""
}
}
Open-Meteo API를 활용한 실시간 날씨 보고 ¶
설명:
이 도구는 Open-Meteo API를 활용하여 사용자의 질문에 기반한 실시간 날씨 정보를 제공합니다. 기온, 강수량, 바람 상태 등 날씨에 관한 질문을 하면, 도구가 가장 관련성 높고 최신 데이터를 가져옵니다.
이 도구의 작동 방식은 APIChain(LangChain 라이브러리의 기능)을 사용하여 Open-Meteo API 문서에 접근하는 것에 의존합니다. 이를 통해 도구는 올바른 API 호출 방법을 학습하고 필요한 정보를 원활하게 가져올 수 있습니다.
입력:
- 질문: 날씨에 관한 구체적인 질문(예: "뉴욕시의 현재 기온은 얼마입니까?")
출력:
- 요청된 날씨 정보를 제공하는 응답.
Python 스크립트(weather_reporter.json 내부의 필드가 될 항목): ¶
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 ¶
{
"version": "0.1",
"metadata": {
"tool_name": "Weather Reporter",
"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['Question']\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": "Leverage the Open-Meteo API to retrieve real-time weather details",
"usage_notes": "Enter your weather-related question in the provided field",
"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": "Question",
"description": "Inquire about the weather conditions",
"default": "What is the current temperature in Munich, Germany, expressed in degrees Celsius?"
}
],
"expected_output": {
"type": "text"
},
"avatar_type": "base64",
"timestamp": "2023-07-13T10:00:00Z",
"requirements": "openai>=0.27.4\nlangchain>=0.0.229",
"avatar": ""
}
}
제한 사항 ¶
AWS Lambda는 함수가 최대 15분, RAM 10GB로 실행되도록 허용합니다. 따라서 도구는 이 제약 내에서 실행을 완료해야 합니다.