Dify中的weaviate向量数据库操作

一.安装weaviate客户端

1.Dify 0.6.9中weaviate信息

在Dify 0.6.9版本中weaviate容器信息如下:

# The Weaviate vector store.
weaviate:
  image: semitechnologies/weaviate:1.19.0
  restart: always
  volumes:
    # Mount the Weaviate data directory to the container.
    - ./volumes/weaviate:/var/lib/weaviate
  environment:
    # The Weaviate configurations
    # You can refer to the [Weaviate](https://weaviate.io/developers/weaviate/config-refs/env-vars) documentation for more information.
    QUERY_DEFAULTS_LIMIT: 25
    AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
    PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
    DEFAULT_VECTORIZER_MODULE: 'none'
    CLUSTER_HOSTNAME: 'node1'
    AUTHENTICATION_APIKEY_ENABLED: 'true'
    AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih'
    AUTHENTICATION_APIKEY_USERS: 'hello@dify.ai'
    AUTHORIZATION_ADMINLIST_ENABLED: 'true'
    AUTHORIZATION_ADMINLIST_USERS: 'hello@dify.ai'
  ports:
    - "8080:8080"
    - "50051:50051"

2.weaviate客户端版本

使用weaviate客户端版本为weaviate-client~=3.21.0如下:

  • ~= 是一种版本兼容性运算符,表示兼容特定版本的微版本更新。

  • 3.21.0 表示该依赖项的最低版本要求。

  • 具体来说,~=3.21.0 表示兼容任何大于等于 3.21.0 但小于 3.22.0 的版本。也就是说,它会匹配 3.21.x 系列中的所有版本,但不会匹配 3.22.0 或更高版本。

安装命令为pip install weaviate-client~=3.21.0

二.Dify测试知识库

1.创建知识库和上传文档

在Dify中创建测试知识库:

然后上传测试文档:

使用自定义分段规则,得到2个段落:

2.datasets数据表

datasets数据表:即知识库。

(1)index_struct

{
   
    "type": "weaviate", 
    "vector_store": {
   
          "class_prefix": "Vector_index_1be106ff_73cc_403e_8981_31800fd0fa1c_Node"
    }
}

其中,1be106ff_73cc_403e_8981_31800fd0fa1c是datasets表中id,即知识库id。

(2)retrieval_model

{
   
    "top_k": 2,
    "search_method": "semantic_search",
    "reranking_model": {
   
       "reranking_model_name": "",
       "reranking_provider_name": ""
    },
    "score_threshold": null,
    "reranking_enable": false,
    "score_threshold_enabled": false
}

3.documents数据表

documents数据表:即知识库中的每个文档。

(1)dataset_process_rule_id

619efb69-aa7f-4546-ae3a-c59e5eb4a106

对应dataset_process_rules数据表内容为

{
   
        "pre_processing_rules": [{
   
                "id": "remove_extra_spaces",
                "enabled": true
        }, {
   
                "id": "remove_urls_emails",
                "enabled": true
        }],
        "segmentation": {
   
                "separator": "\n",
                "max_tokens": 500,
                "chunk_overlap": 50
        }
}

(2)doc_form

text_model

4.document_segments数据表

document_segments数据表,即知识库中每个文档的每个分段。

(1)index_node_id

索引节点id如下:

45886682-2adf-4af5-b0cc-4a247682e7fe
aced7553-2cfc-4faf-a9a1-c8cbf3f6f7b3

(2)index_node_hash

索引节点哈希值如下:

5.embeddings数据表

embeddings数据表:即知识库中每个文档的每个分段的嵌入编码。

(1)embedding是什么

0x80059509480000000000005D942847......575481EC68652E

def set_embedding(self, embedding_data: list[float]):
    self.embedding = pickle.dumps(embedding_data, protocol=pickle.HIGHEST_PROTOCOL)

这行代码使用 Python 的 pickle 模块将 embedding_data 对象序列化为一个字节流,以便于存储或传输。

  • pickle.dumps(embedding_data): pickle.dumps 函数将 embedding_data 对象转换为一个字节流。这个字节流可以被存储或者传输,然后在需要的时候通过 pickle.loads 函数重新转换(反序列化)为原始对象。

  • protocol=pickle.HIGHEST_PROTOCOL: protocol 参数是一个可选参数,用于指定序列化和反序列化时使用的协议版本。pickle.HIGHEST_PROTOCOL 表示使用 pickle 模块当前支持的最高协议版本。不同的协议版本在功能和效率上有所不同,使用最高版本的协议通常可以获得最好的性能。

三.weaviate基本操作

1.weaviate连接和操作

首先连接weaviate客户端,然后查询指定class_name的schema和data_object。

import weaviate

WEAVIATE_URL = "http://127.0.0.1:8080"
WEAVIATE_API_KEY = "WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih"
client = weaviate.Client(
    url = WEAVIATE_URL,  # 指向weaviate的url
    auth_client_secret = weaviate.AuthApiKey(WEAVIATE_API_KEY)  # 使用API k
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NLP工程化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值