Spaces:
Sleeping
Sleeping
fix: wrong module name
Browse files
modules/response_generator.py
CHANGED
|
@@ -2,6 +2,7 @@ import json
|
|
| 2 |
import random
|
| 3 |
from .ai_model import AIModel
|
| 4 |
from .knowledge_base import KnowledgeBase
|
|
|
|
| 5 |
from utils.logger import log
|
| 6 |
|
| 7 |
class ResponseGenerator:
|
|
@@ -100,7 +101,7 @@ class ResponseGenerator:
|
|
| 100 |
log.error(f"❌ 响应生成失败: {e}", exc_info=True)
|
| 101 |
return "抱歉,我在处理您的请求时遇到了问题,请稍后再试。"
|
| 102 |
|
| 103 |
-
def _generate_vivid_acknowledgement(self, extracted_info: dict, session_state:
|
| 104 |
"""
|
| 105 |
【新增实现】根据最新提取的信息,生成一句生动的、非模板化的确认语。
|
| 106 |
"""
|
|
@@ -126,7 +127,7 @@ class ResponseGenerator:
|
|
| 126 |
# 如果没有提取到新信息,返回空字符串
|
| 127 |
return ""
|
| 128 |
|
| 129 |
-
def _get_dynamic_next_question(self, session_state:
|
| 130 |
"""
|
| 131 |
【新增实现】根据当前缺失的信息,生成引导性的下一个问题。
|
| 132 |
"""
|
|
@@ -140,6 +141,39 @@ class ResponseGenerator:
|
|
| 140 |
# 这里可以从persona配置中动态生成问题,暂时使用硬编码
|
| 141 |
return "您更喜欢哪种旅行风格呢?\n- 🌍 文化探索型\n- 🎨 艺术历史型\n- 🍽️ 美食购物型\n- 🏞️ 自然风光型"
|
| 142 |
return "" # 所有信息都已收集
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 143 |
|
| 144 |
def _generate_knowledge_enhanced_plan(self, user_message: str, session_state: dict) -> str:
|
| 145 |
"""生成融合知识库信息的旅行计划"""
|
|
|
|
| 2 |
import random
|
| 3 |
from .ai_model import AIModel
|
| 4 |
from .knowledge_base import KnowledgeBase
|
| 5 |
+
from .session_manager import SessionManager
|
| 6 |
from utils.logger import log
|
| 7 |
|
| 8 |
class ResponseGenerator:
|
|
|
|
| 101 |
log.error(f"❌ 响应生成失败: {e}", exc_info=True)
|
| 102 |
return "抱歉,我在处理您的请求时遇到了问题,请稍后再试。"
|
| 103 |
|
| 104 |
+
def _generate_vivid_acknowledgement(self, extracted_info: dict, session_state: SessionManager) -> str:
|
| 105 |
"""
|
| 106 |
【新增实现】根据最新提取的信息,生成一句生动的、非模板化的确认语。
|
| 107 |
"""
|
|
|
|
| 127 |
# 如果没有提取到新信息,返回空字符串
|
| 128 |
return ""
|
| 129 |
|
| 130 |
+
def _get_dynamic_next_question(self, session_state: SessionManager) -> str:
|
| 131 |
"""
|
| 132 |
【新增实现】根据当前缺失的信息,生成引导性的下一个问题。
|
| 133 |
"""
|
|
|
|
| 141 |
# 这里可以从persona配置中动态生成问题,暂时使用硬编码
|
| 142 |
return "您更喜欢哪种旅行风格呢?\n- 🌍 文化探索型\n- 🎨 艺术历史型\n- 🍽️ 美食购物型\n- 🏞️ 自然风光型"
|
| 143 |
return "" # 所有信息都已收集
|
| 144 |
+
|
| 145 |
+
|
| 146 |
+
def _get_destination_name(self, session_state: dict) -> str:
|
| 147 |
+
|
| 148 |
+
destination_info = session_state.get('destination')
|
| 149 |
+
if destination_info and isinstance(destination_info, dict):
|
| 150 |
+
return destination_info.get('name', '未知目的地')
|
| 151 |
+
return '未知目的地'
|
| 152 |
+
|
| 153 |
+
def _get_duration_days(self, session_state: dict) -> int:
|
| 154 |
+
|
| 155 |
+
duration_info = session_state.get('duration')
|
| 156 |
+
if duration_info and isinstance(duration_info, dict):
|
| 157 |
+
# 确保即使 'days' 键不存在,也返回一个数字
|
| 158 |
+
return duration_info.get('days', 0)
|
| 159 |
+
# 关键:返回 0 而不是 None
|
| 160 |
+
return 0
|
| 161 |
+
|
| 162 |
+
def _format_budget_info(self, budget_data: dict | None) -> str:
|
| 163 |
+
|
| 164 |
+
if budget_data and isinstance(budget_data, dict):
|
| 165 |
+
# 优先使用现成的描述,因为它最准确
|
| 166 |
+
if budget_data.get('description'):
|
| 167 |
+
return budget_data['description']
|
| 168 |
+
|
| 169 |
+
# 如果没有描述,则动态创建一个
|
| 170 |
+
amount = budget_data.get('amount', '')
|
| 171 |
+
currency = budget_data.get('currency', '')
|
| 172 |
+
if amount: # 仅在有金额时才显示
|
| 173 |
+
return f"{amount} {currency}".strip()
|
| 174 |
+
|
| 175 |
+
# 如果没有预算信息或信息不完整,返回默认字符串
|
| 176 |
+
return '预算未设定'
|
| 177 |
|
| 178 |
def _generate_knowledge_enhanced_plan(self, user_message: str, session_state: dict) -> str:
|
| 179 |
"""生成融合知识库信息的旅行计划"""
|