Skip to content
Closed

Prod #4404

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
c0ffc0a
security: fix reverse shell vulnerability in function library.
liqiang-fit2cloud Apr 9, 2025
f5282bf
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 9, 2025
f4212eb
refactor: add sdlc Dockerfile
Apr 9, 2025
46364f2
refactor: add sdlc Dockerfile
Apr 9, 2025
8381ca5
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 9, 2025
bbab359
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 9, 2025
f188383
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 9, 2025
3c3bd98
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 10, 2025
ebe8506
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 10, 2025
1695710
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 10, 2025
bb3f17e
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 11, 2025
0b60a03
perf: refine copywriting
ortion Apr 11, 2025
125ed8a
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 14, 2025
3b24373
fix: handle line breaks in cell content for markdown table formatting
liuruibin Apr 14, 2025
e178cfe
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 14, 2025
c781c11
fix: Application chat page style issue (#2866)
wangdan-fit2cloud Apr 14, 2025
2dc4218
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 14, 2025
f9cb0e2
refactor: enhance input handling for custom sources in form fields
liuruibin Apr 14, 2025
a1a2fb5
fix: application title error
wxg0103 Apr 14, 2025
c30677d
chore: Update README.md (#2873)
maninhill Apr 14, 2025
6ea2cf1
chore: Update README_CN.md (#2874)
maninhill Apr 14, 2025
7a3d384
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 15, 2025
b9dcc36
chore: Update README_CN.md (#2878)
maninhill Apr 15, 2025
98ed348
chore: Update README_CN.md (#2879)
maninhill Apr 15, 2025
a025e39
chore: Update README_CN.md (#2880)
maninhill Apr 15, 2025
da10649
Update README_CN.md
maninhill Apr 15, 2025
791505b
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 15, 2025
5a7b23a
docs: change defaultSlogan.
liqiang-fit2cloud Apr 15, 2025
1e49939
chore: Update README.md (#2884)
maninhill Apr 15, 2025
ec5fd9e
docs: change defaultSlogan.
liqiang-fit2cloud Apr 15, 2025
8fc9b0a
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 15, 2025
eb60331
chore: Update README_CN.md (#2886)
maninhill Apr 15, 2025
45d8ac2
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 15, 2025
04cb9c9
chore: Update README_CN.md (#2892)
maninhill Apr 16, 2025
1d3bf1c
chore: Update README_CN.md (#2893)
maninhill Apr 16, 2025
2b82675
chore: Update README.md (#2897)
maninhill Apr 16, 2025
45a60cd
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 16, 2025
b5fda0e
chore: add dependabot configuration for weekly pip updates for v2
liuruibin Apr 18, 2025
2ecec57
chore: Update README.md (#2927)
maninhill Apr 18, 2025
bf52dd8
fix: i18n error
wxg0103 Apr 21, 2025
2550324
refactor: oidc add field_mapping
wxg0103 Apr 21, 2025
d2637c3
fix: Model parameters are not effective (#2937)
shaohuzhang1 Apr 21, 2025
54c9d4e
feat: Support uploading files by copying, pasting, dragging and dropp…
wangdan-fit2cloud Apr 21, 2025
d32f7d3
feat: add support for uploading other file types and extend file uplo…
liuruibin Apr 21, 2025
072b817
fix: OpenAI interface call for session, passing asker does not take e…
shaohuzhang1 Apr 22, 2025
8a19448
feat: Adjust file upload and add other file function styles (#2944)
wangdan-fit2cloud Apr 22, 2025
6484fef
fix: Edit advanced orchestration applications, add application nodes,…
shaohuzhang1 Apr 22, 2025
9c56c7e
fix: When automatic sending is not selected, the text conversion shou…
shaohuzhang1 Apr 22, 2025
c39a6e8
fix: When there is an empty string in the context, the conversation r…
shaohuzhang1 Apr 22, 2025
f1d043f
fix: The forgot password page displays an error
wxg0103 Apr 22, 2025
0c14306
fix: Docx segmented font title recognition (#2949)
shaohuzhang1 Apr 22, 2025
b97f4e1
dependencies: Upgrade Django to 4.2.20 (#2950)
shaohuzhang1 Apr 22, 2025
f646102
fix: update file upload settings to allow dynamic video extensions an…
liuruibin Apr 22, 2025
6fe001f
fix: collection form function cannot be used normally and will be stu…
shaohuzhang1 Apr 22, 2025
5e02809
feat: add support for handling and displaying additional file types i…
liuruibin Apr 22, 2025
77e9662
fix: upload file style (#2953)
wangdan-fit2cloud Apr 22, 2025
0ec198f
fix: Lost historical conversation records (#2954)
shaohuzhang1 Apr 22, 2025
d6f1d25
fix: Change the max_token of the Qianfan large model to max_output_to…
shaohuzhang1 Apr 22, 2025
f24337d
fix: The forgot password page displays an error
wxg0103 Apr 23, 2025
e58f958
fix: aws computer tokens error
wxg0103 Apr 23, 2025
131b5b3
feat: add existing file extensions warning and improve file type disp…
liuruibin Apr 23, 2025
d9787bb
fix: style bug
wangdan-fit2cloud Apr 23, 2025
5e7e91c
refactor: loading
wxg0103 Apr 23, 2025
d4541e2
fix: Fix the issue of uploading and deleting other files
wangdan-fit2cloud Apr 23, 2025
9cd0820
feat: update file extension display to uppercase in upload settings
liuruibin Apr 23, 2025
7e4b147
fix: upload style
wangdan-fit2cloud Apr 23, 2025
c8441cf
refactor: loading
wxg0103 Apr 23, 2025
b1f6092
fix: The tag based thinking process does not output (#2968)
shaohuzhang1 Apr 24, 2025
b5b09dc
fix: Fixed interface parameter transmission not displaying during deb…
wangdan-fit2cloud Apr 24, 2025
7bcb770
Merge branch 'main' of https://github.com/maxkb-dev/maxkb
liqiang-fit2cloud Apr 24, 2025
e4a60da
deps: lock versions.
liqiang-fit2cloud Apr 24, 2025
ee35cc2
build: update build-and-push.yml.
liqiang-fit2cloud Apr 24, 2025
d960a18
fix: Thinking about process labels during simple application debuggin…
shaohuzhang1 Apr 24, 2025
fb64731
deps: lock versions.
liqiang-fit2cloud Apr 24, 2025
a054120
deps: lock versions.
liqiang-fit2cloud Apr 24, 2025
df7f922
fix: fix api input bug
wangdan-fit2cloud Apr 24, 2025
8d503c8
fix: update post_cell function to handle different newline characters…
liuruibin Apr 24, 2025
33b1cd6
fix: Ollama maximum output token field (#2973)
shaohuzhang1 Apr 24, 2025
e79e7d5
feat: Add local model worker parameters (#2974)
shaohuzhang1 Apr 24, 2025
d85801f
build: ui build error (#2975)
shaohuzhang1 Apr 24, 2025
1c6b0f8
fix: api input bug
wangdan-fit2cloud Apr 24, 2025
4ff1944
fix: User input parameter occupancy issue (#2976)
shaohuzhang1 Apr 24, 2025
b95cb20
ci: add pip package ecosystem support to dependabot configuration
liuruibin Apr 25, 2025
d33b620
build(deps): update langchain-ollama requirement from 0.3.1 to 0.3.2
dependabot[bot] Apr 25, 2025
17cd88e
build(deps): update langchain-anthropic requirement
dependabot[bot] Apr 25, 2025
47f9c04
build(deps): update pyproject.toml.
liqiang-fit2cloud Apr 25, 2025
bc2a896
Merge branch '1Panel-dev:main' into main
tongiwei Apr 28, 2025
3631503
build: update build-and-push.yml.
liqiang-fit2cloud Apr 28, 2025
5813eed
perf: Slow dialogue log query (#3016)
shaohuzhang1 Apr 29, 2025
dfe6d0a
add support for docx, xlsx (#3014)
yuxiaobin Apr 29, 2025
b37cc3b
perf: The style of MCP nodes when there is no data (#3017)
wangdan-fit2cloud Apr 29, 2025
59ee0c1
fix: During the conversation, there is sensitive data in the applicat…
shaohuzhang1 Apr 29, 2025
704077d
fix: Workflow application node parameter saving cannot be reflected b…
shaohuzhang1 Apr 29, 2025
a6533c0
feat: Support Alibaba Bailian supplier qwen3 model (#3020)
shaohuzhang1 Apr 29, 2025
00a3e5d
fix: The similarity of knowledge base mixed retrieval should be 0-2 (…
shaohuzhang1 Apr 29, 2025
0c7cca0
fix: Cannot copy applications with opening statement characters excee…
shaohuzhang1 Apr 29, 2025
79b2de8
feat: Ali Bailian supplier model list adds qwen3 model (#3026)
shaohuzhang1 Apr 29, 2025
96e59a0
fix: The simple application demonstration cannot be opened (#3028)
shaohuzhang1 Apr 29, 2025
0609a9a
ci: add pip package ecosystem support to dependabot configuration
liuruibin Apr 30, 2025
357edbf
ci: remove redundant pip package ecosystem configuration from dependabot
liuruibin Apr 30, 2025
0cf05a7
feat(provider): added regolo.ai (#3041)
Mte90 May 7, 2025
76ec8ad
refactor: regolo icon
wxg0103 May 7, 2025
7faf556
refactor: remove unused initialization parameters from function libra…
liuruibin May 8, 2025
8d8de53
chore: update langchain-mcp-adapters and mcp package versions
liuruibin May 9, 2025
ccf43bb
feat: add pool options recycle (#3080)
shaohuzhang1 May 13, 2025
2728453
fix: The workflow includes a form collection node. After the normal Q…
shaohuzhang1 May 14, 2025
c12988b
fix: update MCP server configuration text to include STREAMABLE_HTTP …
liuruibin May 15, 2025
949e4de
perf: Refine the Model Manager code (#3089)
shaohuzhang1 May 15, 2025
1db8577
perf: Refine the Model Manager code (#3091)
shaohuzhang1 May 15, 2025
8cf66b9
perf: Refine the Model Manager code (#3093)
shaohuzhang1 May 15, 2025
b2bf697
perf: Refine the Model Manager code (#3094)
shaohuzhang1 May 15, 2025
b0630b3
perf: Refine the Model Manager code (#3098)
shaohuzhang1 May 16, 2025
fa4f7e9
perf: Refine the Model Manager code (#3099)
shaohuzhang1 May 16, 2025
8903b35
fix: dialogue log export error (#3100)
shaohuzhang1 May 16, 2025
5e0d804
fix: Excel export prohibits inputting external links or formulas (#3105)
shaohuzhang1 May 19, 2025
a1a92a8
fix: Excel export prohibits inputting external links or formulas (#3106)
shaohuzhang1 May 19, 2025
57ada07
fix: When the function parameter is of non string type, if the parame…
shaohuzhang1 May 19, 2025
3964db2
fix: Advanced orchestration defines global variables and assigns them…
shaohuzhang1 May 19, 2025
ceccf9f
fix: Line break truncated characters in English(#3103)
wangdan-fit2cloud May 19, 2025
a4d10cb
fix: Application of multi-file style issues and modification of copyw…
wangdan-fit2cloud May 19, 2025
a30316d
fix: breadcrumb issue (#3111)
wangdan-fit2cloud May 19, 2025
a4faf52
fix: Parameter setting page optimization (#3115)
wangdan-fit2cloud May 20, 2025
35b662a
perf: Optimize document extraction for complex table files (#3116)
shaohuzhang1 May 20, 2025
9a42bd2
refactor: add client_id
wxg0103 May 20, 2025
1ba8077
fix: optimize markdown style
wangdan-fit2cloud May 20, 2025
c1ddec1
feat: Login and add graphic captcha (#3117)
shaohuzhang1 May 20, 2025
190ca3e
refactor: login captcha
wxg0103 May 21, 2025
8498687
fix: captcha style
wangdan-fit2cloud May 21, 2025
a7e31b9
fix: AI conversation jumps to 404 (#3118)
shaohuzhang1 May 21, 2025
ce2ab32
fix: modification of copywriting
wangdan-fit2cloud May 21, 2025
adc5af9
fix: Upload a file in the application dialogue, with a file name cont…
shaohuzhang1 May 21, 2025
71fdce0
build: Sensitive directory permissions (#3120)
shaohuzhang1 May 21, 2025
289ebf4
fix: Verification code is not case sensitive (#3121)
shaohuzhang1 May 21, 2025
347f4a0
fix: The default suffix for workflow file upload nodes is set to uppe…
shaohuzhang1 May 21, 2025
e5bab10
build: Sensitive directory permissions (#3126)
shaohuzhang1 May 21, 2025
187e9c1
build: Sensitive directory permissions (#3127)
shaohuzhang1 May 21, 2025
27a77dc
refactor: openai token
wxg0103 May 21, 2025
2ec0d22
refactor: openai token
wxg0103 May 21, 2025
81a3af2
refactor: openai token
wxg0103 May 22, 2025
8f7d917
fix: The dropdown data of subsequent nodes in the form cannot be disp…
shaohuzhang1 May 22, 2025
9d7a383
fix: The dropdown data of subsequent nodes in the form cannot be disp…
shaohuzhang1 May 22, 2025
decd339
build: Sensitive directory permissions
shaohuzhang1 May 22, 2025
e6e53b2
Merge branch '1Panel-dev:main' into main
tongiwei May 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
timezone: "Asia/Shanghai"
day: "friday"
target-branch: "v2"
groups:
python-dependencies:
patterns:
- "*"

34 changes: 7 additions & 27 deletions .github/workflows/build-and-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
inputs:
dockerImageTag:
description: 'Image Tag'
default: 'v1.10.3-dev'
default: 'v1.10.7-dev'
required: true
dockerImageTagWithLatest:
description: '是否发布latest tag(正式发版时选择,测试版本切勿选择)'
Expand Down Expand Up @@ -36,7 +36,7 @@ on:
jobs:
build-and-push-to-fit2cloud-registry:
if: ${{ contains(github.event.inputs.registry, 'fit2cloud') }}
runs-on: ubuntu-22.04
runs-on: ubuntu-latest
steps:
- name: Check Disk Space
run: df -h
Expand All @@ -52,10 +52,6 @@ jobs:
swap-storage: true
- name: Check Disk Space
run: df -h
- name: Set Swap Space
uses: pierotofy/set-swap-space@master
with:
swap-size-gb: 8
- name: Checkout
uses: actions/checkout@v4
with:
Expand All @@ -73,19 +69,12 @@ jobs:
DOCKER_IMAGE_TAGS="--tag ${DOCKER_IMAGE}:${TAG_NAME}"
fi
echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} --memory-swap -1 \
--build-arg DOCKER_IMAGE_TAG=${{ github.event.inputs.dockerImageTag }} --build-arg BUILD_AT=$(TZ=Asia/Shanghai date +'%Y-%m-%dT%H:%M') --build-arg GITHUB_COMMIT=${GITHUB_SHA::8} --no-cache \
--build-arg DOCKER_IMAGE_TAG=${{ github.event.inputs.dockerImageTag }} --build-arg BUILD_AT=$(TZ=Asia/Shanghai date +'%Y-%m-%dT%H:%M') --build-arg GITHUB_COMMIT=`git rev-parse --short HEAD` --no-cache \
${DOCKER_IMAGE_TAGS} .
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
# Until https://github.com/tonistiigi/binfmt/issues/215
image: tonistiigi/binfmt:qemu-v7.0.0-28
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-config-inline: |
[worker.oci]
max-parallelism = 1
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
Expand All @@ -100,11 +89,12 @@ jobs:
password: ${{ secrets.FIT2CLOUD_REGISTRY_PASSWORD }}
- name: Docker Buildx (build-and-push)
run: |
sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches && free -m
docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }} -f installer/Dockerfile

build-and-push-to-dockerhub:
if: ${{ contains(github.event.inputs.registry, 'dockerhub') }}
runs-on: ubuntu-22.04
runs-on: ubuntu-latest
steps:
- name: Check Disk Space
run: df -h
Expand All @@ -120,10 +110,6 @@ jobs:
swap-storage: true
- name: Check Disk Space
run: df -h
- name: Set Swap Space
uses: pierotofy/set-swap-space@master
with:
swap-size-gb: 8
- name: Checkout
uses: actions/checkout@v4
with:
Expand All @@ -141,19 +127,12 @@ jobs:
DOCKER_IMAGE_TAGS="--tag ${DOCKER_IMAGE}:${TAG_NAME}"
fi
echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} --memory-swap -1 \
--build-arg DOCKER_IMAGE_TAG=${{ github.event.inputs.dockerImageTag }} --build-arg BUILD_AT=$(TZ=Asia/Shanghai date +'%Y-%m-%dT%H:%M') --build-arg GITHUB_COMMIT=${GITHUB_SHA::8} --no-cache \
--build-arg DOCKER_IMAGE_TAG=${{ github.event.inputs.dockerImageTag }} --build-arg BUILD_AT=$(TZ=Asia/Shanghai date +'%Y-%m-%dT%H:%M') --build-arg GITHUB_COMMIT=`git rev-parse --short HEAD` --no-cache \
${DOCKER_IMAGE_TAGS} .
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
# Until https://github.com/tonistiigi/binfmt/issues/215
image: tonistiigi/binfmt:qemu-v7.0.0-28
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-config-inline: |
[worker.oci]
max-parallelism = 1
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
Expand All @@ -167,4 +146,5 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Docker Buildx (build-and-push)
run: |
sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches && free -m
docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }} -f installer/Dockerfile
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<p align="center"><img src= "https://github.com/1Panel-dev/maxkb/assets/52996290/c0694996-0eed-40d8-b369-322bf2a380bf" alt="MaxKB" width="300" /></p>
<h3 align="center">Ready-to-use AI Chatbot</h3>
<h3 align="center">An Open-Source AI Assistant for Enterprise</h3>
<p align="center"><a href="https://trendshift.io/repositories/9113" target="_blank"><img src="https://trendshift.io/api/badge/repositories/9113" alt="1Panel-dev%2FMaxKB | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a></p>
<p align="center">
<a href="https://www.gnu.org/licenses/gpl-3.0.html#license-text"><img src="https://img.shields.io/github/license/1Panel-dev/maxkb?color=%231890FF" alt="License: GPL v3"></a>
Expand All @@ -10,10 +10,10 @@
</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 powerful and easy-to-use AI assistant 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.
- **RAG Pipeline**: Supports direct uploading of documents / automatic crawling of online documents, with features for automatic text splitting, vectorization. This effectively reduces hallucinations in large models, providing a superior smart Q&A interaction experience.
- **Agentic Workflow**: 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.
- **Seamless Integration**: Facilitates zero-coding rapid integration into third-party business systems, quickly equipping existing systems with intelligent Q&A capabilities to enhance user satisfaction.
- **Model-Agnostic**: Supports various large models, including private models (such as DeepSeek, Llama, Qwen, etc.) and public models (like OpenAI, Claude, Gemini, etc.).
- **Multi Modal**: Native support for input and output text, image, audio and video.
Expand Down
11 changes: 5 additions & 6 deletions README_CN.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<p align="center"><img src= "https://github.com/1Panel-dev/maxkb/assets/52996290/c0694996-0eed-40d8-b369-322bf2a380bf" alt="MaxKB" width="300" /></p>
<h3 align="center">基于大模型和 RAG 的知识库问答系统</h3>
<h4 align="center">Ready-to-use, flexible RAG Chatbot</h4>
<h3 align="center">强大易用的企业级 AI 助手</h3>
<p align="center">
<a href="https://trendshift.io/repositories/9113" target="_blank"><img src="https://trendshift.io/api/badge/repositories/9113" alt="1Panel-dev%2FMaxKB | Trendshift" style="width: 250px; height: auto;" /></a>
<a href="https://market.aliyun.com/products/53690006/cmjj00067609.html?userCode=kmemb8jp" target="_blank"><img src="https://img.alicdn.com/imgextra/i2/O1CN01H5JIwY1rZ0OobDjnJ_!!6000000005644-2-tps-1000-216.png" alt="1Panel-dev%2FMaxKB | Aliyun" style="width: 250px; height: auto;" /></a>
Expand All @@ -14,12 +13,12 @@
</p>
<hr/>

MaxKB = Max Knowledge Base,是一款开箱即用的 RAG Chatbot,具备强大的工作流和 MCP 工具调用能力。它支持对接各种主流大语言模型(LLMs),广泛应用于智能客服、企业内部知识库、学术研究与教育等场景。
MaxKB = Max Knowledge Brain,是一款强大易用的企业级 AI 助手,支持 RAG 检索增强生成、工作流编排、MCP 工具调用能力。MaxKB 支持对接各种主流大语言模型,广泛应用于智能客服、企业内部知识库问答、员工助手、学术研究与教育等场景。

- **开箱即用**:支持直接上传文档 / 自动爬取在线文档,支持文本自动拆分、向量化和 RAG(检索增强生成),有效减少大模型幻觉,智能问答交互体验好;
- **模型中立**:支持对接各种大模型,包括本地私有大模型(DeepSeek R1 / Llama 3 / Qwen 2 等)、国内公共大模型(通义千问 / 腾讯混元 / 字节豆包 / 百度千帆 / 智谱 AI / Kimi 等)和国外公共大模型(OpenAI / Claude / Gemini 等);
- **RAG 检索增强生成**:高效搭建本地 AI 知识库,支持直接上传文档 / 自动爬取在线文档,支持文本自动拆分、向量化,有效减少大模型幻觉,提升问答效果;
- **灵活编排**:内置强大的工作流引擎、函数库和 MCP 工具调用能力,支持编排 AI 工作过程,满足复杂业务场景下的需求;
- **无缝嵌入**:支持零编码快速嵌入到第三方业务系统,让已有系统快速拥有智能问答能力,提高用户满意度。
- **无缝嵌入**:支持零编码快速嵌入到第三方业务系统,让已有系统快速拥有智能问答能力,提高用户满意度;
- **模型中立**:支持对接各种大模型,包括本地私有大模型(DeepSeek R1 / Llama 3 / Qwen 2 等)、国内公共大模型(通义千问 / 腾讯混元 / 字节豆包 / 百度千帆 / 智谱 AI / Kimi 等)和国外公共大模型(OpenAI / Claude / Gemini 等)。

MaxKB 三分钟视频介绍:https://www.bilibili.com/video/BV18JypYeEkj/

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@

"""


def _write_context(node_variable: Dict, workflow_variable: Dict, node: INode, workflow, answer: str,
reasoning_content: str):
chat_model = node_variable.get('chat_model')
Expand Down Expand Up @@ -102,7 +103,6 @@ def write_context_stream(node_variable: Dict, workflow_variable: Dict, node: INo
_write_context(node_variable, workflow_variable, node, workflow, answer, reasoning_content)



async def _yield_mcp_response(chat_model, message_list, mcp_servers):
async with MultiServerMCPClient(json.loads(mcp_servers)) as client:
agent = create_react_agent(chat_model, client.get_tools())
Expand All @@ -115,6 +115,7 @@ async def _yield_mcp_response(chat_model, message_list, mcp_servers):
if isinstance(chunk[0], AIMessageChunk):
yield chunk[0]


def mcp_response_generator(chat_model, message_list, mcp_servers):
loop = asyncio.new_event_loop()
try:
Expand All @@ -130,6 +131,7 @@ def mcp_response_generator(chat_model, message_list, mcp_servers):
finally:
loop.close()


async def anext_async(agen):
return await agen.__anext__()

Expand Down Expand Up @@ -186,7 +188,8 @@ def save_context(self, details, workflow_manage):
self.context['answer'] = details.get('answer')
self.context['question'] = details.get('question')
self.context['reasoning_content'] = details.get('reasoning_content')
self.answer_text = details.get('answer')
if self.node_params.get('is_result', False):
self.answer_text = details.get('answer')

def execute(self, model_id, system, prompt, dialogue_number, history_chat_record, stream, chat_id, chat_record_id,
model_params_setting=None,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,8 @@ def save_context(self, details, workflow_manage):
self.context['question'] = details.get('question')
self.context['type'] = details.get('type')
self.context['reasoning_content'] = details.get('reasoning_content')
self.answer_text = details.get('answer')
if self.node_params.get('is_result', False):
self.answer_text = details.get('answer')

def execute(self, application_id, message, chat_id, chat_record_id, stream, re_chat, client_id, client_type,
app_document_list=None, app_image_list=None, app_audio_list=None, child_node=None, node_data=None,
Expand All @@ -178,7 +179,8 @@ def execute(self, application_id, message, chat_id, chat_record_id, stream, re_c
current_chat_id = string_to_uuid(chat_id + application_id)
Chat.objects.get_or_create(id=current_chat_id, defaults={
'application_id': application_id,
'abstract': message[0:1024]
'abstract': message[0:1024],
'client_id': client_id,
})
if app_document_list is None:
app_document_list = []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
class BaseReplyNode(IReplyNode):
def save_context(self, details, workflow_manage):
self.context['answer'] = details.get('answer')
self.answer_text = details.get('answer')
if self.node_params.get('is_result', False):
self.answer_text = details.get('answer')

def execute(self, reply_type, stream, fields=None, content=None, **kwargs) -> NodeResult:
if reply_type == 'referencing':
result = self.get_reference_content(fields)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ def save_context(self, details, workflow_manage):
self.context['start_time'] = details.get('start_time')
self.context['form_data'] = form_data
self.context['is_submit'] = details.get('is_submit')
self.answer_text = details.get('result')
if self.node_params.get('is_result', False):
self.answer_text = details.get('result')
if form_data is not None:
for key in form_data:
self.context[key] = form_data[key]
Expand Down Expand Up @@ -70,7 +71,7 @@ def get_answer_list(self) -> List[Answer] | None:
"chat_record_id": self.flow_params_serializer.data.get("chat_record_id"),
'form_data': self.context.get('form_data', {}),
"is_submit": self.context.get("is_submit", False)}
form = f'<form_rander>{json.dumps(form_setting,ensure_ascii=False)}</form_rander>'
form = f'<form_rander>{json.dumps(form_setting, ensure_ascii=False)}</form_rander>'
context = self.workflow_manage.get_workflow_content()
form_content_format = self.workflow_manage.reset_prompt(form_content_format)
prompt_template = PromptTemplate.from_template(form_content_format, template_format='jinja2')
Expand All @@ -85,7 +86,7 @@ def get_details(self, index: int, **kwargs):
"chat_record_id": self.flow_params_serializer.data.get("chat_record_id"),
'form_data': self.context.get('form_data', {}),
"is_submit": self.context.get("is_submit", False)}
form = f'<form_rander>{json.dumps(form_setting,ensure_ascii=False)}</form_rander>'
form = f'<form_rander>{json.dumps(form_setting, ensure_ascii=False)}</form_rander>'
context = self.workflow_manage.get_workflow_content()
form_content_format = self.workflow_manage.reset_prompt(form_content_format)
prompt_template = PromptTemplate.from_template(form_content_format, template_format='jinja2')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def valid_reference_value(_type, value, name):


def convert_value(name: str, value, _type, is_required, source, node):
if not is_required and value is None:
if not is_required and (value is None or (isinstance(value, str) and len(value) == 0)):
return None
if not is_required and source == 'reference' and (value is None or len(value) == 0):
return None
Expand Down Expand Up @@ -113,7 +113,8 @@ def valid_function(function_lib, user_id):
class BaseFunctionLibNodeNode(IFunctionLibNode):
def save_context(self, details, workflow_manage):
self.context['result'] = details.get('result')
self.answer_text = str(details.get('result'))
if self.node_params.get('is_result'):
self.answer_text = str(details.get('result'))

def execute(self, function_lib_id, input_field_list, **kwargs) -> NodeResult:
function_lib = QuerySet(FunctionLib).filter(id=function_lib_id).first()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def valid_reference_value(_type, value, name):


def convert_value(name: str, value, _type, is_required, source, node):
if not is_required and value is None:
if not is_required and (value is None or (isinstance(value, str) and len(value) == 0)):
return None
if source == 'reference':
value = node.workflow_manage.get_reference_field(
Expand Down Expand Up @@ -84,7 +84,8 @@ def convert_value(name: str, value, _type, is_required, source, node):
class BaseFunctionNodeNode(IFunctionNode):
def save_context(self, details, workflow_manage):
self.context['result'] = details.get('result')
self.answer_text = str(details.get('result'))
if self.node_params.get('is_result', False):
self.answer_text = str(details.get('result'))

def execute(self, input_field_list, code, **kwargs) -> NodeResult:
params = {field.get('name'): convert_value(field.get('name'), field.get('value'), field.get('type'),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,17 @@ class BaseImageGenerateNode(IImageGenerateNode):
def save_context(self, details, workflow_manage):
self.context['answer'] = details.get('answer')
self.context['question'] = details.get('question')
self.answer_text = details.get('answer')
if self.node_params.get('is_result', False):
self.answer_text = details.get('answer')

def execute(self, model_id, prompt, negative_prompt, dialogue_number, dialogue_type, history_chat_record, chat_id,
model_params_setting,
chat_record_id,
**kwargs) -> NodeResult:
print(model_params_setting)
application = self.workflow_manage.work_flow_post_handler.chat_info.application
tti_model = get_model_instance_by_model_user_id(model_id, self.flow_params_serializer.data.get('user_id'), **model_params_setting)
tti_model = get_model_instance_by_model_user_id(model_id, self.flow_params_serializer.data.get('user_id'),
**model_params_setting)
history_message = self.get_history_message(history_chat_record, dialogue_number)
self.context['history_message'] = history_message
question = self.generate_prompt_question(prompt)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ class BaseImageUnderstandNode(IImageUnderstandNode):
def save_context(self, details, workflow_manage):
self.context['answer'] = details.get('answer')
self.context['question'] = details.get('question')
self.answer_text = details.get('answer')
if self.node_params.get('is_result', False):
self.answer_text = details.get('answer')

def execute(self, model_id, system, prompt, dialogue_number, dialogue_type, history_chat_record, stream, chat_id,
model_params_setting,
Expand Down
Loading