API Gateway के लिए ChatGPT कस्टम प्लगइन बनाना

Bobur Umurzokov

Bobur Umurzokov

July 12, 2023

Technology

ChatGPT प्लगइन्स ChatGPT को बाहरी API से जोड़ने वाले पुल के रूप में कार्य करते हैं ताकि इन API के डेटा का बुद्धिमानी से उपयोग किया जा सके। ये प्लगइन्स ChatGPT को विभिन्न कार्यों को करने की अनुमति देते हैं, जैसे कि अन्य API से नवीनतम जानकारी प्राप्त करना जिसमें खेल परिणाम, शेयर बाजार डेटा, या ब्रेकिंग न्यूज़ शामिल हैं, और उपयोगकर्ताओं को फ्लाइट बुकिंग या खाना ऑर्डर करने जैसे कार्यों में सहायता करना। इस बीच, API गेटवे एक शक्तिशाली उपकरण है जो डेवलपर्स को API को बड़े पैमाने पर बनाने, तैनात करने और प्रबंधित करने की अनुमति देता है। यह ChatGPT और बैकएंड सेवाओं के बीच एक गेटवे के रूप में कार्य करता है, जो प्रमाणीकरण, दर सीमित करने, और अनुरोध/प्रतिक्रिया परिवर्तन जैसी सुविधाएं प्रदान करता है।

आप पिछले पोस्ट से पढ़ सकते हैं जहां हमने API गेटवे कैसे ChatGPT प्लगइन डेवलपर्स के लिए उनके API एंडपॉइंट्स को उजागर करने, सुरक्षित करने, प्रबंधित करने और मॉनिटर करने में मददगार हो सकता है, इसका पता लगाया। यह पोस्ट आपको API गेटवे के लिए एक ChatGPT प्लगइन विकसित करने की सरल और सीधी विधि के माध्यम से कदम-दर-कदम मार्गदर्शन करती है। एक मजेदार अतिरिक्त के रूप में, आप यह भी सीखेंगे कि अपने प्लगइन को ChatGPT में कैसे जोड़ें और इसे आज़माएं। तो, आराम से बैठें, और इस यात्रा पर चलें!

API गेटवे के लिए ChatGPT प्लगइन कैसे बनाएं

जैसा कि OpenAI वेबसाइट पर शुरुआती गाइड में बताया गया है, किसी भी नए कस्टम ChatGPT प्लगइन को बनाने के लिए हमें इन सामान्य 3 चरणों का पालन करना होगा:

  1. एक API विकसित करें या मौजूदा API का उपयोग करें, जो OpenAPI स्पेसिफिकेशन को लागू करता हो।
  2. API को OpenAPI YAML या JSON प्रारूप में डॉक्यूमेंट करें।
  3. एक JSON प्लगइन मैनिफेस्ट फ़ाइल बनाएं जिसमें प्लगइन के बारे में आवश्यक जानकारी हो।

उपरोक्त समान चरणों का पालन करते हुए, हम ChatGPT के लिए एक कस्टम प्लगइन बनाने जा रहे हैं जो बैकएंड API सेवाओं के लिए API गेटवे के रूप में कार्य करता है। उदाहरण के लिए, ChatGPT यूजर इंटरफेस में, यदि कोई उपयोगकर्ता मौजूदा Conference API के सामने एक API गेटवे को पेश करना चाहता है ताकि एक स्पीकर के सत्रों और विषयों के बारे में विवरण प्राप्त किया जा सके, तो प्लगइन चैट में कमांड प्राप्त करने में सक्षम है और फिर उपयोगकर्ता के अनुरोध को Apache APISIX Admin API को अग्रेषित करता है, जो उपयोगकर्ता द्वारा निर्दिष्ट इनपुट कॉन्फ़िगरेशन के साथ एक Route बनाता है। यह Chatbot का उपयोग करके API गेटवे सुविधाओं को कॉन्फ़िगर करने का एक और तरीका हो सकता है। नीचे नमूना आउटपुट देखें:

Chatbot to configure the API Gateway features

कमांड सफलतापूर्वक चलने के बाद, APISIX रूट बनाता है और हमारे Conference बैकएंड API के लिए एक Upstream रजिस्टर करता है। इसलिए, आप API गेटवे डोमेन और URL पथ तक पहुंच सकते हैं ताकि गेटवे के माध्यम से प्रतिक्रिया प्राप्त की जा सके। उदाहरण के लिए, http://localhost:9080/speaker/1/sessions एंडपॉइंट पर यह GET अनुरोध Conference API से सभी स्पीकर के सत्र लौटाता है। आप सभी रूट्स प्राप्त करने, Id द्वारा एक रूट प्राप्त करने, मौजूदा रूट को अपडेट करने या प्लगइन्स और अपस्ट्रीम के साथ एक रूट बनाने जैसे बुनियादी ऑपरेशन्स को सीधे ChatGPT से पूछकर भी कर सकते हैं।

