diff --git a/app/__pycache__/router.cpython-310.pyc b/app/__pycache__/router.cpython-310.pyc index 69b8169..db4f25a 100644 Binary files a/app/__pycache__/router.cpython-310.pyc and b/app/__pycache__/router.cpython-310.pyc differ diff --git a/app/router.py b/app/router.py index 999f6c0..47c3367 100644 --- a/app/router.py +++ b/app/router.py @@ -94,13 +94,28 @@ def search_error(query: ErrorQuery): for idx, score in zip(indices[0], sim[0]): db_id = index_to_id[idx] db_entry = error_memory[db_id] + + # 分层匹配得分 layer_score = compute_layered_similarity_sco(user_vectors, db_entry["layer_vectors"]) + + # 逐层匹配,提取每一层的关键字 + matched_keywords = [] + for user_layer, db_layer in zip(user_layers, db_entry["layers"]): + # 这里简单取两个文本的公共单词作为关键字(你可以换成更复杂的匹配方法) + user_tokens = set(user_layer.split()) + db_tokens = set(db_layer.split()) + common_tokens = user_tokens & db_tokens + matched_keywords.append(list(common_tokens)) + results.append({ "db_id": db_id, - "similarity": round(layer_score, 4), - "matched_layers": db_entry["layers"] + "aggregate_similarity": round(float(score), 4), # 聚合索引匹配得分 + "layer_similarity": round(layer_score, 4), # 分层匹配得分 + "matched_layers": db_entry["layers"], # 匹配到的 traceback 每一层 + "matched_keywords": matched_keywords # 每一层匹配到的关键字列表 }) - # 还需要根据相似度排序 - results.sort(key=lambda x: x["similarity"], reverse=True) + # 先按分层得分排,再按聚合得分排 + results.sort(key=lambda x: (x["layer_similarity"], x["aggregate_similarity"]), reverse=True) + return results