package com.smtaiserver.smtaiserver.javaai.qwen.agent;
|
|
import java.util.Map.Entry;
|
|
import org.dom4j.Document;
|
import org.dom4j.Element;
|
import org.mozilla.javascript.Context;
|
|
import com.smtaiserver.smtaiserver.core.SMTAIServerRequest;
|
import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord;
|
import com.smtaiserver.smtaiserver.javaai.SMTJavaAIError;
|
import com.smtaiserver.smtaiserver.javaai.ast.ASTDBMap;
|
import com.smtaiserver.smtaiserver.javaai.llm.core.SMTLLMConnect;
|
import com.smtaiserver.smtaiserver.javaai.qwen.agent.script.SMTQwenAgentScriptJet;
|
import com.smtservlet.util.Json;
|
import com.smtservlet.util.SMTStatic;
|
|
public class SMTQwenAgentJavascript extends SMTQwenAgent
|
{
|
protected String _prompt;
|
|
@Override
|
public void initInstance(DBRecord rec) throws Exception
|
{
|
super.initInstance(rec);
|
|
try
|
{
|
Document doc = SMTStatic.convStrToXmlDoc("<ROOT>" + rec.getString("clz_arguments") + "</ROOT>");
|
Element xmlPrompt = (Element)doc.selectSingleNode("ROOT/PROMPT");
|
|
_prompt = xmlPrompt.getText();
|
|
if(this._mapName2Argument.size() > 0)
|
{
|
StringBuilder sbArgs = new StringBuilder();
|
sbArgs.append("其中系统提供的参数是:\n");
|
for(Entry<String, AgentArgument> entry : this._mapName2Argument.entrySet())
|
{
|
sbArgs.append(entry.getKey() + " : " + entry.getValue()._prompt + "\n");
|
}
|
|
_prompt += sbArgs.toString();
|
}
|
|
}
|
catch(Exception ex)
|
{
|
throw new Exception("init mertic agent error : " + this._agentId, ex);
|
}
|
}
|
|
@Override
|
public SMTJavaAIError callAgents(String jsonPath, Json jsonArgs, SMTLLMConnect llm, String question, SMTAIServerRequest tranReq) throws Exception
|
{
|
|
// 分析生成js代码
|
String jsCode = llm.callWithMessage(new String[] {_prompt}, question, tranReq).replace("\r", "");
|
tranReq.traceLLMDebug(jsCode);
|
jsCode = SMTStatic.convLLMAnswerToJavascript(jsCode);
|
//String jsCode = "var arr = testRS(); var l = arr[0]; for(var i in arr){}";
|
|
try(ASTDBMap dbMap = new ASTDBMap())
|
{
|
// 执行脚本
|
SMTQwenAgentScriptJet scriptJet = new SMTQwenAgentScriptJet(jsonArgs, dbMap, tranReq);
|
try
|
{
|
Context cx = scriptJet.entryContext();
|
try
|
{
|
scriptJet.executeScript(cx, jsCode);
|
}
|
finally
|
{
|
Context.exit();
|
}
|
}
|
catch(Exception ex)
|
{
|
throw new Exception("execute js agent error : " + this.getAgentId(), ex);
|
}
|
}
|
return null;
|
}
|
|
}
|