package com.hdl.photovoltaic.other; import android.text.TextUtils; import android.util.Log; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.hdl.linkpm.sdk.HDLLinkPMSdk; import com.hdl.linkpm.sdk.core.exception.HDLException; import com.hdl.linkpm.sdk.user.HDLLinkPMUser; import com.hdl.photovoltaic.bean.PageNumberObject; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.internet.ChatStreamClient; import com.hdl.photovoltaic.internet.HttpClient; import com.hdl.photovoltaic.internet.api.HttpApi; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.ui.bean.ChatInfoBean; import com.hdl.photovoltaic.ui.bean.ChatMessageBean; import com.hdl.photovoltaic.ui.bean.ChatMessageListBean; import com.hdl.photovoltaic.ui.bean.ChatMessagePageBean; import com.hdl.photovoltaic.ui.bean.StaffBean; import com.hdl.photovoltaic.uni.HDLUniMPSDKManager; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; /** * Ai逻辑 */ public class HdlAiLogic { private static volatile HdlAiLogic sHdlAiLogic; private final Gson gson = new Gson(); /** * 获取当前对象 * * @return HdlAccountLogic */ public static synchronized HdlAiLogic getInstance() { if (sHdlAiLogic == null) { synchronized (HdlAiLogic.class) { if (sHdlAiLogic == null) { sHdlAiLogic = new HdlAiLogic(); } } } return sHdlAiLogic; } /** * 获取智能体详情 * * @param cloudCallBeak - */ public void getChatInfo(CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.GET_AGENT_INFO; JsonObject json = new JsonObject(); json.addProperty("agentCode", "xenterra_app_rag"); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { if (TextUtils.isEmpty(jsonStr)) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(new ChatInfoBean()); } } Type type = new TypeToken() { }.getType(); ChatInfoBean chatInfoBean = gson.fromJson(jsonStr, type); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(chatInfoBean); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 获取对话列表 * */ public void chatMessagesList(CloudCallBeak cloudCallBeak) { ChatStreamClient.ChatMode chatMode = new ChatStreamClient.ChatMode(); chatMode.stream = false; chatMode.isGet = true; chatMode.url = "/conversations?" + "user=" + UserConfigManage.getInstance().getUserId();//+"&"+; ChatStreamClient.getInstance().streamChat(chatMode, new ChatStreamClient.ChatCallback() { @Override public void onMessage(String content) { } @Override public void onFullMessage(String fullMessage) { ChatStreamClient.ChatCallback.super.onFullMessage(fullMessage); try { if (TextUtils.isEmpty(fullMessage)) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(new ChatMessagePageBean()); } return; } Type type = new TypeToken() { }.getType(); ChatMessagePageBean chatMessagePageBean = gson.fromJson(fullMessage, type); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(chatMessagePageBean); } } catch (Exception e) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(null); } } } @Override public void onError(String error) { ChatStreamClient.ChatCallback.super.onError(error); if (cloudCallBeak != null) { cloudCallBeak.onFailure(new HDLException(-10201, error)); } } }); } /** * 创建会话消息,AI聊天 * * @param message 用户输入/提问内容。 */ public void chatMessages(String message, CloudCallBeak cloudCallBeak) { if (TextUtils.isEmpty(UserConfigManage.getInstance().getConversationId())) { this.chatMessagesList(new CloudCallBeak() { @Override public void onSuccess(ChatMessagePageBean obj) { if (obj != null && !obj.getData().isEmpty()) { UserConfigManage.getInstance().setConversationId(obj.getData().get(0).getId()); UserConfigManage.getInstance().Save(); } ChatStreamClient.ChatMode chatMode = new ChatStreamClient.ChatMode(); chatMode.data = getJsonObject(message); chatMode.stream = true; chatMode.url = "/chat-messages"; ChatStreamClient.getInstance().streamChat(chatMode, new ChatStreamClient.ChatCallback() { @Override public void onMessage(String content) { try { Type type = new TypeToken() { }.getType(); ChatMessageBean ChatMessageBean = gson.fromJson(content, type); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(ChatMessageBean); } Log.d("AI聊天回复===", gson.toJson(ChatMessageBean)); } catch (Exception e) { // if (cloudCallBeak != null) { // cloudCallBeak.onSuccess(null); // } if (cloudCallBeak != null) { cloudCallBeak.onFailure(new HDLException(-10202, e.getMessage())); } } } @Override public void onComplete() { ChatStreamClient.ChatCallback.super.onComplete(); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(null); } Log.d("AI聊天回复===", "done"); } @Override public void onError(String error) { ChatStreamClient.ChatCallback.super.onError(error); if (cloudCallBeak != null) { cloudCallBeak.onFailure(new HDLException(-10201, error)); } } }); } @Override public void onFailure(HDLException e) { ChatStreamClient.ChatMode chatMode = new ChatStreamClient.ChatMode(); chatMode.data = getJsonObject(message); chatMode.stream = true; chatMode.url = "/chat-messages"; ChatStreamClient.getInstance().streamChat(chatMode, new ChatStreamClient.ChatCallback() { @Override public void onMessage(String content) { try { Type type = new TypeToken() { }.getType(); ChatMessageBean ChatMessageBean = gson.fromJson(content, type); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(ChatMessageBean); } Log.d("AI聊天回复===", gson.toJson(ChatMessageBean)); } catch (Exception e) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(null); } } } @Override public void onComplete() { ChatStreamClient.ChatCallback.super.onComplete(); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(null); } Log.d("AI聊天回复===", "done"); } @Override public void onError(String error) { ChatStreamClient.ChatCallback.super.onError(error); if (cloudCallBeak != null) { cloudCallBeak.onFailure(new HDLException(-10201, error)); } } }); } }); } else { ChatStreamClient.ChatMode chatMode = new ChatStreamClient.ChatMode(); chatMode.data = getJsonObject(message); chatMode.stream = true; chatMode.url = "/chat-messages"; ChatStreamClient.getInstance().streamChat(chatMode, new ChatStreamClient.ChatCallback() { @Override public void onMessage(String content) { try { Type type = new TypeToken() { }.getType(); ChatMessageBean ChatMessageBean = gson.fromJson(content, type); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(ChatMessageBean); } Log.d("AI聊天回复===", gson.toJson(ChatMessageBean)); } catch (Exception e) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(null); } } } @Override public void onComplete() { ChatStreamClient.ChatCallback.super.onComplete(); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(null); } Log.d("AI聊天回复===", "done"); } @Override public void onError(String error) { ChatStreamClient.ChatCallback.super.onError(error); if (cloudCallBeak != null) { cloudCallBeak.onFailure(new HDLException(-10201, error)); } } }); } } /** * 停止响应 * * @param task_id 任务ID */ public void chatMessageStop(String task_id, CloudCallBeak cloudCallBeak) { JsonObject json = new JsonObject(); // if (!TextUtils.isEmpty(task_id)) { // json.addProperty("task_id", task_id); // } json.addProperty("user", UserConfigManage.getInstance().getUserId()); ChatStreamClient.ChatMode chatMode = new ChatStreamClient.ChatMode(); chatMode.data = json; chatMode.stream = false; chatMode.isGet = false; chatMode.url = "/chat-messages/"+task_id+"/stop"; ChatStreamClient.getInstance().streamChat(chatMode, new ChatStreamClient.ChatCallback() { @Override public void onMessage(String content) { } @Override public void onFullMessage(String fullMessage) { //一次性回复 if (cloudCallBeak != null) { // boolean isSuccess = fullMessage.contains("\"success\":true"); boolean isSuccess = fullMessage.contains("\"result\": \"success\""); cloudCallBeak.onSuccess(isSuccess); } } @Override public void onError(String error) { ChatStreamClient.ChatCallback.super.onError(error); if (cloudCallBeak != null) { cloudCallBeak.onFailure(new HDLException(-10201, error)); } } }); } /** * 获取json对象 * * @param message 对话内容 * @return json对象 */ private JsonObject getJsonObject(String message) { JsonObject json = new JsonObject(); JsonObject inputs = new JsonObject(); inputs.addProperty("source", "APP"); inputs.addProperty("platform", "APP"); json.add("inputs", inputs); json.addProperty("query", message); json.addProperty("response_mode", "streaming"); json.addProperty("conversation_id", UserConfigManage.getInstance().getConversationId()); json.addProperty("user", UserConfigManage.getInstance().getUserId()); return json; } }