hanyuqing 3 months ago
parent
commit
d730500c89
  1. 2
      controller/BuilderController.py
  2. 31
      controller/QAController.py
  3. 20
      vue/src/system/GraphQA.vue

2
controller/BuilderController.py

@ -107,7 +107,6 @@ async def analyze(request: Request):
json={"text": final_text}, json={"text": final_text},
timeout=1800.0 # 30分钟 timeout=1800.0 # 30分钟
) )
# 6. 返回结果 # 6. 返回结果
if resp.status_code in (200, 202): if resp.status_code in (200, 202):
try: try:
@ -121,7 +120,6 @@ async def analyze(request: Request):
"detail": resp.text, "detail": resp.text,
"status_code": resp.status_code "status_code": resp.status_code
}, status_code=resp.status_code) }, status_code=resp.status_code)
except Exception as e: except Exception as e:
error_trace = traceback.format_exc() error_trace = traceback.format_exc()
print("❌ 后端异常:") print("❌ 后端异常:")

31
controller/QAController.py

@ -21,6 +21,7 @@ async def analyze(request):
json={"text": input_text}, json={"text": input_text},
timeout=1800.0 # 30分钟 timeout=1800.0 # 30分钟
) )
qaList = []
if resp.status_code == 202 or resp.status_code == 200: if resp.status_code == 202 or resp.status_code == 200:
resp_json = resp.json() resp_json = resp.json()
@ -45,9 +46,37 @@ async def analyze(request):
"text": input_text}, "text": input_text},
timeout=1800.0 # 30分钟 timeout=1800.0 # 30分钟
) )
resp_data = resp.json()
inner_data = json.loads(resp_data["data"])
# 第二步:获取 json 数组
items = inner_data["json"]
# 第三步:按 sort 排序(虽然所有都是 0.9,但为了通用性还是排序)
# 如果 sort 相同,可以保留原始顺序(使用 stable sort),或按 xh 排序等
sorted_items = sorted(items, key=lambda x: x["sort"], reverse=True)
# 第四步:取前5个
top5 = sorted_items[:1]
for item in top5:
resp = await client.post(
"/extract_entities_and_relations",
json={"text": item['answer']},
timeout=1800.0 # 30分钟
)
if resp.status_code in (200, 202):
result = resp.json()
print(result)
qaList.append({
"answer": item["answer"],
"result": result,
})
print(f"xh: {item['xh']}, answer: {item['answer']}, sort: {item['sort']}")
print(resp.json())
return Response( return Response(
status_code=200, status_code=200,
description=jsonify(resp.json()), description=jsonify(qaList),
headers={"Content-Type": "text/plain; charset=utf-8"} headers={"Content-Type": "text/plain; charset=utf-8"}
) )
else: else:

20
vue/src/system/GraphQA.vue

@ -32,7 +32,8 @@
v-for="(item, index) in answers" v-for="(item, index) in answers"
:key="index" :key="index"
class="answer-item" class="answer-item"
:class="{ 'highlight': index === 0 }" @click="selectGraph(index)"
:class="{ 'highlight': selected === index }"
> >
{{ item }} {{ item }}
</div> </div>
@ -60,15 +61,21 @@ export default {
data() { data() {
return { return {
query:"", query:"",
answers:['糖尿病不能吃什么','糖尿病不能吃什么','糖尿病不能吃什么','糖尿病不能吃什么','糖尿病不能吃什么',] answers:['糖尿病不能吃什么','糖尿病不能吃什么','糖尿病不能吃什么','糖尿病不能吃什么','糖尿病不能吃什么',],
selected:0,
}; };
}, },
methods: { methods: {
selectGraph(index){
this.selected=index
},
handleSearch(){ handleSearch(){
let data={ let data={
text:this.query text:this.query
} }
qaAnalyze().then(res=>{ this.query=""
qaAnalyze(data).then(res=>{
}) })
} }
@ -167,6 +174,7 @@ export default {
height: 30vw; height: 30vw;
overflow-y: auto; overflow-y: auto;
padding-right: 10px; padding-right: 10px;
cursor: pointer;
} }
.answer-items::-webkit-scrollbar { .answer-items::-webkit-scrollbar {
@ -208,7 +216,11 @@ export default {
border-color: #0066cc; border-color: #0066cc;
color: #fff; color: #fff;
} }
.answer-item:hover {
background-color: #165DFF;
border-color: #0066cc;
color: #fff;
}
.empty-state { .empty-state {
text-align: center; text-align: center;
color: #fff; color: #fff;

Loading…
Cancel
Save