AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


MaxKB 是基于 LLM 大语言模型的知识库问答系统,30 分钟内可上线,支持上传文档、自动爬取在线文档等,可零编码嵌入第三方业务系统,介绍了其实现原理包括向量相似度、搜索索引、重新排序等
发布日期:2024-05-05 07:16:47 浏览次数: 2190 来源:吴建明利驰软件


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、使用更大的模型。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

大家都在问

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询