diff --git a/apps/knowledge/migrations/0014_knowledgeworkflow_default_model_setting_and_more.py b/apps/knowledge/migrations/0014_knowledgeworkflow_default_model_setting_and_more.py new file mode 100644 index 00000000000..b9cd3220a11 --- /dev/null +++ b/apps/knowledge/migrations/0014_knowledgeworkflow_default_model_setting_and_more.py @@ -0,0 +1,43 @@ +# Generated by Django 6.1 on 2026-09-11 06:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("knowledge", "0013_paragraph_asset_recall"), + ] + + operations = [ + migrations.AddField( + model_name="knowledgeworkflow", + name="default_model_setting", + field=models.JSONField(default=dict, verbose_name="默认模型"), + ), + migrations.AddField( + model_name="knowledgeworkflowversion", + name="default_model_setting", + field=models.JSONField(default=dict, verbose_name="默认模型"), + ), + migrations.AlterField( + model_name="file", + name="source_type", + field=models.CharField( + choices=[ + ("KNOWLEDGE", "Knowledge"), + ("APPLICATION", "Application"), + ("TOOL", "Tool"), + ("DOCUMENT", "Document"), + ("CHAT", "Chat"), + ("SYSTEM", "System"), + ("TEMPORARY_30_MINUTE", "Temporary 30 Minute"), + ("TEMPORARY_120_MINUTE", "Temporary 120 Minute"), + ("TEMPORARY_1_DAY", "Temporary 1 Day"), + ("APPLICATION_SETTINGS", "Application Settings"), + ], + db_index=True, + default="TEMPORARY_120_MINUTE", + verbose_name="资源类型", + ), + ), + ] diff --git a/apps/knowledge/models/knowledge.py b/apps/knowledge/models/knowledge.py index 16790ee94e4..96352060cc3 100644 --- a/apps/knowledge/models/knowledge.py +++ b/apps/knowledge/models/knowledge.py @@ -250,6 +250,7 @@ class KnowledgeWorkflow(AppModelMixin): work_flow = models.JSONField(verbose_name="工作流数据", default=dict) is_publish = models.BooleanField(verbose_name="是否发布", default=False, db_index=True) publish_time = models.DateTimeField(verbose_name="发布时间", null=True, blank=True) + default_model_setting = models.JSONField(verbose_name="默认模型", default=dict) class Meta: db_table = "knowledge_workflow" @@ -267,6 +268,7 @@ class KnowledgeWorkflowVersion(AppModelMixin): work_flow = models.JSONField(verbose_name="工作流数据", default=dict) publish_user_id = models.UUIDField(verbose_name="发布者id", max_length=128, default=None, null=True) publish_user_name = models.CharField(verbose_name="发布者名称", max_length=128, default="") + default_model_setting = models.JSONField(verbose_name="默认模型", default=dict) class Meta: db_table = "knowledge_workflow_version" diff --git a/apps/knowledge/serializers/knowledge.py b/apps/knowledge/serializers/knowledge.py index d3667e79ac8..cb2c8718a8d 100644 --- a/apps/knowledge/serializers/knowledge.py +++ b/apps/knowledge/serializers/knowledge.py @@ -479,6 +479,7 @@ def one(self): workflow["work_flow"] = k.work_flow workflow["is_publish"] = k.is_publish workflow["publish_time"] = k.publish_time + workflow["default_model_setting"] = k.default_model_setting meta = json.loads(knowledge_dict.get("meta", "{}")) return { **knowledge_dict, diff --git a/apps/knowledge/serializers/knowledge_workflow.py b/apps/knowledge/serializers/knowledge_workflow.py index 1523ed29ca6..e58a08e060d 100644 --- a/apps/knowledge/serializers/knowledge_workflow.py +++ b/apps/knowledge/serializers/knowledge_workflow.py @@ -256,7 +256,14 @@ def action(self, instance: Dict, user, with_valid=True, sync_log_id=None): "workspace_id": knowledge.workspace_id, }, } - self._launch_knowledge_workflow(instance, user, knowledge_action_id, knowledge_workflow.work_flow, sync_log_id) + self._launch_knowledge_workflow( + instance, + user, + knowledge_action_id, + knowledge_workflow.work_flow, + knowledge_workflow.default_model_setting, + sync_log_id, + ) # 需要把文件改成永久文件 data_source = instance.get("data_source") or {} file_ids = [item.get("file_id") for item in data_source.get("file_list") or [] if item.get("file_id")] @@ -277,7 +284,9 @@ def action(self, instance: Dict, user, with_valid=True, sync_log_id=None): "meta": meta, } - def _launch_knowledge_workflow(self, instance: Dict, user, knowledge_action_id, work_flow, sync_log_id=None): + def _launch_knowledge_workflow( + self, instance: Dict, user, knowledge_action_id, work_flow, default_model_setting={}, sync_log_id=None + ): """ 在新引擎上异步启动知识库工作流(action/upload_document 共用): 动态解析数据源起点 -> 注册到运行注册表(供停止)-> run() 每节点起线程立即返回, @@ -290,6 +299,7 @@ def _launch_knowledge_workflow(self, instance: Dict, user, knowledge_action_id, "workspace_id": self.data.get("workspace_id"), "user_id": str(user.id), **instance, + "default_model_setting": default_model_setting, } workflow = new_instance(work_flow, WorkflowType.KNOWLEDGE) start_time = time.time() @@ -365,7 +375,13 @@ def upload_document(self, instance: Dict, user, with_valid=True): }, } # 线上上传走已发布版本的 work_flow,执行链路与 action 一致(新引擎异步执行) - self._launch_knowledge_workflow(instance, user, knowledge_action_id, knowledge_workflow_version.work_flow) + self._launch_knowledge_workflow( + instance, + user, + knowledge_action_id, + knowledge_workflow_version.work_flow, + knowledge_workflow_version.default_model_setting, + ) return { "id": knowledge_action_id, "knowledge_id": self.data.get("knowledge_id"), @@ -715,6 +731,7 @@ def publish(self, with_valid=True): publish_user_id=user_id, publish_user_name=user.username, workspace_id=workspace_id, + default_model_setting=knowledge_workflow.default_model_setting, ) work_flow_version.save() QuerySet(KnowledgeWorkflow).filter(knowledge_id=self.data.get("knowledge_id")).update( @@ -732,8 +749,12 @@ def edit(self, instance: Dict): "knowledge_id": self.data.get("knowledge_id"), "workspace_id": self.data.get("workspace_id"), "work_flow": instance.get("work_flow", {}), + "default_model_setting": instance.get("default_model_setting", {}), + }, + defaults={ + "work_flow": instance.get("work_flow"), + "default_model_setting": instance.get("default_model_setting", {}), }, - defaults={"work_flow": instance.get("work_flow")}, ) update_resource_mapping_by_knowledge(self.data.get("knowledge_id")) return self.one()