Files
assist/src/web/__pycache__/app.cpython-311.pyc

163 lines
40 KiB
Plaintext
Raw Normal View History

2025-09-06 21:06:18 +08:00
<EFBFBD>
u"<22>h<EFBFBD>Z<00> <00><> <00>dZddlZddlZddlZddlmZmZddlmZmZm Z m
Z
m Z m Z ddl mZej<00>ej<00>ej<00>ej<00>e<13><00><00><00><00><00><00><00>ddlmZddlmZddlmZmZmZdd lmZdd
lmZee <20><00>Z!ee!<21><00>e<15><00>Z"e<17><00>Z#e<1D><00>Z$e<1F><00>Z%e!<21>&d <0B><00>d <0C><00><00>Z'e!<21>&d <0A><00>d<0E><00><00>Z(e!<21>&d<0F><00>d<10><00><00>Z)e!<21>&d<11><00>d<12><00><00>Z*e!<21>&d<13><00>d<14><00><00>Z+e!<21>&ddg<01><17><00>d<18><00><00>Z,e!<21>&d<19><00>d<1A><00><00>Z-e!<21>&ddg<01><17><00>d<1B><00><00>Z.e!<21>&ddg<01><17><00>d<1E><00><00>Z/e!<21>&ddg<01><17><00>d <20><00><00>Z0e!<21>&d!dg<01><17><00>d"<22><00><00>Z1e!<21>&d#dg<01><17><00>d$<24><00><00>Z2e!<21>&d%<25><00>d&<26><00><00>Z3e!<21>&d'dg<01><17><00>d(<28><00><00>Z4e!<21>&d)<29><00>d*<2A><00><00>Z5e!<21>&d+<2B><00>d,<2C><00><00>Z6e!<21>&d-dg<01><17><00>d.<2E><00><00>Z7e!<21>&d/dg<01><17><00>d0<64><00><00>Z8e!<21>&d1<64><00>d2<64><00><00>Z9e!<21>&d3dg<01><17><00>d4<64><00><00>Z:e!<21>&d5<64><00>d6<64><00><00>Z;e!<21>&d7dg<01><17><00>d8<64><00><00>Z<e!<21>&d9<64><00>d:<3A><00><00>Z=e!<21>&d;<3B><00>d<<3C><00><00>Z>e!<21>&d=dg<01><17><00>d><3E><00><00>Z?e!<21>&d?dg<01><17><00>d@<40><00><00>Z@e!<21>&dAdg<01><17><00>dB<64><00><00>ZAe!<21>&dCdg<01><17><00>dD<64><00><00>ZBe!<21>&dEdg<01><17><00>dF<64><00><00>ZCe!<21>&dG<64><00>dH<64><00><00>ZDe!<21>&dI<64><00>dJ<64><00><00>ZEe!<21>&dGdg<01><17><00>dK<64><00><00>ZFe!<21>&dL<64><00>dM<64><00><00>ZGe!<21>&dNdg<01><17><00>dO<64><00><00>ZHe!<21>&dPdg<01><17><00>dQ<64><00><00>ZIe!<21>&dRdg<01><17><00>dS<64><00><00>ZJe!<21>&dTdg<01><17><00>dU<64><00><00>ZKe!<21>&dV<64><00>dW<64><00><00>ZLe!<21>&dVdg<01><17><00>dX<64><00><00>ZMe!<21>&dY<64><00>dZ<64><00><00>ZNe!<21>&d[<5B><00>d\<5C><00><00>ZOe!<21>&d[dg<01><17><00>d]<5D><00><00>ZPe!<21>&d^<5E><00>d_<64><00><00>ZQe!<21>&d`<60><00>da<64><00><00>ZRe!<21>&db<64><00>dc<64><00><00>ZSe!<21>&dd<64><00>de<64><00><00>ZTe!<21>&d`dg<01><17><00>df<64><00><00>ZUe!<21>&dgdg<01><17><00>dh<64><00><00>ZVe dikre!<21>Wdjdkdl<64>m<EFBFBD><00>dSdS)nuK
TSP助手预警管理Web应用
提供预警系统的Web界面和API接口
<EFBFBD>N)<02>datetime<6D> timedelta)<06>Flask<73>render_template<74>request<73>jsonify<66>redirect<63>url_for)<01>CORS)<01> TSPAssistant)<01>TSPAgentAssistant)<03> AlertRule<6C>
AlertLevel<EFBFBD> AlertType)<01>RealtimeChatManager)<01>VehicleDataManager<65>/c<00> <00>td<01><00>S)u主页 - 综合管理平台zdashboard.html<6D>r<00><00><00>5c:\Users\jiezhao\Desktop\TSP_assistant\src\web\app.py<70>indexr!<00><00><00> <1B>+<2B> ,<2C> ,<2C>,rz/alertsc<00> <00>td<01><00>S)u预警管理页面z
index.htmlrrrr<00>alertsr&s<00><00> <1B><<3C> (<28> (<28>(rz /api/healthc<00><><00> t<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取系统健康状态<E78AB6>error<6F><72>N)<05> assistant<6E>get_system_healthr<00> Exception<6F>str<74><02>health<74>es r<00>
get_healthr'+<00>p<00><00>/<2F><1A>,<2C>,<2C>.<2E>.<2E><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>'*<00>
A<03>A<03>A<03>Az /api/alertsc<00><><00> t<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取预警列表rrN)r <00>get_active_alertsrr"r#<00>rr&s r<00>
get_alertsr-4r(r)z/api/alerts/statisticsc<00><><00> t<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取预警统计rrN)r <00>get_alert_statisticsrr"r#<00><02>statsr&s rr/r/=sp<00><00>/<2F><19>.<2E>.<2E>0<>0<><05><16>u<EFBFBD>~<7E>~<7E><1D><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r)z"/api/alerts/<int:alert_id>/resolve<76>POST)<01>methodsc<00><><00> t<00>|<00><00>}|rtddd<03><02><00>Stddd<03><02><00>dfS#t$r*}tdt |<02><00>i<01><00>dfcYd }~Sd }~wwxYw)
u 解决预警Tu预警已解决<E8A7A3><02>success<73>messageFu解决预警失败<E5A4B1><E8B4A5>rrN)r <00> resolve_alertrr"r#)<03>alert_idr6r&s rr9r9Fs<><00><00>/<2F><1B>)<29>)<29>(<28>3<>3<><07> <12> U<01><1A>t<EFBFBD>8I<38>J<>J<>K<>K<> K<><1A>u<EFBFBD>9M<39>N<>N<>O<>O<>QT<51>T<> T<><54> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s"<00>-A<00>A<00>
A8<03>A3<03>-A8<03>3A8z
/api/rulesc <00><><00> tjj}g}|<00><00><00>D][\}}|<01>|j|j|jj|j j|j
|j |j |j |jd<01> <09><00><00>\t|<01><00>S#t $r*}tdt#|<04><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取预警规则列表<E58897> <09>name<6D> description<6F>
alert_type<EFBFBD>level<65> threshold<6C> condition<6F>enabled<65>check_interval<61>cooldownrrN)r <00> alert_system<65>rules<65>items<6D>appendr=r>r?<00>valuer@rArBrCrDrErr"r#)rG<00>
rules_datar=<00>ruler&s r<00> get_rulesrMRs<><00><00>/<2F><19>&<26>,<2C><05><17>
<EFBFBD><1F>+<2B>+<2B>-<2D>-<2D> <0F> <0F>J<EFBFBD>D<EFBFBD>$<24> <16> <1D> <1D><1C> <09>#<23>/<2F>"<22>o<EFBFBD>3<><1D><1A>)<29>!<21>^<5E>!<21>^<5E><1F><<3C>"&<26>"5<> <20>M<EFBFBD>
<0E>
<0E>
<0F>
<0F>
<0F>
<0F><17>z<EFBFBD>"<22>"<22>"<22><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>BB<00>
C<03>C<03>=C<03>Cc<00><><00> tj<00><00>}t|d|dt|d<00><00>t |d<00><00>t |d<00><00>|d|<00>dd<08><00>t|<00>d d
<EFBFBD><00><00><00>t|<00>d d <0C><00><00><00><00> <0A> <00> }tj <00>
|<01><00>}|rtddd<0F><02><00>Stddd<0F><02><00>dfS#t$r*}tdt|<03><00>i<01><00>dfcYd}~Sd}~wwxYw)u创建预警规则r=r>r?r@rArBrCTrDi,rEir<u规则创建成功r5Fu规则创建失败r8rrN)r<00>get_jsonrrr<00>float<61>get<65>intr rF<00>add_custom_rulerr"r#)<04>datarLr6r&s r<00> create_rulerUhsT<00><00>/<2F><16><1F>!<21>!<21><04><18><15>f<EFBFBD><1C><1C>]<5D>+<2B> <20><14>l<EFBFBD>!3<>4<>4<><1C>T<EFBFBD>'<27>]<5D>+<2B>+<2B><1B>D<EFBFBD><1B>-<2D>.<2E>.<2E><1A>;<3B>'<27><18>H<EFBFBD>H<EFBFBD>Y<EFBFBD><04>-<2D>-<2D><1E>t<EFBFBD>x<EFBFBD>x<EFBFBD>(8<>#<23>><3E>><3E>?<3F>?<3F><18><14><18><18>*<2A>d<EFBFBD>3<>3<>4<>4<>

<EFBFBD>

<EFBFBD>

<EFBFBD><04><1C>(<28>8<>8<><14>><3E>><3E><07> <12> U<01><1A>t<EFBFBD>8L<38>M<>M<>N<>N<> N<><1A>u<EFBFBD>9M<39>N<>N<>O<>O<>QT<51>T<> T<><54> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s$<00>C>D<00>D<00>
E <03>E<03>>E <03>E z/api/rules/<rule_name><3E>PUTc<00><00> tj<00><00>}tjj|fi|<01><01>}|rt ddd<03><02><00>St ddd<03><02><00>dfS#t $r*}t dt|<03><00>i<01><00>dfcYd }~Sd }~wwxYw)
u更新预警规则Tu规则更新成功r5Fu规则更新失败r8rrN)rrOr rF<00> update_rulerr"r#)<04> rule_namerTr6r&s rrXrX<00>s<><00><00>/<2F><16><1F>!<21>!<21><04><1B>(<28>4<>Y<EFBFBD>G<>G<>$<24>G<>G<><07> <12> U<01><1A>t<EFBFBD>8L<38>M<>M<>N<>N<> N<><1A>u<EFBFBD>9M<39>N<>N<>O<>O<>QT<51>T<> T<><54> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s#<00>=A<00>A<00>
B<03>B<03>=B<03>B<03>DELETEc<00><00> tj<00>|<00><00>}|rtddd<03><02><00>Stddd<03><02><00>dfS#t$r*}tdt |<02><00>i<01><00>dfcYd }~Sd }~wwxYw)
u删除预警规则Tu规则删除成功r5Fu规则删除失败r8rrN)r rF<00> delete_rulerr"r#)rYr6r&s rr\r\<00>s<><00><00>/<2F><1B>(<28>4<>4<>Y<EFBFBD>?<3F>?<3F><07> <12> U<01><1A>t<EFBFBD>8L<38>M<>M<>N<>N<> N<><1A>u<EFBFBD>9M<39>N<>N<>O<>O<>QT<51>T<> T<><54> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s"<00>2A <00>A <00>
A=<03>A8<03>2A=<03>8A=z/api/monitor/startc<00><><00> t<00><00><00>}|rtddd<03><02><00>Stddd<03><02><00>dfS#t$r*}tdt |<01><00>i<01><00>dfcYd }~Sd }~wwxYw)
u启动监控服务Tu监控服务已启动r5Fu启动监控服务失败r8rrN)r <00>start_monitoringrr"r#<00>r6r&s rr^r^<00>s<><00><00>/<2F><1B>,<2C>,<2C>.<2E>.<2E><07> <12> [<01><1A>t<EFBFBD>8O<38>P<>P<>Q<>Q<> Q<><1A>u<EFBFBD>9S<39>T<>T<>U<>U<>WZ<57>Z<> Z<><5A> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>"<00>,A<00>A<00>
A7<03> A2<03>,A7<03>2A7z/api/monitor/stopc<00><><00> t<00><00><00>}|rtddd<03><02><00>Stddd<03><02><00>dfS#t$r*}tdt |<01><00>i<01><00>dfcYd }~Sd }~wwxYw)
u停止监控服务Tu监控服务已停止r5Fu停止监控服务失败r8rrN)r <00>stop_monitoringrr"r#r_s rrbrb<00>s<><00><00>/<2F><1B>+<2B>+<2B>-<2D>-<2D><07> <12> [<01><1A>t<EFBFBD>8O<38>P<>P<>Q<>Q<> Q<><1A>u<EFBFBD>9S<39>T<>T<>U<>U<>WZ<57>Z<> Z<><5A> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r`z/api/monitor/statusc<00>B<00> t<00><00><00>}t|<00>dd<02><00>|<00>dd<04><00>|<00>dd<04><00>d<06><03><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd }~Sd }~wwxYw)
u获取监控服务状态<E78AB6>monitor_status<75>unknown<77> health_scorer<00> active_alerts)rdrfrgrrN)r r!rrQr"r#r$s r<00>get_monitor_statusrh<00>s<><00><00>/<2F><1A>,<2C>,<2C>.<2E>.<2E><06><16>$<24>j<EFBFBD>j<EFBFBD>)9<>9<EFBFBD>E<>E<>"<22>J<EFBFBD>J<EFBFBD>~<7E>q<EFBFBD>9<>9<>#<23>Z<EFBFBD>Z<EFBFBD><0F><11>;<3B>;<3B>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><>
<15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>A'A*<00>*
B<03>4B<03>B<03>Bz/api/check-alertsc<00><><00> t<00><00><00>}td|t|<00><00>d<02><03><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u手动检查预警T)r6r<00>countrrN)r <00> check_alertsr<00>lenr"r#r,s rrkrk<00>s<><00><00>/<2F><1A>'<27>'<27>)<29>)<29><06><16><1B><1C><18><16>[<5B>[<5B>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><>
<15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>8;<00>
A/<03>A*<03>$A/<03>*A/z/chatc<00> <00>td<01><00>S)u$实时对话页面 (WebSocket版本)z chat.htmlrrrr<00>chatrn<00>s<00><00> <1B>;<3B> '<27> '<27>'rz
/chat-httpc<00> <00>td<01><00>S)u实时对话页面 (HTTP版本)zchat_http.htmlrrrr<00> chat_httprp<00>rrz/api/chat/sessionc<00>J<00> tj<00><00>}|<00>dd<02><00>}|<00>d<03><00>}t<00>||<02><00>}t d|dd<06><03><00>S#t $r*}t dt|<04><00>i<01><00>dfcYd }~Sd }~wwxYw)
u创建对话会话<E4BC9A>user_id<69> anonymous<75> work_order_idTu会话创建成功)r6<00>
session_idr7rrN)rrOrQ<00> chat_manager<65>create_sessionrr"r#)rTrrrtrur&s r<00>create_chat_sessionrx<00>s<><00><00> /<2F><16><1F>!<21>!<21><04><16>(<28>(<28>9<EFBFBD>k<EFBFBD>2<>2<><07><1C><08><08><1F>1<>1<> <0A>!<21>0<>0<><17>-<2D>H<>H<>
<EFBFBD><16><1B>$<24>+<2B>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><>
<15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>A+A.<00>.
B"<03>8B<03>B"<03>B"z/api/chat/messagec<00>n<00> tj<00><00>}|<00>d<01><00>}|<00>d<02><00>}|r|stddi<01><00>dfSt<00>||<02><00>}t|<03><00>S#t $r*}tdt|<04><00>i<01><00>dfcYd}~Sd}~wwxYw)u发送聊天消息rur7r<00>缺少必要参数r8rN)rrOrQrrv<00>process_messager"r#)rTrur7<00>resultr&s r<00>send_chat_messager~<00>s<><00><00> /<2F><16><1F>!<21>!<21><04><19>X<EFBFBD>X<EFBFBD>l<EFBFBD>+<2B>+<2B>
<EFBFBD><16>(<28>(<28>9<EFBFBD>%<25>%<25><07><19> A<01><17> A<01><1A>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40><1D>-<2D>-<2D>j<EFBFBD>'<27>B<>B<><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s$<00>AB<00>)B<00>
B4<03>
B/<03>)B4<03>/B4z/api/chat/history/<session_id>c<00><><00> t<00>|<00><00>}td|d<02><02><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取对话历史T)r6<00>historyrrN)rv<00>get_session_historyrr"r#)rur<>r&s r<00>get_chat_historyr<79><00>s<><00><00>/<2F><1E>2<>2<>:<3A>><3E>><3E><07><16><1B><1E>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>+.<00>
A"<03>A<03>A"<03>A"z/api/chat/work-orderc<00><><00> tj<00><00>}|<00>d<01><00>}|<00>d<02><00>}|<00>d<03><00>}|<00>dd<05><00>}|<00>dd<07><00>}|r|r|stdd i<01><00>d
fSt<00>|||||<05><00>}t|<06><00>S#t $r*}tdt|<07><00>i<01><00>d fcYd }~Sd }~wwxYw) <0A> 创建工单ru<00>titler><00>categoryu 技术问题<E997AE>priority<74>mediumrr{r8rN)rrOrQrrv<00>create_work_orderr"r#)rTrur<>r>r<>r<>r}r&s rr<>r<>s<00><00>/<2F><16><1F>!<21>!<21><04><19>X<EFBFBD>X<EFBFBD>l<EFBFBD>+<2B>+<2B>
<EFBFBD><14><08><08><17>!<21>!<21><05><1A>h<EFBFBD>h<EFBFBD>}<7D>-<2D>-<2D> <0B><17>8<EFBFBD>8<EFBFBD>J<EFBFBD><0E>7<>7<><08><17>8<EFBFBD>8<EFBFBD>J<EFBFBD><08>1<>1<><08><19> A<01><15> A<01>k<EFBFBD> A<01><1A>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40><1D>/<2F>/<2F>
<EFBFBD>E<EFBFBD>;<3B>PX<50>Zb<5A>c<>c<><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s$<00>BC<00>,C<00>
C:<03>C5<03>/C:<03>5C:z(/api/chat/work-order/<int:work_order_id>c<00><><00> t<00>|<00><00>}t|<01><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取工单状态rrN)rv<00>get_work_order_statusrr"r#)rtr}r&s rr<>r<>sr<00><00>/<2F><1D>3<>3<>M<EFBFBD>B<>B<><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>(+<00>
A<03>A<03>A<03>Az/api/chat/session/<session_id>c<00><><00> t<00>|<00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u结束对话会话u会话已结束u结束会话失败r5rrN)rv<00> end_sessionrr"r#)rur6r&s r<00>end_chat_sessionr<6E>!s<><00><00>/<2F><1E>*<2A>*<2A>:<3A>6<>6<><07><16><1E>,3<>M<>(<28>(<28>9M<39>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>/2<00>
A&<03>A!<03>A&<03>!A&z/api/chat/sessionsc<00><><00> t<00><00><00>}td|d<02><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取活跃会话列表T)r6<00>sessionsrrN)rv<00>get_active_sessionsrr"r#)r<>r&s rr<>r<>-s<><00><00>/<2F><1F>3<>3<>5<>5<><08><16><1B> <20>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>*-<00>
A!<03>A<03>A!<03>A!z/api/agent/statusc<00><><00> t<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取Agent状态rrN)<05>agent_assistant<6E>get_agent_statusrr"r#)<02>statusr&s rr<>r<>:sp<00><00>/<2F> <20>1<>1<>3<>3<><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r)z/api/agent/togglec<00>*<00> tj<00><00>}|<00>dd<02><00>}t<00>|<01><00>}t |d|rdnd<05><00>d<06><02><00>S#t $r*}t dt|<03><00>i<01><00>dfcYd }~Sd }~wwxYw)
u切换Agent模式rCTuAgent模式已u启用u禁用r5rrN)rrOrQr<><00>toggle_agent_moderr"r#)rTrCr6r&s rr<>r<>Cs<><00><00> /<2F><16><1F>!<21>!<21><04><16>(<28>(<28>9<EFBFBD>d<EFBFBD>+<2B>+<2B><07>!<21>3<>3<>G<EFBFBD><<3C><<3C><07><16><1E>K<>G<EFBFBD>(I<><08><08><18>K<>K<>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>AA<00>
B<03>(B <03>B<03> Bz/api/agent/monitoring/startc<00><><00> t<00><00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u启动Agent监控uAgent监控已启动u 启动失败r5rrN)r<><00>start_proactive_monitoringrr"r#r_s r<00>start_agent_monitoringr<67>Qs<><00><00>/<2F>!<21><<3C><<3C>><3E>><3E><07><16><1E>18<31>L<>-<2D>-<2D>n<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>.1<00>
A%<03>A <03>A%<03> A%z/api/agent/monitoring/stopc<00><><00> t<00><00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u停止Agent监控uAgent监控已停止u 停止失败r5rrN)r<><00>stop_proactive_monitoringrr"r#r_s r<00>stop_agent_monitoringr<67>]s<><00><00>/<2F>!<21>;<3B>;<3B>=<3D>=<3D><07><16><1E>18<31>L<>-<2D>-<2D>n<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>z/api/agent/proactive-monitoringc<00><><00> t<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u主动监控检查rrN)r<><00>run_proactive_monitoringrr"r#)r}r&s r<00>proactive_monitoringr<67>isp<00><00>/<2F> <20>9<>9<>;<3B>;<3B><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r)z/api/agent/intelligent-analysisc<00><><00> t<00><00><00>}td|d<02><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u 智能分析T)r6<00>analysisrrN)r<><00>run_intelligent_analysisrr"r#)r<>r&s r<00>intelligent_analysisr<73>rsz<00><00>/<2F>"<22>;<3B>;<3B>=<3D>=<3D><08><16>4<EFBFBD>X<EFBFBD>><3E>><3E>?<3F>?<3F>?<3F><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>z/api/knowledgec<00>n<00> tj<00>ddt<00><03><00>}tj<00>ddt<00><03><00>}tj<00>||<01><06><00>}t|<02><00>S#t$r*}tdt|<03><00>i<01><00>dfcYd }~Sd }~wwxYw)
u获取知识库列表<E58897>page<67><00><01>type<70>per_page<67>
)r<>r<>rrN)
r<00>argsrQrRr <00>knowledge_manager<65>get_knowledge_entriesrr"r#)r<>r<><00>knowledge_entriesr&s r<00> get_knowledger<65>|s<><00><00> /<2F><16>|<7C><1F><1F><06><01><03><1F>4<>4<><04><1A><<3C>#<23>#<23>J<EFBFBD><02><13>#<23>=<3D>=<3D><08>&<26>7<>M<>M<><15><08>N<01>
<EFBFBD>
<EFBFBD><19><17>(<28>)<29>)<29>)<29><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>A=B<00>
B4<03>
B/<03>)B4<03>/B4z/api/knowledge/searchc<00>0<00> tj<00>dd<02><00>}t<00>|d<03><04><00>}t |<01>dg<00><00><00><00>S#t $r*}t dt|<02><00>i<01><00>dfcYd}~Sd}~wwxYw) u搜索知识库<E8AF86>q<><00>)<01>top_k<5F>resultsrrN)rr<>rQr <00>search_knowledgerr"r#)<03>queryr<79>r&s rr<>r<><00>s<><00><00>/<2F><17> <0C> <20> <20><13>b<EFBFBD>)<29>)<29><05><1B>,<2C>,<2C>U<EFBFBD>!<21>,<2C><<3C><<3C><07><16>w<EFBFBD>{<7B>{<7B>9<EFBFBD>b<EFBFBD>1<>1<>2<>2<>2<><32> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>AA!<00>!
B<03>+B<03>
B<03>Bc<00>:<00> tj<00><00>}tj<00>|d|d|d|d<00><05><00>}t ||rdndd<08><02><00>S#t $r*}t d t|<02><00>i<01><00>d
fcYd }~Sd }~wwxYw) u添加知识库条目<E69DA1>question<6F>answerr<72><00>confidence_score)r<>r<>r<>r<>u知识添加成功<E68890> 添加失败r5rrN)rrOr r<><00>add_knowledge_entryrr"r#<00>rTr6r&s r<00> add_knowledger<65><00>s<><00><00>
/<2F><16><1F>!<21>!<21><04><1B>-<2D>A<>A<><19>*<2A>%<25><17><08>><3E><19>*<2A>%<25>!<21>"4<>5<> B<01>
<EFBFBD>
<EFBFBD><07> <17>7<EFBFBD>w<EFBFBD>7j<37>7K<37>7K<37>\j<>k<>k<>l<>l<>l<><6C> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>A#A&<00>&
B<03>0B<03>B<03>Bz/api/knowledge/statsc<00><><00> tj<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取知识库统计rrN)r r<><00>get_knowledge_statsrr"r#r0s rr<>r<><00>ss<00><00>/<2F><19>+<2B>?<3F>?<3F>A<>A<><05><16>u<EFBFBD>~<7E>~<7E><1D><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>,/<00>
A#<03>A<03>A#<03>A#z/api/knowledge/uploadc<00>L<00> dtjvrtddi<01><00>dfStjd}|jdkrtddi<01><00>dfSddl}ddl}ddl}d |<03><00><00><00>|j<00> |j<00><00>d
<00><00>}|j<00>
|<01> <00><00>|<04><00>} |<00> |<05><00>t<00>||j<00><00>}t|<06><00> |j<00>|<05><00>r|j|<05><00>SS#t"$r'}t$<00>d |<07><00><02><00>Yd}~Sd}~wwxYw# |j<00>|<05><00>r|j|<05><00>ww#t"$r'}t$<00>d |<07><00><02><00>Yd}~wd}~wwxYwxYw#t"$rG}t$<00>d |<08><00><02><00>tdt+|<08><00>i<01><00>d fcYd}~Sd}~wwxYw)u上传文件并生成知识库<E8AF86>fileru没有上传文件r8r<>u没有选择文件rN<>upload_r<5F>u清理临时文件失败: u文件上传处理失败: r)r<00>filesr<00>filename<6D>tempfile<6C>os<6F>uuid<69>uuid4<64>path<74>splitext<78>join<69>
gettempdir<EFBFBD>saver<65><00>process_file_to_knowledge<67>exists<74>unlinkr"<00>logger<65>warningrr#) r<>r<>r<>r<><00> temp_filename<6D> temp_pathr}<00> cleanup_errorr&s r<00>upload_knowledge_filer<65><00>s<00><00>$/<2F> <11><17><1D> &<26> &<26><1A>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40><16>}<7D>V<EFBFBD>$<24><04> <0F>=<3D>B<EFBFBD> <1E> <1E><1A>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40> <18><0F><0F><0F><11> <09> <09> <09><13> <0B> <0B> <0B>U<01>$<24>*<2A>*<2A>,<2C>,<2C>T<><02><07>0@<40>0@<40><14><1D>0O<30>0O<30>PQ<50>0R<30>T<>T<> <0A><16>G<EFBFBD>L<EFBFBD>L<EFBFBD><18>!4<>!4<>!6<>!6<> <0A>F<>F<> <09> M<01> <10>I<EFBFBD>I<EFBFBD>i<EFBFBD> <20> <20> <20>%<25>><3E>><3E>y<EFBFBD>$<24>-<2D>X<>X<>F<EFBFBD><1A>6<EFBFBD>?<3F>?<3F> M<01><15>7<EFBFBD>><3E>><3E>)<29>,<2C>,<2C>)<29><1D>B<EFBFBD>I<EFBFBD>i<EFBFBD>(<28>(<28>(<28>(<28>)<29><><1C> M<01> M<01> M<01><16><0E><0E>K<>M<EFBFBD>K<>K<>L<>L<>L<>L<>L<>L<>L<>L<><4C><EFBFBD><EFBFBD><EFBFBD> M<01><><EFBFBD><EFBFBD><EFBFBD> M<01><15>7<EFBFBD>><3E>><3E>)<29>,<2C>,<2C>)<29><1D>B<EFBFBD>I<EFBFBD>i<EFBFBD>(<28>(<28>(<28>(<28>)<29><><1C> M<01> M<01> M<01><16><0E><0E>K<>M<EFBFBD>K<>K<>L<>L<>L<>L<>L<>L<>L<>L<><4C><EFBFBD><EFBFBD><EFBFBD> M<01><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <15>/<2F>/<2F>/<2F><0E> <0C> <0C>5<>!<21>5<>5<>6<>6<>6<><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<EFBFBD><00> G<00>/G<00>A5G<00> AE-<00> *D9<02>9
E*<05>E%<05> G<00>%E*<05>*G<00>-G<03>/*F<04>G<03>
G <07>%G<07>G<03>G <07> G<03>G<00>
H#<03><H<03>H#<03>H#z(/api/knowledge/delete/<int:knowledge_id>c<00><><00> tj<00>|<00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u删除知识库条目u 删除成功u 删除失败r5rrN)r r<><00>delete_knowledge_entryrr"r#<00><03> knowledge_idr6r&s r<00>delete_knowledger<65><00>s<><00><00>/<2F><1B>-<2D>D<>D<>\<5C>R<>R<><07><16>7<EFBFBD><17>7d<37>~<7E>~<7E>Vd<56>e<>e<>f<>f<>f<><66> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>47<00>
A+<03>A&<03> A+<03>&A+z(/api/knowledge/verify/<int:knowledge_id>c<00>4<00> tj<00><00>pi}|<01>dd<02><00>}tj<00>||<02><00>}t ||rdndd<05><02><00>S#t$r*}t dt|<04><00>i<01><00>dfcYd}~Sd}~wwxYw) u验证知识库条目<E69DA1> verified_by<62>adminu 验证成功u 验证失败r5rrN) rrOrQr r<><00>verify_knowledge_entryrr"r#)r<>rTr<>r6r&s r<00>verify_knowledger<65><00>s<><00><00>/<2F><16><1F>!<21>!<21>'<27>R<EFBFBD><04><1A>h<EFBFBD>h<EFBFBD>}<7D>g<EFBFBD>6<>6<> <0B><1B>-<2D>D<>D<>\<5C>S^<5E>_<>_<><07><16>7<EFBFBD><17>7d<37>~<7E>~<7E>Vd<56>e<>e<>f<>f<>f<><66> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>A A#<00>#
B<03>-B<03> B<03>Bz*/api/knowledge/unverify/<int:knowledge_id>c<00><><00> tj<00>|<00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u取消验证知识库条目u取消验证成功u取消验证失败r5rrN)r r<><00>unverify_knowledge_entryrr"r#r<>s r<00>unverify_knowledger<65><00>s<><00><00>/<2F><1B>-<2D>F<>F<>|<7C>T<>T<><07><16>7<EFBFBD>w<EFBFBD>7p<37>7K<37>7K<37>\p<>q<>q<>r<>r<>r<><72> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>z/api/workordersc <00><><00><02><03> tj<00>d<01><00><00>tj<00>d<02><00><00>ddddddd d
<EFBFBD>d d d ddddd
<EFBFBD>g}<00>r<14>dkr<0E>fd<13>|D<00><00>}<00>r<14>dkr<0E>fd<14>|D<00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取工单列表r<E8A1A8>r<>r<>u车辆无法远程启动u0用户反映APP中远程启动功能无法使用u 远程控制<E68EA7>high<67>openz2024-01-01T10:00:00Z)<07>idr<64>r>r<>r<>r<><00>
created_at<EFBFBD>uAPP显示异常u!APP中车辆信息显示不正确u APP功能r<E883BD><00> in_progressz2024-01-01T11:00:00Z<30>allc<00>,<00><01>g|]}|d<00>k<00>|<01><02>S)r<>r)<03>.0<EFBFBD>w<> status_filters <20>r<00>
<listcomp>z"get_workorders.<locals>.<listcomp>s'<00><><00>P<>P<>P<><01>1<EFBFBD>X<EFBFBD>;<3B>-<2D>3O<33>3O<33>!<21>3O<33>3O<33>3Orc<00>,<00><01>g|]}|d<00>k<00>|<01><02>S)r<>r)r<>r<><00>priority_filters <20>rr<>z"get_workorders.<locals>.<listcomp>s'<00><><00>T<>T<>T<><01>1<EFBFBD>Z<EFBFBD>=<3D>O<EFBFBD>3S<33>3S<33>!<21>3S<33>3S<33>3SrrrN)rr<>rQrr"r#)<04>
workordersr&r<>r<>s @@r<00>get_workordersr<73><00>s0<00><><EFBFBD><00>"/<2F><1F> <0C>(<28>(<28><18>2<>2<> <0A>!<21>,<2C>*<2A>*<2A>:<3A>6<>6<><0F>
<18>3<>Q<>*<2A>"<22> <20>4<> <0E> <0E><18>*<2A>B<>'<27>$<24>'<27>4<> <0E> <0E>
<EFBFBD>
<EFBFBD>, <19> Q<01>]<5D>e<EFBFBD>3<>3<>P<>P<>P<>P<>Z<EFBFBD>P<>P<>P<>J<EFBFBD> <1A> U<01><EFBFBD>%<25>7<>7<>T<>T<>T<>T<>Z<EFBFBD>T<>T<>T<>J<EFBFBD><16>z<EFBFBD>"<22>"<22>"<22><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>B B<00>
C<03>C<03>:C<03>Cc<00>(<00> tj<00><00>}t<00>|d|d|d|d<00><05><00>}t d|d<07><02><00>S#t
$r*}t dt |<02><00>i<01><00>d fcYd
}~Sd
}~wwxYw) r<>r<>r>r<>r<>)r<>r>r<>r<>T)r6<00> workorderrrN)rrOr r<>rr"r#)rTr}r&s r<00>create_workorderr<72>s<><00><00>
/<2F><16><1F>!<21>!<21><04><1A>,<2C>,<2C><16>w<EFBFBD>-<2D><1C>]<5D>+<2B><19>*<2A>%<25><19>*<2A>%<25> -<2D>
<EFBFBD>
<EFBFBD><06> <17>4<EFBFBD>f<EFBFBD>=<3D>=<3D>><3E>><3E>><3E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>AA<00>
B<03>'B <03>B<03> Bz/api/analyticsc<00><><00> t<00>d<01><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取分析数据<E695B0> last_7_daysrrN)r <00>generate_analyticsrr"r#)<02> analyticsr&s r<00> get_analyticsr.st<00><00>/<2F><1D>0<>0<><1D>?<3F>?<3F> <09><16>y<EFBFBD>!<21>!<21>!<21><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>z /api/settingsc<00><><00> dddddd<04>}t|<00><00>S#t$r*}tdt|<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取系统设置<E8AEBE>r<>T)<05> api_timeout<75> max_history<72>refresh_interval<61>auto_monitoring<6E>
agent_moderrN)rr"r#)<02>settingsr&s r<00> get_settingsr 8s~<00><00>
/<2F><1D><1D> "<22>#<23><1E> 
<EFBFBD>
<EFBFBD><08><17>x<EFBFBD> <20> <20> <20><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00><00>
A <03>A<03>A <03>A c<00><><00> tj<00><00>}tddd<03><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u保存系统设置Tu设置保存成功r5rrN)rrOrr"r#)rTr&s r<00> save_settingsrGsx<00><00>/<2F><16><1F>!<21>!<21><04><16>4<EFBFBD>4H<34>I<>I<>J<>J<>J<><4A> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>$'<00>
A<03>A<03>A<03>Az/api/system/infoc<00><><00> ddl}ddl}d|jdddd<07>}t|<02><00>S#t$r*}tdt |<03><00>i<01><00>d fcYd}~Sd}~wwxYw)
u获取系统信息rNz1.0.0<EFBFBD>SQLiteu 2天3小时<E5B08F><E697B6>)<05>version<6F>python_version<6F>database<73>uptime<6D> memory_usagerr)<06>sys<79>platformrrr"r#)rr<00>infor&s r<00>get_system_inforQs<><00><00> /<2F><12>
<EFBFBD>
<EFBFBD>
<EFBFBD><17><0F><0F><0F><1E>!<21>k<EFBFBD> <20>#<23><1F> 
<EFBFBD>
<EFBFBD><04><17>t<EFBFBD>}<7D>}<7D><1C><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>#&<00>
A<03>A<03>A<03>Az/api/vehicle/datac<00><><00> tj<00>d<01><00>}tj<00>d<02><00>}tj<00>ddt<00><05><00>}|rt<00>|||<02><00>}nt<00>|<02><06><00>}t|<03><00>S#t$r*}tdt|<04><00>i<01><00>dfcYd }~Sd }~wwxYw)
u获取车辆数据<E695B0>
vehicle_id<EFBFBD> data_type<70>limitr<74>r<>)rrrN)
rr<>rQrR<00>vehicle_manager<65>get_vehicle_data<74>search_vehicle_datarr"r#)rrrrTr&s rr r cs<><00><00> /<2F><1C>\<5C>%<25>%<25>l<EFBFBD>3<>3<>
<EFBFBD><1B>L<EFBFBD>$<24>$<24>[<5B>1<>1<> <09><17> <0C> <20> <20><17>"<22>3<EFBFBD> <20>7<>7<><05> <15> D<01>"<22>3<>3<>J<EFBFBD> <09>5<EFBFBD>Q<>Q<>D<EFBFBD>D<EFBFBD>"<22>6<>6<>U<EFBFBD>6<>C<>C<>D<EFBFBD><16>t<EFBFBD>}<7D>}<7D><1C><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>B-B0<00>0
C$<03>:C<03>C$<03>C$z%/api/vehicle/data/<vehicle_id>/latestc<00><><00> t<00>|<00><00>}t|<01><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取车辆最新数据rrN)r<00>get_latest_vehicle_datarr"r#)rrTr&s rr#r#tsr<00><00>/<2F><1E>6<>6<>z<EFBFBD>B<>B<><04><16>t<EFBFBD>}<7D>}<7D><1C><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>z&/api/vehicle/data/<vehicle_id>/summaryc<00><><00> t<00>|<00><00>}t|<01><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取车辆数据摘要rrN)r<00>get_vehicle_summaryrr"r#)r<00>summaryr&s rr%r%}st<00><00>/<2F>!<21>5<>5<>j<EFBFBD>A<>A<><07><16>w<EFBFBD><1F><1F><1F><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>c<00>J<00> tj<00><00>}t<00>|d|d|d|<00>d<04><00><00><05><00>}t ||rdndd<08><02><00>S#t $r*}t d t|<02><00>i<01><00>d
fcYd }~Sd }~wwxYw) u添加车辆数据rr<00>
data_value<EFBFBD> vehicle_vin)rrr(r)u数据添加成功r<E58A9F>r5rrN)rrOr<00>add_vehicle_datarQrr"r#r<>s rr*r*<00>s<><00><00>
/<2F><16><1F>!<21>!<21><04>!<21>2<>2<><1B>L<EFBFBD>)<29><1A>;<3B>'<27><1B>L<EFBFBD>)<29><1C><08><08><1D>/<2F>/<2F> 3<>
<EFBFBD>
<EFBFBD><07> <17>7<EFBFBD>w<EFBFBD>7j<37>7K<37>7K<37>\j<>k<>k<>l<>l<>l<><6C> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>ryz/api/vehicle/init-sample-datac<00><><00> t<00><00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u初始化示例车辆数据u示例数据初始化成功u初始化失败r5rrN)r<00>add_sample_vehicle_datarr"r#r_s r<00>init_sample_vehicle_datar-<00>s<><00><00>/<2F>!<21>9<>9<>;<3B>;<3B><07><16>7<EFBFBD>X_<58>7v<37>7T<37>7T<37>ev<65>w<>w<>x<>x<>x<><78> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD><00>__main__Tz0.0.0.0i<EFBFBD>)<03>debug<75>host<73>port)X<>__doc__rr<><00>jsonrr<00>flaskrrrrr r
<00>
flask_corsr r<>rI<00>dirname<6D>abspath<74>__file__<5F>src.mainr <00>src.agent_assistantr <00>src.analytics.alert_systemrrr<00>src.dialogue.realtime_chatr<00> src.vehicle.vehicle_data_managerr<00>__name__<5F>appr r<>rvr<00>routerrr'r-r/r9rMrUrXr\r^rbrhrkrnrprxr~r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rr rrr r#r%r*r-<00>runrrr<00><module>rBs<> <00><01><04><04>
 <0B>
