From 2015494a43ed4e26fa0c758ad86a6c61774ddc03 Mon Sep 17 00:00:00 2001
From: wxp <lovewaz@126.com>
Date: 星期三, 16 四月 2025 18:32:04 +0800
Subject: [PATCH] #IC1P55 #C17PK 1.修改function_call模型调用方式,stream=false 2.修复AiWorkflowFunction中invoke方法未对Tinyflow设置provider

---
 aiflowy-modules/aiflowy-module-ai/src/main/java/tech/aiflowy/ai/entity/AiWorkflowFunction.java |   49 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 48 insertions(+), 1 deletions(-)

diff --git a/aiflowy-modules/aiflowy-module-ai/src/main/java/tech/aiflowy/ai/entity/AiWorkflowFunction.java b/aiflowy-modules/aiflowy-module-ai/src/main/java/tech/aiflowy/ai/entity/AiWorkflowFunction.java
index 22e9245..361a3ca 100644
--- a/aiflowy-modules/aiflowy-module-ai/src/main/java/tech/aiflowy/ai/entity/AiWorkflowFunction.java
+++ b/aiflowy-modules/aiflowy-module-ai/src/main/java/tech/aiflowy/ai/entity/AiWorkflowFunction.java
@@ -1,5 +1,7 @@
 package tech.aiflowy.ai.entity;
 
+import tech.aiflowy.ai.service.AiKnowledgeService;
+import tech.aiflowy.ai.service.AiLlmService;
 import tech.aiflowy.ai.service.AiWorkflowService;
 import tech.aiflowy.common.util.SpringContextUtil;
 import com.agentsflex.core.chain.Chain;
@@ -58,13 +60,58 @@
         AiWorkflowService service = SpringContextUtil.getBean(AiWorkflowService.class);
         AiWorkflow workflow = service.getById(this.workflowId);
         if (workflow != null) {
-            Chain chain = workflow.toTinyflow().toChain();
+            Tinyflow tinyflow = workflow.toTinyflow();
+            setLlmProvider(tinyflow);
+            setKnowledgeProvider(tinyflow);
+            Chain chain = tinyflow.toChain();
             return chain.executeForResult(argsMap);
         } else {
             throw new RuntimeException("can not find the workflow by id: " + this.workflowId);
         }
     }
+    private void setLlmProvider( Tinyflow tinyflow){
+        AiLlmService aiLlmService = SpringContextUtil.getBean(AiLlmService.class);
+        tinyflow.setLlmProvider(new LlmProvider() {
+            @Override
+            public Llm getLlm(Object id) {
+                AiLlm aiLlm = aiLlmService.getById(new BigInteger(id.toString()));
+                return aiLlm.toLlm();
+            }
+        });
+    }
 
+    private void setKnowledgeProvider( Tinyflow tinyflow){
+        AiLlmService aiLlmService = SpringContextUtil.getBean(AiLlmService.class);
+        AiKnowledgeService aiKnowledgeService= SpringContextUtil.getBean(AiKnowledgeService.class);
+        tinyflow.setKnowledgeProvider(new KnowledgeProvider() {
+            @Override
+            public Knowledge getKnowledge(Object o) {
+                AiKnowledge aiKnowledge = aiKnowledgeService.getById(new BigInteger(o.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;
+                    }
+                };
+            }
+        });
+
+    }
     @Override
     public String toString() {
         return "AiWorkflowFunction{" +

--
Gitblit v1.8.0