From 1756e832253496bf12828d72f11f8671c1f1f590 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Mon, 24 Mar 2025 08:30:59 +0800 Subject: [PATCH] 'commit' --- AI/WxMini/Milvus/{ => Config}/MulvusConfig.py | 0 AI/WxMini/Milvus/Config/__init__.py | 0 .../__pycache__/MulvusConfig.cpython-310.pyc | Bin 0 -> 269 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 147 bytes AI/WxMini/Milvus/T1.py | 148 ------------------ AI/WxMini/Milvus/T1_create_collection.py | 38 +++++ AI/WxMini/Milvus/T2_insert_data.py | 56 +++++++ AI/WxMini/Milvus/T3_search_data.py | 37 +++++ .../Milvus/Utils/MilvusCollectionManager.py | 82 ++++++++++ .../Milvus/Utils/MilvusConnectionPool.py | 62 ++++++++ AI/WxMini/Milvus/Utils/__init__.py | 0 .../MilvusCollectionManager.cpython-310.pyc | Bin 0 -> 3126 bytes .../MilvusConnectionPool.cpython-310.pyc | Bin 0 -> 2352 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 146 bytes AI/WxMini/Milvus/__init__.py | 0 .../__pycache__/MulvusConfig.cpython-310.pyc | Bin 262 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 140 bytes AI/WxMini/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 133 bytes 19 files changed, 275 insertions(+), 148 deletions(-) rename AI/WxMini/Milvus/{ => Config}/MulvusConfig.py (100%) create mode 100644 AI/WxMini/Milvus/Config/__init__.py create mode 100644 AI/WxMini/Milvus/Config/__pycache__/MulvusConfig.cpython-310.pyc create mode 100644 AI/WxMini/Milvus/Config/__pycache__/__init__.cpython-310.pyc delete mode 100644 AI/WxMini/Milvus/T1.py create mode 100644 AI/WxMini/Milvus/T1_create_collection.py create mode 100644 AI/WxMini/Milvus/T2_insert_data.py create mode 100644 AI/WxMini/Milvus/T3_search_data.py create mode 100644 AI/WxMini/Milvus/Utils/MilvusCollectionManager.py create mode 100644 AI/WxMini/Milvus/Utils/MilvusConnectionPool.py create mode 100644 AI/WxMini/Milvus/Utils/__init__.py create mode 100644 AI/WxMini/Milvus/Utils/__pycache__/MilvusCollectionManager.cpython-310.pyc create mode 100644 AI/WxMini/Milvus/Utils/__pycache__/MilvusConnectionPool.cpython-310.pyc create mode 100644 AI/WxMini/Milvus/Utils/__pycache__/__init__.cpython-310.pyc create mode 100644 AI/WxMini/Milvus/__init__.py delete mode 100644 AI/WxMini/Milvus/__pycache__/MulvusConfig.cpython-310.pyc create mode 100644 AI/WxMini/Milvus/__pycache__/__init__.cpython-310.pyc create mode 100644 AI/WxMini/__init__.py create mode 100644 AI/WxMini/__pycache__/__init__.cpython-310.pyc diff --git a/AI/WxMini/Milvus/MulvusConfig.py b/AI/WxMini/Milvus/Config/MulvusConfig.py similarity index 100% rename from AI/WxMini/Milvus/MulvusConfig.py rename to AI/WxMini/Milvus/Config/MulvusConfig.py diff --git a/AI/WxMini/Milvus/Config/__init__.py b/AI/WxMini/Milvus/Config/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/AI/WxMini/Milvus/Config/__pycache__/MulvusConfig.cpython-310.pyc b/AI/WxMini/Milvus/Config/__pycache__/MulvusConfig.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65b8dae5ed9deab6b0b626ab2bae7d4f4565a213 GIT binary patch literal 269 zcmd1j<>g`kf>jG2qzf`KFgylvkO5GP!2yViMSw&KLli>_V-#ZwQxsDQa};w5OE7~b zYZZ^7fgT8%07=7JtcI4R#s*QmDaG;0`8heM$t9Wjc`sRk+WjB`e;*%L=MYbSzj!}KU)Nh8F<-|BptzqOL_ByULlGO$3^4J_%Ec-sr8qpl zC_5%FGcVmIKQBGT(K9Bz!Z$N7GsZVFr>wL%#yLMPEi*mFw-m&KaP$f)Z*kb<=BJeA Uq}qYJR?Gn;SQuCsSr|DO0SQt>%K!iX literal 0 HcmV?d00001 diff --git a/AI/WxMini/Milvus/Config/__pycache__/__init__.cpython-310.pyc b/AI/WxMini/Milvus/Config/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51629354b20200ad870223f1a33948a87ae68a24 GIT binary patch literal 147 zcmd1j<>g`k0?wrm(n0iN5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HSi&acYad>`F zc1&PqUb;_yUV4n9XH0m7Z)RR*jBjR6S!r>MbADc0W_nC~JW#A8K3=b&@)n0pZhlH> PPO2TqykaIG!NLFl$tEFx literal 0 HcmV?d00001 diff --git a/AI/WxMini/Milvus/T1.py b/AI/WxMini/Milvus/T1.py deleted file mode 100644 index e5160ceb..00000000 --- a/AI/WxMini/Milvus/T1.py +++ /dev/null @@ -1,148 +0,0 @@ -# 安装 pymilvus 库(如果尚未安装) -# cd D:\anaconda3\envs\py310\Scripts -# pip install pymilvus DBUtils - -# 导入必要的模块 -from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility -from queue import Queue -import threading -import random -from MulvusConfig import * - -# 1. 手动实现 Milvus 连接池 -class MilvusConnectionPool: - def __init__(self, host, port, max_connections=5): - """ - 初始化 Milvus 连接池 - :param host: Milvus 主机地址 - :param port: Milvus 端口 - :param max_connections: 最大连接数 - """ - self.host = host - self.port = port - self.max_connections = max_connections - self._pool = Queue(max_connections) - self._lock = threading.Lock() - - # 初始化连接池 - for _ in range(max_connections): - self._pool.put(self._create_connection()) - - def _create_connection(self): - """ - 创建一个新的 Milvus 连接 - :return: Milvus 连接对象 - """ - return connections.connect(host=self.host, port=self.port, alias="default") - - def get_connection(self): - """ - 从连接池中获取一个连接 - :return: Milvus 连接对象 - """ - with self._lock: - if not self._pool.empty(): - return self._pool.get() - else: - raise Exception("连接池已满,无法获取连接") - - def release_connection(self, connection): - """ - 释放连接,将其放回连接池 - :param connection: Milvus 连接对象 - """ - with self._lock: - if self._pool.qsize() < self.max_connections: - self._pool.put(connection) - else: - connections.disconnect("default") - - def close(self): - """ - 关闭连接池,释放所有连接 - """ - with self._lock: - while not self._pool.empty(): - connection = self._pool.get() - connections.disconnect("default") - -# 2. 使用连接池管理 Milvus 连接 -# 创建 Milvus 连接池,指定主机地址和端口 -milvus_pool = MilvusConnectionPool(host=MS_HOST, port=MS_PORT, max_connections=MS_MAX_CONNECTIONS) - -# 从连接池中获取一个连接 -connection = milvus_pool.get_connection() - -# 3. 定义集合的字段和模式 -# 创建字段列表,定义集合的结构 -fields = [ - FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), # 主键字段,自动生成 ID - FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128) # 向量字段,维度为 128 -] -# 创建集合模式,包含字段列表和描述 -schema = CollectionSchema(fields, description="Simple demo collection") - -# 4. 创建集合 -# 定义集合名称 -collection_name = "demo_collection" -# 检查集合是否已存在,如果存在则删除 -if utility.has_collection(collection_name): - utility.drop_collection(collection_name) # 删除已存在的集合 -# 使用集合模式和名称创建新集合 -collection = Collection(name=collection_name, schema=schema) - -# 5. 插入数据 -# 生成随机向量数据,模拟插入的向量 -data = [ - [random.random() for _ in range(128)], # 第一个 128 维向量 - [random.random() for _ in range(128)], # 第二个 128 维向量 - [random.random() for _ in range(128)] # 第三个 128 维向量 -] -# 将数据包装为实体列表 -entities = [data] # 插入的数据 -# 将数据插入集合 -collection.insert(entities) - -# 6. 创建索引 -# 定义索引参数 -index_params = { - "index_type": "IVF_FLAT", # 使用 IVF_FLAT 索引类型 - "metric_type": "L2", # 使用 L2 距离度量方式 - "params": {"nlist": 128} # 设置 IVF_FLAT 的 nlist 参数 -} -# 在向量字段上创建索引 -collection.create_index("embedding", index_params) - -# 7. 加载集合到内存 -# 将集合加载到内存中,以便进行查询 -collection.load() - -# 8. 查询数据 -# 生成一个随机查询向量 -query_vector = [random.random() for _ in range(128)] # 查询向量 -# 定义查询参数 -search_params = { - "metric_type": "L2", # 使用 L2 距离度量方式 - "params": {"nprobe": 10} # 设置 IVF_FLAT 的 nprobe 参数 -} -# 执行查询 -results = collection.search( - data=[query_vector], # 查询向量 - anns_field="embedding", # 查询的向量字段 - param=search_params, # 查询参数 - limit=2 # 返回最相似的 2 个结果 -) - -# 9. 输出查询结果 -# 遍历查询结果,输出每个结果的 ID 和距离 -for hits in results: - for hit in hits: - print(f"ID: {hit.id}, Distance: {hit.distance}") - -# 10. 释放连接 -# 将连接放回连接池 -milvus_pool.release_connection(connection) - -# 11. 关闭连接池 -# 关闭 Milvus 连接池 -milvus_pool.close() \ No newline at end of file diff --git a/AI/WxMini/Milvus/T1_create_collection.py b/AI/WxMini/Milvus/T1_create_collection.py new file mode 100644 index 00000000..99918cb5 --- /dev/null +++ b/AI/WxMini/Milvus/T1_create_collection.py @@ -0,0 +1,38 @@ +from pymilvus import FieldSchema, DataType, utility +from WxMini.Milvus.Utils.MilvusCollectionManager import MilvusCollectionManager +from WxMini.Milvus.Utils.MilvusConnectionPool import * +from WxMini.Milvus.Config.MulvusConfig import * + +# 1. 使用连接池管理 Milvus 连接 +milvus_pool = MilvusConnectionPool(host=MS_HOST, port=MS_PORT, max_connections=MS_MAX_CONNECTIONS) + +# 2. 从连接池中获取一个连接 +connection = milvus_pool.get_connection() + +# 3. 初始化集合管理器 +collection_name = MS_COLLECTION_NAME +collection_manager = MilvusCollectionManager(collection_name) + +# 4. 判断集合是否存在,存在则删除 +if utility.has_collection(collection_name): + print(f"集合 '{collection_name}' 已存在,正在删除...") + utility.drop_collection(collection_name) + print(f"集合 '{collection_name}' 已删除。") + +# 5. 定义集合的字段和模式 +fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), # 主键字段,自动生成 ID + FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128) # 向量字段,维度为 128 +] +schema_description = "Simple demo collection" + +# 6. 创建集合 +print(f"正在创建集合 '{collection_name}'...") +collection_manager.create_collection(fields, schema_description) +print(f"集合 '{collection_name}' 创建成功。") + +# 7. 释放连接 +milvus_pool.release_connection(connection) + +# 8. 关闭连接池 +milvus_pool.close() \ No newline at end of file diff --git a/AI/WxMini/Milvus/T2_insert_data.py b/AI/WxMini/Milvus/T2_insert_data.py new file mode 100644 index 00000000..2afea069 --- /dev/null +++ b/AI/WxMini/Milvus/T2_insert_data.py @@ -0,0 +1,56 @@ +# insert_data.py +import random + +from pymilvus import FieldSchema, DataType + +from WxMini.Milvus.Utils.MilvusCollectionManager import MilvusCollectionManager +from WxMini.Milvus.Utils.MilvusConnectionPool import * +from WxMini.Milvus.Config.MulvusConfig import * + +# 1. 使用连接池管理 Milvus 连接 +milvus_pool = MilvusConnectionPool(host=MS_HOST, port=MS_PORT, max_connections=MS_MAX_CONNECTIONS) + +# 2. 从连接池中获取一个连接 +connection = milvus_pool.get_connection() + +# 3. 初始化集合管理器 +collection_name = MS_COLLECTION_NAME +collection_manager = MilvusCollectionManager(collection_name) + +# 4. 插入数据 +data = [ + [random.random() for _ in range(128)], # 第一个 128 维向量 + [random.random() for _ in range(128)], # 第二个 128 维向量 + [random.random() for _ in range(128)] # 第三个 128 维向量 +] +entities = [data] # 插入的数据 +collection_manager.insert_data(entities) + +# 5. 创建索引 +index_params = { + "index_type": "IVF_FLAT", # 使用 IVF_FLAT 索引类型 + "metric_type": "L2", # 使用 L2 距离度量方式 + "params": {"nlist": 128} # 设置 IVF_FLAT 的 nlist 参数 +} +collection_manager.create_index("embedding", index_params) + +# 6. 加载集合到内存 +collection_manager.load_collection() + +# 7. 查询数据,验证插入是否成功 +query_vector = [random.random() for _ in range(128)] # 随机生成一个查询向量 +search_params = { + "metric_type": "L2", # 使用 L2 距离度量方式 + "params": {"nprobe": 10} # 设置 IVF_FLAT 的 nprobe 参数 +} +results = collection_manager.search(query_vector, search_params, limit=2) +print("查询结果:") +for hits in results: + for hit in hits: + print(f"ID: {hit.id}, Distance: {hit.distance}") + +# 8. 释放连接 +milvus_pool.release_connection(connection) + +# 9. 关闭连接池 +milvus_pool.close() \ No newline at end of file diff --git a/AI/WxMini/Milvus/T3_search_data.py b/AI/WxMini/Milvus/T3_search_data.py new file mode 100644 index 00000000..08a10984 --- /dev/null +++ b/AI/WxMini/Milvus/T3_search_data.py @@ -0,0 +1,37 @@ +import random + +from WxMini.Milvus.Utils.MilvusCollectionManager import MilvusCollectionManager +from WxMini.Milvus.Utils.MilvusConnectionPool import * +from WxMini.Milvus.Config.MulvusConfig import * + +# 1. 使用连接池管理 Milvus 连接 +milvus_pool = MilvusConnectionPool(host=MS_HOST, port=MS_PORT, max_connections=MS_MAX_CONNECTIONS) + +# 2. 从连接池中获取一个连接 +connection = milvus_pool.get_connection() + +# 3. 初始化集合管理器 +collection_name = MS_COLLECTION_NAME +collection_manager = MilvusCollectionManager(collection_name) + +# 4. 加载集合到内存 +collection_manager.load_collection() +print(f"集合 '{collection_name}' 已加载到内存。") + +# 5. 查询数据 +query_vector = [random.random() for _ in range(128)] # 随机生成一个查询向量 +search_params = { + "metric_type": "L2", # 使用 L2 距离度量方式 + "params": {"nprobe": 10} # 设置 IVF_FLAT 的 nprobe 参数 +} +results = collection_manager.search(query_vector, search_params, limit=2) +print("查询结果:") +for hits in results: + for hit in hits: + print(f"ID: {hit.id}, Distance: {hit.distance}") + +# 6. 释放连接 +milvus_pool.release_connection(connection) + +# 7. 关闭连接池 +milvus_pool.close() \ No newline at end of file diff --git a/AI/WxMini/Milvus/Utils/MilvusCollectionManager.py b/AI/WxMini/Milvus/Utils/MilvusCollectionManager.py new file mode 100644 index 00000000..8fd36f40 --- /dev/null +++ b/AI/WxMini/Milvus/Utils/MilvusCollectionManager.py @@ -0,0 +1,82 @@ +# MilvusCollectionManager.py +from pymilvus import Collection, utility, CollectionSchema + + +class MilvusCollectionManager: + def __init__(self, collection_name): + """ + 初始化集合管理器 + :param collection_name: 集合名称 + """ + self.collection_name = collection_name + self.collection = None + self._load_collection_if_exists() + + def _load_collection_if_exists(self): + """ + 如果集合存在,则加载集合 + """ + if utility.has_collection(self.collection_name): + self.collection = Collection(name=self.collection_name) + print(f"集合 '{self.collection_name}' 已加载。") + else: + print(f"集合 '{self.collection_name}' 不存在。") + + def create_collection(self, fields, schema_description): + """ + 创建集合 + :param fields: 字段列表 + :param schema_description: 集合描述 + """ + if utility.has_collection(self.collection_name): + utility.drop_collection(self.collection_name) # 如果集合已存在,先删除 + schema = CollectionSchema(fields, description=schema_description) + self.collection = Collection(name=self.collection_name, schema=schema) + print(f"集合 '{self.collection_name}' 创建成功。") + + def insert_data(self, entities): + """ + 插入数据 + :param entities: 要插入的数据 + """ + if self.collection is None: + raise Exception("集合未创建,请先调用 create_collection 方法") + self.collection.insert(entities) + print("数据插入成功。") + + def create_index(self, field_name, index_params): + """ + 创建索引 + :param field_name: 字段名称 + :param index_params: 索引参数 + """ + if self.collection is None: + raise Exception("集合未创建,请先调用 create_collection 方法") + self.collection.create_index(field_name, index_params) + print("索引创建成功。") + + def load_collection(self): + """ + 加载集合到内存 + """ + if self.collection is None: + raise Exception("集合未创建,请先调用 create_collection 方法") + self.collection.load() + print("集合已加载到内存。") + + def search(self, query_vector, search_params, limit=2): + """ + 查询数据 + :param query_vector: 查询向量 + :param search_params: 查询参数 + :param limit: 返回结果数量 + :return: 查询结果 + """ + if self.collection is None: + raise Exception("集合未创建,请先调用 create_collection 方法") + return self.collection.search( + data=[query_vector], + anns_field="embedding", + param=search_params, + limit=limit + ) \ No newline at end of file diff --git a/AI/WxMini/Milvus/Utils/MilvusConnectionPool.py b/AI/WxMini/Milvus/Utils/MilvusConnectionPool.py new file mode 100644 index 00000000..a8416104 --- /dev/null +++ b/AI/WxMini/Milvus/Utils/MilvusConnectionPool.py @@ -0,0 +1,62 @@ +import threading +from queue import Queue + +from pymilvus import connections + + +# 1. 手动实现 Milvus 连接池 +class MilvusConnectionPool: + def __init__(self, host, port, max_connections=5): + """ + 初始化 Milvus 连接池 + :param host: Milvus 主机地址 + :param port: Milvus 端口 + :param max_connections: 最大连接数 + """ + self.host = host + self.port = port + self.max_connections = max_connections + self._pool = Queue(max_connections) + self._lock = threading.Lock() + + # 初始化连接池 + for _ in range(max_connections): + self._pool.put(self._create_connection()) + + def _create_connection(self): + """ + 创建一个新的 Milvus 连接 + :return: Milvus 连接对象 + """ + return connections.connect(host=self.host, port=self.port, alias="default") + + def get_connection(self): + """ + 从连接池中获取一个连接 + :return: Milvus 连接对象 + """ + with self._lock: + if not self._pool.empty(): + return self._pool.get() + else: + raise Exception("连接池已满,无法获取连接") + + def release_connection(self, connection): + """ + 释放连接,将其放回连接池 + :param connection: Milvus 连接对象 + """ + with self._lock: + if self._pool.qsize() < self.max_connections: + self._pool.put(connection) + else: + connections.disconnect("default") + + def close(self): + """ + 关闭连接池,释放所有连接 + """ + with self._lock: + while not self._pool.empty(): + connection = self._pool.get() + connections.disconnect("default") \ No newline at end of file diff --git a/AI/WxMini/Milvus/Utils/__init__.py b/AI/WxMini/Milvus/Utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/AI/WxMini/Milvus/Utils/__pycache__/MilvusCollectionManager.cpython-310.pyc b/AI/WxMini/Milvus/Utils/__pycache__/MilvusCollectionManager.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36fe8f91494856476bf36fe1513c10d2c9e44407 GIT binary patch literal 3126 zcmZ`*TW{P%6!zF&$Gh3w3Z&&CvMqzEBU3kcLkLKUjCie#A`H#O|7W4lVC zAVHFrRcVv}y-?CyDz#~m+J>77y{P}gPe{ePn|@;x)!hNj9GR0$_-tsQUXs@&0wYi;`v+h-lZ#4NJ0Grp9iBM7 zxq2*IsWon{HCB#=XRpNq<5i1UrCcFK#4KASdpsxP!4fN68XGu6ijd<9HSP>%6i+0Q}T`DKV?IXARAN9hAi&hF9n7 z7tTfa-uON|ckSYUK0>9lJ=~@mzT0O#S9>VeL$FZA)OdJQtYMb_>j@V#;X6 zMtym?`Jf#ez*K)i%8=Or*b!(#0Yl3C5omxnZc@Fr5+1+EdD1yg3~}b<1VfZns!7Ta ztTttA7>0(*2@5pw75QyjEoG14woXQakpigO{2I`tuzZ8Ov9~Qf0Cmy{4`ULa!b3Y2yA=H|;Zih!}&5eb|$!obSpOdSf z{-gfODgO!BD-=eCwCDoddDx`ioi5niAp*@QyEgL#EwZ3RZ`s(5f4>kmspVNO!XZ4e zGASL9hm7@nFWeKmIzkE2jzj4c81zPbPF|BCq&hLL!j>3bfl=ev%i+CK@nkYsqRSx) zn9j=~l5@(`o;LZd0{jSF;qp9S8Ec$i+u>9WakSnU5fQ`;FS;NbQN;BMh!p{GhI>9Y zDaa;|?Sh;=1A1PCDxlVMGKf&W&T=cRLr{^9ELfj3xHs#D=m+Mi~vK`Ne00f>jg&F&Q1LO z0y~ns9`e0Gfy_;&2xM%`;OY{8kNJ0CU;Nqii&vVrE_VfShd&=uuz=M?6Lm=^dRouuS*ZPk rX@)BkMk>&&GbR2A7FQgmG{$c{6!<^Af&Qkj^DTU{xhVTM*{1vlffth) literal 0 HcmV?d00001 diff --git a/AI/WxMini/Milvus/Utils/__pycache__/MilvusConnectionPool.cpython-310.pyc b/AI/WxMini/Milvus/Utils/__pycache__/MilvusConnectionPool.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eaaf82d18175bae960e52cda602e742276e3ca7f GIT binary patch literal 2352 zcmbVO-ESL35Z}EI`|LPwNK-zl0w#cv1*!xOAVmmKwR}l!L=_=}WpuK<*VM_`=j`1< z61h@DQfQ$hFEo{CTG^tg1XMMp5)BQ4|6`w!$hpZA;uTd1Gk5mcaZ-@j)9uaf&d%KZ zelxRY_4dXIw7;(XK3a|v@&^t&n+${3;kI9bjuA#plEtTF(vp;wD9W-amz1nR$yXqD{(u6DN2-^(y-kSt{+E3sZC zF?o(=<-mScVG$OcBj7`0F?dE;ob|vn$`ar+DF#jy&5vCBXz1u&%Q81rFj-JKyx|1i zN8z^LhOSDhL?=}VdRmpCmmIk&&*H4&sI^F)fE0B!oI6H7jGs}eWK5~Ws-zaLlRBkj z;t~I|CHFfp7f&^tckYUJ{R{8HVk&sC)W&aD8}r{bZq-7Sp-P_TOR3YA?F_ZF)>qdW zOLx7c74OPSw_?TOZN+;(-1HW{=~gM_C-n}jhfvf z>)OdB_!yz;6+ltMoYUOMvtoHvD95eBILw>=gXhbmhL9_+Bl`6M=r~4)`?M+)+b~b@ z2-xBfYJ_WOmFmlc_k;BJkz+$SW@juuo;wNFk6Y!@+>v*3naLByaxoVGmwV4Cns#%r zlitIXDWT~)=sLO{1A}%SbdhL;Mra(agxpV+?diw&3XQ|9eFX}8S`FneJO*IkkTD2_ zF$j+_nNcQvDMPf$ZU&Y@EWLA=y|ugRt267X-!~Rl?tMMiVl%)!R2<@lP7V~ym;g~HV+T^&cuuM6AyANy7?Z@Fh=nledBb@{4 z^mBVdv5UH0pdfL6&b$c%fI$`>rud{asZQ(zz9iR4hDcB_6rzw>nUWFWC`_8ApU@YH zeduGz6}&!x+s_!;eIJa4AHKdeALhvV>Wz*0JKn-#fa?FjaoBwZtcMo8J3lto>VN)n zp>e6!xP39O9;~KSo&Z&j5hPTjRB@(+JZd;1_Qqtvs9@FNkD>y`Y#UsW1f7m>e+pJ@ zG^D9FtC%lm zpj5XQVA2S1vU3bvJimhr(1DOPz*We_=4YQbzWOzQ2Qc$iKK0K21T)^{t0AJHa(0LiI6nZMhSSkb&?oHTwBc6=o`lsP%HynPH;pb!et3&`+etSY{oF8(yxm!VUI0@z z+SAlNnxqLSd0&zSw;qrMyZ7(Ng8$^jPPMY&40V(m9EQk@KLZHW$UPaoVfs{KuH@N+DoX$@<0IbSk#UBq?0WHHx7Iic$lZr%)5I2KvI zOz}e~VG{8{?AmYSOMW@SlN@s+NHYRy_K+6UdJ;VxSJDxVe>Os$z~7GG1k);0CI81D b_+V7q%d*g34c_lHJOOOg`kg8xe%q=V?kAOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yUT37ps_*;_&>U z?3lpJymX)Zy!04H&zSHE-^{$s7~jmCveM$1(2~rY;+Xh&pioJCyk0@&Ee@O9{FKt1 OR6CGy#Y{kgg#iF84I(Z8 literal 0 HcmV?d00001 diff --git a/AI/WxMini/Milvus/__init__.py b/AI/WxMini/Milvus/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/AI/WxMini/Milvus/__pycache__/MulvusConfig.cpython-310.pyc b/AI/WxMini/Milvus/__pycache__/MulvusConfig.cpython-310.pyc deleted file mode 100644 index 1badb2ae5e8649696b92190870f4f145bd344e25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmd1j<>g`kf>jG2qzf`KFgylvkO5GP!2yViMSw&KLli>_V-#ZwQxsDQa};w5OE7~b zYZZ^7fgT8%07=7JtcI4R#s*QmDaG;0`8heM$t9Wjc`sRk+WjB`e;*%L=MYbSzj!}KU)Nh8F<-|BptzqOL_ByULlGO$3^4J_*u^R)r8qpl zC_5%FGcVmIKQBGT(K9Bz!Z$N7GsZVFr>wL%#g`k0+yu@(n0iN5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!H%i&acYad>`F zc1&PqUb;_yUV4n9XH0m7Z)RR*jBjR6S!r=hd_0g-5+AQuPg`k0+yu@(n0iN5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!H9i&acYad>`F zc1&PqUb;_yUV4n9XH0m7Z)RR*Onf|$EQycTE2zB1VUwGmQks)$2Qs0U2}rOo007x@ B8{Pl_ literal 0 HcmV?d00001