Dify大模型,如何使用知识库数据?向量数据库weaviate
发布于 作者:苏南大叔 来源:程序如此灵动~
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, tablestore。dify默认的向量数据库是weaviate。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10@22h2,docker@28.0.4,dify@1.3.1,weaviate@1.19.0。本文试图寻找一个可以直观地观察weaviate内存储的数据结构和内容的途径。本文以建立“知识库”的初步概念为主,暂时不对里面的功能做详细评述。
dify 知识库
本文的场景下,需要使用dify新建了一个插件(例如:聊天助手),然后,这个助手插件使用“知识库”功能。相关背景文章如下:
- https://newsn.net/say/dify.html
- https://newsn.net/say/dify-models.html
- https://newsn.net/say/dify-chat.html
知识库可以被集成到Dify应用中作为上下文,或可以创建为独立的ChatGPT插件发布使用。
创建知识库
在dify的插件编排界面,存在着知识库的上传位置。可以上传任何常见格式的文本内容。参考下图:


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

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

管理已上传
在顶部的“知识库”按钮界面,对已上传被分割过的“知识”进行管理。
修改知识库名称
默认操作下,会以当前知识库的第一篇文档的名字,作为“知识库”的名称,这个操作非常【具有迷惑性】,强烈建议修改。会让人误以为一个知识库只能上传一条文档数据。



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

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

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

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

不过,如果想要更好的知识库效果,还需要不断对数据进行调整。并且知识库的方式,并不是万金油,也有一定的局限性。因为,它聚焦的是某几条知识库数据,并不是整体。它无法统观大局,无法全局的去理解意思。回答的内容,可能是片面的。所以,这就对内容的精准度,提出了更高的要求。待后续文章改进。
题外话:查看 weaviate 配置
在dify的docker/.env文件中,可以查找到连接weaviate向量数据库的关键因素。endpoint和key。
WEAVIATE_ENDPOINT=http://weaviate:8080
WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
weaviate支持graphql的方式,进行访问,也支持restful的方式进行访问。所以,这个客户端的软件也可以以更加极客的方式进行展现。比如graphiql或者postman等方式。或者做些简单的编程,也可以实现一样的目的。在本文中,就不作展开描述了。
下面这个weaviate的开源客户端,不是很好用。仅供参考:
结语
更多dify相关的经验文字,可以参考苏南大叔的文章: