Files
assist/src/dialogue/__pycache__/dialogue_manager.cpython-310.pyc

101 lines
12 KiB
Plaintext
Raw Normal View History

o
<00><>5iL<00>@s<>ddlZddlmZmZmZmZddlmZddlZddlm Z ddl
m Z m Z ddl mZddlmZdd lmZd
d lmZdd lmZdd lmZddlmZe<00>e<1C>ZGdd<10>d<10>ZdS)<11>N)<04>Dict<63>List<73>Optional<61>Any)<01>datetime<6D>)<01>
db_manager)<02> WorkOrder<65> Conversation)<01>
QwenClient)<01>KnowledgeManager)<01>VehicleDataManager<65>)<01>ConversationHistoryManager)<01> TokenMonitor)<01>AISuccessMonitor)<01>SystemOptimizerc@s<>eZdZdZdd<03>Z   d9dedeedeedeed eee ff
d
d <0B>Z
deedeed efd d <0A>Z deedededed ef
dd<11>Z de eee fd efdd<14>Z d:dedededed eee ff
dd<1B>Z   d9dedeedeedeed ef
dd <20>Zded e eee ffd!d"<22>Z  # $d;dedeed%ed&ed e eee ff
d'd(<28>Zd)ed efd*d+<2B>Zd<dedeed efd,d-<2D>Zd<dedeed eee ffd.d/<2F>Zd=ded1ed eee ffd2d3<64>Zd>d5ed6ed eee ffd7d8<64>ZdS)?<3F>DialogueManageru对话管理器cCsBt<00>|_t<02>|_t<04>|_t<06>|_t<08>|_ t
<EFBFBD>|_ t <0C>|_ i|_dS<00>N)r <00>
llm_clientr <00>knowledge_managerr <00>vehicle_managerr<00>history_managerr<00> token_monitorr<00>ai_success_monitorr<00>system_optimizer<65>conversation_history)<01>self<6C>r<00>-/root/assist/src/dialogue/dialogue_manager.py<70>__init__s
zDialogueManager.__init__N<5F> user_message<67> work_order_id<69>user_id<69>
vehicle_id<EFBFBD>returncCst<00><01>}d}d}<07>z=|j<02>|pd<03>sddiWS|j<02>|<01>}|ds+dd|d<00><00>iWS|jj|d d
d <0B>} d}
|r>|j<07>|<04>}
|<00> ||<03>} d } | ryd } t
| dd<0E>d<0F>D]%\} }| | <0A>d|d<00>d<12>7} | d|d<00>d<12>7} | d|dd<17>d<18>7} qSd }|
r<EFBFBD>d}|
<EFBFBD> <0B>D] \}}|d|<10>dt j |ddd<1D><02>d<12>7}|d|d<00>d<12>7}q<>|d7}|jj|| | r<>| gnd|r<>|gndd <20>}d|vr<>|d}d}nd
}t<00><01>|<00><10>}|j<02>|<13>}|<06>r<>|<12>d!i<00>p<>i}|<12>d"i<00>p<>i}|<16>d#<23>}|<16>d$<24>}|du<00>r t|t<14><02>r |<15>d%<25><01>p |<15>d#<23><01>p d&}|du<00>r&t|t<14><02>r&|<15>d'<27><01>p%|<15>d$<24><01>p%d&}|<17>sD|<01>rDz tdt|<01>d(<00>}Wn t<17>yCd&}Ynw|<18>sh|<12>d)<29><01>rhztdt|<12>d)<29><01>d(<00>}Wn t<17>ygd&}Ynw|<12>d*<2A><01>pu|<12>d+<2B><01>pud,}|j<18>|t|<17>pd&<26>t|<18>p<>d&<26><01>}|j<02>|<1A><01>s<>dd-iWS|jj|<03>p<>d||t|<17>p<>d&<26>t|<18>p<>d&<26>|||d.<2E>|jj|<03>p<>d||<12>d+d,<2C>d/|||t|<01>t|<12>d)d <0C><02>d0<64> |<06>s<>|WS|jj |<03>p<>d|||d)|<00>!| <09>|d1d2<64>| D<00>d3<64>}|<03>r3||j"v<01>r<>g|j"|<|j"|<00>#d4|t<00><01><00>$<24>d5<64><03>|j"|<00>#d6|d)t<00><01><00>$<24>d5<64><03>t|j"|<00>d7k<04>r3|j"|d8d<02>|j"|<|d)|| |<00>!| <09>||t<00><01><00>$<24>d9<64>WSt<17>y<>}z7t%|<1C>}t<00><01>|<00><10>}|jj|<03>pbd|d,d/d||t|<01>d&d0<64> t&<26>'d:|<1C><00><02>dd;t%|<1C><01><00>iWYd}~Sd}~ww)<u处理用户消息FN<46> anonymous<75>erroru$请求频率过高请稍后再试<E5868D>is_safeu输入不安全: <20>message<67>T)<02>top_k<5F> verified_only<6C>u相关知识库信息:
rru
. 问题: <20>question<6F>
u 答案: <20>answeru 置信度: <20>confidence_scorez.2fz
u车辆实时数据:
z- <20>: <20>value)<01> ensure_asciiu 更新时间: <20> timestamp)r!<00>context<78>knowledge_base<73> vehicle_data<74>usage<67> token_usage<67> input_tokens<6E> output_tokens<6E> prompt_tokensr<00>completion_tokens<6E><00>response<73>model<65>
model_namezqwen-plus-latestu$请求成本超限,请稍后再试)r#r"rBr;r<<00> response_time<6D>success<73> error_messagezchat/completions) r#r"rB<00>endpointrDrCrE<00> input_length<74> output_lengthcSsg|]}|d<00>qS)<01>idr)<02>.0<EFBFBD>rrrr<00>
<listcomp><3E>sz8DialogueManager.process_user_message.<locals>.<listcomp>)r#r"r!<00>assistant_responser1rC<00>knowledge_used<65>user)<03>role<6C>contentr5<00> assistant<6E>i<><69><EFBFBD><EFBFBD>)r@<00>conversation_idrNr1rC<00> optimizationr5u处理用户消息失败: u处理失败: )(r<00>nowr<00>check_rate_limit<69>check_input_securityr<00>search_knowledger<00>get_latest_vehicle_data<74>_build_context<78> enumerate<74>items<6D>json<6F>dumpsr<00>generate_response<73> total_seconds<64>optimize_response_time<6D>get<65>
isinstance<EFBFBD>dict<63>max<61>len<65> Exceptionr<00>_calculate_cost<73>int<6E>check_cost_limit<69>record_token_usager<00>record_api_callr<00>save_conversation<6F>_calculate_confidencer<00>append<6E> isoformat<61>str<74>loggerr')rr!r"r#r$<00>
start_timerDrE<00>security_check<63>knowledge_resultsr8r6<00>knowledge_context<78>i<>result<6C>vehicle_context<78> data_type<70> data_info<66>response_resultrC<00>optimization_resultr9r:r;r<rB<00>estimated_costrT<00>errr<00>process_user_messages 
 <06>  $  <06> 

 <02><02>  <04>
  <06> 
