diff --git a/controller/QAController.py b/controller/QAController.py index 9c49b42..0613334 100644 --- a/controller/QAController.py +++ b/controller/QAController.py @@ -1,5 +1,7 @@ import json import traceback +import uuid + from util.neo4j_utils import Neo4jUtil, neo4j_client import httpx from robyn import jsonify, Response @@ -7,7 +9,48 @@ from robyn import jsonify, Response from app import app from controller.client import client +def convert_to_g6_format(data): + entities = data["entities"] + relations = data["relations"] + + # 创建实体名称到唯一ID的映射 + name_to_id = {} + nodes = [] + + for ent in entities: + name = ent["n"] + if name not in name_to_id: + node_id = str(uuid.uuid4()) + name_to_id[name] = node_id + nodes.append({ + "id": node_id, + "label": name, + "type": ent["t"] # 可用于 G6 的节点样式区分 + }) + + # 构建边 + edges = [] + for rel in relations: + e1 = rel["e1"] + e2 = rel["e2"] + r = rel["r"] + + source_id = name_to_id.get(e1) + target_id = name_to_id.get(e2) + if source_id and target_id: + edges.append({ + "source": source_id, + "target": target_id, + "label": r + }) + else: + print(f"Warning: Entity not found for relation: {rel}") + + return { + "nodes": nodes, + "edges": edges + } @app.post("/api/qa/analyze") async def analyze(request): body = request.json() @@ -56,7 +99,7 @@ async def analyze(request): sorted_items = sorted(items, key=lambda x: x["sort"], reverse=True) # 第四步:取前5个 - top5 = sorted_items[:1] + top5 = sorted_items[:5] for item in top5: resp = await client.post( "/extract_entities_and_relations", @@ -66,14 +109,14 @@ async def analyze(request): if resp.status_code in (200, 202): result = resp.json() print(result) + g6_data = convert_to_g6_format(result) + print(g6_data) qaList.append({ "answer": item["answer"], - "result": result, + "result": g6_data, }) print(f"xh: {item['xh']}, answer: {item['answer']}, sort: {item['sort']}") print(resp.json()) - - return Response( status_code=200, description=jsonify(qaList), diff --git a/vue/src/system/GraphBuilder.vue b/vue/src/system/GraphBuilder.vue index 6152a1d..1cd39e4 100644 --- a/vue/src/system/GraphBuilder.vue +++ b/vue/src/system/GraphBuilder.vue @@ -28,8 +28,6 @@
- -
{{ msg.content }}
@@ -52,8 +50,8 @@ type="checkbox" :id="'entity-' + i" :value="ent" - v-model="selectedEntities" - @change="" + v-model="ent.selected" + @click="handleEntitySelectionChange(msg,ent)" />
@@ -53,6 +65,8 @@