一.安裝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) # 使