एपीआई प्रबंधन के साथ एआई-संचालित Java ऐप का प्रबंधन
June 22, 2023
इस लेख में, हम OpenAI के ChatGPT API को Spring Boot एप्लिकेशन के साथ एकीकृत करने और Apache APISIX, एक ओपन-सोर्स API गेटवे का उपयोग करके APIs को प्रबंधित करने का तरीका जानेंगे। यह एकीकरण हमें OpenAI द्वारा विकसित एक अत्याधुनिक भाषा मॉडल, ChatGPT की शक्ति का उपयोग करने की अनुमति देगा, जबकि APISIX APIs को प्रबंधित करने के लिए एक मजबूत, स्केलेबल और सुरक्षित तरीका प्रदान करेगा।
OpenAI ChatGPT APIs
OpenAI का ChatGPT API एक शक्तिशाली टूल है जिसका उपयोग हम ChatGPT मॉडल की क्षमताओं को अपने स्वयं के एप्लिकेशन या सेवाओं में एकीकृत करने के लिए कर सकते हैं। यह API हमें REST के माध्यम से संदेशों की एक श्रृंखला भेजने और AI मॉडल द्वारा उत्पन्न संदेश प्राप्त करने की अनुमति देता है। यह चैटबॉट में टेक्स्ट प्रतिक्रियाएं बनाने, कोड पूर्णता, छवियां उत्पन्न करने या संवादात्मक इंटरफेस में प्रश्नों का उत्तर देने के लिए कई APIs प्रदान करता है। इस ट्यूटोरियल में, हम चैट पूर्णता API का उपयोग करेंगे ताकि एक प्रॉम्प्ट के लिए प्रतिक्रियाएं उत्पन्न की जा सकें (मूल रूप से हम कुछ भी पूछ सकते हैं)। ट्यूटोरियल शुरू करने से पहले, आप API को एक्सप्लोर कर सकते हैं ताकि यह समझ सकें कि API कुंजी का उपयोग करके API को प्रमाणित कैसे करें, API अनुरोध पैरामीटर्स और प्रतिक्रिया कैसी दिखती है।
चैट पूर्णता API के लिए एक नमूना cURL अनुरोध इस प्रकार दिखेगा। आप OPENAI_API_KEY को अपनी स्वयं की API कुंजी से बदलें और इसे API को कॉल करते समय Authorization हेडर में रखें।
curl https://api.openai.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "What is Apache APISIX?"}] }'
यहां एक नमूना JSON प्रतिक्रिया है:
{ "id": "chatcmpl-7PtycrYOTJGv4jw8FQPD7LCCw0tOE", "object": "chat.completion", "created": 1686407730, "model": "gpt-3.5-turbo-0301", "usage": { "prompt_tokens": 15, "completion_tokens": 104, "total_tokens": 119 }, "choices": [ { "message": { "role": "assistant", "content": "Apache APISIX is a dynamic, real-time, high-performance API gateway designed to facilitate the management and routing of microservices and APIs. It provides features such as load balancing, rate limiting, authentication, authorization, and traffic control, all of which help to simplify the management of microservices and APIs. Apache APISIX is built on top of the Nginx server and can support high levels of traffic with low latency and high availability. It is open source and released under the Apache 2.0 license." }, "finish_reason": "stop", "index": 0 } ] }
प्रोजेक्ट कोड उदाहरण
ट्यूटोरियल में दो भाग हैं। पहले भाग में Spring Boot एप्लिकेशन को सेट अप करना और एक नया API एंडपॉइंट बनाना शामिल है जो चैट पूर्णता API को प्रोग्रामेटिक रूप से हैंडल कर सकता है। दूसरे भाग में, हम APISIX की सुविधाओं जैसे सुरक्षा और ट्रैफिक कंट्रोल को Spring Boot API में पेश करेंगे। इस ट्यूटोरियल के लिए पूर्ण कोड उदाहरण apisix-java-chatgpt-openaiapi नामक GitHub रिपॉजिटरी पर उपलब्ध हैं।
पूर्वापेक्षाएं
शुरू करने से पहले, सुनिश्चित करें कि आपके पास निम्नलिखित हैं:
- एक OpenAI API कुंजी बनाएं: OpenAI API तक पहुंचने के लिए, आपको एक API कुंजी बनाने की आवश्यकता होगी। आप इसे OpenAI वेबसाइट पर लॉग इन करके और API कुंजी प्रबंधन पृष्ठ पर नेविगेट करके कर सकते हैं।
- APISIX और Spring Boot को चलाने के लिए आपकी मशीन पर Docker इंस्टॉल होना चाहिए।
चरण 1: अपने Spring Boot एप्लिकेशन को सेट अप करना
सबसे पहले, हमें एक नया Spring Boot एप्लिकेशन सेट अप करने की आवश्यकता है। आप Spring Initializr का उपयोग करके आवश्यक निर्भरताओं के साथ एक नया Maven प्रोजेक्ट जेनरेट कर सकते हैं। इस ट्यूटोरियल के लिए, हमें Spring Boot Starter Web निर्भरता की आवश्यकता होगी। ChatGPT API को एकीकृत करने के लिए, हम OpenAI Java क्लाइंट का उपयोग करेंगे। एक ओपन-सोर्स कम्युनिटी लाइब्रेरी है जिसे https://github.com/TheoKanning/openai-java कहा जाता है। यह सेवा क्लासेस प्रदान करता है जो OpenAI के GPT APIs क्लाइंट को Java में बनाता और कॉल करता है। बेशक, आप Spring में अपना स्वयं का इम्प्लीमेंटेशन भी लिख सकते हैं जो OpenAI APIs के साथ इंटरैक्ट करता है। अन्य प्रोग्रामिंग भाषाओं के लिए अन्य क्लाइंट लाइब्रेरीज़ देखें।
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.theokanning.openai-gpt3-java</groupId> <artifactId>service</artifactId> <version>0.12.0</version> </dependency> </dependencies>
चरण 2: एक कंट्रोलर क्लास बनाएं
ChatCompletionController.java क्लास में, आप OpenAI सेवा का उपयोग करके ChatGPT API को अनुरोध भेज सकते हैं।
import com.theokanning.openai.completion.chat.ChatCompletionChoice; import com.theokanning.openai.completion.chat.ChatCompletionRequest; import com.theokanning.openai.completion.chat.ChatMessage; import com.theokanning.openai.completion.chat.ChatMessageRole; import com.theokanning.openai.service.OpenAiService; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; @RestController public class ChatCompletionController { @Value("${openai.model}") private String model; @Value("${openai.api.key}") private String openaiApiKey; @PostMapping("/ai-chat") public String chat(@RequestBody String prompt) { OpenAiService service = new OpenAiService(openaiApiKey); final List<ChatMessage> messages = new ArrayList<>(); final ChatMessage systemMessage = new ChatMessage( ChatMessageRole.USER.value(), prompt); messages.add(systemMessage); ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest .builder() .model(model) .messages(messages) .maxTokens(250) .build(); List<ChatCompletionChoice> choices = service .createChatCompletion(chatCompletionRequest).getChoices(); if (choices == null || choices.isEmpty()) { return "No response"; } return choices.get(0).getMessage().getContent(); } }
चैट API एंडपॉइंट /ai-chat POST अनुरोधों को हैंडल करता है, एक चैट अनुरोध बनाता है, और इसे OpenAI API को भेजता है। फिर, यह API प्रतिक्रिया से पहला संदेश लौटाता है।
चरण 3: एप्लिकेशन गुण परिभाषित करें
अगला, हम API के लिए गुण जैसे model और API कुंजी को application.properties फ़ाइल में प्रदान करते हैं:
openai.model=gpt-3.5-turbo openai.api.key=YOUR_OPENAI_API_TOKEN
चरण 4: Spring Boot ऐप चलाएं
अब हम Application.java को चला सकते हैं और इसे Postman या cURL कमांड के साथ टेस्ट कर सकते हैं।

