package com.smtaiserver.smtaiserver.javaai.qwen.agent; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import com.smtaiserver.smtaiserver.core.SMTAIServerRequest; import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord; import com.smtaiserver.smtaiserver.javaai.SMTJavaAIError; import com.smtaiserver.smtaiserver.javaai.jsonflow.core.SMTJsonFlowArgDef; import com.smtaiserver.smtaiserver.javaai.jsonflow.core.SMTJsonFlowManager; import com.smtaiserver.smtaiserver.javaai.llm.core.SMTLLMConnect; import com.smtservlet.util.Json; import com.smtservlet.util.SMTStatic; public class SMTQwenAgentJsonWorkflow extends SMTQwenAgent { private SMTJsonFlowManager _workflowManager; public void initInstance(DBRecord rec) throws Exception { try { // 首先加载workflow对象,以便获取参数列表 _workflowManager = new SMTJsonFlowManager(); Json jsonWorkflow = Json.read(rec.getString("clz_arguments")); _workflowManager.initInstance(jsonWorkflow); } catch(Exception ex) { throw new Exception("init instance workflow agent error : " + rec.getString("agent_id"), ex); } // 用基类初始化对象 super.initInstance(rec); } @Override // 此函数全部重写,不继承父类 protected String getAgentPrompt(DBRecord rec) throws Exception { String agentId = rec.getString("agent_id"); try { Document doc = SMTStatic.convStrToXmlDoc("" + rec.getString("agent_xml") + ""); Element xmlTitle = (Element) doc.selectSingleNode("ROOT/TITLE"); String toolDesc = getToolDesc(xmlTitle); StringBuilder sbPrompt = new StringBuilder(); sbPrompt.append( agentId + "\n" + " 功能:\n" + " " + SMTStatic.indentStrLines(toolDesc, " ") + "\n" + " 参数:\n" + " question:提出的问题\n" ); for(SMTJsonFlowArgDef argDef : _workflowManager.getStartArgs()) { sbPrompt.append(" " + argDef._name + ":" + argDef._desc + "\n"); } sbPrompt.append( " 返回:\n" + " 返回查询结果" ); for(Node nodeMatchRegex : doc.selectNodes("ROOT/MATCHES/REGEX")) { QuestionMatchRegex match = new QuestionMatchRegex(); match.initInstance((Element)nodeMatchRegex); _listQuestionMatch.add(match); } return sbPrompt.toString(); } catch(Exception ex) { throw new Exception("get agent exception : " + agentId, ex); } } @Override public SMTJavaAIError callAgents(String jsonPath, Json jsonArgs, SMTLLMConnect llm, String question, SMTAIServerRequest tranReq) throws Exception { tranReq.setDisableConclusion(true); SMTJavaAIError error = _workflowManager.executeJsonFlow(jsonPath, jsonArgs, llm, question, tranReq); return error; } }