Spaces:
Sleeping
Sleeping
| import chromadb | |
| import json | |
| import argparse | |
| from FlagEmbedding import FlagModel | |
| # 初始化嵌入模型 | |
| embedding_model = FlagModel( | |
| 'chuxin-llm/Chuxin-Embedding', | |
| query_instruction_for_retrieval="为这个句子生成表示以用于检索相关文章:", | |
| use_fp16=True # 使用半精度計算,加速推理 | |
| ) | |
| def get_chuxin_embedding(text): | |
| """生成文本的嵌入向量""" | |
| return embedding_model.encode([text])[0].tolist() | |
| def load_data_to_chromadb(json_path, chromadb_path, collection_name): | |
| """將 JSON 數據載入到 ChromaDB""" | |
| # 讀取 JSON 文件 | |
| with open(json_path, "r", encoding="utf-8") as f: | |
| documents = json.load(f) | |
| # 初始化 ChromaDB client | |
| chroma_client = chromadb.PersistentClient(path=chromadb_path) | |
| # 創建或獲取 Collection | |
| collection = chroma_client.get_or_create_collection(name=collection_name, embedding_function=None) | |
| # 解析 JSON 並添加到 ChromaDB | |
| existing_ids = set(collection.get()["ids"]) # 取得目前所有的 ID | |
| for doc in documents: | |
| embedding = get_chuxin_embedding(doc["text"]) | |
| if doc["id"] in existing_ids: | |
| # 更新已存在的記錄 | |
| collection.update( | |
| ids=[doc["id"]], | |
| documents=[doc["text"]], | |
| embeddings=[embedding], | |
| metadatas=[doc["metadata"]] | |
| ) | |
| print(f"更新 {doc['id']} 的內容") | |
| else: | |
| # 新增新的記錄 | |
| collection.add( | |
| ids=[doc["id"]], | |
| documents=[doc["text"]], | |
| embeddings=[embedding], | |
| metadatas=[doc["metadata"]] | |
| ) | |
| print(f"新增 {doc['id']} 的內容") | |
| print(f"成功載入 {collection.count()} 筆資料到 ChromaDB") | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser(description="將 JSON 數據載入到 ChromaDB") | |
| parser.add_argument("json_path", type=str, help="JSON 文件的路徑") | |
| parser.add_argument("chromadb_path", type=str, help="ChromaDB 的存儲地址") | |
| parser.add_argument("collection_name", type=str, help="ChromaDB Collection 的名稱") | |
| args = parser.parse_args() | |
| load_data_to_chromadb(args.json_path, args.chromadb_path, args.collection_name) |