Bläddra i källkod

没有修改agent_sql_generation 无法生成SQL的时候转发至agent_chat,但是修改了规则判断的条,在进行规则判断的时候只根据[CURRENT]来判断,跳过了[CONTEXT].

wangxq 3 veckor sedan
förälder
incheckning
25437a7e22
3 ändrade filer med 54 tillägg och 5 borttagningar
  1. 11 3
      agent/citu_agent.py
  2. 42 1
      agent/classifier.py
  3. 1 1
      app_config.py

+ 11 - 3
agent/citu_agent.py

@@ -477,6 +477,15 @@ class CituLangGraphAgent:
     def _agent_chat_node(self, state: AgentState) -> AgentState:
         """聊天Agent节点 - 直接工具调用模式"""
         try:
+            # 🔹 添加State调试日志 - 打印agent_chat接收到的完整State内容
+            import json
+            try:
+                state_debug = dict(state)
+                self.logger.debug(f"agent_chat接收到的State内容: {json.dumps(state_debug, ensure_ascii=False, indent=2)}")
+            except Exception as debug_e:
+                self.logger.debug(f"State序列化失败: {debug_e}")
+                self.logger.debug(f"agent_chat接收到的State内容: {state}")
+            
             self.logger.info(f"开始处理聊天: {state['question']}")
             
             question = state["question"]
@@ -486,9 +495,8 @@ class CituLangGraphAgent:
             enable_context_injection = self.config.get("chat_agent", {}).get("enable_context_injection", True)
             context = None
             if enable_context_injection:
-                # TODO: 在这里可以添加真实的对话历史上下文
-                # 例如从Redis或其他存储中获取最近的对话记录
-                # context = get_conversation_history(state.get("conversation_id"))
+                # 实际上上下文已经在API层面处理,并合并到question中了
+                # 这里不需要再次获取Redis上下文
                 pass
             
             # 直接调用general_chat工具

+ 42 - 1
agent/classifier.py

@@ -301,9 +301,50 @@ class QuestionClassifier:
         else:
             return rule_result
     
+    def _extract_current_question_for_rule_classification(self, question: str) -> str:
+        """
+        从enhanced_question中提取[CURRENT]部分用于规则分类
+        如果没有[CURRENT]标签,返回原问题
+        
+        Args:
+            question: 可能包含上下文的完整问题
+            
+        Returns:
+            str: 用于规则分类的当前问题
+        """
+        try:
+            # 处理None或非字符串输入
+            if question is None:
+                self.logger.warning("输入问题为None,返回空字符串")
+                return ""
+            
+            if not isinstance(question, str):
+                self.logger.warning(f"输入问题类型错误: {type(question)},转换为字符串")
+                question = str(question)
+            
+            # 检查是否为enhanced_question格式
+            if "\n[CURRENT]\n" in question:
+                current_start = question.find("\n[CURRENT]\n")
+                if current_start != -1:
+                    current_question = question[current_start + len("\n[CURRENT]\n"):].strip()
+                    self.logger.debug(f"规则分类提取到当前问题: {current_question}")
+                    return current_question
+            
+            # 如果不是enhanced_question格式,直接返回原问题
+            self.logger.debug("未检测到[CURRENT]标签,使用完整问题进行规则分类")
+            return question.strip()
+            
+        except Exception as e:
+            self.logger.warning(f"提取当前问题失败: {str(e)},返回空字符串")
+            return ""
+
     def _rule_based_classify(self, question: str) -> ClassificationResult:
         """基于规则的预分类"""
-        question_lower = question.lower()
+        # 提取当前问题用于规则判断,避免上下文干扰
+        current_question = self._extract_current_question_for_rule_classification(question)
+        question_lower = current_question.lower()
+        
+        self.logger.debug(f"规则分类使用问题: {current_question}")
         
         # 检查非业务实体词
         non_business_matched = []

+ 1 - 1
app_config.py

@@ -169,7 +169,7 @@ REDIS_PASSWORD = None
 
 # 缓存开关配置
 ENABLE_CONVERSATION_CONTEXT = True      # 是否启用对话上下文
-ENABLE_QUESTION_ANSWER_CACHE = True     # 是否启用问答结果缓存
+ENABLE_QUESTION_ANSWER_CACHE = False     # 是否启用问答结果缓存
 ENABLE_EMBEDDING_CACHE = True           # 是否启用embedding向量缓存
 
 # TTL配置(单位:秒)