From 51aeea014e551c603677c55cd8d3aaa5c864a6f5 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Sun, 7 Sep 2025 13:52:34 +0800 Subject: [PATCH] 'commit' --- .../Volcengine/Kit/VikingDBMemoryService.py | 117 +----------------- .../VikingDBMemoryService.cpython-310.pyc | Bin 16332 -> 14293 bytes dsLightRag/Volcengine/T3_ChatWithMemory.py | 23 ++-- 3 files changed, 18 insertions(+), 122 deletions(-) diff --git a/dsLightRag/Volcengine/Kit/VikingDBMemoryService.py b/dsLightRag/Volcengine/Kit/VikingDBMemoryService.py index facbac66..f5e822d9 100644 --- a/dsLightRag/Volcengine/Kit/VikingDBMemoryService.py +++ b/dsLightRag/Volcengine/Kit/VikingDBMemoryService.py @@ -212,70 +212,6 @@ class VikingDBMemoryService(Service): res = self.json("AddSession", {}, json.dumps(params)) return json.loads(res) - def handle_conversation_turn(self, llm_client, user_id, user_message, conversation_history): - """处理一轮对话,包括记忆搜索和LLM响应。""" - logger.info("\n" + "=" * 60) - logger.info(f"用户: {user_message}") - - # 修复:调用正确的search_relevant_memories方法 - relevant_memories = self.search_relevant_memories(MEMORY_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(self, 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: - self.add_session( - collection_name=MEMORY_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 wait_for_collection_ready(self, timeout=300, interval=10): """ 等待集合准备就绪 @@ -352,52 +288,6 @@ class VikingDBMemoryService(Service): logger.info(f"检查集合时出错: {e}") raise - def search_relevant_memories(self, collection_name, user_id, query, limit=3): - """搜索与用户查询相关的记忆,并在索引构建中时重试。""" - 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 = self.search_memory( - collection_name=collection_name, - query=query, - filter=filter_params, - limit=limit - ) - - 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 setup_memory_collection(self): """独立封装记忆体创建逻辑,返回memory_service供测试使用""" @@ -441,7 +331,7 @@ def initialize_services(): return memory_service, llm_client -def search_relevant_memories(memory_service, collection_name, user_id, query): +def search_relevant_memories(memory_service, collection_name, user_id, assistant_id, query): """搜索与用户查询相关的记忆,并在索引构建中时重试。""" logger.info(f"正在搜索与 '{query}' 相关的记忆...") retry_attempt = 0 @@ -449,6 +339,7 @@ def search_relevant_memories(memory_service, collection_name, user_id, query): try: filter_params = { "user_id": [user_id], + "assistant_id": assistant_id, # 添加assistant_id过滤条件 "memory_type": ["sys_event_v1", "sys_profile_v1"] } response = memory_service.search_memory( @@ -489,12 +380,12 @@ def search_relevant_memories(memory_service, collection_name, user_id, query): return [] -def handle_conversation_turn(memory_service, llm_client, collection_name, user_id, user_message, conversation_history): +def handle_conversation_turn(memory_service, llm_client, collection_name, user_id, assistant_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) + relevant_memories = search_relevant_memories(memory_service, collection_name, user_id, assistant_id, user_message) system_prompt = "你是一个富有同情心、善于倾听的AI伙伴,拥有长期记忆能力。你的目标是为用户提供情感支持和温暖的陪伴。" if relevant_memories: diff --git a/dsLightRag/Volcengine/Kit/__pycache__/VikingDBMemoryService.cpython-310.pyc b/dsLightRag/Volcengine/Kit/__pycache__/VikingDBMemoryService.cpython-310.pyc index 2f61a84a0684f87ea6348e5e0e25be4926fb6b8b..a4727782f7775e7ae465eb8c1efe3d30466dbd62 100644 GIT binary patch delta 4328 zcmaJ^YiwM_6~1%t-Mepl{aD-UN3xFd@WzQ9$4LlDNE(GC3OG(6Jjw#yE;~2Q-K=*v zbMJ$(UKT>A z2bhvrBe#?*&De+$)_?#@7~=~5a!P2vr7JzYk-Kx(7|bOl`rQkZU_t7tb!P1HqW zboH=Idxptjg|4A%p|_d#(!SGDyyc9fO7X}cDYnrG^J86MUZY(k?R-jGK|1*Fv`A=? zkDb&1)?Ol@@w{gjY2ttK?5jt&Ssj3*m==rqSOf3(CjDY!7{{9Ur1$mR%^=29){Z@W zsI48*lT>GH9S*oE+qM%&vBOc0>Z6WoSo+9Mk1I)o!Des8$uh$oV=k06 zb_>dz5pa-gL%0p07hzF6Yo`zUcgdZraYz9Gleqk1wZ7?3g9Aj{i$nXkQoFNVXl;ac zyf)ADe3I!2rXMTlumyMV@79J%FF#(pvOKqX+;3V*t6(NlIS6_H4Q&8$R7*c$Ihvlu z{+LH>gQFz#hNFSep?98|K<_^AMp^#A2Qt*3KIXl zXrTvT4IilM3@yxGwu;lb!7|Qg7?5zzabJ@Q`gs$pca%ZRWCU(W(m%!kO-?-%83Um=f~}%k#c4igwWxrXwtL1JoCJa2SsCTPk<#;)k(>UaAxa{5!mKG}{*1)>xC~zwJ{=Z8iY2Nd;O~bg)}?W^ zL4+JyP%D1rvE$~G&NMx;>QNYuDML(5-ak8;oj|F2flzZqD?(>+1<3^VGdK#c@GGvr)(eW5j?YJ#1twAnXC0 zDa^a8LOhARrx3~rH@Ey%%iAQ+e;nzpKZr^TeB@t78d{(F-*Y3aL(}73el_zEnPVc$V>e^#B+1VLiK(BsftkONgSQByE9D1uFl=%$$* z*5jTO)038-(5v0z|Lo}?9`0Y0nZD4!mS~r8_F4X`^?NqHisEw!^B%l_O>_fFvxxi~ zTef4Moh;`M4cu2=fx0UZu&!4@H#TFl0EM}PvbaWM_B6`a0o)lHinX!`cC;e20XSak z2!uh6?69K_=2A!5QXJ|;XhOIhl>$(b%a)NE(XAsn%GTmQAA+cbM^G{la2rKtvByxd z5gtc4gCK%^86~k5uYu$Q6L7Xk(@g1^Od?UWlRHo^jDXp(Mv@fC{1*RY!^V&=;A@w| z8c~Vw>rgvu=Zzabo8KI`IV;(NQ|E8EA7JxE07z3m%07eu!b=Dj5$5yIRb^xxhb9mv z5vuYTn;6e#!jEt2CNJ~RH67&_i6mLlB|?dsq|p0ZuS%)P?F5cUhH&T`qFF#_(^ zSKPHU+d~`1WLTu*A-Uu$`GsDi?E{^#?H87t##P#ExziqK!{W4sMriB7v&y(Msfi_Z z+jGBksIo*G_Eg%cWO+wFB~mFsq+-A2vjbzK6r}BT5F)t(E;igEm0V)M4%@{&n>#iH zz@`XeSh`=*qz5G0SqhvC9D>%YoOMWB~ST5ju>*`Nlotb#!>iLOl z@4oW+d*`C73V4XCqSwaXn|X5j+Qrk?-?}pM%cpvKdl?*_bPxL>AiD$*Qyg~zN=w3^ zP5{!>03u{9XvO^_`bdtACalrC{)K|7YUTDgiE~dOlqG4a#O?;saiwyFtmXLOjxS`a zLhv6smi=c)SsPtBJS>A z2cPu=1^!;&K~mt}bv@-+u&Pc85{v4uCG&YbOC2SnXC1GeEx=s@Rj}%kn6IkmU`_Ts zI#W|2kSNMi*!v~|ZdE+UbPM(|X~7FNZ^eU^yECz;@~9KfqI@oELcJ9`Zs?|?RkqO~ zMqH~LL*=S@1&uD`C-*OHZ5x79H6Mb(dRZkh{Hd}`G@|`Sb@8LO?koS5y$^#a-0Im6 zZZMXJUGQ&u<|sYK7}<8srlcj?k}cZ`P}nu*D!GB`Kws8FRiG{q{j_AeZ>QSZ!`nE3WBweFdedkvu@Hl)B?8Dmx3pQz!ve1Z0Q%O4fY(# zZ0(YNc6r)p2ZS4fel}1p7B28}ZCjM$Z9e|{woUwRZCXvi1N(IC`)^!*`e$1pPs8m$ zB_{v4z58HHEy`=7BCGeXXFv(^asa->n?5Exa_>4vfiqlmY>samawL@-$!~uKPY+Xi zxl~-kC!;O=;jN93q%U;b2Ka}L9h(Hncka7E^HY=8PmKYW9nBmyA*o_=TxGe8?zmIA ztOZ@Pi`5PNP?_lq9ST4(`8xWeg&kdF`F+@4k*fonLZjlZf;4 z4_^BGgLk(?Ws>S5rrlR-E6lbjkX9wEqzT5(Iw8oB&_wEHlK_ zvXCBeKEAXo9j{}0Mn8^KXEy)i!Af9>JcIqQ;x!cxzz-$}?}Q~HiTiNxGCI7~v+>$F zKjEiWJ~R4_hZ#E5f?Hc##?9UaZJ!(>A(vJ#3FTu9I@ps4+Yzb=%saXwu2<0|zO`$^ z3icZqkHs8!B0+O0crIWjIc|Kc!uy52jk*^)gr-bTW*7HfS_%^^xt)298u`=l9J zF&Q6y@4x$h@BRPpzrTN+{cfQw8x98~`gxXqz3;2>m&?M6+%w&v?3Am@sFs%lDhZ|} zUTvG|={gi*GOt2IbrEXpo3)$dT6#+d^ZPJtApRPs2Vbw%v)? zkJm=*UwWRAm)W1y*EBVdE-}?nlj)qJC3tVn(FY#Hcj30F506g2sXr~#sDr*8a>PF8 z+f#*2@(Kb+&6zwF;8k{=KM@p1QG>RKJ?4Mzj#?698efK*7WCHpj07_{--rf}d&nO| zD=Hjyz!-6~lxYkuRKXq$Jh68zwfCrr6sN1{Bsr#VoGOH}nnJ|ZQ@nn`Z-HwSmL}$}DXga!)L4C|8j=@nALn%ieO7O&B zj(-$=#hJ+5QHOcj(YTQtTC8H*^gHD%<={Q&-2`a1>nm4QTx;2Ut$k-@SD_87VIFyqF-q%mZsveW0QqjLS7 zG-^sM-G^8o%h{*QZ{o2eManxI_nR_=zf$30BOJ=U@rjb%$X4v>O6p2 z4#)va!1YzUP&XxK?c+<9c6Otan8~|fV|mmT0EgaxlAkU)MUy;H-|~UGij%lj?W*$- zYR3Ra01pGMug?F~cNdcI>G@xX1n~C``pfCEB$?8L%;ZT~b|uA9Pe>;flr3pOF;$Cd zCe^%$sd?S<@Fu2BXhfF!5y|r0E{)O1yw}p1*Yci_nD3;zRm$sPPCw=tjj}?3nuFs? zuWV^`5(`?3j}GTmF6@E3cRO{r!P_;9e=yph;$MWI&ek zL7J{YOkH6G=apoY==Cv)Rpo<+f*FtdeNcYT-A=U?h|PDkw29FC@~p-R2sPZD28hrj zv-XoMo$^)t`z^PY&HCtkE`9FBi;uqA8J)EoHlC5+wa;%{pPbT0l?_oRIA{!J`A9sK z*`M7xB|9M_lN;tnJdsPLQd3IF7p4?PX=!y->c7}L1Gl78IWw6Z9J=+VwA#B0!D?yr zLljnO?Om-m%ColFx}ES$>jzfMB8=X)=i*nsG&BC<#lt5rA0BIIX>s)2NRH@z%C2au zCDqrpH8xEtJ)S}0!L(~3bj6Yw+|{-B^64?!)6BCkUw-8|Y%9~YuON1M;oQ>~&b`tZ zb^M83j+9Dd%vjjb)7jo$gHr^dT{=s0MuI2%;@n6Z2dG0_96`#+IkkK5*n8LAAB*p} ztE=md9rx_Ht2^F(+ul1Itv{Q}I9jqVVLCzVGi|^PDJ~|tkuVL%o9wg8+w~6YjgJGs zr$pojO(Vl%A>lVpAe|nJC(|h-V>;g9oWbKM=GeR1Z!nz7-&Q8oQV@CDdUtEcT77QN{_fixPVFQ^X-l0|3G@>5C8*8gNQ-cQo zr2W^M(giPnmKynU1df`@nEWh?M*%MYaL4oPdWvKxRJwu`<1eEsU}lF>$#^C~vkJBo zL?>d@f~!H#8W?5jK0SHG=1t0I6K<(;aW8ZF&ZY0j9{ySCXzyxxYLBbs zK`Odh7WYu{Wf5i_PcCg3L$0NI=;@W^BD%-sSpIJN*2d<@w=mCQb?rlq%auBL`tyx< z%KA3+xXJ$c^8PyUobywe9$q3e&$VS&M4S0b=(lLk)u~L%OeNB(Q6oSlxd>;=3%8>hbkW zXs%2cu9sNZxZwE*+AJSGVo@xkY4!-h5FQ3g`k)^azbOZrnlc`1+h4*V@p{5F$7T^Q$LWjeD_Lo-n~?KwJ4M0`A5D@ zju#@wYcm5@XiUzB*)l6k8+nOTtfD~b5eqiJeOcq2Qb7u0%Q4UPj2jGBSfP1;?Io|) z5e%dG(4o*iD$UCj7)2et_kmDs<*Y3?bq$EPFc(rD8^83*7cabaJi2bShOTg3^wNpf zW*(lt^vsdVFP)zG#!-qk9I@mc{(VCJ0|JV3!hh$3p*b>S&?`<@;G%cVN9^-Wbsyr# zX%sn7GRqAbj1qs7V0Hs2KhorSHnMAy4o&YXR|GkR5R>DYf&jdezMUO_CS6&|CHqo*>AV#log$>xTD z<85oDUwg-_{X+AHDY*W+xw$YEE>RXgOk-S6*AqiS6o(u&ZDbt3kr^g3qOi4q5K4|D zIPR}#Xsm3(YY)f6#Zln3=Y+Xo(xV|^Qpl#*6yBdo({yp>CMn|SKSc4-aD2tss#7{J zoHiYqav3+2xwP^l%zP~^@aL&6Nq3Y(qEV%2vVwn#F6+P1G`n%b9`!9ZX4SnA*TLI`{?SOoBs}?Ang))d>eJxcuaA3`dc(7uW682-kE{dq{@Y;ffK ze+Zm#oZcuD$dX1n9gn+LQ!g&)R`jU>fasw?Zl^uGc5|&SZvfu~l;VnK!6bi+rtbk> z0xYs2Z0&j3Zdkv*05Pc%%>O{`MS6eg{pejIdOvK@bAJKBdx`|_VLs+3g4c=QDQ^I= z&k=mENbq~;^%AHrP_8gX@IK@R#EZL$kcrL_0f^v*jJ$zZw|tJ^+bu7Dm|_SB{vMas ziv(Xu1n(6DUsWV{FRLyRygwfhBWf%^@ogkc83LxRC4#RL1RoHDPxQ`~E+BYjd5Z+U zOc1;%3xa=RE^Pt92Z`WAticM=Moy86)kN@`Sg_I3?9;KvLNTc+^7u+5HFG>JWa4r0 zo#XLU{O{>bI9{jx9|4OPn*S3j;XeGI0UrVU3*aY!JYIbv9kH~#Bw?w(GpK@Of z*)Q3)U*x_4D?phra$jG+KOdaSeFGx*#Vf%L_Z6jZPq{Dkq7Yw&a4&LS`ntJqfwKDQ zQkraeCg^!WR!7Rv+a)N}aC2X>uULdXLTAGt1$+wdX~1U)5KoFfL{%^S?V~^b$ADvi z#{o|OO1D%g2=7U%{1wf>pQ2ax?X4RN{7=yBPXSK@o&lTyoCJIx@C5*t