
    8g                         S SK Jr  S SKJr  S SKJrJr  S SKJr  S SK	J
r
  S SKJr  \" 5         S SKr\R                  R                  SS	5      r\" S
\ 35         " S S5      rg)    )ConversationBufferMemory)RedisChatMessageHistory)ChatPromptTemplateMessagesPlaceholder)
ChatOpenAI)PromptClass)load_dotenvN	REDIS_URLzredis://localhost:6379/0zRedis URL: c                   l    \ rS rSrS\R
                  " S5      4S jrS rSS\4S jjr	SS\4S jjr
S	rg
)MemoryClass   chat_history
BASE_MODELc                 :    Xl         / U l        [        US9U l        g )N)model)	memorykeymemoryr   	chatmodel)selfr   r   s      E   /Volumes/MOVESPEED/AI课程/xiaolang/DingTalk_langchain/src/Memory.py__init__MemoryClass.__init__   s    "#%0    c                 V    [        5       R                  R                  SSS9n[        5       R                  n[        R
                  " SUS-   4S/5      nX@R                  -  nUR                  XS   S   S	.5      nU$ ! [         a   n[        S
5        [        U5         S nAg S nAff = f)N    )	feelScorewho_you_aresystemu  
这是一段你和用户的对话记忆，对其进行总结摘要，摘要使用第一人称'我'，并且提取其中的关键信息，以如下格式返回：
 总结摘要 | 过去对话关键信息
例如 用户张三问候我好，我礼貌回复，然后他问我langchain的向量库信息，我回答了他今年的问题，然后他又问了比特币价格。|Langchain, 向量库,比特币价格)userz{input}defaultroloSet)inputr   u   总结出错)
r   SystemPromptformatMOODSr   from_messagesr   invokeKeyErrorprint)r   store_messager$   Moodspromptchainsummaryes           r   summary_chainMemoryClass.summary_chain   s    	&=55<<qVX<YLM''E'55<  +G  G  H#7 F ^^+Ell]QZK[\eKf#ghGN 	.!!HH	s   A;A> >
B(B##B(
session_idc                     [        SU5        [        S[        5        [        [        US9nUR                  n[	        U5      S:  a|  SnU H*  nU[        U5      R                   SUR                   3-  nM,     U R                  U5      nUR                  5         UR                  U5        [        SUR                  5        U$ [        S5        U$ ! [         a  n[        U5         S nAg S nAff = f)	Nzsession_id:z
redis_url:urlr3   P   r   z: u   添加总结后:zgo to next step)r*   	redis_urlr   messageslentype__name__contentr1   clearadd_message	Exception)r   r3   chat_message_historyr+   str_messagemessager/   r0   s           r   
get_memoryMemoryClass.get_memory#   s    	-,,	*#:*$  199M=!B& ,Gd7m&<&<%=R?P#QQK  -,,[9$**,$009(*>*G*GH++'(++ 	!H	s   C C C 
C/C**C/c                     U R                  US9nUc  [        S5        [        [        US9n[	        U R
                  SSU R                  SSSUS	9U l        U R                  $ )
N)r3   zchat_memory is Noner5   r    u   小浪助手outputTi  )llmhuman_prefix	ai_prefix
memory_key
output_keyreturn_messagesmax_token_limitchat_memory)rD   r*   r   r8   r   r   r   r   )r   r3   rO   s      r   
set_memoryMemoryClass.set_memory<   se    ooo<'(1iJWK.$~~  #	
 {{r   )r   r   r   N)session1)r<   
__module____qualname____firstlineno__osgetenvr   r1   strrD   rP   __static_attributes__ r   r   r   r      s7    !/ryy7N 1
S 2S  r   r   )langchain.memoryr   *langchain_community.chat_message_historiesr   langchain_core.promptsr   r   langchain_openair   
src.Promptr   dotenvr	   rV   environgetr8   r*   r   rZ   r   r   <module>rc      sM    5 N J ' "   	JJNN;(BC	 I;  ? ?r   