विभिन्न घटकों के बीच डेटा प्रवाह को समझने के लिए, आप प्रदान की गई आर्किटेक्चरल डायग्राम का संदर्भ ले सकते हैं:

पूर्वापेक्षाएँ

  • शुरू करने से पहले, APISIX की बुनियादी समझ होना अच्छा है। API गेटवे और इसकी मुख्य अवधारणाओं जैसे routes, upstream, Admin API, plugins, और HTTP प्रोटोकॉल से परिचित होना भी लाभदायक होगा।
  • Docker का उपयोग कंटेनराइज्ड etcd और APISIX को इंस्टॉल करने के लिए किया जाता है।
  • Visual Studio Code डाउनलोड करें जो आपके ऑपरेटिंग सिस्टम के साथ संगत हो, या किसी अन्य कोड एडिटर जैसे IntelliJ IDEA, PyCharm आदि का उपयोग करें।
  • कस्टम ChatGPT प्लगइन्स विकसित करने के लिए आपके पास ChatGPT Plus खाता होना चाहिए और प्लगइन्स वेटलिस्ट में शामिल होना चाहिए।

पूर्ण API गेटवे प्लगइन के लिए संपूर्ण कोड रिपॉजिटरी यहाँ स्थित है। आइए कोड स्निपेट्स, फ़ाइलों सहित चरणों को एक-एक करके देखें और समझें कि API गेटवे को कैसे सेट अप करें, API को OpenAPI परिभाषा में डॉक्यूमेंट करें, और एक प्लगइन मैनिफेस्ट फ़ाइल बनाएं।

इस प्लगइन के विकास के लिए उपयोग की गई तकनीकी स्टैक में निम्नलिखित शामिल हैं:

  1. एक मौजूदा सार्वजनिक Conference API जहां हम डेमो में एक स्पीकर के सत्र और विषय जानकारी प्राप्त करने के लिए दो API एंडपॉइंट्स का उपयोग करते हैं। आप अपने ब्राउज़र पर अन्य API खोज सकते हैं।
  2. Apache APISIX API गेटवे Admin API को उजागर करने और API ट्रैफ़िक को प्रबंधित करने के लिए।
  3. प्लगइन को चलाने, प्लगइन मैनिफेस्ट, OpenAPI स्पेसिफिकेशन, और प्लगइन लोगो फ़ाइलों को स्थानीय होस्ट URL http://localhost:5000/ पर होस्ट करने के लिए Python स्क्रिप्ट।
  4. प्रोजेक्ट में APISIX, etcd, और हमारी Python स्क्रिप्ट को एक ही docker compose up कमांड के साथ बनाने, तैनात करने और चलाने के लिए Docker का उपयोग किया जाता है।

हम प्लगइन बनाने के लिए एक श्रृंखला का पालन करेंगे। भाग 1 में, हम APISIX को सेट अप करने पर ध्यान केंद्रित करेंगे। भाग 2 में ChatGPT प्लगइन का विकास शामिल होगा, और भाग 3 में प्लगइन को ChatGPT से जोड़ना और इसे परीक्षण करना शामिल होगा। जबकि हम चरणों को क्रमिक रूप से प्रस्तुत करते हैं, आप विषय के साथ अपनी परिचितता के आधार पर किसी भी चरण को छोड़ सकते हैं।

भाग 1: Apache APISIX सेट अप करें

चरण 1: APISIX कॉन्फ़िग परिभाषित करें

सबसे पहले, हम एक APISIX कॉन्फ़िग फ़ाइल बनाते हैं। APISIX कॉन्फ़िगरेशन को विभिन्न तरीकों से परिभाषित किया जा सकता है, जिसमें स्टैटिक कॉन्फ़िगरेशन फ़ाइलें शामिल हैं जो आमतौर पर YAML में लिखी जाती हैं। apisix.yml फ़ाइल में, हमने एक उदाहरण कॉन्फ़िगरेशन प्रदान किया है:

deployment: etcd: host: - "http://etcd:2397" admin: admin_key_required: false allow_admin: - 0.0.0.0/0

