zhangjinyang
2025-05-14 3331feb4c2ed6674ffa6f40e8249dcad5e594164
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package tech.aiflowy.ai.utils;
 
import com.agentsflex.core.chain.Chain;
import com.agentsflex.core.document.Document;
import com.agentsflex.core.llm.Llm;
import com.agentsflex.core.store.DocumentStore;
import com.agentsflex.core.store.SearchWrapper;
import com.agentsflex.core.store.StoreOptions;
import dev.tinyflow.core.Tinyflow;
import dev.tinyflow.core.knowledge.Knowledge;
import dev.tinyflow.core.node.KnowledgeNode;
import dev.tinyflow.core.parser.ChainParser;
import dev.tinyflow.core.provider.KnowledgeProvider;
import dev.tinyflow.core.provider.LlmProvider;
import dev.tinyflow.core.provider.SearchEngineProvider;
import dev.tinyflow.core.searchengine.SearchEngine;
import org.springframework.stereotype.Component;
import tech.aiflowy.ai.config.BochaaiProps;
import tech.aiflowy.ai.entity.AiKnowledge;
import tech.aiflowy.ai.entity.AiLlm;
import tech.aiflowy.ai.node.*;
import tech.aiflowy.ai.provider.BochaaiSearchEngine;
import tech.aiflowy.ai.service.AiKnowledgeService;
import tech.aiflowy.ai.service.AiLlmService;
import tech.aiflowy.common.filestorage.FileStorageService;
 
import javax.annotation.Resource;
import java.math.BigInteger;
import java.util.List;
 
@Component
public class TinyFlowConfigService {
 
    @Resource
    private ReaderManager readerManager;
    @Resource(name = "default")
    private FileStorageService storageService;
    @Resource
    private AiLlmService aiLlmService;
    @Resource
    private BochaaiProps bochaaiProps;
    @Resource
    private AiKnowledgeService aiKnowledgeService;
 
    public void initProvidersAndNodeParsers(Tinyflow tinyflow) {
        setExtraNodeParser(tinyflow);
        setSearchEngineProvider(tinyflow);
        setLlmProvider(tinyflow);
        setKnowledgeProvider(tinyflow);
    }
 
    public void setExtraNodeParser(Tinyflow tinyflow) {
 
        ReadDocService readService = readerManager.getReader();
        // 文档解析
        DocNodeParser docNodeParser = new DocNodeParser(readService);
        // 文件生成
        MakeFileNodeParser makeFileNodeParser = new MakeFileNodeParser(storageService);
        // 插件
        PluginToolNodeParser pluginToolNodeParser  = new PluginToolNodeParser();
 
        ChainParser chainParser = tinyflow.getChainParser();
        chainParser.addNodeParser(docNodeParser.getNodeName(), docNodeParser);
        chainParser.addNodeParser(makeFileNodeParser.getNodeName(), makeFileNodeParser);
        chainParser.addNodeParser(pluginToolNodeParser.getNodeName(), pluginToolNodeParser);
    }
 
    public void setSearchEngineProvider(Tinyflow tinyflow) {
        tinyflow.setSearchEngineProvider(new SearchEngineProvider() {
            @Override
            public SearchEngine getSearchEngine(Object id) {
                BochaaiSearchEngine searchEngine = new BochaaiSearchEngine();
                searchEngine.setApiKey(bochaaiProps.getApiKey());
                return searchEngine;
            }
        });
    }
 
    public void setLlmProvider(Tinyflow tinyflow) {
        tinyflow.setLlmProvider(new LlmProvider() {
            @Override
            public Llm getLlm(Object id) {
                AiLlm aiLlm = aiLlmService.getById(new BigInteger(id.toString()));
                return aiLlm.toLlm();
            }
        });
    }
 
    public void setKnowledgeProvider(Tinyflow tinyflow) {
        tinyflow.setKnowledgeProvider(new KnowledgeProvider() {
            @Override
            public Knowledge getKnowledge(Object id) {
                AiKnowledge aiKnowledge = aiKnowledgeService.getById(new BigInteger(id.toString()));
                return new Knowledge() {
                    @Override
                    public List<Document> search(String keyword, int limit, KnowledgeNode knowledgeNode, Chain chain) {
                        DocumentStore documentStore = aiKnowledge.toDocumentStore();
                        if (documentStore == null) {
                            return null;
                        }
                        AiLlm aiLlm = aiLlmService.getById(aiKnowledge.getVectorEmbedLlmId());
                        if (aiLlm == null) {
                            return null;
                        }
                        documentStore.setEmbeddingModel(aiLlm.toLlm());
                        SearchWrapper wrapper = new SearchWrapper();
                        wrapper.setMaxResults(Integer.valueOf(limit));
                        wrapper.setText(keyword);
                        StoreOptions options = StoreOptions.ofCollectionName(aiKnowledge.getVectorStoreCollection());
 
                        List<Document> results = documentStore.search(wrapper, options);
                        return results;
                    }
                };
            }
        });
    }
}