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("" + rec.getString("clz_arguments") + ""); Element xmlPrompt = (Element)doc.selectSingleNode("ROOT/PROMPT"); _prompt = xmlPrompt.getText(); if(this._mapName2Argument.size() > 0) { StringBuilder sbArgs = new StringBuilder(); sbArgs.append("其中系统提供的参数是:\n"); for(Entry 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; } }