Files
zoujiwen 517691c2d6 上传文件至 kg_lab_6.13
6.18 更新数据配置路径统一,和前端demo
2025-06-18 16:02:47 +08:00

114 lines
3.8 KiB
Python

from chains_lab import Problem_rewrite
from chains_lab import booway_cypher_chain
from chains_lab import question_answer, question_answer_calculation
from vector_lab import intersection_of_three_lists
from utils import find_target_item, find_target_items, pre_mapping, pre_mapping2
from utils import extract_concrete_info, extract_query_prefix_list, split_chinese_bracketed_phrases
import json
from extraction_info import info_data_json
# 样例
# input_str1 = "杆塔总基数是多少?"
# input_str2 = "单回路长度是多少?"
# input_str3 = "计算一下角钢塔的塔材装材费"
# input_str4 = "计算一下土石方总量"
# input_str5 = "板式塔基的各类基础数量占总塔基数比例是多少?"
# input_str6 = "基础混凝土总量是多少"
# input_str7 = "计算一下本体工程机械费"
# input_str8 = "项目建设技术服务费合计"
# 初始化chians
problem_rewrite = Problem_rewrite()
qa_chains = question_answer()
calculation_chains = question_answer_calculation()
# 加载数据
with open(info_data_json, 'r', encoding='utf-8') as file:
data = json.load(file)
print("📥 请输入查询内容,输入 'exit' 可退出程序。\n")
while True:
input_str = input("🔍 输入问题:")
if input_str.lower() == 'exit':
print("👋 已退出。")
break
try:
results = intersection_of_three_lists(input_str)
if not results:
print("⚠️ 无法从向量中获取候选项。")
continue
retriever = results[0]
print(f"➡️ 匹配向量检索结果:{retriever}")
# 重写问题,提取关键词
keywords = problem_rewrite.invoke({
"query": input_str,
"retriever": retriever
})
print(f"🧠 提取关键词:{keywords}")
# 预映射为图数据库结构
input_neo4j = pre_mapping(keywords, data)
print(f"📊 图谱相关知识输出:\n{input_neo4j}\n")
question = input_neo4j
input_str = input_str
if isinstance(question, str):
response = booway_cypher_chain.invoke(question)
generated_cypher = response.get("intermediate_steps")[0]
# print(str(generated_cypher))
temp = response.get("result")
# print(temp)
finally_result = qa_chains.invoke({"query":input_str,
"retriever_keywords":keywords,
"retriever_info":temp})
print(f"📊 图谱最终检索输出:\n{finally_result}\n")
elif isinstance(question, list):
ques = extract_query_prefix_list(question)
temp = extract_concrete_info(question)
ques_info = split_chinese_bracketed_phrases(temp[0])
print(ques)
retriever_info = []
for i in ques[:12]:
try:
response = booway_cypher_chain.invoke(i)
temp = response.get("result")
# todo: 重复筛选策略
retriever_info.append(temp)
except Exception as e:
print(f"处理问题时出错: {e}")
retriever_info.append(None)
retriever_keywords = ques_info[0]
calculation = ques_info[-1]
finally_result = calculation_chains.invoke({"query":question,
"retriever_keywords":retriever_keywords,
"calculation":calculation,
"retriever_info":retriever_info})
print(f"📊 图谱最终检索输出:\n{finally_result}\n")
except Exception as e:
print(f"❌ 发生错误:{e}")