<06>  <06> 


<08>

<08>
<08>
<06> <08><02>z$DialogueManager.process_user_messagec
Cs<>g}|rz`t<00><01><00>R}|<04>t<03><01>tj|k<02><01><06>}|rT|<03>d<01>|<03>d|j<08><00><02>|<03>d|j <09><00><02>|<03>d|j
<EFBFBD><00><02>|<03>d|j <0B><00><02>|<03>d|j <0C><00><02>|<03>d|j <0A><00><02>Wd<00>n1s^wYWnty~}zt<0F>d |<06><00><02>WYd}~nd}~ww|r<>|jj||d
d <0B>}|r<>|<03>d <0C>|<03>|<07>n0||jvr<>|j|d d<08>}|r<>|<03>d <0C>|D]} | ddkr<>dnd}
|<03>|
<EFBFBD>d| d<00><00><03>q<>|r<>d<14>|<03>SdS)u构建对话上下文u当前工单信息:u 工单号: u标题: u描述: u类别: u 优先级: u状态: Nu获取工单信息失败: <20>)r#r"<00>context_lengthu最近的对话历史:i<><69><EFBFBD><EFBFBD>rPrOu用户u助手r2rQr/r-)r<00> get_session<6F>queryr <00>filterrI<00>firstrp<00>order_id<69>title<6C> description<6F>category<72>priority<74>statusrhrsr'r<00>get_conversation_contextr<00>join) rr"r#<00> context_parts<74>session<6F>
work_orderr<EFBFBD><00>history_context<78>recent_history<72>msgrPrrrr[<00>sR

<02><02>
<02><1C><04> <08><02><06>
 

zDialogueManager._build_contextrMrNc
Cs<>z/t<00><01><00> }t||||t<03><04>d<01>}|<05>|<06>|<05><06>|jWd<00>WS1s(wYWdStyJ}zt <09>
d|<07><00><02>WYd}~dSd}~ww)u保存对话记录)r"r!rMrNr5Nu保存对话记录失败: r) rr<>r
rrV<00>add<64>commitrIrhrsr')rr"r!rMrNr<><00> conversationr<6E>rrr<00>_save_conversations$
<06>
(<28> <08><02>z"DialogueManager._save_conversationrvcCsN|sdStdd<03>|D<00><01>}tdd<03>|D<00><01>t|<01>}|d|d}t|d<07>S)u计算回复置信度g<00>?cs<00><00>|] }|<01>dd<01>VqdS)<03>similarity_scorerN<>rc<00>rJryrrr<00> <genexpr>-<00><02>z8DialogueManager._calculate_confidence.<locals>.<genexpr>csr<>)r1rNr<4E>r<>rrrr<>.r<>g333333<33>?g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?g<00>?)rf<00>sumrg<00>min)rrv<00>max_similarity<74>avg_confidence<63>
confidencerrrro's 
z%DialogueManager._calculate_confidence<63>mediumr<6D>r<>r<>r<>c
Cs<>zGt<00><01><00>8}tdt<03><04><00>d<02><01><00>||||dt<03><04>d<04>}|<05>|<06>|<05><07>t<08> d|j
<EFBFBD><00><02>|j |j
dd<07>Wd<00>WS1s@wYWdSt yj}zt<08> d |<07><00><02>d
d t|<07><01><00>iWYd}~Sd}~ww) u 创建工单<E5B7A5>WOz %Y%m%d%H%M%S<>open)r<>r<>r<>r<>r<>r<><00>
created_atu创建工单成功: rD)r"r<>r<>Nu创建工单失败: r'u创建失败: )rr<>r rrV<00>strftimer<65>r<>rs<00>infor<6F>rIrhr'rr)rr<>r<>r<>r<>r<>r<>r<>rrr<00>create_work_order4s0
<06>
<04>(<28><08><02>z!DialogueManager.create_work_orderr<72><00>
resolution<EFBFBD>satisfaction_scorec
Cs<>zat<00><01><00>R}|<05>t<03><01>tj|k<02><01><06>}|s Wd<00>WdS|r$||_|r)||_|dur0||_ t
<EFBFBD> <0B>|_ |<05> <0A>|dkrE|rE|j<0E>|<01>t<10>d|<01><00><02> Wd<00>WdS1sZwYWdSty|}zt<10>d|<07><00><02>WYd}~dSd}~ww)u 更新工单NF<4E>resolvedu更新工单成功: Tu更新工单失败: )rr<>r<>r r<>rIr<>r<>r<>r<>rrV<00>
updated_atr<EFBFBD>r<00>learn_from_work_orderrsr<>rhr')rr"r<>r<>r<>r<>r<>r<>rrr<00>update_work_orderUs8

<02><02><12>
  (<28><08><02>z!DialogueManager.update_work_orderc
Cs<>z0t<00><01><00>!}|<02>t<03><01>tj|k<02><01>tj<07><01><08>}dd<02>|D<00>Wd<00>WS1s)wYWdSt yL}zt
<EFBFBD> d|<04><00><02>gWYd}~Sd}~ww)u获取工单对话历史cSs*g|]}|j|j|j|j<03><04>|jd<00><05>qS))rIr!rMr5r1)rIr!rMr5rqr1)rJ<00>convrrrrL<00>s<04><04><06>z<DialogueManager.get_conversation_history.<locals>.<listcomp>Nu获取对话历史失败: ) rr<>r<>r
r<>r"<00>order_byr5<00>allrhrsr')rr"r<><00> conversationsr<73>rrr<00>get_conversation_history{s 

<02> <02><04>(<28><08><02>z(DialogueManager.get_conversation_history<72>
r<00>limit<69>offsetc
CsPz |jj||||d<01>WSty'}zt<03>d|<05><00><02>gWYd}~Sd}~ww)u*获取用户对话历史(支持分页))r#r"r<>r<>u 获取用户对话历史失败: N)rr<>rhrsr')rr#r"r<>r<>r<>rrr<00>get_user_conversation_history<72>s<08><08><02>z-DialogueManager.get_user_conversation_historyrTc
CsFz|j<00>|<01>WSty"}zt<03>d|<02><00><02>WYd}~dSd}~ww)u删除对话记录u删除对话记录失败: NF)r<00>delete_conversationrhrsr')rrTr<>rrrr<><00>s<08><02>z#DialogueManager.delete_conversationc
CsHz|j<00>||<02>WSty#}zt<03>d|<03><00><02>WYd}~dSd}~ww)u!删除用户的所有对话记录u 删除用户对话记录失败: Nr)r<00>delete_user_conversationsrhrsr'<00>rr#r"r<>rrrr<><00>s<08><02>z)DialogueManager.delete_user_conversationsc
C<00>Jz|j<00>||<02>WSty$}zt<03>d|<03><00><02>iWYd}~Sd}~ww)u获取对话统计信息u获取对话统计失败: N)r<00>get_conversation_statsrhrsr'r<>rrrr<><00><00><08><02>z&DialogueManager.get_conversation_stats<74><00>daysc
Cr<>)u获取Token使用统计u获取Token使用统计失败: N)r<00>get_user_token_statsrhrsr')rr#r<>r<>rrr<00>get_token_usage_stats<74>r<>z%DialogueManager.get_token_usage_stats<74>rB<00>hoursc
Cs\z|r |j<00>||<02>WS|j<00>|<02>WSty-}zt<04>d|<03><00><02>iWYd}~Sd}~ww)u获取AI性能统计u获取AI性能统计失败: N)r<00>get_model_performance<63>get_system_performancerhrsr')rrBr<>r<>rrr<00>get_ai_performance_stats<74>s<08><02>z(DialogueManager.get_ai_performance_stats)NNN)r<>)Nr<4E>rr)r<>)Nr<4E>)<1A>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__r rrrrjrrr<>r[r<>r<00>floatror<><00>boolr<6C>r<>r<>r<>r<>r<>r<>r<>rrrrrs<> <04><02><02><02><02>

<EFBFBD>D-<02><02><02><02>
<EFBFBD><04><02><02><02><02>

<EFBFBD>$<04><02><02><02><02>
<EFBFBD>&<04><02><02><02><02>
<EFBFBD>$ $r)<1F>logging<6E>typingrrrrrr^<00> core.databaser<00> core.modelsr r
<00>core.llm_clientr <00> knowledge_base.knowledge_managerr <00>vehicle.vehicle_data_managerr rr<00>analytics.token_monitorr<00>analytics.ai_success_monitorr<00>core.system_optimizerr<00> getLoggerr<72>rsrrrrr<00><module>s