mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +00:00
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
This commit is contained in:
commit
7a3d3844ae
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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 等);
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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: {
|
||||
|
|
|
|||
Loading…
Reference in New Issue