统一 hash 函数
This commit is contained in:
parent
e1b3c0cb65
commit
4bf037ade5
@ -22,13 +22,7 @@ from module_admin.entity.vo.ragflow_vo import (
|
|||||||
)
|
)
|
||||||
from utils.log_util import logger
|
from utils.log_util import logger
|
||||||
from utils.response_util import ResponseUtil
|
from utils.response_util import ResponseUtil
|
||||||
from utils.semantic_cache_service import get_semantic_cache_service, lookup_question, store_qa_pair
|
from utils.semantic_cache_service import get_semantic_cache_service, lookup_question, store_qa_pair, get_question_hash
|
||||||
|
|
||||||
def _get_question_hash(question: str) -> str:
|
|
||||||
"""计算问题的hash值"""
|
|
||||||
import hashlib
|
|
||||||
normalized = question.lower().strip()
|
|
||||||
return hashlib.md5(normalized.encode('utf-8')).hexdigest()[:16]
|
|
||||||
from utils.static_qa_service import get_static_qa_service
|
from utils.static_qa_service import get_static_qa_service
|
||||||
|
|
||||||
|
|
||||||
@ -36,7 +30,7 @@ async def _async_store_qa(chat_id: str, question: str, answer: str, redis) -> No
|
|||||||
"""
|
"""
|
||||||
异步存储问答对到语义缓存
|
异步存储问答对到语义缓存
|
||||||
"""
|
"""
|
||||||
store_hash = _get_question_hash(question)
|
store_hash = get_question_hash(question)
|
||||||
logger.info(f"[SemanticCache] 存储QA | chat_id={chat_id} | question={question} | hash={store_hash} | answer_length={len(answer)}")
|
logger.info(f"[SemanticCache] 存储QA | chat_id={chat_id} | question={question} | hash={store_hash} | answer_length={len(answer)}")
|
||||||
try:
|
try:
|
||||||
await store_qa_pair(chat_id, question, answer, redis)
|
await store_qa_pair(chat_id, question, answer, redis)
|
||||||
@ -157,7 +151,7 @@ async def converse_with_chat_assistant(
|
|||||||
# ========== 2. RAG历史缓存查找 ==========
|
# ========== 2. RAG历史缓存查找 ==========
|
||||||
logger.info(f'[SemanticCache] 准备执行RAG历史缓存查找 | redis={redis is not None} | chat_id={converse_params.chat_id}')
|
logger.info(f'[SemanticCache] 准备执行RAG历史缓存查找 | redis={redis is not None} | chat_id={converse_params.chat_id}')
|
||||||
if redis:
|
if redis:
|
||||||
lookup_hash = _get_question_hash(converse_params.question)
|
lookup_hash = get_question_hash(converse_params.question)
|
||||||
logger.info(f'[SemanticCache] 开始查找 | chat_id={converse_params.chat_id} | question={converse_params.question} | hash={lookup_hash} | threshold=0.60')
|
logger.info(f'[SemanticCache] 开始查找 | chat_id={converse_params.chat_id} | question={converse_params.question} | hash={lookup_hash} | threshold=0.60')
|
||||||
cache_result = await lookup_question(
|
cache_result = await lookup_question(
|
||||||
converse_params.chat_id,
|
converse_params.chat_id,
|
||||||
@ -202,7 +196,7 @@ async def converse_with_chat_assistant(
|
|||||||
result = RAGFlowService.converse_with_chat_assistant_services(converse_params)
|
result = RAGFlowService.converse_with_chat_assistant_services(converse_params)
|
||||||
|
|
||||||
cache_question = cleaned_question if style_removed else converse_params.question
|
cache_question = cleaned_question if style_removed else converse_params.question
|
||||||
store_hash = _get_question_hash(cache_question)
|
store_hash = get_question_hash(cache_question)
|
||||||
logger.info(f'[RAG_CACHE] 准备存储 | chat_id={converse_params.chat_id} | question={cache_question} | hash={store_hash}')
|
logger.info(f'[RAG_CACHE] 准备存储 | chat_id={converse_params.chat_id} | question={cache_question} | hash={store_hash}')
|
||||||
|
|
||||||
async def make_cache_store(chat_id: str, question: str):
|
async def make_cache_store(chat_id: str, question: str):
|
||||||
|
|||||||
@ -87,14 +87,6 @@ class SemanticCacheService:
|
|||||||
"""构建缓存键"""
|
"""构建缓存键"""
|
||||||
return f"{self.CACHE_PREFIX}:{chat_id}:{question_hash}"
|
return f"{self.CACHE_PREFIX}:{chat_id}:{question_hash}"
|
||||||
|
|
||||||
def _hash_question(self, question: str) -> str:
|
|
||||||
"""对问题进行哈希,生成唯一标识"""
|
|
||||||
# 标准化问题文本(去除多余空格、统一标点)
|
|
||||||
normalized = self._normalize_question(question)
|
|
||||||
hash_value = hashlib.md5(normalized.encode('utf-8')).hexdigest()[:16]
|
|
||||||
logger.info(f"[SemanticCache] Hash计算 | 原始={question} | 标准化={normalized} | hash={hash_value}")
|
|
||||||
return hash_value
|
|
||||||
|
|
||||||
def _normalize_question(self, question: str) -> str:
|
def _normalize_question(self, question: str) -> str:
|
||||||
"""标准化问题文本"""
|
"""标准化问题文本"""
|
||||||
match_service = get_match_service()
|
match_service = get_match_service()
|
||||||
@ -134,7 +126,8 @@ class SemanticCacheService:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
# 1. 精确匹配
|
# 1. 精确匹配
|
||||||
question_hash = self._hash_question(question)
|
normalized = question.lower().strip()
|
||||||
|
question_hash = hashlib.md5(normalized.encode('utf-8')).hexdigest()[:16]
|
||||||
exact_key = self._build_cache_key(chat_id, question_hash)
|
exact_key = self._build_cache_key(chat_id, question_hash)
|
||||||
|
|
||||||
logger.info(f"[SemanticCache] 精确查找 | chat_id={chat_id} | question={question} | hash={question_hash} | key={exact_key}")
|
logger.info(f"[SemanticCache] 精确查找 | chat_id={chat_id} | question={question} | hash={question_hash} | key={exact_key}")
|
||||||
@ -227,7 +220,8 @@ class SemanticCacheService:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
# 构建缓存条目
|
# 构建缓存条目
|
||||||
question_hash = self._hash_question(question)
|
normalized = question.lower().strip()
|
||||||
|
question_hash = hashlib.md5(normalized.encode('utf-8')).hexdigest()[:16]
|
||||||
cache_key = self._build_cache_key(chat_id, question_hash)
|
cache_key = self._build_cache_key(chat_id, question_hash)
|
||||||
|
|
||||||
logger.info(f"[SemanticCache] 存储缓存 | chat_id={chat_id} | question={question} | hash={question_hash} | key={cache_key}")
|
logger.info(f"[SemanticCache] 存储缓存 | chat_id={chat_id} | question={question} | hash={question_hash} | key={cache_key}")
|
||||||
@ -435,6 +429,12 @@ async def store_qa_pair(chat_id: str, question: str, answer: str, redis_client=N
|
|||||||
return await service.store(chat_id, question, answer, redis_client)
|
return await service.store(chat_id, question, answer, redis_client)
|
||||||
|
|
||||||
|
|
||||||
|
def get_question_hash(question: str) -> str:
|
||||||
|
"""计算问题的hash值(公共函数,确保存储和查找一致)"""
|
||||||
|
normalized = question.lower().strip()
|
||||||
|
return hashlib.md5(normalized.encode('utf-8')).hexdigest()[:16]
|
||||||
|
|
||||||
|
|
||||||
async def clear_cache(chat_id: str = None, redis_client=None) -> bool:
|
async def clear_cache(chat_id: str = None, redis_client=None) -> bool:
|
||||||
"""清除缓存"""
|
"""清除缓存"""
|
||||||
service = get_semantic_cache_service()
|
service = get_semantic_cache_service()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user