مدیریت برنامه جاوا مبتنی بر هوش مصنوعی با مدیریت API

در این مقاله، ما بررسی نحوه ادغام APIهای ChatGPT OpenAI با یک برنامه Spring Boot و مدیریت APIها با استفاده از Apache APISIX، دروازه API منبع باز. این ادغام به ما امکان می دهد از قدرت ChatGPT، یک مدل زبان پیشرفته که توسط OpenAI توسعه یافته است، در برنامه Spring Boot خود استفاده کنیم، در حالی که APISIX راهی قوی، مقیاس پذیر و ایمن برای مدیریت API ها ارائه می دهد.
APIهای OpenAI ChatGPT
ChatGPT API OpenAI یک ابزار قدرتمند است که می توانیم از آن استفاده کنیم قابلیت های مدل ChatGPT را یکپارچه کنید به برنامه ها یا خدمات خودمان. API به ما این امکان را می دهد که یک سری پیام ارسال کنیم و در پاسخ از طریق REST یک پیام تولید شده توسط هوش مصنوعی دریافت کنیم. مجموعهای از APIها را برای ایجاد پاسخهای متنی در ربات چت، تکمیل کد، تولید تصاویر یا پاسخ به سؤالات در یک رابط مکالمه ارائه میدهد. در این آموزش، ما از API تکمیل چت برای ایجاد پاسخ به یک اعلان استفاده خواهیم کرد (اساساً ما می توانیم هر چیزی بپرسیم). قبل از شروع آموزش، میتوانید API را بررسی کنید تا درک درستی از نحوه احراز هویت در API با استفاده از کلیدهای API، نحوه ظاهر پارامترهای درخواست API و پاسخ داشته باشید.
نمونه درخواست cURL برای تکمیل API چت به این شکل است. شما جایگزین کنید OPENAI_API_KEY
با کلید API خود و قرار دادن آن در مجوز هدر هنگام فراخوانی API.
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 ما برای تکمیل API را به صورت برنامهریزی انجام دهد. در قسمت دوم به معرفی ویژگی های APISIX مانند امنیت و کنترل ترافیک به Spring Boot API می پردازیم. نمونه کدهای کامل این آموزش در مخزن GitHub به نام apisix-java-chatgpt-openaiapi موجود است.
پیش نیازها
قبل از شروع، مطمئن شوید که موارد زیر را دارید:
- ایجاد یک کلید API OpenAI: برای دسترسی به OpenAI API، باید یک کلید API ایجاد کنید. می توانید این کار را با ورود به وب سایت OpenAI و رفتن به صفحه مدیریت کلید API انجام دهید.
-
Docker برای اجرای APISIX و Spring Boot روی دستگاه شما نصب شده است.
مرحله 1: برنامه Spring Boot خود را راه اندازی کنید
ابتدا باید یک برنامه Spring Boot جدید راه اندازی کنیم. می توانید از Spring Initializr برای ایجاد یک پروژه جدید Maven با وابستگی های لازم استفاده کنید. برای این آموزش، به وابستگی Spring Boot Starter Web نیاز داریم. برای ادغام ChatGPT API، از OpenAI Java Client استفاده می کنیم. یک کتابخانه جاوا جامعه منبع باز وجود دارد. کلاسهای خدماتی را ارائه میکند که مشتری APIهای GPT OpenAI را در جاوا ایجاد و فراخوانی میکند. البته، میتوانید پیادهسازی خود را در Spring بنویسید که با APIهای OpenAI نیز تعامل داشته باشد. برای زبان های برنامه نویسی مختلف به کتابخانه های مشتری دیگر مراجعه کنید.
<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: یک کلاس Controller ایجاد کنید
در کلاس 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();
}
}
نقطه پایانی Chat API /ai-chat
رسیدگی به درخواستهای POST، یک درخواست چت ایجاد میکند و آن را به OpenAI API ارسال میکند. سپس، اولین پیام از پاسخ API را برمی گرداند.
مرحله 3: ویژگی های برنامه را تعریف کنید
در مرحله بعد، ویژگی هایی را برای API مانند ارائه می دهیم model
و API key
در کاربرد.خواص فایل:
openai.model=gpt-3.5-turbo
openai.api.key=YOUR_OPENAI_API_TOKEN
مرحله 4: برنامه Spring Boot را اجرا کنید
اکنون می توانیم Application.java را اجرا کرده و با Postman یا دستور cURL آن را آزمایش کنیم.
همانطور که می بینیم، برنامه پاسخی به سوال ما در بدنه درخواست سریع ایجاد کرد.
مرحله 5: یک Dockerfile ایجاد کنید
ما از یک ظرف Docker برای بسته بندی برنامه Spring Boot خود استفاده می کنیم و از آن همراه با سایر کانتینرهای APISIX در docker-compose.yml استفاده می کنیم. برای انجام این کار، می توانیم یک Dockerfile ایجاد کنیم تا یک JAR بسازیم و آن را اجرا کنیم. نحوه Dockerize کردن آموزش برنامه Spring Boot را ببینید. سپس سرویس را در فایل docker compose yaml ثبت کنید.
openaiapi:
build: openaiapi
ports:
- "8080:8080"
networks:
apisix:
مرحله 6: راه اندازی Apache APISIX
برای راه اندازی APISIX، به سادگی می توانیم اجرا کنیم docker compose up
فرمان زیرا ما قبلاً تمام سرویس های لازم را در docker-compose.yml تعریف کرده ایم. این فایل تنها 2 کانتینر یکی برای APISIX و دیگری برای برنامه بوت Spring که در مراحل قبل پیاده سازی کردیم، تعریف می کند. در این پروژه نمونه، ما APISIX را در حالت مستقل اجرا می کنیم. گزینه های نصب APISIX و حالت های استقرار دیگری نیز وجود دارد. اکنون APISIX به عنوان یک سرویس جداگانه در حال اجرا است localhost:9080
و برنامه Spring Boot روشن است localhost:8080
مرحله 7: ایمن سازی API با APISIX
هنگامی که APISIX راه اندازی شد، می توانیم ویژگی های امنیتی را به API بوت Spring موجود خود اضافه کنیم /ai-chat
به طوری که فقط مصرف کنندگان API مجاز می توانند به این API دسترسی داشته باشند. APISIX چندین پلاگین برای ایمن سازی API های شما ارائه می دهد. به عنوان مثال، میتوانید از افزونه jwt-auth استفاده کنید تا برای همه درخواستها به یک توکن JWT نیاز داشته باشید. در اینجا مثالی از نحوه اضافه کردن یک مسیر با upstream و افزونه ها با استفاده از 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
پس از تعیین upstreams، مسیرها، و اشیاء مصرف کننده و قوانین مسیریابی در پیکربندی APISIX، فایل پیکربندی بلافاصله پس از شروع سرویس گره APISIX در Docker در حافظه بارگذاری می شود. Apisix به صورت دورهای سعی میکند تشخیص دهد که آیا محتوای فایل بهروزرسانی شده است یا خیر، در صورت بروز رسانی، آن را تشخیص دهد بارگذاری مجدد به طور خودکار تغییر می کند.
با این پیکربندی، یک بالادست، دو مسیر و یک شی مصرف کننده اضافه کردیم. در مسیر اول، تمام درخواست ها به /ask-me-anything
(که یک مسیر URI سفارشی است، می توانید هر URI را در آنجا تعریف کنید) باید شامل این باشد Authorization: JWT_TOKEN
در سربرگ سپس، APISIX مسیر 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 را فعال کردیم تا یک نقطه پایانی جدید را نشان دهد /login
برای امضای توکن های جدید JWT. زیرا APISIX میتواند به عنوان یک ارائهدهنده هویت برای تولید و تأیید یک توکن جدید از مصرفکننده API یا برنامههای مشتری عمل کند. دیدن مرحله 8، چگونه ما یک توکن جدید برای مصرف کننده API خود ادعا می کنیم.
- uri: /login
plugins:
public-api:
uri: /apisix/plugin/jwt/sign
اگر در همان فایل پیکربندی متوجه شدید، ما یک مصرف کننده API را برای استفاده ثبت کرده ایم /ask-me-anything
API مبتنی بر هوش مصنوعی و کاربران ما میتوانند APISIX را با استفاده از راز خود برای تولید یک توکن JWT برای دسترسی به API ادعا کنند:
consumers:
- username: appsmithuser
plugins:
jwt-auth:
key: appsmithuser@gmail.com
secret: my-secret-key
مرحله 8: یک توکن JWT جدید درخواست کنید
اکنون میتوانیم یک توکن JWT جدید برای مصرفکننده API موجود خود با کلید زیر ادعا کنیم:
curl -i http://127.0.0.1:9080/login?key=user-key -i
ما توکن جدید را به عنوان پاسخی از APISIX دریافت خواهیم کرد:
Server: APISIX/3.0.0
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJrZXkiOiJ1c2VyLWtleSIsImV4cCI6MTY4NjU5MjE0NH0.4Kn9c2DBYKthyUx824Ah97-z0Eu2Ul9WGO2WB3IfURA
مرحله 9: API را با توکن JWT درخواست کنید
در نهایت می توانیم درخواستی را به API ارسال کنیم /ask-me-anything
با توکن JWT در هدر که در مرحله قبل به دست آوردیم.
curl -i http://localhost:9080/ask-me-anything -H 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1c2VyLWtleSIsImV4cCI6MTY4NjU5Mjk4N30.lhom9db3XMkcVd86ScpM6s4eP1_YzR-tfmXPckszsYo' -X POST -d '
{
"prompt":"What is Apache APISIX?"
}'
یا با استفاده از Postman، پاسخ هوش مصنوعی را دریافت خواهیم کرد، اما این بار پاسخ از طریق APISIX Gateway می آید:
نتیجه
در این آموزش، OpenAI ChatGPT API را بررسی کردیم تا پاسخهایی به درخواستها ایجاد کنیم. ما یک برنامه Spring Boot ایجاد کردیم که API را برای ایجاد پاسخ به درخواستها فراخوانی میکند. در مرحله بعد، می توانید با به روز رسانی فایل apisix.yml موجود، ویژگی های اضافی را به ادغام خود معرفی کنید. همچنین، نام شعبه ای به نام with-frontend را بررسی کنید و پروژه را اجرا کنید تا رابط UI ساخته شده با استفاده از Appsmith که با APISIX کار می کند را ببینید.
منابع مرتبط
محتوای پیشنهادی
انجمن
🙋 به انجمن آپاچی APISIX بپیوندید
🐦 ما را در توییتر دنبال کنید
📝 ما را در Slack پیدا کنید
💁 صفحه نحوه مشارکت
درباره نویسنده
از وبلاگ من دیدن کنید: www.iambobur.com