wx-agent/test_ship_mapping.py
2026-06-30 13:47:51 +08:00

125 lines
4.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
智能舷号映射 + RAG检索 完整测试脚本
直接调用 search_with_ship_number_strategy展示真实检索结果
"""
import asyncio
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from utils.ship_number_search import search_with_ship_number_strategy, smart_ship_number_mapping
async def interactive_test():
"""交互式完整测试"""
print("=" * 60)
print("智能舷号映射 + RAG检索 完整测试")
print("=" * 60)
print("输入 'exit''quit' 退出")
print("输入 'help' 查看说明")
print("=" * 60)
while True:
print("\n" + "-" * 60)
ship_input = input("请输入舷号/型号/舰名: ").strip()
if ship_input.lower() in ['exit', 'quit', 'q']:
print("退出测试")
break
if ship_input.lower() == 'help':
print("\n使用说明:")
print(" 先输入舷号/型号/舰名(如 163、南昌舰、055驱逐舰")
print(" 再输入查询内容(如 主机排烟温度高)")
print(" 系统会执行完整的智能映射 + RAG三步检索")
continue
if not ship_input:
print("请输入有效内容")
continue
query_input = input("请输入查询内容: ").strip()
if not query_input:
query_input = "主机排烟温度高的维修方案"
print(f"使用默认查询: {query_input}")
search_type = input("搜索类型 (fault/operate回车默认fault): ").strip()
if search_type not in ["fault", "operate"]:
search_type = "fault"
print("\n" + "=" * 60)
print("第一步:智能映射")
print("=" * 60)
try:
matched_ship_number, matched_model, all_numbers, match_type = await smart_ship_number_mapping(ship_input)
print(f"输入: '{ship_input}'")
print(f"匹配类型: {match_type}")
print(f"匹配舷号: {matched_ship_number}")
print(f"匹配型号: {matched_model}")
print(f"该型号所有舷号: {all_numbers}")
if match_type == "none":
print("未匹配到,将使用原始输入进行检索")
except Exception as e:
print(f"映射失败: {str(e)}")
matched_ship_number = None
matched_model = None
all_numbers = None
match_type = "none"
print("\n" + "=" * 60)
print("第二步RAG检索三步策略")
print("=" * 60)
try:
rag_results, matched_kb_name, matched_kb_id = await search_with_ship_number_strategy(
base_query=query_input,
ship_number=ship_input,
top_k=5,
search_type=search_type
)
print(f"\n检索完成!")
print(f"知识库: {matched_kb_name or '未匹配'}")
print(f"知识库ID: {matched_kb_id or '未匹配'}")
print(f"结果数量: {len(rag_results)}")
if rag_results:
print(f"\n{'=' * 60}")
print("第三步:检索结果详情")
print("=" * 60)
for i, item in enumerate(rag_results, 1):
if isinstance(item, dict):
text = item.get("text", "")
kb_name = item.get("kb_name", "")
score = item.get("score", "")
source = item.get("source", "")
print(f"\n--- 结果 {i} ---")
if kb_name:
print(f"知识库: {kb_name}")
if score:
print(f"相似度: {score}")
if source:
print(f"来源: {source}")
if text:
preview = text[:300] + "..." if len(text) > 300 else text
print(f"内容预览:\n{preview}")
elif isinstance(item, str):
preview = item[:300] + "..." if len(item) > 300 else item
print(f"\n--- 结果 {i} ---")
print(f"内容预览:\n{preview}")
else:
print("\n未检索到任何结果")
except Exception as e:
print(f"\n检索失败: {str(e)}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
asyncio.run(interactive_test())