处理与知识库无关的查询

处理与知识库无关的查询

背景

用户输入"你好"等与知识库无关的问候语时,系统仍然强制检索并生成测试用例,导致答非所问。

从日志可以看到:

  • 查询"你好" -> 检索10个文档 -> CRAG判定全部INCORRECT -> 但仍强制生成回答

问题

  1. 缺少对问候/闲聊类查询的识别
  2. CRAG判定不相关后仍强制生成答案
  3. 用户体验差,答非所问

优化方案

1. 添加查询预分类(ai_core/agent.py)

在Agent决策前,添加简单查询识别:

# 问候语/闲聊关键词
GREETING_KEYWORDS = ["你好", "hello", "hi", "嗨", "在吗", "您好", "早上好", "晚上好", "谢谢", "再见"]

# 无意义查询
NON_QUERY_KEYWORDS = ["测试", "test"]  # 太泛的词

def is_greeting_query(query: str) -> bool:
    """判断是否为问候语"""
    q = query.lower().strip()
    return any(kw in q for kw in GREETING_KEYWORDS)

def is_too_generic(query: str) -> bool:
    """判断是否太泛"""
    return len(query.strip()) <= 2

2. 修改Agent决策逻辑(ai_core/agent.py)

_decide方法中,检测到问候语直接返回友好回复:

def _decide(self, query: str, context: list):
    # 如果是问候语,直接回答
    if is_greeting_query(query):
        return Thought(
            thought="用户发送问候语,应以贾维斯风格友好回应",
            action=AgentAction.ANSWER,
            action_input={"query": query, "is_greeting": True}
        )

3. 修改RAG工具响应(ai_core/tool.py)

当CRAG判定全部INCORRECT时,返回特定标记:

# 在CRAG评估后
if incorrect_count == len(docs):
    return {
        "success": True,
        "answer": None,  # 表示无相关答案
        "clarification": "抱歉,知识库中没有找到与您问题相关的内容。您可以尝试询问关于智慧停车系统测试用例的具体问题,例如:如何测试车牌识别?",
        "retrieved_docs": []
    }

4. 修改Agent处理逻辑

检测到answer为None时,以友好方式回应:

# 在Agent中处理
if observation.get("answer") is None:
    clarification = observation.get("clarification")
    if clarification:
        result["answer"] = f"Sir, {clarification}"
        result["success"] = True

关键文件

  • ai_core/agent.py - Agent决策逻辑
  • ai_core/tool.py - RAG工具
  • ai_core/chains.py - CRAG评估
posted @ 2026-04-11 15:10  菠萝包与冰美式  阅读(16)  评论(0)    收藏  举报