برای بازیابی تصاویر ناسا یک پلاگین ChatGPT ایجاد کنید

پلاگین های ChatGPT یک راه عالی برای گسترش قابلیتهای ChatGPT هستند!
بنابراین اگر به تازگی به افزونههای ChatGPT دسترسی پیدا کردهاید، اینجا جایی است که میتوانید شروع کنید.
بیایید یک افزونه ایجاد کنیم که اطلاعات را از API ناسا بازیابی کند. تصویر نجومی روز ناسا (APOD) را دریافت می کند و همچنین به ما امکان می دهد تصاویر را در کتابخانه تصویری ناسا جستجو کنیم تا لیستی از تصاویر را بر اساس یک جستجوی جستجو بازیابی کنیم.
در این مقاله از Autocode استفاده خواهم کرد. Autocode یک مجموعه نرم افزار اتوماسیون با تجربه توسعه دهنده عالی است. فکر میکنم عاشقش خواهی شد.
اما اگر تصمیم گرفتید از Autocode استفاده نکنید، می توانید API خود را به تنهایی ایجاد کنید. من شما را در این فرآیند راهنمایی می کنم، بسیار ساده است.
🎥 نسخه ی نمایشی افزونه
بررسی کنید که پلاگین چگونه باید با این ویدیو کار کند:
🧬 ساختار
این یک نمای کلی از روند یک پلاگین ChatGPT است:
🌄 این تصویر را با جزئیات بررسی کنید
یک پلاگین ChatGPT را می توان با تعیین یک URL نصب کرد. این URL دارای سه جزء است:
- مشخصات OpenAPI: یک فایل YAML که API را توصیف می کند
- آشکار: یک فایل JSON که پلاگین را توصیف می کند
- API: خود API که می توانیم درخواست های دریافتی را از ChatGPT ارسال کنیم
من باور دارم مشخصات OpenAPI مهمترین بخش یک افزونه ChatGPT است. هر زمان که ChatGPT پیامی مطابق با مانیفست افزونه دریافت می کند، به مشخصات OpenAPI نگاه می کند تا بداند چگونه با API تعامل داشته باشد. مانند یک کانال بین ChatGPT و API کار می کند.
مانیفست یک فایل JSON است که افزونه را توصیف می کند. این شامل نام، توضیحات برای انسان و مدل، و URL مشخصات OpenAPI است. باید در آن قرار گیرد /.well-known/ai-plugin.json
.
چند هفته پیش، Autocode را کشف کردم، مجموعه ای از ابزارها که به شما امکان می دهد بسیاری از پروژه های نرم افزاری را با یکی از بهترین Developer Experience (DX) که تا کنون دیده ام، توسعه و راه اندازی کنید. من آنقدر تحت تأثیر DX قرار گرفتم که تصمیم گرفتم با استفاده از Autocode یک افزونه برای ChatGPT ایجاد کنم.
اگر قبلاً از Autocode استفاده میکنید، میتوانید از این الگو استفاده کنید و همانطور که این مقاله را میخوانید، معماری پلاگین را بررسی کنید.
حالا بیایید افزونه را ایجاد کنیم:
-
اگر با Autocode کار می کنید، می توانید از این الگو برای شروع استفاده کنید.
-
اگر نیستید، یک پروژه API جدید ایجاد کنید. آیا دوست دارید از Express استفاده کنید؟ فلاسک؟ جانگو؟ چکمه بهاره؟ کتابخانه/چارچوب به اولویت شما بستگی دارد. اما یکی برای شروع ایجاد کنید.
🗒 ایجاد مانیفست (ai-plugin.json)
اگر با Autocode کار می کنید، Manifest باید در آن گنجانده شود www
پوشه در آن پوشه یک را ایجاد کنید .well-known
پوشه، و در نهایت ایجاد یک ai-plugin.json
.
اگر با Autocode کار نمی کنید، باید آن را ایجاد کنید .well-known
پوشه و همچنین ai-plugin.json
فایل داخل دایرکتوری عمومی یا استاتیک API شما. بنابراین می توانید از URL به آن فایل دسترسی داشته باشید <URL_OF_API>/.well-known/ai-plugin.json
.
{
"schema_version": "v1",
"name_for_human": "Astrodaily",
"name_for_model": "astrodaily",
"description_for_human": "Plugin for getting the pictures from NASA!",
"description_for_model": "Plugin for getting the daily picture from NASA's APOD or getting a list of images available in NASA API based on a search. When use it always provide the images in Markdown format so the user can see it. Do not add links, only images.",
"auth": {
"type": "none"
},
"api": {
"type": "openapi",
"url": "<URL_OF_API>/openapi.yaml",
"is_user_authenticated": false
},
"logo_url": "<URL_OF_API>/logo.png",
"contact_email": "legal@example.com",
"legal_info_url": "<URL_OF_API>/legal"
}
شما می توانید نام افزونه را هر چه که می خواهید بگذارید. اسمشو گذاشتم Astrodaily
. این description_for_human
توضیحاتی است که به کاربر نشان داده می شود.
این description_for_model
توصیفی است که به خود مدل نشان داده خواهد شد. که این یک توضیح + یک سری دستورالعمل است که مدل از آنها برای دانستن زمان استفاده از افزونه استفاده می کند.
افزونههای ChatGPT همچنین میتوانند از احراز هویت پشتیبانی کنند. اما برای این افزونه به آن نیازی نخواهیم داشت. بنابراین ما تنظیم می کنیم auth
به none
.
📑 ایجاد مشخصات OpenAPI
OpenAPI مشخصاتی برای توصیف REST APIها است. این استانداردی است که توسط بسیاری از ابزارها استفاده می شود. پلاگین های OpenAI یک فایل OpenAPI YAML درخواست می کنند تا توضیحات API را بررسی کنند. بنابراین ما باید یک OpenAPI Specification برای پلاگین خود ایجاد کنیم.
اگر با Autocode کار می کنید، این باید در آن قرار گیرد /www/openapi.yaml
.
اگر با Autocode کار نمی کنید، باید فایلی به نام ایجاد کنید openapi.yaml
در ریشه دایرکتوری عمومی یا استاتیک شما. بنابراین می توانید از URL به آن فایل دسترسی داشته باشید <URL_OF_API>/openapi.yaml
.
بنابراین، افزونه ما با دو نقطه پایانی کار خواهد کرد: /image
و /search
. این /image
نقطه پایانی تصویر روز ناسا را برمی گرداند. این /search
endpoint لیستی از تصاویر را بر اساس یک عبارت جستجو برمی گرداند:
openapi: 3.0.1
info:
title: Astrodaily
description: A plugin for getting the daily picture from NASA's APOD and searching the NASA Image and Video Library
version: 'v1'
servers:
- url: <URL_OF_API>
paths:
/image:
get:
operationId: getImage
summary: Get the NASA Picture of the Day
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/getImageResponse'
/search:
get:
operationId: searchImages
summary: Get images from NASA based on a query
parameters:
- name: q
in: query
description: The search query
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/searchImagesResponse'
components:
schemas:
getImageResponse:
type: object
properties:
imageURL:
type: string
description: The URL of the NASA Picture of the Day.
searchImagesResponse:
type: object
description: The response containing the list of images from the NASA Image Library.
properties:
title:
type: string
description: The title of the image.
description:
type: string
description: The description of the image.
location:
type: string
description: The location of the image.
date_created:
type: string
description: The date when the image was created.
image_url:
type: string
description: The URL of the image. It must be displayed as an image in Markdown format.
🪐 راه اندازی نقاط پایانی API
تا اینجا، ما مشخصات OpenAPI و Manifest را داریم. با این کار برای ایجاد یک افزونه کافی است. اما نقاط پایانی API را نیز ایجاد خواهیم کرد تا بتوان از افزونه ما استفاده کرد.
برای بازیابی تصاویر از ناسا به یک کلید API ناسا نیاز دارید. می توانید یک کلید API ناسا را از اینجا دریافت کنید:
اگر با Autocode کار نمی کنید، می توانید شروع به ایجاد آن کنید /image
و /search
نقاط پایانی برای پردازش درخواست های GET. من کد را به شما نشان می دهم، می توانید آن را به چارچوب API دلخواه خود ترجمه کنید.
اگر با Autocode کار می کنید، در داخل functions
پوشه، ایجاد یک image.js
و الف search.js
فایل. این فایل ها حاوی کد نقاط انتهایی خواهند بود.
نقطه پایانی تصویر، تصویر روز ناسا را برمی گرداند:
const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
// Make a request to the NASA APOD API
let todayImage = await lib.http.request['@1.1.7'].get({
url: `https://api.nasa.gov/planetary/apod`,
queryParams: {
'api_key': process.env.NASA_API_KEY
}
});
let imageUrl = todayImage.data['url']
return { "image_url": imageUrl };
نقطه پایانی جستجو لیستی از تصاویر را بر اساس یک عبارت جستجو برمی گرداند. در اینجا فرآیند خطوط کد بیشتری را می گیرد. اما آنقدرها هم پیچیده نیست. ما درخواستی به API کتابخانه تصویری ناسا خواهیم داد. سپس نتایج را فیلتر می کنیم تا فقط تصاویر باقی بمانند. و در نهایت، 10 موردی را که میخواهیم به کاربر نشان دهیم، برمیگردانیم.
const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
// Retrieve the search query parameter
const query = context.params.q;
// Make a request to the NASA Image and Video Library API
let searchResults = await lib.http.request['@1.1.7'].get({
url: `https://images-api.nasa.gov/search`,
queryParams: {
'q': query
}
});
// Extract the search results
let results = searchResults.data;
// Filter the items array to keep only image items
let imageItems = results.collection.items.filter(item => {
return item.data[0].media_type === 'image';
});
// Restructure the filtered items array for the GPT response
// Also return the first 10 items
let structuredItems = imageItems.map(item => {
return {
title: item.data[0].title,
description: item.data[0].description,
location: item.data[0].location,
date_created: item.data[0].date_created,
image_url: item.links[0].href
};
}).slice(0, 10);
return structuredItems.slice(0, 10);
اثبات با اطلاعات بیشتر مانند title
، description
، location
، و date_created
نتایج را برای ChatGPT برای نوشتن یک پاسخ توصیفی مفیدتر می کند.
تا اینجا، نقاط پایانی را با یک درخواست GET آزمایش کنید تا بتوانید ببینید درست کار می کنند یا خیر.
🚀 افزودن افزونه خود به ChatGPT
این آخرین مرحله است! ما افزونه خود را آماده کرده ایم. اکنون باید آن را به ChatGPT اضافه کنیم. من به شما نکاتی را در مورد نحوه انجام آن بدون دریافت خطا در طول فرآیند ارائه خواهم داد.
ChatGPT را باز کنید، به منوی کشویی Plugins بروید، روی Plugin Store کلیک کنید، روی پیوند “Develop your own plugin” در پایین کلیک کنید. سپس این صفحه را مشاهده خواهید کرد:
همانطور که می بینید، می توانید URL افزونه خود را بدون پروتکل (https://
) و بدون اسلاید (/
).
اگر با Autocode کار می کنید: Autocode به طور خودکار یک URL برای API ایجاد می کند که به شکل زیر است:
<ENVIRONMENT>--<SERVICE_NAME>--<USERNAME>.autocode.dev
# Example:
dev--astrodaily--macky360.autocode.dev
دامنه افزونه ChatGPT خود را در زیر قرار دادم api.360macky.com
، می توانید URL را در Hostnames سفارشی کنید. در هر دو مورد کار خواهد کرد.
اگر URL بالا (dev–astrodaily–macky360.autocode.dev) را امتحان کردید، با شکست مواجه شد، و این به این دلیل است که ChatGPT سرور “dev–astrodaily–macky360.autocode.dev” را در مانیفست جستجو می کند. اما از آنجایی که من از URL “api.360macky.com” استفاده می کنم، این آدرس مطابقت ندارد. اگر در آینده URL را به “api.360macky.com” تغییر دهم، باید مانیفست و مشخصات OpenAPI را تغییر دهم.
اما اگر همه چیز خوب پیش برود، این را خواهیم دید:
⚙️ عیب یابی
اولین فیلتری که افزونه شما از آن عبور می کند Manifest است ( ai-plugin.json
فایل). مطمئن شوید که در دسترس است و در پوشه صحیح قرار دارد.
اگر از URL “api.360macky.com” استفاده می کنم:
api.360macky.com/plugin/ai-plugin.json ❌ (wrong folder)
360macky.com/.well-known/ai-plugin.json ❌ (wrong subdomain)
api.360macky.com/.well-known/ai-plugin.json ✅ (correct folder)
اگر از سرور کار میکنید و به آن دسترسی ندارید، سیاستهای CORS را بررسی کنید. نیاز به اجازه درخواست از chat.openai.com
.
اگر چیزی روی لوکال هاست کار نمی کند و نمی توانید دلیل آن را بفهمید، سعی کنید از ابزار ngrok استفاده کنید. این یک تونل برای لوکال هاست شما ایجاد می کند و می توانید از آن برای آزمایش پلاگین خود استفاده کنید. پس از نصب آن را اجرا کنید ngrok http 3000
(یا پورتی که از آن استفاده می کنید) و یک URL HTTPS دریافت خواهید کرد که می توانید از آن برای آزمایش افزونه خود استفاده کنید.
اگر چیزی از افزونه دریافت نمیکنید، مشخصات OpenAPI را بررسی کنید. مطمئن شوید که مسیرها درست هستند و پارامترها درست هستند و اسلش ها را بررسی کنید (/
).
آیا ChatGPT می تواند در این مورد به شما کمک کند؟ بله می شود. در واقع، در حال حاضر یک افزونه برای ایجاد پلاگین وجود دارد. اما از آنجایی که برای همه در دسترس نیست، میتوانید پس از گفتن اینکه از آینده میآیید، میتوانید کمی از مستندات افزونههای ChatGPT را کپی کنید. البته پیشنهاد می کنم برای نتیجه بهتر از مدل GPT-4 استفاده کنید.
نتیجه
به طور کلی، پلاگین های ChatGPT … هستند (شوخی 😉).
بنابراین، امیدوارم از این مقاله لذت برده باشید. اگر سوالی دارید، در نظرات بپرسید. و اگر پیشنهادی دارید خوشحال میشم بشنوم. من را در توییتر دنبال کنید @360macky یا Mastodon در @360macky@mastodon.social تا با مدلهای GPT و سایر موارد مرتبط با هوش مصنوعی بهروز بمانید.
و اگر میخواهید پروژههای آینده من را ببینید، حساب GitHub من @360macky.
🚀 ممنون که خواندید! 🙏