构建知识库(如果需要)
(self)
| 122 | raise |
| 123 | |
| 124 | def build_knowledge_base(self): |
| 125 | """构建知识库(如果需要)""" |
| 126 | print("\n检查知识库状态...") |
| 127 | |
| 128 | try: |
| 129 | # 检查Milvus集合是否存在 |
| 130 | if self.index_module.has_collection(): |
| 131 | print("✅ 发现已存在的知识库,尝试加载...") |
| 132 | if self.index_module.load_collection(): |
| 133 | print("知识库加载成功!") |
| 134 | |
| 135 | # 重要:即使从已存在的知识库加载,也需要加载图数据以支持图索引 |
| 136 | print("加载图数据以支持图检索...") |
| 137 | self.data_module.load_graph_data() |
| 138 | print("构建疾病文档...") |
| 139 | self.data_module.build_recipe_documents() |
| 140 | print("进行文档分块...") |
| 141 | chunks = self.data_module.chunk_documents( |
| 142 | chunk_size=self.config.chunk_size, |
| 143 | chunk_overlap=self.config.chunk_overlap |
| 144 | ) |
| 145 | |
| 146 | self._initialize_retrievers(chunks) |
| 147 | return |
| 148 | else: |
| 149 | print("❌ 知识库加载失败,开始重建...") |
| 150 | |
| 151 | print("未找到已存在的集合,开始构建新的知识库...") |
| 152 | |
| 153 | # 从Neo4j加载图数据 |
| 154 | print("从Neo4j加载图数据...") |
| 155 | self.data_module.load_graph_data() |
| 156 | |
| 157 | # 构建疾病文档 |
| 158 | print("构建疾病文档...") |
| 159 | self.data_module.build_recipe_documents() |
| 160 | |
| 161 | # 进行文档分块 |
| 162 | print("进行文档分块...") |
| 163 | chunks = self.data_module.chunk_documents( |
| 164 | chunk_size=self.config.chunk_size, |
| 165 | chunk_overlap=self.config.chunk_overlap |
| 166 | ) |
| 167 | |
| 168 | # 构建Milvus向量索引 |
| 169 | print("构建Milvus向量索引...") |
| 170 | if not self.index_module.build_vector_index(chunks): |
| 171 | raise Exception("构建向量索引失败") |
| 172 | |
| 173 | # 初始化检索器 |
| 174 | self._initialize_retrievers(chunks) |
| 175 | |
| 176 | # 显示统计信息 |
| 177 | self._show_knowledge_base_stats() |
| 178 | |
| 179 | print("✅ 知识库构建完成!") |
| 180 | |
| 181 | except Exception as e: |
no test coverage detected