增加代码知识库;修复文档处理内容;增加API设置
This commit is contained in:
183
RAG-TEST-TOOLS/feature_retriever_cli.py
Normal file
183
RAG-TEST-TOOLS/feature_retriever_cli.py
Normal file
@@ -0,0 +1,183 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
feature_retriever_cli.py - 功能需求检索命令行工具(简化版)
|
||||
专注于自然语言输入和多推理约束分析
|
||||
"""
|
||||
import sys
|
||||
import json
|
||||
import time
|
||||
from pathlib import Path
|
||||
from typing import Dict
|
||||
|
||||
# 添加项目根目录到Python路径
|
||||
project_root = Path(__file__).parent
|
||||
sys.path.insert(0, str(project_root))
|
||||
|
||||
from feature_retriever import FeatureRetriever
|
||||
from config import VECTOR_DB_PATH, METADATA_PATH, KNOWLEDGE_GRAPH_PATH
|
||||
import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def display_result(result: Dict, query: str):
|
||||
"""显示分析结果"""
|
||||
print("\n" + "=" * 80)
|
||||
print("功能需求实现分析报告")
|
||||
print("=" * 80)
|
||||
|
||||
# 查询信息
|
||||
print(f"查询: {query}")
|
||||
print(f"分析时间: {time.strftime('%Y-%m-%d %H:%M:%S')}")
|
||||
|
||||
# 实现状态
|
||||
status_icon = "✅" if result.get("implemented") else "❌"
|
||||
status_text = "已实现" if result.get("implemented") else "未实现"
|
||||
print(f"\n实现状态: {status_icon} {status_text}")
|
||||
print(f"综合评分: {result.get('total_score', 0):.3f}")
|
||||
print(f"判断理由: {result.get('reason', '无理由')}")
|
||||
|
||||
# 最相关函数
|
||||
if result.get("most_relevant_function"):
|
||||
rel_func = result["most_relevant_function"]
|
||||
print(f"\n最相关函数: {rel_func.get('name')}")
|
||||
print(f"所在文件: {rel_func.get('file')}")
|
||||
print(f"语义相似度: {rel_func.get('similarity', 0):.3f}")
|
||||
if rel_func.get("summary"):
|
||||
print(f"功能摘要: {rel_func.get('summary')}")
|
||||
|
||||
# 约束分析详情
|
||||
print(f"\n约束分析详情 ({result.get('passed_constraints', 0)}/{result.get('total_constraints', 0)} 通过):")
|
||||
print("-" * 60)
|
||||
|
||||
constraint_scores = result.get("constraint_scores", {})
|
||||
|
||||
constraint_descriptions = {
|
||||
"semantic_constraint": "语义相似度约束",
|
||||
"call_chain_constraint": "调用链完整性约束",
|
||||
"modularity_constraint": "功能模块性约束",
|
||||
"architecture_constraint": "架构合理性约束"
|
||||
}
|
||||
|
||||
for constraint_name, data in constraint_scores.items():
|
||||
constraint_desc = constraint_descriptions.get(constraint_name, constraint_name)
|
||||
passed_icon = "✅" if data.get("passed") else "❌"
|
||||
score = data.get("score", 0)
|
||||
weight = data.get("weight", 0)
|
||||
weighted = data.get("weighted_score", 0)
|
||||
|
||||
print(f"{passed_icon} {constraint_desc}:")
|
||||
print(f" 评分: {score:.3f} | 权重: {weight:.2f} | 加权: {weighted:.3f}")
|
||||
|
||||
# 相关函数统计
|
||||
print(f"\n相关函数统计:")
|
||||
print(f" 语义匹配函数数: {result.get('relevant_functions_count', 0)}")
|
||||
|
||||
# 实现建议
|
||||
print(f"\n实现建议:")
|
||||
if result.get("implemented"):
|
||||
print(" ✅ 该功能在代码库中已有良好实现,建议:")
|
||||
print(" 1. 参考最相关函数的实现逻辑")
|
||||
print(" 2. 检查调用关系是否满足当前需求")
|
||||
print(" 3. 如有扩展需求,可基于现有函数进行修改")
|
||||
else:
|
||||
print(" ❌ 该功能在代码库中未完全实现,建议:")
|
||||
print(" 1. 检查约束分析详情,了解薄弱环节")
|
||||
print(" 2. 可能需要新增函数或扩展现有函数")
|
||||
print(" 3. 设计时参考相似功能模块的架构")
|
||||
|
||||
print("=" * 80)
|
||||
|
||||
|
||||
def save_result_to_file(result: Dict, query: str, output_file: str = "analysis_result.json"):
|
||||
"""保存结果到文件"""
|
||||
result_data = {
|
||||
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"query": query,
|
||||
"result": result
|
||||
}
|
||||
|
||||
try:
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
json.dump(result_data, f, indent=2, ensure_ascii=False)
|
||||
print(f"\n分析结果已保存到: {output_file}")
|
||||
except Exception as e:
|
||||
print(f"保存结果失败: {e}")
|
||||
|
||||
|
||||
def main():
|
||||
"""命令行主函数"""
|
||||
print("卫星代码功能需求检索分析系统")
|
||||
print("=" * 60)
|
||||
print("功能: 基于多推理约束分析功能实现状态")
|
||||
print("约束包括:")
|
||||
print(" 1. 语义相似度约束")
|
||||
print(" 2. 调用链完整性约束")
|
||||
print(" 3. 功能模块性约束")
|
||||
print(" 4. 架构合理性约束")
|
||||
print("=" * 60)
|
||||
|
||||
# 初始化检索器
|
||||
config = {
|
||||
"vector_db_path": VECTOR_DB_PATH,
|
||||
"metadata_path": METADATA_PATH,
|
||||
"knowledge_graph_path": KNOWLEDGE_GRAPH_PATH
|
||||
}
|
||||
|
||||
try:
|
||||
retriever = FeatureRetriever(config)
|
||||
if not retriever.load_knowledge_base():
|
||||
print("加载知识库失败,请检查配置文件")
|
||||
sys.exit(1)
|
||||
|
||||
print(f"知识库加载成功: {len(retriever.metadatas)} 个函数")
|
||||
print("输入自然语言描述功能需求进行分析")
|
||||
print("输入 'quit' 或 'exit' 退出")
|
||||
print("=" * 60)
|
||||
|
||||
while True:
|
||||
try:
|
||||
query = input("\n请输入功能需求描述: ").strip()
|
||||
|
||||
if query.lower() in ["quit", "exit", "q"]:
|
||||
print("再见!")
|
||||
break
|
||||
|
||||
if not query:
|
||||
print("请输入功能需求描述")
|
||||
continue
|
||||
|
||||
print(f"\n正在分析: {query}")
|
||||
print("正在执行多约束分析...")
|
||||
|
||||
# 执行分析
|
||||
result = retriever.analyze_with_multiple_constraints(query)
|
||||
|
||||
# 显示结果
|
||||
display_result(result, query)
|
||||
|
||||
# 询问是否保存结果
|
||||
save_option = input("\n是否保存分析结果? (y/n): ").strip().lower()
|
||||
if save_option == 'y':
|
||||
timestamp = time.strftime("%Y%m%d_%H%M%S")
|
||||
output_file = f"analysis_{timestamp}.json"
|
||||
save_result_to_file(result, query, output_file)
|
||||
|
||||
# 询问是否继续
|
||||
continue_option = input("\n是否继续分析? (y/n): ").strip().lower()
|
||||
if continue_option != 'y':
|
||||
print("再见!")
|
||||
break
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\n\n分析被中断,输入 'quit' 退出")
|
||||
except Exception as e:
|
||||
print(f"分析过程中出错: {e}")
|
||||
logger.error(f"分析过程错误: {e}", exc_info=True)
|
||||
|
||||
except Exception as e:
|
||||
print(f"初始化失败: {e}")
|
||||
logger.error(f"系统初始化错误: {e}", exc_info=True)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user