refactor: 清理不需要的代码文件,添加.gitignore,优化项目结构
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
实时对话管理器
|
||||
@@ -16,6 +16,7 @@ from ..core.llm_client import QwenClient
|
||||
from ..knowledge_base.knowledge_manager import KnowledgeManager
|
||||
from ..core.database import db_manager
|
||||
from ..core.models import Conversation, WorkOrder
|
||||
from ..vehicle.vehicle_data_manager import VehicleDataManager
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -36,6 +37,7 @@ class RealtimeChatManager:
|
||||
def __init__(self):
|
||||
self.llm_client = QwenClient()
|
||||
self.knowledge_manager = KnowledgeManager()
|
||||
self.vehicle_manager = VehicleDataManager()
|
||||
self.active_sessions = {} # 存储活跃的对话会话
|
||||
self.message_history = {} # 存储消息历史
|
||||
|
||||
@@ -81,6 +83,27 @@ class RealtimeChatManager:
|
||||
|
||||
# 搜索相关知识
|
||||
knowledge_results = self._search_knowledge(user_message)
|
||||
|
||||
# 识别VIN并查询实时数据,注入上下文
|
||||
vin = self._extract_vin(user_message)
|
||||
realtime_snippets = []
|
||||
if vin:
|
||||
latest = self.vehicle_manager.get_latest_vehicle_data_by_vin(vin)
|
||||
if latest:
|
||||
# 组织为知识片段参与提示
|
||||
realtime_snippets.append({
|
||||
"question": f"VIN {vin} 的最新实时数据",
|
||||
"answer": json.dumps(latest, ensure_ascii=False),
|
||||
"similarity_score": 1.0,
|
||||
"source": "vehicle_realtime"
|
||||
})
|
||||
# 也放入上下文,便于模型参考
|
||||
session["context"].append({
|
||||
"role": "system",
|
||||
"content": f"车辆VIN {vin} 最新数据: {json.dumps(latest, ensure_ascii=False)}"
|
||||
})
|
||||
if realtime_snippets:
|
||||
knowledge_results = (realtime_snippets + knowledge_results)[:5]
|
||||
|
||||
# 生成回复
|
||||
assistant_response = self._generate_response(
|
||||
@@ -216,6 +239,19 @@ class RealtimeChatManager:
|
||||
"""
|
||||
|
||||
return prompt
|
||||
|
||||
def _extract_vin(self, text: str) -> Optional[str]:
|
||||
"""从文本中提取VIN(17位,I/O/Q不使用,常见校验)"""
|
||||
try:
|
||||
import re
|
||||
# 允许大小写字母和数字,排除 I,O,Q,长度17
|
||||
pattern = r"\b(?!.*[IOQ])[A-HJ-NPR-Z0-9]{17}\b"
|
||||
match = re.search(pattern, text.upper())
|
||||
if match:
|
||||
return match.group(0)
|
||||
return None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
def _calculate_confidence(self, knowledge_results: List[Dict], response_content: str) -> float:
|
||||
"""计算回复置信度"""
|
||||
|
||||
Reference in New Issue
Block a user