今話題のAIを使ったアプリを作りたい
AI すごいですね。ChatGPT、すごい。
すごいけど、敬語ばっかり使うからなんだかよそよそしい…
敬語を使わないように事前に設定して話してくれるようにしたいなぁ
アプリの概要
- ブラウザからチャットを送信
- 敬語を使わないで!というルールの作成
- OpenAiAPIにリクエストを送信
- レスポンスの表示
サーブレットを使用して作ってみる
サーブレットクラスの作成
TalkToGPTServlet.java
public class TalkToGPTServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
//OpenAiAPIを使用するためのインスタンス作成
private OpenAiService openAiService = new OpenAiService("your-openai-token");
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//処理を記述
}
}
メッセージの取得、作成
TalkToGPTServlet.java
//リクエストパラメータから情報の取得
String name = request.getParameter("name");
String text = request.getParameter("text");
//プロンプトの作成
String prompt = "あなたが話す相手は" + name + "さんです。"
+ "敬語を使わずにフレンドリーに話すようにしてください。";
//プロンプト、送信されたテキストの格納
List<ChatMessage> chatMessages = new ArrayList<>();
chatMessages.add(new ChatMessage(ChatMessageRole.SYSTEM.value(), prompt));
chatMessages.add(new ChatMessage(ChatMessageRole.USER.value(), text));
OpenAiへのリクエストの送信、レスポンスの取得
TalkToGPTServlet.java
//リクエストの作成
ChatCompletionRequest chatCompletionRequest =
ChatCompletionRequest.builder()
.messages(chatMessages)
.model("gpt-3.5-turbo-0301")
.build();
//レスポンスの取得
List<ChatCompletionChoice> choices =
openAiService
.createChatCompletion(chatCompletionRequest)
.getChoices();
//レスポンスを文字列に変換
StringBuilder chatResponse = new StringBuilder();
choices.forEach(choice -> {
chatResponse.append(choice.getMessage().getContent());
});
次ページへ遷移
TalkToGPTServlet.java
request.setAttribute("chatResponse", chatResponse);
RequestDispatcher dispatcher = request.getRequestDispatcher("/result");
dispatcher.forward(request, response);
こんな感じ。
唐突な仕様変更
おっ、できたできた!
………………自作のウェブページ、だっさい なぁ。
CSSとかわからんし、今から勉強するのもめんどくさい。
チャット形式ならdiscordとかでもいいんじゃ?
discordのAPIとかならちょっと触ったことあるしいけるわ!
仕様変更に対応
じゃあ、新しいプロジェクトを作って、discordのAPI導入して、コードのコピペして、ウェブアプリじゃないからrequest、response当たりの処理は消して……う~ん、う~ん
めんどくせぇ!!!
ほぼ同じコードなのになんでコピペばっかりしなきゃならんのや!
やめだやめ、大人しく公式のページつかっとこ。
ということで
次回以降でゆるやかに解決していきます。
次回はこっち。