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; import com.smtservlet.util.SMTStatic; public class SMTQwenAgentKnowlgFile extends SMTQwenAgent { protected int _vectorScope; @Override public void initInstance(DBRecord rec) throws Exception { _inSupervisor = !("Y".equals(rec.getString("inner_call"))); _agentTitle = rec.getString("knowlg_title"); // 不要调用基类的initInstance,因为它是从knowlg_name_list过来的表 _agentId = rec.getString("knowlg_id"); _agentType = "knowledge"; _agentPrompt = _agentId + "\n" + " 功能:\n" + " " + SMTStatic.indentStrLines(rec.getString("knowlg_prompt"), " ") + "\n" + " 参数:\n" + " question:提出的问题\n" ; _agentGroup = rec.getString("agent_group"); if(rec.getFieldMap().containsKey("GROUP_TYPE")) _agentGroupType = rec.getString("group_type"); else _agentGroupType = ""; Integer vectorScope = rec.getInteger("vector_scope"); if(vectorScope != null) _vectorScope = vectorScope; else _vectorScope = 90; } @Override public SMTJavaAIError callAgents(String jsonPath, Json jsonArgs, SMTLLMConnect llm, String question, SMTAIServerRequest tranReq) throws Exception { SMTJsonWriter jsonWrResult = tranReq.getResultJsonWr(); String vectorSQL = "SELECT file_name as vector_title, vector_text as vector_message, ?::vector <=> vector_value AS ratio \r\n" + "FROM ai_doc.doc_file_vector A \r\n" + "INNER JOIN ai_doc.doc_file_list B \r\n" + "ON A.file_id = B.file_id\r\n" + "INNER JOIN ai_doc.knowlg_file_list c\r\n" + "ON C.knowlg_file_id=B.file_id\r\n" + "AND C.knowlg_id='" + _agentId + "'\r\n" + "ORDER BY ratio LIMIT 4" ; 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(), vectorSQL, _vectorScope, 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; } }