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<String[]> 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;
|
}
|
|
}
|