MaxKB
MaxKB 是一款基于 LLM 大语言模型的知识库问答系统。
开箱即用:
1、30 分钟内即可上线基于本地大模型的知识库问答系统,
2、支持直接上传文档、自动爬取在线文档,支持文本自动拆分、向量化;
3、支持零编码快速嵌入到第三方业务系统。
技术栈
-
• 前端:Vue.js
-
• 后端:Python / Django
-
• LangChain:LangChain
-
• 向量数据库:PostgreSQL / pgvector
-
• 大模型:Azure OpenAI、OpenAI、百度千帆大模型、Ollama、通义千问、Kimi、智谱 AI、讯飞星火
实现原理

1、向量相似度
检索器通过知识数据库搜索嵌入彼此接近的向量,即最近的邻居,因为它们是相似的文本。在用户提出查询的情况下,首先对其进行嵌入,然后与相似的嵌入匹配。用于找出不同向量有多相似的常用测量是余弦相似度,它基于两个向量之间的角度。
我们可以使用其他方法来测量相似度,包括欧几里得距离,这是向量端点之间的直线距离,以及点积,它测量两个向量对应元素的乘积之和。
2、搜索索引
在进行检索时,首先需要为知识库构建一个搜索索引。索引存储我们的嵌入,并能在大型数据库中快速检索最相似的块。可以使用以下代码在本地创建索引:
from sklearn.neighbors import NearestNeighbors
embeddings = flattened_df['embeddings'].tolist()
# 创建搜索索引
nbrs = NearestNeighbors(n_neighbors=5, algorithm='ball_tree').fit(embeddings)
# 查询索引,可以使用kneighbors方法
distances, indices = nbrs.kneighbors(embeddings)
3、重新排序
查询数据库后,可能需要按照相关性从高到低对结果进行排序。重新排序的LLM使用机器学习来提高搜索结果的相关性,通过从最相关的排序。使用Azure AI Search,重新排序会自动使用语义重新排序器为您完成。示意代码:
# 查找最相似的文档
distances, indices = nbrs.kneighbors([query_vector])
# 打印最相似的文档
for i in range(3):
index = indices[0][i]
for index in indices[0]:
print(flattened_df['chunks'].iloc[index])
print(flattened_df['path'].iloc[index])
print(flattened_df['distances'].iloc[index])
else:
print(f"DataFrame中未找到索引 {index}")
4、整合所有元素
最后一步是将LLM融入进来,以便能够得到基于我们数据的响应。示意代码:
user_input = "什么是DHub?"
def chatbot(user_input):
# 将问题转换为查询向量
query_vector = create_embeddings(user_input)
# 查找最相似的文档
distances, indices = nbrs.kneighbors([query_vector])
# 将文档添加到查询中以提供上下文
history = []
for index in indices[0]:
history.append(flattened_df['chunks'].iloc[index])
# 组合历史记录和用户输入
history.append(user_input)
# 创建消息对象
messages=[
{"role": "system", "content": "你是一个帮助解答产品问题的AI助手。"},
{"role": "user", "content": history[-1]}
]
# 使用聊天完成生成回应
response = openai.chat.completions.create(
model="llama3:8b",
temperature=0.7,
max_tokens=800,
messages=messages
)
return response.choices[0].message
chatbot(user_input)
安装
前置条件:
安装ollama和llama3。

然后docker一键安装。
docker run -d --name=maxkb -p 8080:8080 -v ~/.maxkb:/var/lib/postgresql/data 1panel/maxkb


使用
1、创建知识库
首先,打开 MaxKB 界面 UI:
http://127.0.0.1:8080/ui/login#/
初始账号: admin
初始密码: MaxKB@123..


注意:填入本地http://127.0.0.1:11434/,提示:

策略是:
1、添加环境变量:OLLAMA_HOST=0.0.0.0:11434
2、cmd/ipconfig获取本地ip,我的是:http://192.168.31.151:11434/






2、添加应用
关联刚才添加的知识库。

3、开始体验


支持零编码快速嵌入到第三方业务系统。

Q&A
Q:生成回答的质量不高,应该如何优化
A:一般有2个办法:
1、通过反复优化提示词。

2、使用更大的模型。