<EFBFBD>
<EFBFBD>
<EFBFBD> <09> <09> <09> <09> <0B> <0B> <0B> <0B>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<><1B><1B><1B><1B><1B><1B><04><08><0F><0F><02><07><0F><0F><02><07><0F><0F><02><07><0F><0F><08>0I<30>0I<30> J<> J<>K<>K<>L<>L<>L<>!<21>!<21>!<21>!<21>!<21>!<21>1<>1<>1<>1<>1<>1<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>?<3F>?<3F>?<3F>?<3F>?<3F>?<3F> <0B>e<EFBFBD>H<EFBFBD>o<EFBFBD>o<EFBFBD><03><04><04>S<EFBFBD> <09> <09> <09> <19>L<EFBFBD>N<EFBFBD>N<EFBFBD> <09>#<23>#<23>%<25>%<25><0F>"<22>"<22>$<24>$<24> <0C>$<24>$<24>&<26>&<26><0F><04><19><19>3<EFBFBD><1E><1E>-<2D>-<2D><10><1E>-<2D><05><19><19>9<EFBFBD><15><15>)<29>)<29><16><15>)<29><05><19><19>=<3D><19><19>/<2F>/<2F><1A><19>/<2F><05><19><19>=<3D><19><19>/<2F>/<2F><1A><19>/<2F><05><19><19> #<23>$<24>$<24>/<2F>/<2F>%<25>$<24>/<2F><05><19><19> /<2F>&<26><18><19>B<>B<> /<2F> /<2F>C<01>B<> /<2F><05><19><19><<3C><18><18>/<2F>/<2F><19><18>/<2F>*<05><19><19><<3C>&<26><18><19>*<2A>*<2A>/<2F>/<2F>+<2B>*<2A>/<2F>0<05><19><19> #<23>e<EFBFBD>W<EFBFBD><19>5<>5<>
/<2F>
/<2F>6<>5<>
/<2F><05><19><19> #<23>h<EFBFBD>Z<EFBFBD><19>8<>8<> /<2F> /<2F>9<>8<> /<2F><05><19><19> <1F>&<26><18><19>2<>2<> /<2F> /<2F>3<>2<> /<2F><05><19><19> <1E><16><08><19>1<>1<> /<2F> /<2F>2<>1<> /<2F><05><19><19> <20>!<21>!<21>
/<2F>
/<2F>"<22>!<21>
/<2F><05><19><19> <1E><16><08><19>1<>1<>
/<2F>
/<2F>2<>1<>
/<2F><05><19><19>7<EFBFBD><13><13>(<28>(<28><14><13>(<28><05><19><19><<3C><18><18>-<2D>-<2D><19><18>-<2D><05><19><19> <1E><16><08><19>1<>1<>/<2F>/<2F>2<>1<>/<2F>"<05><19><19> <1E><16><08><19>1<>1<> /<2F> /<2F>2<>1<> /<2F><05><19><19> +<2B>,<2C>,<2C> /<2F> /<2F>-<2D>,<2C> /<2F><05><19><19> !<21>F<EFBFBD>8<EFBFBD><19>4<>4<>/<2F>/<2F>5<>4<>/<2F>$<05><19><19> 5<>6<>6<>/<2F>/<2F>7<>6<>/<2F><05><19><19> +<2B>h<EFBFBD>Z<EFBFBD><19>@<40>@<40> /<2F> /<2F>A<01>@<40> /<2F><05><19><19> <1F> <20> <20> /<2F> /<2F>!<21> <20> /<2F><05><19><19> <1E><1F><1F>/<2F>/<2F> <20><1F>/<2F><05><19><19> <1E><16><08><19>1<>1<> /<2F> /<2F>2<>1<> /<2F><05><19><19> (<28>6<EFBFBD>(<28><19>;<3B>;<3B> /<2F> /<2F><<3C>;<3B> /<2F><05><19><19> '<27>&<26><18><19>:<3A>:<3A> /<2F> /<2F>;<3B>:<3A> /<2F><05><19><19> ,<2C>v<EFBFBD>h<EFBFBD><19>?<3F>?<3F>/<2F>/<2F>@<01>?<3F>/<2F><05><19><19> ,<2C>v<EFBFBD>h<EFBFBD><19>?<3F>?<3F>/<2F>/<2F>@<01>?<3F>/<2F><05><19><19> <1B><1C><1C>/<2F>/<2F><1D><1C>/<2F> <05><19><19> "<22>#<23>#<23>/<2F>/<2F>$<24>#<23>/<2F><05><19><19> <1B>f<EFBFBD>X<EFBFBD><19>.<2E>.<2E> /<2F> /<2F>/<2F>.<2E> /<2F><05><19><19> !<21>"<22>"<22>/<2F>/<2F>#<23>"<22>/<2F><05><19><19> "<22>V<EFBFBD>H<EFBFBD><19>5<>5<>&/<2F>&/<2F>6<>5<>&/<2F>P<05><19><19> 5<><08>z<EFBFBD><19>J<>J<>/<2F>/<2F>K<01>J<>/<2F><05><19><19> 5<><06>x<EFBFBD><19>H<>H<>/<2F>/<2F>I<01>H<>/<2F><05><19><19> 7<>&<26><18><19>J<>J<>/<2F>/<2F>K<01>J<>/<2F><05><19><19> <1C><1D><1D>$/<2F>$/<2F><1E><1D>$/<2F>L<05><19><19> <1C>v<EFBFBD>h<EFBFBD><19>/<2F>/<2F> /<2F> /<2F>0<>/<2F> /<2F><05><19><19> <1B><1C><1C>/<2F>/<2F><1D><1C>/<2F><05><19><19>?<3F><1B><1B> /<2F> /<2F><1C><1B> /<2F><05><19><19>?<3F>V<EFBFBD>H<EFBFBD><19>-<2D>-<2D>/<2F>/<2F>.<2E>-<2D>/<2F><05><19><19> <1D><1E><1E>/<2F>/<2F><1F><1E>/<2F>"<05><19><19> <1E><1F><1F>/<2F>/<2F> <20><1F>/<2F> <05><19><19> 2<>3<>3<>/<2F>/<2F>4<>3<>/<2F><05><19><19> 3<>4<>4<>/<2F>/<2F>5<>4<>/<2F><05><19><19> <1E><16><08><19>1<>1<> /<2F> /<2F>2<>1<> /<2F><05><19><19> *<2A>V<EFBFBD>H<EFBFBD><19>=<3D>=<3D>/<2F>/<2F>><3E>=<3D>/<2F> <0C>z<EFBFBD><19><19><07>G<EFBFBD>G<EFBFBD>$<24>Y<EFBFBD>T<EFBFBD>G<EFBFBD>2<>2<>2<>2<>2<><1A>r