This commit is contained in:
liqiang-fit2cloud 2025-04-15 11:05:03 +08:00
commit 7a3d3844ae
4 changed files with 64 additions and 8 deletions

View File

@ -10,7 +10,7 @@
</p>
<hr/>
MaxKB = Max Knowledge Base, it is a ready-to-use AI chatbot that integrates Retrieval-Augmented Generation (RAG) pipelines, supports robust workflows, and provides advanced MCP tool-use capabilities. MaxKB is widely applied in scenarios such as intelligent customer service, corporate internal knowledge bases, academic research, and education.
MaxKB = Max Knowledge Brain, it is a ready-to-use AI chatbot that integrates Retrieval-Augmented Generation (RAG) pipelines, supports robust workflows, and provides advanced MCP tool-use capabilities. MaxKB is widely applied in scenarios such as intelligent customer service, corporate internal knowledge bases, academic research, and education.
- **RAG Pipeline**: Supports direct uploading of documents / automatic crawling of online documents, with features for automatic text splitting, vectorization, and RAG (Retrieval-Augmented Generation). This effectively reduces hallucinations in large models, providing a superior smart Q&A interaction experience.
- **Flexible Orchestration**: Equipped with a powerful workflow engine, function library and MCP tool-use, enabling the orchestration of AI processes to meet the needs of complex business scenarios.

View File

@ -14,7 +14,7 @@
</p>
<hr/>
MaxKB = Max Knowledge Base,是一款开箱即用的 RAG Chatbot具备强大的工作流和 MCP 工具调用能力。它支持对接各种主流大语言模型LLMs广泛应用于智能客服、企业内部知识库、学术研究与教育等场景。
MaxKB = Max Knowledge Brain,是一款开箱即用的 RAG Chatbot具备强大的工作流和 MCP 工具调用能力。它支持对接各种主流大语言模型LLMs广泛应用于智能客服、企业内部知识库、学术研究与教育等场景。
- **开箱即用**:支持直接上传文档 / 自动爬取在线文档,支持文本自动拆分、向量化和 RAG检索增强生成有效减少大模型幻觉智能问答交互体验好
- **模型中立**支持对接各种大模型包括本地私有大模型DeepSeek R1 / Llama 3 / Qwen 2 等)、国内公共大模型(通义千问 / 腾讯混元 / 字节豆包 / 百度千帆 / 智谱 AI / Kimi 等和国外公共大模型OpenAI / Claude / Gemini 等);

View File

@ -1071,6 +1071,7 @@ class ApplicationSerializer(serializers.Serializer):
for update_key in update_keys:
if update_key in instance and instance.get(update_key) is not None:
application.__setattr__(update_key, instance.get(update_key))
print(application.name)
application.save()
if 'dataset_id_list' in instance:
@ -1089,6 +1090,7 @@ class ApplicationSerializer(serializers.Serializer):
chat_cache.clear_by_application_id(application_id)
application_access_token = QuerySet(ApplicationAccessToken).filter(application_id=application_id).first()
# 更新缓存数据
print(application.name)
get_application_access_token(application_access_token.access_token, False)
return self.one(with_valid=False)
@ -1141,6 +1143,8 @@ class ApplicationSerializer(serializers.Serializer):
instance['file_upload_enable'] = node_data['file_upload_enable']
if 'file_upload_setting' in node_data:
instance['file_upload_setting'] = node_data['file_upload_setting']
if 'name' in node_data:
instance['name'] = node_data['name']
break
def speech_to_text(self, file, with_valid=True):

View File

@ -97,11 +97,24 @@
</div>
</template>
<el-input
v-if="item.source === 'custom'"
v-if="item.source === 'custom' && item.input_type === 'TextInput'"
v-model="form_data.tool_params[form_data.params_nested][item.label.label]"
/>
<el-input-number
v-else-if="item.source === 'custom' && item.input_type === 'NumberInput'"
v-model="form_data.tool_params[form_data.params_nested][item.label.label]"
/>
<el-switch
v-else-if="item.source === 'custom' && item.input_type === 'SwitchInput'"
v-model="form_data.tool_params[form_data.params_nested][item.label.label]"
/>
<el-input
v-else-if="item.source === 'custom' && item.input_type === 'JsonInput'"
v-model="form_data.tool_params[form_data.params_nested][item.label.label]"
type="textarea"
/>
<NodeCascader
v-else
v-if="item.source === 'referencing'"
ref="nodeCascaderRef2"
:nodeModel="nodeModel"
class="w-full"
@ -148,11 +161,24 @@
</div>
</template>
<el-input
v-if="item.source === 'custom'"
v-if="item.source === 'custom' && item.input_type === 'TextInput'"
v-model="form_data.tool_params[item.label.label]"
/>
<el-input-number
v-else-if="item.source === 'custom' && item.input_type === 'NumberInput'"
v-model="form_data.tool_params[item.label.label]"
/>
<el-switch
v-else-if="item.source === 'custom' && item.input_type === 'SwitchInput'"
v-model="form_data.tool_params[item.label.label]"
/>
<el-input
v-else-if="item.source === 'custom' && item.input_type === 'JsonInput'"
v-model="form_data.tool_params[item.label.label]"
type="textarea"
/>
<NodeCascader
v-else
v-if="item.source === 'referencing'"
ref="nodeCascaderRef2"
:nodeModel="nodeModel"
class="w-full"
@ -244,6 +270,19 @@ function changeTool() {
if (params) {
form_data.value.params_nested = item
for (const item2 in params) {
let input_type = 'TextInput'
if (params[item2].type === 'string') {
input_type = 'TextInput'
} else if (params[item2].type === 'number') {
input_type = 'NumberInput'
} else if (params[item2].type === 'boolean') {
input_type = 'SwitchInput'
} else if (params[item2].type === 'array') {
input_type = 'JsonInput'
} else if (params[item2].type === 'object') {
input_type = 'JsonInput'
}
console.log(params[item2])
form_data.value.tool_form_field.push({
field: item2,
label: {
@ -252,7 +291,7 @@ function changeTool() {
attrs: { tooltip: params[item2].description },
props_info: {}
},
input_type: 'TextInput',
input_type: input_type,
source: 'referencing',
required: args_schema.properties[item].required?.indexOf(item2) !== -1,
props_info: {
@ -268,6 +307,19 @@ function changeTool() {
}
} else {
form_data.value.params_nested = ''
let input_type = 'TextInput'
if (args_schema.properties[item].type === 'string') {
input_type = 'TextInput'
} else if (args_schema.properties[item].type === 'number') {
input_type = 'NumberInput'
} else if (args_schema.properties[item].type === 'boolean') {
input_type = 'SwitchInput'
} else if (args_schema.properties[item].type === 'array') {
input_type = 'JsonInput'
} else if (args_schema.properties[item].type === 'object') {
input_type = 'JsonInput'
}
console.log(args_schema.properties[item]);
form_data.value.tool_form_field.push({
field: item,
label: {
@ -276,7 +328,7 @@ function changeTool() {
attrs: { tooltip: args_schema.properties[item].description },
props_info: {}
},
input_type: 'TextInput',
input_type: input_type,
source: 'referencing',
required: args_schema.required?.indexOf(item) !== -1,
props_info: {