برنامه نویسی

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

پلاگین های ChatGPT یک راه عالی برای گسترش قابلیت‌های ChatGPT هستند!

بنابراین اگر به تازگی به افزونه‌های ChatGPT دسترسی پیدا کرده‌اید، اینجا جایی است که می‌توانید شروع کنید.

بیایید یک افزونه ایجاد کنیم که اطلاعات را از API ناسا بازیابی کند. تصویر نجومی روز ناسا (APOD) را دریافت می کند و همچنین به ما امکان می دهد تصاویر را در کتابخانه تصویری ناسا جستجو کنیم تا لیستی از تصاویر را بر اساس یک جستجوی جستجو بازیابی کنیم.

در این مقاله از Autocode استفاده خواهم کرد. Autocode یک مجموعه نرم افزار اتوماسیون با تجربه توسعه دهنده عالی است. فکر میکنم عاشقش خواهی شد.

اما اگر تصمیم گرفتید از Autocode استفاده نکنید، می توانید API خود را به تنهایی ایجاد کنید. من شما را در این فرآیند راهنمایی می کنم، بسیار ساده است.

🎥 نسخه ی نمایشی افزونه

بررسی کنید که پلاگین چگونه باید با این ویدیو کار کند:

🧬 ساختار

این یک نمای کلی از روند یک پلاگین ChatGPT است:

مروری بر افزونه های 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 ناسا را ​​از اینجا دریافت کنید:

کلید 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 برای ایجاد پلاگین

نتیجه

به طور کلی، پلاگین های ChatGPT … هستند (شوخی 😉).

بنابراین، امیدوارم از این مقاله لذت برده باشید. اگر سوالی دارید، در نظرات بپرسید. و اگر پیشنهادی دارید خوشحال میشم بشنوم. من را در توییتر دنبال کنید @360macky یا Mastodon در @360macky@mastodon.social تا با مدل‌های GPT و سایر موارد مرتبط با هوش مصنوعی به‌روز بمانید.

و اگر می‌خواهید پروژه‌های آینده من را ببینید، حساب GitHub من @360macky.

🚀 ممنون که خواندید! 🙏

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا