From 621d393bf2dcc7d52e7f6577f4ea961be158a0e5 Mon Sep 17 00:00:00 2001 From: zhangsan <646228430@qq.com> Date: Sun, 12 May 2024 17:45:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9Bbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../txtreaderlib/adapter/MessageAdapter.java | 4 ++- .../txtreaderlib/ui/ChatWithGptActivity.java | 32 ++++++++++++------- .../main/res/layout/activity_chatwithgpt.xml | 2 +- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/hwtxtreaderlib/src/main/java/com/bifan/txtreaderlib/adapter/MessageAdapter.java b/hwtxtreaderlib/src/main/java/com/bifan/txtreaderlib/adapter/MessageAdapter.java index 13e171b..c364d4d 100644 --- a/hwtxtreaderlib/src/main/java/com/bifan/txtreaderlib/adapter/MessageAdapter.java +++ b/hwtxtreaderlib/src/main/java/com/bifan/txtreaderlib/adapter/MessageAdapter.java @@ -4,6 +4,7 @@ import android.annotation.SuppressLint; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -58,7 +59,8 @@ public class MessageAdapter extends RecyclerView.Adapter 0); + if(editTextMessage.getHint()=="请求中..."){ + buttonSend.setEnabled(true); + } + else{ + buttonSend.setEnabled(s.toString().trim().length() > 0); + } } @Override @@ -209,7 +216,9 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda public void done(List messages, BmobException e) { if (e == null && messages != null && !messages.isEmpty()) { lastUserQuestion = messages.get(0).getContent(); // 获取最新的用户消息 - // 可以在此处更新界面或处理消息 + if(messages.get(0).getCite()!=""&&messages.get(0).getCite()!=null){ + lastUserQuestion= "请你根据《" + bookName + "》书中的这段内容:" + messages.get(0).getCite() + ",回答我这个提问:" + lastUserQuestion; + } } else { Log.e("ChatActivity", "No recent user message found, or error fetching data: " + (e != null ? e.getMessage() : "No details")); } @@ -350,7 +359,6 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda textView_Cite.setVisibility(View.GONE); messageText = "请你根据《" + bookName + "》书中的这段内容:" + cite + ",回答我这个提问:" + messageText; } - lastUserQuestion = messageText; OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(60, TimeUnit.SECONDS) .readTimeout(60, TimeUnit.SECONDS) @@ -363,31 +371,31 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda .build(); ChatGPTService service = retrofit.create(ChatGPTService.class); List messages = new ArrayList<>(); - String prompt = "你好!我是你的阅读助手。请确保你的回答准确而精炼。"; + String prompt = "你是一个专业的阅读助手。请确保你的回答准确而精炼。当用户想要提问其他非书籍相关内容时,你应该友好礼貌地将其引导回《"+bookName+"》的讨论中"; if (messageText.equals("请告诉我更多内容。") && !lastUserQuestion.isEmpty()) { // 特别关注用户的上一个问题 - prompt += "你之前问了关于《" + bookName + "》的'" + lastUserQuestion + "'。关于这个问题,你需要更多的哪方面信息?"; + prompt += "用户之前问了关于《" + bookName + "》的'" + lastUserQuestion + "'。关于这个问题,请你对你原先的回答进行补充说明?"; } else if (!lastUserQuestion.isEmpty()) { // 处理正常的用户问题 - prompt += "关于你之前的问题:" + lastUserQuestion + ",你需要我提供更多的信息吗?或者,你有其他关于《" + bookName + "》的新问题吗?"; + prompt += "用户提出的上一个问题是:" + lastUserQuestion + ",你可以有个了解,准备应对用户提出的新问题。"; } else { // 没有历史问题的情况 prompt += "我可以帮助你解答关于《" + bookName + "》的各种问题,比如内容概述、作者信息、主要主题和角色分析等。请随时向我提问,现在,你有什么问题吗?"; } messages.add(new ChatRequest.Message("system", prompt)); messages.addAll(loadMessagesFromDatabase(bookName, userid)); - messages.add(new ChatRequest.Message("user", messageText)); // 添加用户消息 - Log.d("zytest", messageText); + messages.add(new ChatRequest.Message("user", messageText+"。你的回答不应超过250个字。")); // 添加用户消息 ChatRequest request = new ChatRequest(messages); // 使用消息列表创建请求 request.setModel("gpt-4-turbo"); // 根据需要选择不同的模型 request.setMaxTokens(50); // 设置最大 token 数,根据需要调整 request.setTemperature(0.5); // 设置适当的温度 currentCall = service.postMessage(request); + String finalMessageText = messageText; currentCall.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - + lastUserQuestion= finalMessageText; if (response.isSuccessful() && response.body() != null) { ChatResponse chatResponse = response.body(); if (chatResponse.choices != null && !chatResponse.choices.isEmpty()) { @@ -395,6 +403,7 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda String reply = message.content; // 这是从 GPT-3.5 响应中提取的内容 runOnUiThread(() -> { cite = ""; + editTextMessage.setHint("与阅读小助手交谈..."); messageList.add(new Message(reply, 0, "")); messageAdapter.notifyDataSetChanged(); moveToNewest(); @@ -418,6 +427,7 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda public void onFailure(Call call, Throwable t) { if(isStop==true){ buttonSend.setImageResource(R.drawable.ic_send); + editTextMessage.setHint("与阅读小助手交谈..."); isStop=false; } else { @@ -457,9 +467,7 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda //回调函数,重新生成回答 @Override public void onRegenerateClick(int position) { - questionView1.setVisibility(View.GONE); - questionView2.setVisibility(View.GONE); - questionView3.setVisibility(View.GONE); + clearQuestionsVisibility(); BmobQuery bmobQuery = new BmobQuery<>(); bmobQuery.addWhereEqualTo("relatedBook", bookName); bmobQuery.addWhereEqualTo("userid", userid); diff --git a/hwtxtreaderlib/src/main/res/layout/activity_chatwithgpt.xml b/hwtxtreaderlib/src/main/res/layout/activity_chatwithgpt.xml index 84d510c..a20a5af 100644 --- a/hwtxtreaderlib/src/main/res/layout/activity_chatwithgpt.xml +++ b/hwtxtreaderlib/src/main/res/layout/activity_chatwithgpt.xml @@ -95,7 +95,7 @@ android:id="@+id/chatbot_title" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="6dp" + android:layout_margin="6dp" android:gravity="center" android:text="书名" android:textSize="22sp"