chore: add model_params_setting to document, knowledge, and paragraph processing
Some checks failed
sync2gitee / repo-sync (push) Has been cancelled
Typos Check / Spell Check with Typos (push) Has been cancelled

--story=1018694 --user=刘瑞斌 【菲尼克斯】知识库生成问题选择模型,希望可以设置模型参数 https://www.tapd.cn/62980211/s/1768601
This commit is contained in:
CaptainB 2025-09-05 17:48:40 +08:00
parent 5ed5d2786d
commit 121614fb81
6 changed files with 49 additions and 13 deletions

View File

@ -1305,6 +1305,7 @@ class DocumentSerializers(serializers.Serializer):
document_id_list = instance.get("document_id_list")
model_id = instance.get("model_id")
prompt = instance.get("prompt")
model_params_setting = instance.get("model_params_setting")
state_list = instance.get('state_list')
ListenerManagement.update_status(
QuerySet(Document).filter(id__in=document_id_list),
@ -1327,7 +1328,7 @@ class DocumentSerializers(serializers.Serializer):
QuerySet(Document).filter(id__in=document_id_list))()
try:
for document_id in document_id_list:
generate_related_by_document_id.delay(document_id, model_id, prompt, state_list)
generate_related_by_document_id.delay(document_id, model_id, model_params_setting, prompt, state_list)
except AlreadyQueued as e:
pass

View File

@ -267,6 +267,7 @@ class KnowledgeSerializer(serializers.Serializer):
knowledge_id = self.data.get('knowledge_id')
model_id = instance.get("model_id")
prompt = instance.get("prompt")
model_params_setting = instance.get("model_params_setting")
state_list = instance.get('state_list')
ListenerManagement.update_status(
QuerySet(Document).filter(knowledge_id=knowledge_id),
@ -285,7 +286,7 @@ class KnowledgeSerializer(serializers.Serializer):
)
ListenerManagement.get_aggregation_document_status_by_knowledge_id(knowledge_id)()
try:
generate_related_by_knowledge_id.delay(knowledge_id, model_id, prompt, state_list)
generate_related_by_knowledge_id.delay(knowledge_id, model_id, model_params_setting, prompt, state_list)
except AlreadyQueued as e:
raise AppApiException(500, _('Failed to send the vectorization task, please try again later!'))

View File

@ -480,6 +480,7 @@ class ParagraphSerializers(serializers.Serializer):
paragraph_id_list = instance.get("paragraph_id_list")
model_id = instance.get("model_id")
prompt = instance.get("prompt")
model_params_setting = instance.get("model_params_setting")
document_id = self.data.get('document_id')
ListenerManagement.update_status(
QuerySet(Document).filter(id=document_id),
@ -493,7 +494,7 @@ class ParagraphSerializers(serializers.Serializer):
)
ListenerManagement.get_aggregation_document_status(document_id)()
try:
generate_related_by_paragraph_id_list.delay(document_id, paragraph_id_list, model_id, prompt)
generate_related_by_paragraph_id_list.delay(document_id, paragraph_id_list, model_id, model_params_setting, prompt)
except AlreadyQueued as e:
raise AppApiException(500, _('The task is being executed, please do not send it again.'))

View File

