TangCheng
2025-02-28 d787e447e95c7b897c2cc9c0e832f8d2e5084934
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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;
    }
 
}