我们相信:世界是美好的,你是我也是。 来玩一下解压小游戏吧!

Dify作为最火热的开源大语言模型(LLM)应用开发平台,其中的知识库功能就是由向量数据库所提供的。其中,根据dify.env配置,可以得知:可选的向量数据库很多,比如:weaviate, qdrant, milvus, myscale, relyt, pgvector, pgvecto-rs, chroma, opensearch, tidb_vector, oracle, tencent, elasticsearch, elasticsearch-ja, analyticdb, couchbase, vikingdb, oceanbase, opengauss, tablestoredify默认的向量数据库是weaviate

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 查看dify的向量数据库里的数据
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10@22h2docker@28.0.4dify@1.3.1weaviate@1.19.0。本文试图寻找一个可以直观地观察weaviate内存储的数据结构和内容的途径。本文以建立“知识库”的初步概念为主,暂时不对里面的功能做详细评述。

dify 知识库

本文的场景下,需要使用dify新建了一个插件(例如:聊天助手),然后,这个助手插件使用“知识库”功能。相关背景文章如下:

知识库可以被集成到Dify应用中作为上下文,或可以创建为独立的ChatGPT插件发布使用。这个“翻译助手”目前没有关联“知识库”,主要原因是:

  • 它的角色设定,目前暂时不需要知识库的功能。
  • 知识库的内容,苏南的大叔准备单开文章(本文)讲述。

创建知识库

dify的插件编排界面,存在着知识库的上传位置。可以上传任何常见格式的文本内容。参考下图:

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 本地知识库
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-2)

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 数据源文本
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-3)

上传完成的文本内容,格式上理论上啥样都可以。不过,最好是QA问答对的这样样式,会有更好的匹配效果。解析出来的数据,将会被进行分割,分割规则是可以自定义的。目前来说,默认的就可以使用。

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 嵌入的过程需要时间和模型配合
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-4)

embedding模型【可选】

这个过程中,可能会使用“系统设置”中的"embedding模型"设置,所以,需要进行设置,或保持默认。

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - embedding
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-5)

管理已上传

在顶部的“知识库”按钮界面,对已上传被分割过的“知识”进行管理。

修改知识库名称

默认生成的这个“知识库”名称,很具有迷惑性,强烈建议修改。让人误以为一个知识库只能上传一条文档数据。

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 管理数据库
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-6)

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 修改知识库
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-7)

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 修改完成
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-8)

添加新文档

点击具体的某个“知识库”之后,就可以通过右上角的按钮,添加新的文档条目了。后续操作就是上传新的文本文件和文档切割。

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 添加新文档
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-9)

也可以查看文档条目,看看文档被分割的情况。

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 被分段
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-10)

使用 知识库

在“聊天助手”等界面,就可以完成对特定“知识库”的引用。这里仅作示例,精准度还是有待提高。

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 引用知识库
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-11)

引用知识库之后,就可以回答原本的大模型所不知道的特定领域知识了。

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 查询效果
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-12)

不过,如果想要更好的知识库效果,还需要不断对数据进行调整。并且知识库的方式,并不是万金油,也有一定的局限性。因为,它聚焦的是某几条知识库数据,并不是整体。它无法统观大局,无法全局的去理解意思。解释出来的回答和解释,可能是片面的。所以,内容的精准度提出了更高的要求。

并且回答的格式,还需要通过提示词进行调整和修改。

题外话:查看 weaviate 配置

difydocker/.env文件中,可以查找到连接weaviate向量数据库的关键因素。endpointkey

WEAVIATE_ENDPOINT=http://weaviate:8080
WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih

苏南大叔:Dify大模型,如何使用知识库数据?向量数据库weaviate - 基础信息获得
Dify大模型,如何使用知识库数据?向量数据库weaviate(图13-13)

weaviate支持graphql的方式,进行访问,也支持restful的方式进行访问。所以,这个客户端的软件也可以以更加极客的方式进行展现。比如graphiql或者postman等方式。或者做些简单的编程,也可以实现一样的目的。在本文中,就不作展开描述了。

下面这个weaviate的开源客户端,不是很好用。仅供参考:

结语

更多dify相关的经验文字,可以参考苏南大叔的文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   dify    weaviate