处理与知识库无关的查询
处理与知识库无关的查询
背景
用户输入"你好"等与知识库无关的问候语时,系统仍然强制检索并生成测试用例,导致答非所问。
从日志可以看到:
- 查询"你好" -> 检索10个文档 -> CRAG判定全部INCORRECT -> 但仍强制生成回答
问题
- 缺少对问候/闲聊类查询的识别
- CRAG判定不相关后仍强制生成答案
- 用户体验差,答非所问
优化方案
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评估
浙公网安备 33010602011771号