आप उपरोक्त apisix.yml फ़ाइल का अर्थ समझने के लिए ChatGPT से भी परामर्श कर सकते हैं। मूल रूप से, यह कॉन्फ़िगरेशन APISIX के लिए डिप्लॉयमेंट मोड को परिभाषित करता है। यहां, हम एक सरल पारंपरिक विकल्प का उपयोग करते हैं जहां APISIX etcd स्टोरेज का उपयोग करता है ताकि यह Admin API से कॉन्फ़िगरेशन विवरण प्राप्त कर सके। हम डेमो के लिए Admin key admin_key_required को अक्षम भी करते हैं।

चरण 2: Docker Compose में APISIX और etcd रजिस्टर करें

अंतिम चरण में, हम एक docker-compose.yml फ़ाइल बनाते हैं और APISIX और etcd को वहां सेवाओं के रूप में रजिस्टर करते हैं ताकि इसे बनाया, तैनात और चलाया जा सके। और APISIX Admin API पोर्ट: 9180 पर उपलब्ध होगा और गेटवे को आप पोर्ट: 9080 पर एक्सेस कर सकते हैं।

version: "3" services: apisix: image: apache/apisix:3.3.0-debian volumes: - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro restart: always ports: - "9080:9080" - "9180:9180" depends_on: - etcd etcd: image: bitnami/etcd:3.5.9 environment: ETCD_ENABLE_V2: "true" ALLOW_NONE_AUTHENTICATION: "yes" ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2397" ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2397"

भाग 2: ChatGPT प्लगइन विकास

चरण 1: प्लगइन मैनिफेस्ट बनाएं

