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
package com.smtaiserver.smtaiserver.javaai.qwen.agent;
 
import java.util.ArrayList;
import java.util.List;
 
import com.smtaiserver.smtaiserver.core.SMTAIServerRequest;
import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord;
import com.smtaiserver.smtaiserver.javaai.SMTJavaAIError;
import com.smtaiserver.smtaiserver.javaai.llm.core.SMTLLMConnect;
import com.smtservlet.util.Json;
import com.smtservlet.util.SMTJsonWriter;
 
public class SMTQwenAgentKnowledgeVector extends SMTQwenAgent
{
    @Override
    public void initInstance(DBRecord rec) throws Exception
    {
        super.initInstance(rec);
        
    }
    
    @Override
    public SMTJavaAIError callAgents(String jsonPath, Json jsonArgs, SMTLLMConnect llm, String question, SMTAIServerRequest tranReq) throws Exception
    {
        SMTJsonWriter jsonWrResult = tranReq.getResultJsonWr();
        
        // 如果当前不是提问,则直接llm回答
        if(!jsonArgs.safeGetBoolean("is_question", true))
        {
            String answer = llm.callWithMessage(null, question, tranReq);
            jsonWrResult.addKeyValue("json_ok", true);
            jsonWrResult.addKeyValue("answer_type", "knowledge");
            jsonWrResult.beginArray("knowledge");
            {
                jsonWrResult.beginMap(null);
                jsonWrResult.addKeyValue("answer", answer);
                jsonWrResult.endMap();
            }
            jsonWrResult.endArray();
            return null;
        }
        
        jsonWrResult.addKeyValue("answer_type", "knowledge");
        jsonWrResult.beginArray("knowledge");
        {
            jsonWrResult.beginMap(null);
            {
                long tick = System.currentTimeMillis();
                List<String[]> contexts = new ArrayList<>();
                String result = llm.callWithVector(question, tranReq.getRawQuestion(), null, 90, tranReq, contexts);
                tranReq.traceLLMDebug("executeCmd_QUERY回答问题:[" + ((double)(System.currentTimeMillis() - tick) / 1000) + "秒] [\n" + result + "\n]");
                jsonWrResult.addKeyValue("answer", result);
                jsonWrResult.beginArray("contexts");
                for(String[] context : contexts)
                {
                    jsonWrResult.beginMap(null);
                    {
                        jsonWrResult.addKeyValue("page_content", context[1]);
                        jsonWrResult.beginMap("metadata");
                        {
                            jsonWrResult.addKeyValue("Title", context[0]);
                        }
                        jsonWrResult.endMap();
                    }
                    jsonWrResult.endMap();
                }
                jsonWrResult.endArray();
            }
            jsonWrResult.endMap();
        }
        jsonWrResult.endArray();
 
        return null;
    }
 
}