From 1ba6d0a7f380abe83a84e47fcf7527f44a6465bc Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Sun, 7 Sep 2025 12:59:40 +0800 Subject: [PATCH] 'commit' --- dsLightRag/Volcengine/T2_CreateIndex.py | 114 +----------------- .../__pycache__/chat.cpython-310.pyc | Bin 0 -> 12779 bytes 2 files changed, 1 insertion(+), 113 deletions(-) create mode 100644 dsLightRag/Volcengine/__pycache__/chat.cpython-310.pyc diff --git a/dsLightRag/Volcengine/T2_CreateIndex.py b/dsLightRag/Volcengine/T2_CreateIndex.py index 468cd7a7..4a21eb6b 100644 --- a/dsLightRag/Volcengine/T2_CreateIndex.py +++ b/dsLightRag/Volcengine/T2_CreateIndex.py @@ -16,6 +16,7 @@ from volcenginesdkarkruntime import Ark from Config.Config import VOLC_SECRETKEY, VOLC_API_KEY, VOLC_ACCESSKEY from Volcengine.VikingDBMemoryService import MEMORY_COLLECTION_NAME, VikingDBMemoryException, VikingDBMemoryService, \ initialize_services, ensure_collection_exists +from Volcengine.chat import handle_conversation_turn, archive_conversation # 控制日志输出 logger = logging.getLogger('CollectionMemory') @@ -29,119 +30,6 @@ if not logger.handlers: -def search_relevant_memories(memory_service, collection_name, user_id, query): - """搜索与用户查询相关的记忆,并在索引构建中时重试。""" - logger.info(f"正在搜索与 '{query}' 相关的记忆...") - retry_attempt = 0 - while True: - try: - filter_params = { - "user_id": [user_id], - "memory_type": ["sys_event_v1", "sys_profile_v1"] - } - response = memory_service.search_memory( - collection_name=collection_name, - query=query, - filter=filter_params, - limit=3 - ) - - memories = [] - if response.get('data', {}).get('count', 0) > 0: - for result in response['data']['result_list']: - if 'memory_info' in result and result['memory_info']: - memories.append({ - 'memory_info': result['memory_info'], - 'score': result['score'] - }) - - if memories: - if retry_attempt > 0: - logger.info("重试后搜索成功。") - logger.info(f"找到 {len(memories)} 条相关记忆:") - for i, memory in enumerate(memories, 1): - logger.info( - f" {i}. (相关度: {memory['score']:.3f}): {json.dumps(memory['memory_info'], ensure_ascii=False, indent=2)}") - else: - logger.info("未找到相关记忆。") - return memories - - except Exception as e: - error_message = str(e) - if "1000023" in error_message: - retry_attempt += 1 - logger.info(f"记忆索引正在构建中。将在60秒后重试... (尝试次数 {retry_attempt})") - time.sleep(60) - else: - logger.info(f"搜索记忆时出错 (不可重试): {e}") - return [] - - -def handle_conversation_turn(memory_service, llm_client, collection_name, user_id, user_message, conversation_history): - """处理一轮对话,包括记忆搜索和LLM响应。""" - logger.info("\n" + "=" * 60) - logger.info(f"用户: {user_message}") - - relevant_memories = search_relevant_memories(memory_service, collection_name, user_id, user_message) - - system_prompt = "你是一个富有同情心、善于倾听的AI伙伴,拥有长期记忆能力。你的目标是为用户提供情感支持和温暖的陪伴。" - if relevant_memories: - memory_context = "\n".join( - [f"- {json.dumps(mem['memory_info'], ensure_ascii=False)}" for mem in relevant_memories]) - system_prompt += f"\n\n这是我们过去的一些对话记忆,请参考:\n{memory_context}\n\n请利用这些信息来更好地理解和回应用户。" - - logger.info("AI正在思考...") - - try: - messages = [{"role": "system", "content": system_prompt}] + conversation_history + [ - {"role": "user", "content": user_message}] - completion = llm_client.chat.completions.create( - model="doubao-seed-1-6-flash-250715", - messages=messages - ) - assistant_reply = completion.choices[0].message.content - except Exception as e: - logger.info(f"LLM调用失败: {e}") - assistant_reply = "抱歉,我现在有点混乱,无法回应。我们可以稍后再聊吗?" - - logger.info(f"伙伴: {assistant_reply}") - - conversation_history.extend([ - {"role": "user", "content": user_message}, - {"role": "assistant", "content": assistant_reply} - ]) - return assistant_reply - - -def archive_conversation(memory_service, collection_name, user_id, assistant_id, conversation_history, topic_name): - """将对话历史归档到记忆数据库。""" - if not conversation_history: - logger.info("没有对话可以归档。") - return False - - logger.info(f"\n正在归档关于 '{topic_name}' 的对话...") - session_id = f"{topic_name}_{int(time.time())}" - metadata = { - "default_user_id": user_id, - "default_assistant_id": assistant_id, - "time": int(time.time() * 1000) - } - - try: - memory_service.add_session( - collection_name=collection_name, - session_id=session_id, - messages=conversation_history, - metadata=metadata - ) - logger.info(f"对话已成功归档,会话ID: {session_id}") - logger.info("正在等待记忆索引更新...") - return True - except Exception as e: - logger.info(f"归档对话失败: {e}") - return False - - def main(): logger.info("开始端到端记忆测试...") diff --git a/dsLightRag/Volcengine/__pycache__/chat.cpython-310.pyc b/dsLightRag/Volcengine/__pycache__/chat.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a75ffb6d08555b6bc13f43dfba11a093fdf13588 GIT binary patch literal 12779 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