diff --git a/apps/application/migrations/0018_application_default_model_setting_and_more.py b/apps/application/migrations/0018_application_default_model_setting_and_more.py new file mode 100644 index 00000000000..ff25649f8ae --- /dev/null +++ b/apps/application/migrations/0018_application_default_model_setting_and_more.py @@ -0,0 +1,73 @@ +# Generated by Django 6.1 on 2026-09-09 09:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("application", "0017_application_is_portal_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="application", + name="default_model_setting", + field=models.JSONField(default=dict, verbose_name="默认模型"), + ), + migrations.AddField( + model_name="applicationversion", + name="default_model_setting", + field=models.JSONField(default=dict, verbose_name="默认模型"), + ), + migrations.AlterField( + model_name="applicationchatuserstats", + name="chat_user_type", + field=models.CharField( + choices=[ + ("ANONYMOUS_USER", "匿名用户"), + ("CHAT_USER", "对话用户"), + ("SYSTEM_API_KEY", "系统API_KEY"), + ("APPLICATION_API_KEY", "应用API_KEY"), + ("PLATFORM_USER", "平台用户"), + ("SYSTEM_USER", "系统用户"), + ], + default="ANONYMOUS_USER", + max_length=64, + verbose_name="对话用户类型", + ), + ), + migrations.AlterField( + model_name="chat", + name="chat_user_type", + field=models.CharField( + choices=[ + ("ANONYMOUS_USER", "匿名用户"), + ("CHAT_USER", "对话用户"), + ("SYSTEM_API_KEY", "系统API_KEY"), + ("APPLICATION_API_KEY", "应用API_KEY"), + ("PLATFORM_USER", "平台用户"), + ("SYSTEM_USER", "系统用户"), + ], + default="ANONYMOUS_USER", + max_length=64, + verbose_name="客户端类型", + ), + ), + migrations.AlterField( + model_name="chat", + name="execute_type", + field=models.CharField( + choices=[ + ("ANONYMOUS_USER", "匿名用户"), + ("CHAT_USER", "对话用户"), + ("SYSTEM_API_KEY", "系统API_KEY"), + ("APPLICATION_API_KEY", "应用API_KEY"), + ("PLATFORM_USER", "平台用户"), + ("SYSTEM_USER", "系统用户"), + ], + default="CHAT", + max_length=64, + verbose_name="执行类型", + ), + ), + ] diff --git a/apps/application/models/application.py b/apps/application/models/application.py index 28a8f402ed4..bfbbb470861 100644 --- a/apps/application/models/application.py +++ b/apps/application/models/application.py @@ -128,6 +128,7 @@ class Application(AppModelMixin): long_term_model_params_setting = models.JSONField(verbose_name="长期记忆模型参数相关设置", default=dict) long_term_trigger_type = models.CharField(verbose_name="长期记忆触发类型", default="ROUND") long_term_trigger_setting = models.JSONField(verbose_name="长期记忆触发配置", default=dict) + default_model_setting = models.JSONField(verbose_name="默认模型", default=dict) @staticmethod def get_default_model_prompt(): @@ -218,6 +219,7 @@ class ApplicationVersion(AppModelMixin): long_term_trigger_type = models.CharField(verbose_name="长期记忆触发类型", default="ROUND") long_term_trigger_setting = models.JSONField(verbose_name="长期记忆触发配置", default=dict) knowledge_ids = models.JSONField(verbose_name="数据集id列表", default=list) + default_model_setting = models.JSONField(verbose_name="默认模型", default=dict) class Meta: db_table = "application_version" diff --git a/apps/application/serializers/application.py b/apps/application/serializers/application.py index 9b6c3bf5fed..1925b0058c3 100644 --- a/apps/application/serializers/application.py +++ b/apps/application/serializers/application.py @@ -426,6 +426,7 @@ def to_application_model(user_id: str, workspace_id: str, application: Dict): file_upload_enable=application.get("file_upload_enable", False), file_upload_setting=application.get("file_upload_setting", {}), work_flow=default_workflow, + default_model_setting=application.get("default_model_setting", {}), ) class SimplateRequest(serializers.Serializer): @@ -714,6 +715,9 @@ class ApplicationEditSerializer(serializers.Serializer): ) # 数据集相关设置 knowledge_setting = KnowledgeSettingSerializer(required=False, allow_null=True, label=_("Dataset settings")) + + default_model_setting = serializers.DictField(required=False, label=_("Default model setting")) + # 模型相关设置 model_setting = ModelSettingSerializer(required=False, allow_null=True, label=_("Model setup")) # 问题补全 @@ -1245,6 +1249,7 @@ def reset_application_version(application_version, application): "skill_tool_ids": "skill_tool_ids", "mcp_output_enable": "mcp_output_enable", "type": "type", + "default_model_setting": "default_model_setting", } for version_field, app_field in update_field_dict.items(): @@ -1470,6 +1475,7 @@ def edit(self, instance: Dict, with_valid=True): "clean_time", "file_clean_time", "folder_id", + "default_model_setting", ] for update_key in update_keys: if update_key in instance and instance.get(update_key) is not None: diff --git a/apps/chat/serializers/chat.py b/apps/chat/serializers/chat.py index 5ad781a0d7c..75e75d1d21a 100644 --- a/apps/chat/serializers/chat.py +++ b/apps/chat/serializers/chat.py @@ -268,6 +268,7 @@ def chat_work_flow(self, application, instance: dict, base_to_response): position = instance.get("position") chunk_id = instance.get("chunk_id") debug = self.data.get("debug", False) + default_model_setting = application.default_model_setting or {} # 对话用户信息(asker 取自 form_data) chat_user = resolve_chat_user(chat_user_id, chat_user_type, asker=form_data.get("asker")) @@ -307,6 +308,7 @@ def chat_work_flow(self, application, instance: dict, base_to_response): "audio_list": audio_list or [], "video_list": video_list or [], "other_list": other_list or [], + "default_model_setting": default_model_setting, } result_queue = queue.Queue()