From cee265cb47f535bb7db628418bbeb23c33d3c08e Mon Sep 17 00:00:00 2001 From: hanyuqing <1106611654@qq.com> Date: Thu, 25 Dec 2025 11:05:10 +0800 Subject: [PATCH] all --- controller/BuilderController.py | 36 ++++++++++++++++++++++++++++++++ controller/GraphController.py | 46 ----------------------------------------- controller/QAController.py | 45 ++++++++++++++++++++++++++++++++++++++++ controller/__init__.py | 13 ++++++++++++ service/BuilderService.py | 0 vue/src/api/qa.js | 15 ++++++++++++++ vue/src/components/Menu.vue | 1 + vue/src/system/GraphBuilder.vue | 13 ++++++++---- vue/src/system/GraphDemo.vue | 1 + web_main.py | 3 +-- 10 files changed, 121 insertions(+), 52 deletions(-) create mode 100644 controller/BuilderController.py create mode 100644 controller/QAController.py create mode 100644 controller/__init__.py create mode 100644 service/BuilderService.py create mode 100644 vue/src/api/qa.js diff --git a/controller/BuilderController.py b/controller/BuilderController.py new file mode 100644 index 0000000..fa6987a --- /dev/null +++ b/controller/BuilderController.py @@ -0,0 +1,36 @@ +# 全局 client(可复用) +import httpx +from robyn import jsonify, Response + +from app import app +from controller import client + + +@app.post("/api/analyze") +async def analyze(request): + body = request.json() + input_text = body.get("text", "").strip() + if not input_text: + return jsonify({"error": "缺少 text 字段"}), 400 + try: + # 直接转发到大模型服务(假设它返回 { "task_id": "xxx" }) + resp = await client.post( + "/extract_entities_and_relations", + json={"text": input_text}, + timeout=1800.0 # 30分钟 + ) + print(resp) + + if resp.status_code == 202 or resp.status_code == 200: + return Response( + status_code=200, + description=jsonify(resp.json()), + headers={"Content-Type": "text/plain; charset=utf-8"} + ) + else: + return jsonify({ + "error": "提交失败", + "detail": resp.text + }), resp.status_code + except Exception as e: + return jsonify({"error": str(e)}), 500 diff --git a/controller/GraphController.py b/controller/GraphController.py index 7c8032f..2c4b897 100644 --- a/controller/GraphController.py +++ b/controller/GraphController.py @@ -235,49 +235,3 @@ def health(): # }), response.status_code -# 全局 client(可复用) -client = httpx.AsyncClient(base_url="http://192.168.50.113:8088") - -@app.post("/api/analyze") -async def analyze(request): - body = request.json() - input_text = body.get("text", "").strip() - if not input_text: - return jsonify({"error": "缺少 text 字段"}), 400 - try: - # 直接转发到大模型服务(假设它返回 { "task_id": "xxx" }) - resp = await client.post( - "/extract_entities_and_relations", - json={"text": input_text}, - timeout=1800.0 # 30分钟 - ) - print(resp) - - if resp.status_code == 202 or resp.status_code == 200: - return Response( - status_code=200, - description=jsonify(resp.json()), - headers={"Content-Type": "text/plain; charset=utf-8"} - ) - else: - return jsonify({ - "error": "提交失败", - "detail": resp.text - }), resp.status_code - except Exception as e: - return jsonify({"error": str(e)}), 500 - - -@app.get("/api/analyze/status") -async def get_status(): - try: - # 直接转发状态查询到大模型服务 - resp = await client.get( - "/status", - timeout=5.0 - ) - return jsonify(resp.json()), resp.status_code - except httpx.ReadTimeout: - return jsonify({"error": "状态查询超时"}), 500 - except Exception as e: - return jsonify({"error": str(e)}), 500 \ No newline at end of file diff --git a/controller/QAController.py b/controller/QAController.py new file mode 100644 index 0000000..7855cdf --- /dev/null +++ b/controller/QAController.py @@ -0,0 +1,45 @@ +import json +import traceback + +import httpx +from robyn import jsonify, Response + +from app import app +from controller.client import client + + +@app.post("/api/qa/analyze") +async def analyze(request): + body = request.json() + input_text = body.get("text", "").strip() + if not input_text: + return jsonify({"error": "缺少 text 字段"}), 400 + try: + # 直接转发到大模型服务(假设它返回 { "task_id": "xxx" }) + resp = await client.post( + "/getEntity", + json={"text": input_text}, + timeout=1800.0 # 30分钟 + ) + if resp.status_code == 202 or resp.status_code == 200: + + resp_json = resp.json() + resp_json_data = resp_json.get("data",{}) + resp_json_data = json.loads(resp_json_data) + entities = resp_json_data.get("entities", []) + return Response( + status_code=200, + description=jsonify(entities), + headers={"Content-Type": "text/plain; charset=utf-8"} + ) + else: + return jsonify({ + "error": "提交失败", + "detail": resp.text + }), resp.status_code + except Exception as e: + error_trace = traceback.format_exc() + print("❌ 发生异常:") + print(error_trace) + + return jsonify({"error": str(e),"traceback": error_trace}), 500 \ No newline at end of file diff --git a/controller/__init__.py b/controller/__init__.py new file mode 100644 index 0000000..f8359ef --- /dev/null +++ b/controller/__init__.py @@ -0,0 +1,13 @@ +# controller/__init__.py + +# 导入所有控制器模块(触发其初始化) +from .BuilderController import * +from .GraphController import * +from .LoginController import * +from .QAController import * + +# 可选:如果控制器里定义了 blueprint,也可以在这里统一导出 +# from .BuilderController import builder_bp +# from .GraphController import graph_bp + +# from .LoginController import login_bp \ No newline at end of file diff --git a/service/BuilderService.py b/service/BuilderService.py new file mode 100644 index 0000000..e69de29 diff --git a/vue/src/api/qa.js b/vue/src/api/qa.js new file mode 100644 index 0000000..dfbd242 --- /dev/null +++ b/vue/src/api/qa.js @@ -0,0 +1,15 @@ + +// src/api/graph.js +import request from '@/utils/request'; + +/** + * 获取测试图谱数据(固定返回 Disease 及其所有关系) + * 后端接口:GET /test (无参数) + */ +export function qaAnalyze(data) { + return request({ + url: '/api/qa/analyze', + method: 'post', + data + }); +} \ No newline at end of file diff --git a/vue/src/components/Menu.vue b/vue/src/components/Menu.vue index fc27f62..8ff7169 100644 --- a/vue/src/components/Menu.vue +++ b/vue/src/components/Menu.vue @@ -126,6 +126,7 @@ const handleLogout = () => { z-index: 100; box-shadow: 2px -1px 10px 8px rgb(97 99 100 / 22%); width: 12%; + flex-shrink: 0; flex-grow: 0; } /* --- 侧边栏 --- */ diff --git a/vue/src/system/GraphBuilder.vue b/vue/src/system/GraphBuilder.vue index b67b9c2..214feaa 100644 --- a/vue/src/system/GraphBuilder.vue +++ b/vue/src/system/GraphBuilder.vue @@ -100,6 +100,7 @@ import Menu from "@/components/Menu.vue"; import axios from "axios"; import {analyze, getAIStatus} from "@/api/builder"; +import {qaAnalyze} from "@/api/qa"; export default { name: 'QwenChat', @@ -141,10 +142,13 @@ export default { // 添加用户消息 this.messages.push({ role: 'user', content: text }); this.inputText = ''; - analyze(data).then(res=>{ - console.log(res) - this.messages.push({ role: 'assistant', - content: res,entities:res.entities,relations:res.relations,isKG:true }); + // analyze(data).then(res=>{ + // console.log(res) + // this.messages.push({ role: 'assistant', + // content: res,entities:res.entities,relations:res.relations,isKG:true }); + // }) + qaAnalyze(data).then(res=>{ + }) }, insertPrefix(prefix) { @@ -177,6 +181,7 @@ export default {