一.安装weaviate客户端
1.Dify 0.6.9中weaviate信息
在Dify 0.6.9版本中weaviate容器信息如下:
# The Weaviate vector store.
weaviate:image: semitechnologies/weaviate:1.19.0restart: alwaysvolumes:# Mount the Weaviate data directory to the container.- ./volumes/weaviate:/var/lib/weaviateenvironment:# 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: 25AUTHENTICATION_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 weaviateWEAVIATE_URL = "http://127.0.0.1:8080"
WEAVIATE_API_KEY = "WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih"
client = weaviate.Client(url = WEAVIATE_URL, # 指向weaviate的urlauth_client_secret = weaviate.AuthApiKey(WEAVIATE_API_KEY) # 使