@ -18,9 +18,9 @@ from models_provider.tools import get_model
from ops import celery_app
def get_llm_model(model_id):
def get_llm_model(model_id, model_params_setting=None):
model = QuerySet(Model).filter(id=model_id).first()
return ModelManage.get_model(model_id, lambda _id: get_model(model))
return ModelManage.get_model(model_id, lambda _id: get_model(model, **(model_params_setting or {})))
def generate_problem_by_paragraph(paragraph, llm_model, prompt):
@ -64,18 +64,18 @@ def get_is_the_task_interrupted(document_id):
@celery_app.task(base=QueueOnce, once={'keys': ['knowledge_id']},
name='celery:generate_related_by_knowledge')
def generate_related_by_knowledge_id(knowledge_id, model_id, prompt, state_list=None):
def generate_related_by_knowledge_id(knowledge_id, model_id, model_params_setting, prompt, state_list=None):
document_list = QuerySet(Document).filter(knowledge_id=knowledge_id)
for document in document_list:
try:
generate_related_by_document_id.delay(document.id, model_id, prompt, state_list)
generate_related_by_document_id.delay(document.id, model_id, model_params_setting, prompt, state_list)
except Exception as e:
pass
@celery_app.task(base=QueueOnce, once={'keys': ['document_id']},
name='celery:generate_related_by_document')
def generate_related_by_document_id(document_id, model_id, prompt, state_list=None):
def generate_related_by_document_id(document_id, model_id, model_params_setting, prompt, state_list=None):
if state_list is None:
state_list = [State.PENDING.value, State.STARTED.value, State.SUCCESS.value, State.FAILURE.value,
State.REVOKE.value,
@ -87,7 +87,7 @@ def generate_related_by_document_id(document_id, model_id, prompt, state_list=No
ListenerManagement.update_status(QuerySet(Document).filter(id=document_id),
TaskType.GENERATE_PROBLEM,
State.STARTED)
llm_model = get_llm_model(model_id)
llm_model = get_llm_model(model_id, model_params_setting)
# 生成问题函数
generate_problem = get_generate_problem(llm_model, prompt,
@ -110,7 +110,7 @@ def generate_related_by_document_id(document_id, model_id, prompt, state_list=No
@celery_app.task(base=QueueOnce, once={'keys': ['paragraph_id_list']},
name='celery:generate_related_by_paragraph_list')
def generate_related_by_paragraph_id_list(document_id, paragraph_id_list, model_id, prompt):
def generate_related_by_paragraph_id_list(document_id, paragraph_id_list, model_id, model_params_setting, prompt):
try:
is_the_task_interrupted = get_is_the_task_interrupted(document_id)
if is_the_task_interrupted():
@ -121,7 +121,7 @@ def generate_related_by_paragraph_id_list(document_id, paragraph_id_list, model_
ListenerManagement.update_status(QuerySet(Document).filter(id=document_id),
TaskType.GENERATE_PROBLEM,
State.STARTED)
llm_model = get_llm_model(model_id)
llm_model = get_llm_model(model_id, model_params_setting)
# 生成问题函数
generate_problem = get_generate_problem(llm_model, prompt, ListenerManagement.get_aggregation_document_status(
document_id))

View File

@ -28,7 +28,21 @@
<p>{{ $t('views.document.generateQuestion.tip4') }}</p>
</div>
</div>
<el-form-item :label="$t('views.application.form.aiModel.label')" prop="model_id">
<el-form-item prop="model_id">
<template #label>
<div class="flex-between">
<span>{{ $t('views.application.form.aiModel.label') }}</span>
<el-button
type="primary"
link
@click="openAIParamSettingDialog"
:disabled="!form.model_id"
>
<AppIcon iconName="app-setting" class="mr-4"></AppIcon>
{{ $t('common.paramSetting') }}
</el-button>
</div>
</template>
<ModelSelect
v-model="form.model_id"
:placeholder="$t('views.application.form.aiModel.placeholder')"
@ -68,6 +82,8 @@
</span>
</template>
</el-dialog>
<AIModeParamSettingDialog ref="AIModeParamSettingDialogRef" @refresh="refreshForm" />
</template>
<script setup lang="ts">
import { reactive, ref, watch, computed } from 'vue'
@ -78,6 +94,7 @@ import { MsgSuccess } from '@/utils/message'
import { t } from '@/locales'
import type { FormInstance } from 'element-plus'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
import AIModeParamSettingDialog from "@/views/application/component/AIModeParamSettingDialog.vue";
const props = defineProps<{
apiType: 'systemShare' | 'workspace' | 'systemManage' | 'workspaceShare'
@ -130,6 +147,21 @@ watch(dialogVisible, (bool) => {
FormRef.value?.clearValidate()
}
})
const AIModeParamSettingDialogRef = ref()
const openAIParamSettingDialog = () => {
if (form.value.model_id) {
AIModeParamSettingDialogRef.value?.open(
form.value.model_id,
id,
form.value.model_params_setting,
)
}
}
function refreshForm(data: any) {
form.value.model_params_setting = data
}
const open = (ids: string[], type: string, _knowledge?: any) => {
currentKnowledge.value = _knowledge

View File

@ -2,7 +2,7 @@ import { defineStore } from 'pinia'
import { t } from '@/locales'
export interface promptTypes {
user: string
formValue: { model_id: string; prompt: string }
formValue: { model_id: string; prompt: string; model_params_setting: any }
}
const usePromptStore = defineStore('prompt', {
@ -25,6 +25,7 @@ const usePromptStore = defineStore('prompt', {
}
return {
model_id: '',
model_params_setting: {},
prompt:
t('views.document.generateQuestion.prompt1', { data: '{data}' }) +
'<question></question>' +