जैसा कि हम देख सकते हैं, एप्लिकेशन ने हमारे प्रश्न के लिए प्रॉम्प्ट अनुरोध बॉडी में एक प्रतिक्रिया उत्पन्न की।
चरण 5: एक Dockerfile बनाएं
हम अपने Spring Boot एप्लिकेशन को लपेटने के लिए एक Docker कंटेनर का उपयोग करते हैं और इसे docker-compose.yml में अन्य APISIX कंटेनरों के साथ उपयोग करते हैं। ऐसा करने के लिए, हम एक Dockerfile बना सकते हैं ताकि एक JAR बनाया जा सके और इसे एक्ज़ीक्यूट किया जा सके। Spring Boot ऐप को Dockerize करने का ट्यूटोरियल देखें। फिर, सेवा को docker compose yaml फ़ाइल में रजिस्टर करें।
openaiapi: build: openaiapi ports: - "8080:8080" networks: apisix:
चरण 6: Apache APISIX सेट अप करना
APISIX को सेट अप करने के लिए, हम बस docker compose up कमांड चला सकते हैं। क्योंकि हमने पहले से ही docker-compose.yml में सभी आवश्यक सेवाओं को परिभाषित कर दिया है। यह फ़ाइल केवल 2 कंटेनरों को परिभाषित करती है, एक APISIX के लिए और दूसरा Spring Boot एप्लिकेशन के लिए जिसे हमने पिछले चरणों में लागू किया है। इस नमूना प्रोजेक्ट में, हम APISIX को स्टैंडअलोन मोड में चलाते हैं। APISIX के अन्य इंस्टॉलेशन विकल्प और डिप्लॉयमेंट मोड भी हैं। अब APISIX एक अलग सेवा के रूप में localhost:9080 पर चल रहा है और Spring Boot ऐप localhost:8080 पर चल रहा है।
चरण 7: APISIX के साथ API को सुरक्षित करना
एक बार APISIX सेट हो जाने के बाद, हम अपने मौजूदा Spring Boot API /ai-chat में सुरक्षा सुविधाएं जोड़ सकते हैं ताकि केवल अनुमति प्राप्त API उपभोक्ता ही इस API तक पहुंच सकें। APISIX आपकी APIs को सुरक्षित करने के लिए कई प्लगइन्स प्रदान करता है। उदाहरण के लिए, आप सभी अनुरोधों के लिए JWT टोकन की आवश्यकता के लिए jwt-auth प्लगइन का उपयोग कर सकते हैं। यहां apisix.yml फ़ाइल का उपयोग करके एक रूट को अपस्ट्रीम और प्लगइन्स के साथ जोड़ने का एक उदाहरण दिया गया है:
upstreams: - id: 1 type: roundrobin nodes: "openaiapi:8080": 1 routes: - uri: /ask-me-anything upstream_id: 1 plugins: proxy-rewrite: uri: /ai-chat jwt-auth: {} - uri: /login plugins: public-api: uri: /apisix/plugin/jwt/sign consumers: - username: appsmithuser plugins: jwt-auth: key: appsmithuser@gmail.com secret: my-secret-key
जब हम अपस्ट्रीम्स, रूट्स और कंज्यूमर ऑब्जेक्ट्स और रूटिंग नियमों को APISIX कॉन्फ़िग में निर्दिष्ट करते हैं, तो कॉन्फ़िग फ़ाइल Docker में APISIX नोड सेवा शुरू होने के तुरंत बाद मेमोरी में लोड हो जाती है। Apisix समय-समय पर फ़ाइल सामग्री को अपडेट किया गया है या नहीं, इसका पता लगाने का प्रयास करता है, यदि कोई अपडेट है, तो यह स्वचालित रूप से परिवर्तनों को रीलोड करता है।
इस कॉन्फ़िगरेशन के साथ, हमने एक अपस्ट्रीम, दो रूट्स और एक कंज्यूमर ऑब्जेक्ट जोड़ा है। पहले रूट में, /ask-me-anything (जो एक कस्टम URI पथ है, आप वहां कोई भी URI परिभाषित कर सकते हैं) के लिए सभी अनुरोधों में हेडर में Authorization: JWT_TOKEN शामिल होना चाहिए। फिर, APISIX proxy-rewrite प्लगइन की मदद से कस्टम URI पथ को स्वचालित रूप से वास्तविक API /ai-chat में रिव्राइट करता है और अनुरोधों को Spring Boot एप्लिकेशन पर localhost:8080 पर फॉरवर्ड करता है।
यदि आप APISIX रूट को अनुरोध करने का प्रयास करते हैं, तो यह हमारे अनुरोधों को अस्वीकार कर देगा और एक अधिकृत त्रुटि लौटाएगा:
curl -i http://localhost:9080/ask-me-anything -X POST -d ' { "prompt":"What is Apache APISIX?" }'
उपरोक्त अनुरोध का परिणाम:
HTTP/1.1 401 Unauthorized {"message":"Missing JWT token in request"}
दूसरे रूट कॉन्फ़िग में, हमने public-api प्लगइन को सक्षम किया है ताकि नए JWT टोकन साइन करने के लिए एक नया एंडपॉइंट /login एक्सपोज़ किया जा सके। क्योंकि APISIX एक आइडेंटिटी प्रोवाइडर के रूप में कार्य कर सकता है ताकि API उपभोक्ता या क्लाइंट ऐप्स से नए टोकन उत्पन्न और वैलिडेट किए जा सकें। चरण 8 देखें, हम अपने API उपभोक्ता के लिए एक नया टोकन कैसे क्लेम करते हैं।
- uri: /login plugins: public-api: uri: /apisix/plugin/jwt/sign
यदि आपने कॉन्फ़िग फ़ाइल में ध्यान दिया है, तो हमने एक API उपभोक्ता को /ask-me-anything AI-संचालित API का उपयोग करने के लिए रजिस्टर किया है और हमारे उपयोगकर्ता APISIX का उपयोग करके अपने सीक्रेट से JWT टोकन उत्पन्न कर सकते हैं ताकि API तक पहुंच सकें:
consumers: - username: appsmithuser plugins: jwt-auth: key: appsmithuser@gmail.com secret: my-secret-key
चरण 8: एक नया JWT टोकन क्लेम करें
अब हम अपने मौजूदा API उपभोक्ता के लिए कुंजी के साथ एक नया JWT टोकन क्लेम कर सकते हैं:
curl -i http://127.0.0.1:9080/login?key=user-key -i
हमें APISIX से प्रतिक्रिया के रूप में नया टोकन मिलेगा:
Server: APISIX/3.0.0 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJrZXkiOiJ1c2VyLWtleSIsImV4cCI6MTY4NjU5MjE0NH0.4Kn9c2DBYKthyUx824Ah97-z0Eu2Ul9WGO2WB3IfURA
चरण 9: JWT टोकन के साथ API को अनुरोध करें
अंत में, हम पिछले चरण में प्राप्त JWT टोकन को हेडर में रखकर API /ask-me-anything को अनुरोध भेज सकते हैं।
curl -i http://localhost:9080/ask-me-anything -H 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1c2VyLWtleSIsImV4cCI6MTY4NjU5Mjk4N30.lhom9db3XMkcVd86ScpM6s4eP1_YzR-tfmXPckszsYo' -X POST -d ' { "prompt":"What is Apache APISIX?" }'
या Postman का उपयोग करके, हमें AI प्रतिक्रिया मिलेगी लेकिन इस बार प्रतिक्रिया APISIX गेटवे के माध्यम से आएगी:

निष्कर्ष
इस ट्यूटोरियल में, हमने OpenAI ChatGPT API का उपयोग करके प्रॉम्प्ट्स के लिए प्रतिक्रियाएं उत्पन्न करने का तरीका जाना। हमने एक Spring Boot एप्लिकेशन बनाया जो API को कॉल करके प्रॉम्प्ट्स के लिए प्रतिक्रियाएं उत्पन्न करता है। अगला, आप मौजूदा apisix.yml फ़ाइल को अपडेट करके अपने एकीकरण में अतिरिक्त सुविधाएं पेश कर सकते हैं। साथ ही, आप with-frontend नामक ब्रांच को चेक आउट कर सकते हैं और प्रोजेक्ट को चला सकते हैं ताकि Appsmith का उपयोग करके बनाए गए UI इंटरफेस को देख सकें जो APISIX के साथ काम करता है।