Files
life-echo/api/agents/__pycache__/memory_agent.cpython-312.pyc

62 lines
6.0 KiB
Plaintext
Raw Normal View History

2026-01-07 11:56:53 +08:00
<EFBFBD>
y<>]i<00><00>t<00>dZddlZddlZddlmZmZmZddlmZddl m
Z
ddl m Z m Z mZmZmZGd<08>d <09>Zy)
u\
回忆录整理 Agent基于传记结构将口语改写为书面语归类到章节
<EFBFBD>N)<03>List<73>Dict<63>Optional)<01>
ChatOpenAI)<01>PromptTemplate<74>)<05>get_memory_prompt<70>!get_chapter_classification_prompt<70>get_text_rewrite_prompt<70>CHAPTER_CATEGORIES<45> CHAPTER_ORDERc <00><><00>eZdZdZd<02>Zdedefd<05>Z d dededeedefd <09>Z d d
e
ed eeeefdeeeffd <0C>Z y)<0E> MemoryAgentu回忆录整理 Agentc<00><><00>tjd<01>xstjdd<03>}tjdd<03>}tjdd<06>}|sd|_yd||d<08>}|rJ|jd <09>r|dd
}n|jd <0B>r|dd }|r|jd <0A>s|d z }||d< t di|<04><01>|_y#t
$r
d|_YywxYw)N<> LLM_API_KEY<45>OPENAI_API_KEY<45><00> LLM_BASE_URL<52> OPENAI_MODELzgpt-4og333333<33>?)<03> temperature<72>model<65>openai_api_keyz/v1/chat/completionsi<73><69><EFBFBD><EFBFBD>z/v1<76><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>openai_api_base<73>)<06>os<6F>getenv<6E>llm<6C>endswithr<00> Exception)<05>self<6C>api_key<65>base_url<72>
model_name<EFBFBD>
llm_kwargss <20>CC:\Users\physi\PycharmProjects\life-echo\api\agents\memory_agent.py<70>__init__zMemoryAgent.__init__s<><00><00><15>)<29>)<29>M<EFBFBD>*<2A>M<>b<EFBFBD>i<EFBFBD>i<EFBFBD>8H<38>"<22>.M<><07><15>9<EFBFBD>9<EFBFBD>^<5E>R<EFBFBD>0<><08><17>Y<EFBFBD>Y<EFBFBD>~<7E>x<EFBFBD>8<>
<EFBFBD><16><1B>D<EFBFBD>H<EFBFBD> <12><1F><1F>%<25>
<EFBFBD>
<EFBFBD> <14><17> <20> <20>!7<>8<>#<23>D<EFBFBD>S<EFBFBD>><3E><08><19>"<22>"<22>5<EFBFBD>)<29>#<23>C<EFBFBD>R<EFBFBD>=<3D><08><17><08> 1<> 1<>#<23> 6<><18>C<EFBFBD><0F><08>,4<>J<EFBFBD>(<28> )<29> <1C>!<21>/<2F>J<EFBFBD>/<2F>D<EFBFBD>H<EFBFBD><48><18> <1C><1B>D<EFBFBD>H<EFBFBD> <1C>s<00>7C<00>C<03>C<03> segments_text<78>returnc<00><><00>|jsyt|<01>}|jj|<02>}|jj <00>j <00>}|t vr|Sy)u<>
分类章节
Args:
segments_text: 对话段落文本
Returns:
章节类别childhood
<20> childhood)rr
<00>invoke<6B>content<6E>strip<69>lowerr )r"r)<00>prompt<70>response<73>categorys r'<00>classify_chapterzMemoryAgent.classify_chapter8s^<00><00><14>x<EFBFBD>x<EFBFBD><1E>2<>=<3D>A<><06><17>8<EFBFBD>8<EFBFBD>?<3F>?<3F>6<EFBFBD>*<2A><08><1C>#<23>#<23>)<29>)<29>+<2B>1<>1<>3<><08> <14>)<29> )<29><1B>O<EFBFBD><1B>N<>chapter_category<72>existing_contentc<00>,<00>|jstj|d<01>|dgd<03>St|||xsd<02>}|jj |<04>} |j
j <00>}|jd<04>r|dd}|jd<07>r|dd}|jd<07>r|dd }|j <00>}tj|<06>}|S#tj$r(tj|d<01>|j
dgd<03>cYSwxYw)
u<
将口语改写为书面语
Args:
segments_text: 对话段落文本
chapter_category: 章节类别
existing_content: 已有章节内容(可选)
Returns:
包含 title, content, summary, image_suggestions 的字典
<20>章节r)<04>titler.<00>summary<72>image_suggestionsz```json<6F>Nz```<60>r) rr <00>getr r-r.r/<00>
startswithr <00>json<6F>loads<64>JSONDecodeError)r"r)r6r7r1r2r.<00>results r'<00>rewrite_to_literaryzMemoryAgent.rewrite_to_literaryTs<00><00>"<14>x<EFBFBD>x<EFBFBD>,<2C>/<2F>/<2F>0@<40>(<28>K<>(<28><1D>%'<27> <0E> <0E>)<29><1D>8H<38>JZ<4A>J`<60>^`<60>a<><06><17>8<EFBFBD>8<EFBFBD>?<3F>?<3F>6<EFBFBD>*<2A><08> <0E><1E>&<26>&<26>,<2C>,<2C>.<2E>G<EFBFBD><16>!<21>!<21>)<29>,<2C>!<21>!<21>"<22>+<2B><07><16>!<21>!<21>%<25>(<28>!<21>!<21>"<22>+<2B><07><16><1F><1F><05>&<26>!<21>#<23>2<EFBFBD>,<2C><07><1D>m<EFBFBD>m<EFBFBD>o<EFBFBD>G<EFBFBD><19>Z<EFBFBD>Z<EFBFBD><07>(<28>F<EFBFBD><19>M<EFBFBD><4D><13>#<23>#<23> <0E>,<2C>/<2F>/<2F>0@<40>(<28>K<>#<23>+<2B>+<2B><1D>%'<27> <0E> <0E> <0E>s<00>BC<00>8D<03>D<03>segments<74>existing_chaptersc <00>|<00>|<02>i}i}|D]E}|jdd<02>}|s<01>|j|<05>}||vrg||<||j|<05><00>G|j<00>}|j <00>D]<5D>\}}dj |<08>} |j|i<00>jdd<02>}
|j | ||
<EFBFBD>} | jdtj|d<06><00>| jdd<02>| jdd<02>| jdg<00>||tvrtj|<06>nd d
<EFBFBD>||<<00><>|S) u
处理对话段落,生成或更新章节
Args:
segments: 对话段落列表,每个包含 transcript_text
existing_chapters: 已有章节字典key 为 category
Returns:
更新后的章节字典
<20>transcript_textrz
r.r:r9r;r<i<>)r:r.r;r<r3<00> order_index)
r?r4<00>append<6E>copy<70>items<6D>joinrEr r <00>index) r"rFrG<00>segments_by_category<72>segment<6E>textr3<00>updated_chapters<72>texts<74> combined_textr7rDs r'<00>process_segmentszMemoryAgent.process_segments<74>sY<00><00> <1D> $<24> "<22> <1D>68<36><1C><1F>G<EFBFBD><1A>;<3B>;<3B>0<>"<22>5<>D<EFBFBD><17><18><1C>,<2C>,<2C>T<EFBFBD>2<>H<EFBFBD><17>3<>3<>13<31>$<24>X<EFBFBD>.<2E> <20><18> *<2A> 1<> 1<>$<24> 7<> <20>-<2D>1<>1<>3<><18>3<>9<>9<>;<3B>O<EFBFBD>H<EFBFBD>e<EFBFBD>"<22>K<EFBFBD>K<EFBFBD><05>.<2E>M<EFBFBD>0<>4<>4<>X<EFBFBD>r<EFBFBD>B<>F<>F<>y<EFBFBD>RT<52>U<> <1C><1A>-<2D>-<2D>m<EFBFBD>X<EFBFBD>GW<47>X<>F<EFBFBD> <20><1A><1A>G<EFBFBD>-?<3F>-C<>-C<>H<EFBFBD>h<EFBFBD>-W<>X<>!<21>:<3A>:<3A>i<EFBFBD><12>4<>!<21>:<3A>:<3A>i<EFBFBD><12>4<>%+<2B>Z<EFBFBD>Z<EFBFBD>0C<30>R<EFBFBD>%H<>$<24>@H<>M<EFBFBD>@Y<>}<7D>2<>2<>8<EFBFBD><<3C>_b<5F> *<0E> <1C>X<EFBFBD> &<26> <<3C>" <20>r5)N) <0C>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__r(<00>strr4rrrErrVrr5r'rrs<><00><00><1F> <1C>D<1B>c<EFBFBD><1B>c<EFBFBD><1B>@+/<2F> 4<0E><1A>4<0E><1E>4<0E>#<23>3<EFBFBD>-<2D> 4<0E>
<0E> 4<0E>r8<<3C>6 <20><16>t<EFBFBD>*<2A>6 <20>$<24>D<EFBFBD><13>d<EFBFBD><19>O<EFBFBD>4<>6 <20>
<0E>c<EFBFBD>4<EFBFBD>i<EFBFBD><1F> 6 r5r)rZrrA<00>typingrrr<00>langchain_openair<00>langchain.promptsr<00>promptsr r
r r r rrr5r'<00><module>r`s4<00><01><04>
<EFBFBD> <0B>'<27>'<27>'<27>,<2C><02><02>m <20>m r5