修复一些bug

This commit is contained in:
zhangsan 2024-05-12 17:45:47 +08:00
parent cb924f28b9
commit 621d393bf2
3 changed files with 24 additions and 14 deletions

View File

@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.content.ClipData; import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -58,7 +59,8 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.MessageV
Message message = messages.get(position); Message message = messages.get(position);
if (message.getIsuser() == 1) { // user if (message.getIsuser() == 1) { // user
holder.textViewMessage.setText(message.getContent()); holder.textViewMessage.setText(message.getContent());
if(message.getCite()!=""){ if(message.getCite()!=""&&message.getCite()!=null){
Log.d("test",message.getCite());
holder.messageUser_Cite.setVisibility(View.VISIBLE); holder.messageUser_Cite.setVisibility(View.VISIBLE);
holder.messageUser_Cite.setText(message.getCite()); holder.messageUser_Cite.setText(message.getCite());
} }

View File

@ -133,6 +133,7 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda
private void sendandStoreMessage(String text) { private void sendandStoreMessage(String text) {
clearQuestionsVisibility(); clearQuestionsVisibility();
editTextMessage.setHint("请求中...");
messageList.add(new Message(text, 1, cite)); // User message messageList.add(new Message(text, 1, cite)); // User message
messageAdapter.notifyItemInserted(messageList.size() - 1); messageAdapter.notifyItemInserted(messageList.size() - 1);
editTextMessage.setText(""); editTextMessage.setText("");
@ -163,6 +164,7 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda
}); });
} }
//初始化视图
private void setupViews() { private void setupViews() {
recyclerView = findViewById(R.id.chatRecyclerView); recyclerView = findViewById(R.id.chatRecyclerView);
editTextMessage = findViewById(R.id.inputEditText); editTextMessage = findViewById(R.id.inputEditText);
@ -186,7 +188,12 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda
@Override @Override
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
// 根据输入框是否有文本来禁用或启用按钮 // 根据输入框是否有文本来禁用或启用按钮
buttonSend.setEnabled(s.toString().trim().length() > 0); if(editTextMessage.getHint()=="请求中..."){
buttonSend.setEnabled(true);
}
else{
buttonSend.setEnabled(s.toString().trim().length() > 0);
}
} }
@Override @Override
@ -209,7 +216,9 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda
public void done(List<ChatMessage_bmob> messages, BmobException e) { public void done(List<ChatMessage_bmob> messages, BmobException e) {
if (e == null && messages != null && !messages.isEmpty()) { if (e == null && messages != null && !messages.isEmpty()) {
lastUserQuestion = messages.get(0).getContent(); // 获取最新的用户消息 lastUserQuestion = messages.get(0).getContent(); // 获取最新的用户消息
// 可以在此处更新界面或处理消息 if(messages.get(0).getCite()!=""&&messages.get(0).getCite()!=null){
lastUserQuestion= "请你根据《" + bookName + "》书中的这段内容:" + messages.get(0).getCite() + ",回答我这个提问:" + lastUserQuestion;
}
} else { } else {
Log.e("ChatActivity", "No recent user message found, or error fetching data: " + (e != null ? e.getMessage() : "No details")); 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); textView_Cite.setVisibility(View.GONE);
messageText = "请你根据《" + bookName + "》书中的这段内容:" + cite + ",回答我这个提问:" + messageText; messageText = "请你根据《" + bookName + "》书中的这段内容:" + cite + ",回答我这个提问:" + messageText;
} }
lastUserQuestion = messageText;
OkHttpClient client = new OkHttpClient.Builder() OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS) .connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS) .readTimeout(60, TimeUnit.SECONDS)
@ -363,31 +371,31 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda
.build(); .build();
ChatGPTService service = retrofit.create(ChatGPTService.class); ChatGPTService service = retrofit.create(ChatGPTService.class);
List<ChatRequest.Message> messages = new ArrayList<>(); List<ChatRequest.Message> messages = new ArrayList<>();
String prompt = "好!我是你的阅读助手。请确保你的回答准确而精炼。"; String prompt = "是一个专业的阅读助手。请确保你的回答准确而精炼。当用户想要提问其他非书籍相关内容时,你应该友好礼貌地将其引导回《"+bookName+"》的讨论中";
if (messageText.equals("请告诉我更多内容。") && !lastUserQuestion.isEmpty()) { if (messageText.equals("请告诉我更多内容。") && !lastUserQuestion.isEmpty()) {
// 特别关注用户的上一个问题 // 特别关注用户的上一个问题
prompt += "之前问了关于《" + bookName + "》的'" + lastUserQuestion + "'。关于这个问题,你需要更多的哪方面信息"; prompt += "用户之前问了关于《" + bookName + "》的'" + lastUserQuestion + "'。关于这个问题,请你对你原先的回答进行补充说明";
} else if (!lastUserQuestion.isEmpty()) { } else if (!lastUserQuestion.isEmpty()) {
// 处理正常的用户问题 // 处理正常的用户问题
prompt += "关于你之前的问题" + lastUserQuestion + ",你需要我提供更多的信息吗?或者,你有其他关于《" + bookName + "》的新问题吗?"; prompt += "用户提出的上一个问题是" + lastUserQuestion + ",你可以有个了解,准备应对用户提出的新问题。";
} else { } else {
// 没有历史问题的情况 // 没有历史问题的情况
prompt += "我可以帮助你解答关于《" + bookName + "》的各种问题,比如内容概述、作者信息、主要主题和角色分析等。请随时向我提问,现在,你有什么问题吗?"; prompt += "我可以帮助你解答关于《" + bookName + "》的各种问题,比如内容概述、作者信息、主要主题和角色分析等。请随时向我提问,现在,你有什么问题吗?";
} }
messages.add(new ChatRequest.Message("system", prompt)); messages.add(new ChatRequest.Message("system", prompt));
messages.addAll(loadMessagesFromDatabase(bookName, userid)); messages.addAll(loadMessagesFromDatabase(bookName, userid));
messages.add(new ChatRequest.Message("user", messageText)); // 添加用户消息 messages.add(new ChatRequest.Message("user", messageText+"。你的回答不应超过250个字。")); // 添加用户消息
Log.d("zytest", messageText);
ChatRequest request = new ChatRequest(messages); // 使用消息列表创建请求 ChatRequest request = new ChatRequest(messages); // 使用消息列表创建请求
request.setModel("gpt-4-turbo"); // 根据需要选择不同的模型 request.setModel("gpt-4-turbo"); // 根据需要选择不同的模型
request.setMaxTokens(50); // 设置最大 token 根据需要调整 request.setMaxTokens(50); // 设置最大 token 根据需要调整
request.setTemperature(0.5); // 设置适当的温度 request.setTemperature(0.5); // 设置适当的温度
currentCall = service.postMessage(request); currentCall = service.postMessage(request);
String finalMessageText = messageText;
currentCall.enqueue(new Callback<ChatResponse>() { currentCall.enqueue(new Callback<ChatResponse>() {
@Override @Override
public void onResponse(Call<ChatResponse> call, Response<ChatResponse> response) { public void onResponse(Call<ChatResponse> call, Response<ChatResponse> response) {
lastUserQuestion= finalMessageText;
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
ChatResponse chatResponse = response.body(); ChatResponse chatResponse = response.body();
if (chatResponse.choices != null && !chatResponse.choices.isEmpty()) { 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 响应中提取的内容 String reply = message.content; // 这是从 GPT-3.5 响应中提取的内容
runOnUiThread(() -> { runOnUiThread(() -> {
cite = ""; cite = "";
editTextMessage.setHint("与阅读小助手交谈...");
messageList.add(new Message(reply, 0, "")); messageList.add(new Message(reply, 0, ""));
messageAdapter.notifyDataSetChanged(); messageAdapter.notifyDataSetChanged();
moveToNewest(); moveToNewest();
@ -418,6 +427,7 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda
public void onFailure(Call<ChatResponse> call, Throwable t) { public void onFailure(Call<ChatResponse> call, Throwable t) {
if(isStop==true){ if(isStop==true){
buttonSend.setImageResource(R.drawable.ic_send); buttonSend.setImageResource(R.drawable.ic_send);
editTextMessage.setHint("与阅读小助手交谈...");
isStop=false; isStop=false;
} }
else { else {
@ -457,9 +467,7 @@ public class ChatWithGptActivity extends AppCompatActivity implements MessageAda
//回调函数重新生成回答 //回调函数重新生成回答
@Override @Override
public void onRegenerateClick(int position) { public void onRegenerateClick(int position) {
questionView1.setVisibility(View.GONE); clearQuestionsVisibility();
questionView2.setVisibility(View.GONE);
questionView3.setVisibility(View.GONE);
BmobQuery<ChatMessage_bmob> bmobQuery = new BmobQuery<>(); BmobQuery<ChatMessage_bmob> bmobQuery = new BmobQuery<>();
bmobQuery.addWhereEqualTo("relatedBook", bookName); bmobQuery.addWhereEqualTo("relatedBook", bookName);
bmobQuery.addWhereEqualTo("userid", userid); bmobQuery.addWhereEqualTo("userid", userid);

View File

@ -95,7 +95,7 @@
android:id="@+id/chatbot_title" android:id="@+id/chatbot_title"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="6dp" android:layout_margin="6dp"
android:gravity="center" android:gravity="center"
android:text="书名" android:text="书名"
android:textSize="22sp" android:textSize="22sp"