package com.smtaiserver.smtaiserver.javaai.qwen.agent; import java.util.ArrayList; import java.util.List; import com.smtaiserver.smtaiserver.core.SMTAIServerRequest; import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord; import com.smtaiserver.smtaiserver.javaai.SMTJavaAIError; import com.smtaiserver.smtaiserver.javaai.llm.core.SMTLLMConnect; import com.smtservlet.util.Json; import com.smtservlet.util.SMTJsonWriter; public class SMTQwenAgentKnowledgeVector extends SMTQwenAgent { @Override public void initInstance(DBRecord rec) throws Exception { super.initInstance(rec); } @Override public SMTJavaAIError callAgents(String jsonPath, Json jsonArgs, SMTLLMConnect llm, String question, SMTAIServerRequest tranReq) throws Exception { SMTJsonWriter jsonWrResult = tranReq.getResultJsonWr(); // 如果当前不是提问,则直接llm回答 if(!jsonArgs.safeGetBoolean("is_question", true)) { String answer = llm.callWithMessage(null, question, tranReq); jsonWrResult.addKeyValue("json_ok", true); jsonWrResult.addKeyValue("answer_type", "knowledge"); jsonWrResult.beginArray("knowledge"); { jsonWrResult.beginMap(null); jsonWrResult.addKeyValue("answer", answer); jsonWrResult.endMap(); } jsonWrResult.endArray(); return null; } jsonWrResult.addKeyValue("answer_type", "knowledge"); jsonWrResult.beginArray("knowledge"); { jsonWrResult.beginMap(null); { long tick = System.currentTimeMillis(); List contexts = new ArrayList<>(); String result = llm.callWithVector(question, tranReq.getRawQuestion(), null, 90, tranReq, contexts); tranReq.traceLLMDebug("executeCmd_QUERY回答问题:[" + ((double)(System.currentTimeMillis() - tick) / 1000) + "秒] [\n" + result + "\n]"); jsonWrResult.addKeyValue("answer", result); jsonWrResult.beginArray("contexts"); for(String[] context : contexts) { jsonWrResult.beginMap(null); { jsonWrResult.addKeyValue("page_content", context[1]); jsonWrResult.beginMap("metadata"); { jsonWrResult.addKeyValue("Title", context[0]); } jsonWrResult.endMap(); } jsonWrResult.endMap(); } jsonWrResult.endArray(); } jsonWrResult.endMap(); } jsonWrResult.endArray(); return null; } }