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("<ROOT>" + rec.getString("agent_xml") + "</ROOT>");
|
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;
|
}
|
|
}
|