प्रत्येक प्लगइन को एक ai-plugin.json मैनिफेस्ट फ़ाइल की आवश्यकता होती है जो आपके प्लगइन के बारे में महत्वपूर्ण जानकारी प्रदान करती है, जैसे इसका नाम, विवरण, लोगो एसेट्स, और इसी तरह। प्रत्येक मैनिफेस्ट फ़ाइल फ़ील्ड के बारे में अधिक जानकारी यहाँ पढ़ें और OpenAI में मॉडल विवरण (description_for_model) बनाने के लिए कुछ सर्वोत्तम प्रथाएं शामिल हैं। जब आप ChatGPT UI पर प्लगइन इंस्टॉल करते हैं, तो इंटरफेस आपके डोमेन (http://localhost:5000/.well-known/ai-plugin.json) पर मैनिफेस्ट फ़ाइल की तलाश करेगा। यह ChatGPT को यह समझने में मदद करता है कि आपके प्लगइन के साथ कैसे इंटरैक्ट करना है।

एक नई फ़ाइल बनाएं जिसका नाम ai-plugin.json हो और निम्नलिखित कोड पेस्ट करें:

{ "schema_version": "v1", "name_for_human": "APISIX plugin for ChatGPT", "name_for_model": "apigatewayplugin", "description_for_human": "API Gateway plugin to manage your backend APIs.", "description_for_model": "Create, retrive, manage APISIX routes, upstreams, and plugins", "auth": { "type": "none" }, "api": { "type": "openapi", "url": "http://localhost:5000/openapi.yaml" }, "logo_url": "http://localhost:5000/logo.png", "contact_email": "support@example.com", "legal_info_url": "http://www.example.com/legal" }

आप देख सकते हैं कि फ़ाइल http://localhost:5000/openapi.yaml फ़ाइल के लिए URL भी निर्दिष्ट करती है।

जब कोई उपयोगकर्ता ChatGPT के साथ इंटरैक्ट करता है, तो यह openapi.yaml फ़ाइल को एंडपॉइंट्स के विवरण को समझने के लिए संदर्भित करेगा। इस जानकारी के आधार पर, ChatGPT उपयोगकर्ता के प्रॉम्प्ट के जवाब में उपयोग करने के लिए सबसे उपयुक्त एंडपॉइंट का चयन करेगा।

चरण 2: OpenAPI स्पेसिफिकेशन बनाएं

OpenAPI स्पेसिफिकेशन REST API को वर्णित करने के लिए एक मानक है। इसका उपयोग प्रत्येक API एंडपॉइंट को निर्दिष्ट करने के लिए किया जाता है जिसका उपयोग प्लगइन मॉडल के साथ संचार करने के लिए करेगा। यहाँ और पढ़ें। यहाँ openapi.yaml फ़ाइल का एक उदाहरण है:

openapi: 3.1.0 info: title: APISIX Admin API description: >- APISIX Admin API is a RESTful API that allows you to create and manage APISIX resources. version: 3.3.0 servers: - url: http://localhost:5000 description: Dev Environment tags: - name: Route description: |- A route defines a path to one or more upstream services. See [Routes](/apisix/key-concepts/routes) for more information. paths: /apisix/admin/routes: get: operationId: getAllRoutes summary: Get All Routes deprecated: false description: Get all configured routes. tags: - Route ... # GitHub रिपॉजिटरी पर पूर्ण संस्करण देखें

उपरोक्त OpenAPI स्पेसिफिकेशन वास्तविक Admin API स्कीमा से केवल एक अंश है और आप आसानी से अधिक API स्कीमा जोड़ सकते हैं यदि आवश्यक हो। हमारे प्लगइन डेमो में, हमने केवल Route से संबंधित पथों का उपयोग किया है।

चरण 3: प्लगइन स्टैटिक फ़ाइलों के लिए एंडपॉइंट्स जोड़ें (स्थानीय होस्ट के लिए वैकल्पिक)

अगला, हम Flask ऐप को Python में बनाते हैं ताकि हमारी स्टैटिक फ़ाइलों को प्लगइन के लोगो, मैनिफेस्ट, और OpenAPI स्पेसिफिकेशन के लिए एंडपॉइंट्स के रूप में उजागर कर सकें। ChatGPT कस्टम प्लगइन के लिए आवश्यक सभी जानकारी प्राप्त करने के लिए API एंडपॉइंट्स को कॉल करता है:

import requests import os import yaml from flask import Flask, jsonify, request, send_from_directory from flask_cors import CORS app = Flask(__name__) PORT = 5000 # नोट: ChatGPT को आपके प्लगइन तक पहुंचने के लिए CORS को chat.openapi.com की अनुमति देना आवश्यक है CORS(app, origins=[f"http://localhost:{PORT}", "https://chat.openai.com"]) api_url = 'http://apisix:9180' @app.route('/.well-known/ai-plugin.json') def serve_manifest(): return send_from_directory(os.path.dirname(__file__), 'ai-plugin.json') @app.route('/openapi.yaml') def serve_openapi_yaml(): with open(os.path.join(os.path.dirname(__file__), 'openapi.yaml'), 'r') as f: yaml_data = f.read() yaml_data = yaml.load(yaml_data, Loader=yaml.FullLoader) return jsonify(yaml_data) @app.route('/logo.png') def serve_openapi_json(): return send_from_directory(os.path.dirname(__file__), 'logo.png') # ChatGPT से API गेटवे तक अनुरोध को प्रॉक्सी करने के लिए @app.route('/<path:path>', methods=['GET', 'POST']) def wrapper(path): headers = { 'Content-Type': 'application/json', } url = f'{api_url}/{path}' print(f'Forwarding call: {request.method} {path} -> {url}') if request.method == 'GET': response = requests.get(url, headers=headers, params=request.args) elif request.method in ['POST', 'DELETE', 'PATCH', 'PUT']: print(request.headers) response = requests.post(url, headers=headers, params=request.args, json=request.json) else: raise NotImplementedError(f'Method {request.method} not implemented in wrapper for {path=}') return response.content if __name__ == '__main__': app.run(debug=True,host='0.0.0.0')

जब स्क्रिप्ट चलती है, तो आप API डोमेन पर फ़ाइलों तक पहुंच सकते हैं:

  1. ai-plugin.json URI पथ http://localhost:5000/.well-known/ai-plugin.json पर उपलब्ध होगा।
  2. openapi.yaml URI पथ http://localhost:5000/openapi.yaml पर एक्सेस किया जा सकता है।
  3. logo.png URI पथ http://localhost:5000/logo.png पर उपलब्ध होगा।

ध्यान दें कि हमने उपरोक्त कोड में CORS को केवल स्थानीय रूप से तैनात प्लगइन को ChatGPT इंटरफेस के साथ परीक्षण करने के लिए सक्षम किया है। यदि प्लगइन एक रिमोट सर्वर पर चल रहा है, तो आपको प्रॉक्सी भाग की आवश्यकता नहीं है। प्लगइन को रिमोटली चलाने के लिए OpenAI डॉक्स देखें।

चरण 4: Python ऐप को Dockerize करें

Python ऐप को Docker के साथ स्वचालित रूप से चलाने के लिए, हम एक Dockerfile बनाते हैं और इसे docker-compose.yml फ़ाइल में रजिस्टर करते हैं। Python ऐप को Dockerize करना सीखें यहाँ.

FROM python:3.9 WORKDIR /app COPY requirements.txt requirements.txt RUN pip3 install -r requirements.txt COPY . . CMD ["python","main.py"]

अंत में, हमारी docker-compose.yml फ़ाइल इस प्रकार दिखती है:

version: "3" services: apisix: image: apache/apisix:3.3.0-debian volumes: - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro restart: always ports: - "9080:9080" - "9180:9180" depends_on: - etcd etcd: image: bitnami/etcd:3.5.9 environment: ETCD_ENABLE_V2: "true" ALLOW_NONE_AUTHENTICATION: "yes" ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2397" ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2397" chatgpt-config: build: chatgpt-plugin-config ports: - '5000:5000'

भाग 3: ChatGPT को कस्टम प्लगइन के साथ एकीकृत करें

चरण 1: कस्टम प्लगइन तैनात करें

एक बार जब आप अपने कस्टम प्लगइन का विकास पूरा कर लेते हैं, तो इसे स्थानीय रूप से तैनात और चलाने का समय आ गया है। प्रोजेक्ट को शुरू करने के लिए प्रोजेक्ट रूट डायरेक्टरी से निम्नलिखित कमांड चलाएं:

docker compose up

जब आप प्रोजेक्ट शुरू करते हैं, तो Docker उन इमेज को डाउनलोड करता है जिनकी उसे चलाने के लिए आवश्यकता होती है। आप देख सकते हैं कि APISIX, etcd और Python ऐप (chatgpt-config) सेवाएं चल रही हैं।

Deploy the custom plugin

चरण 2: कस्टम प्लगइन को ChatGPT इंटरफेस से जोड़ें

तो, आपने ChatGPT प्लगइन को तैनात कर दिया है, प्लगइन कॉन्फ़िग फ़ाइलें API के माध्यम से एक्सेस करने योग्य हैं और अब आप इसे आज़माने के लिए तैयार हैं। यदि आपके पास Plus खाता है, तो हमें पहले GPT-4 में प्लगइन को सक्षम करना होगा क्योंकि यह डिफ़ॉल्ट रूप से अक्षम होता है। हमें सेटिंग्स में जाना होगा और बीटा विकल्प पर क्लिक करना होगा और "Enable plugins" पर क्लिक करना होगा। फिर ChatGPT के शीर्ष पर प्लगइन्स पॉप बार पर क्लिक करें, "Plugin Store" पर नेविगेट करें और "Develop your own plugin" चुनें। प्लगइन के लिए स्थानीय होस्ट URL (localhost:5000) प्रदान करें।

Connect the custom plugin to the ChatGPT interface

जब आप "Find a manifest file" पर क्लिक करते हैं, यदि सब कुछ सही ढंग से सेट अप किया गया है, तो आप देखेंगे कि ChatGPT मैनिफेस्ट और OpenAPI स्पेसिफिकेशन फ़ाइलों को सफलतापूर्वक वैलिडेट करता है।

Find a manifest file

चरण 3: कस्टम प्लगइन का परीक्षण करें

अब प्लगइन ChatGPT इंटरफेस से जुड़ गया है, हम एक सरल कमांड लिख सकते हैं:

Show all routes

चूंकि हमारे पास APISIX में कोई रूट नहीं है, हम एक नया बना सकते हैं। यहां हमारे प्रॉम्प्ट में उपयोग की गई भाषा के आधार पर ChatGPT उपयुक्त APISIX एंडपॉइंट्स को कॉल करने का चयन करेगा। कृपया, अधिक विशिष्ट विवरणों के साथ एक कमांड लिखने का प्रयास करें ताकि ChatGPT एक रूट को सही ढंग से बना सके।

Create a route in the APISIX

अब रूट बन गया है, आप Conference सत्र विवरण प्राप्त करने के लिए गेटवे एंडपॉइंट तक पहुंच सकते हैं: http://localhost:9080/speaker/1/sessions। आप इस Conference API को अपने बैकएंड API से भी बदल सकते हैं।

API गेटवे कस्टम प्लगइन के अन्य उपयोग मामले

अब आप एक प्रश्न पूछ सकते हैं: इस प्लगइन के साथ अनुरोधों को रूट करने के अलावा और क्या कर सकते हैं? ऐसी कई चीजें हैं जिन्हें आप इस प्लगइन पर सुधार कर सकते हैं या APISIX द्वारा Admin API के माध्यम से प्रदान की गई अतिरिक्त सुविधाएं जोड़ सकते हैं। क्योंकि हमने Conference API के सामने API गेटवे को रखा है और API गेटवे प्लगइन से आने वाले सभी अनुरोधों को पहले संभालता है, आप कम से कम निम्नलिखित ह

Tags: