Files
kefu/deploy/token-usage-20260917/payload/admin-web/apps/web-antd/dist/js/call-stats-BCSxyoHx.js
T
2026-09-21 10:34:06 +08:00

1 line
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{D as e,E as t,Ht as n,On as r,_ as i,b as a,bt as o,g as s,k as ee,mt as c,o as l,qt as u,tr as d,v as f,vn as p,y as m}from"./runtime-core.esm-bundler-DkysjgTd.js";import{t as h}from"./objectSpread2-BmonrgTA.js";import{a as g}from"./useConfigInject-z_xeO0pP.js";import{t as _}from"./table-Do98iBZ3.js";import{c as te,l as v}from"./console-2d_MKq1R.js";import{t as y}from"./alert-CkUknOsQ.js";import{t as b}from"./card-D3WO92mr.js";import{n as x,r as S,t as C}from"./row-BAbkSA0m.js";import{t as w}from"./tag-BFecLZmQ.js";import{t as ne}from"./input-DgEff0DC.js";import{t as re}from"./modal-Ju-U4s3Q.js";import{t as T}from"./progress-Br8rQILc.js";import{i as E,r as D,t as ie}from"./ModelUsageStats-KlgtONuE.js";import{t as ae}from"./archive-account-selector-BzzvKXnV.js";var oe={class:`p-5`},se={class:`mb-4 flex flex-wrap items-center gap-3`},ce={class:`mb-1 flex justify-between text-xs`},le={class:`w-16 text-right text-xs`},ue={class:`mt-3 text-xs text-gray-500`},de={class:`mb-3`},fe=[`title`],pe=[`title`],me=[`title`],he={key:1},ge={key:1,class:`text-gray-400`},_e=[`onClick`],O={class:`mb-3`},k={class:`whitespace-pre-wrap rounded bg-gray-50 p-2 text-sm dark:bg-gray-800`},A={class:`mb-3`},j={class:`whitespace-pre-wrap rounded bg-gray-50 p-2 text-sm dark:bg-gray-800`},M={key:0,class:`mb-3`},N={key:1,class:`mb-3`},P={class:`mb-1 flex items-center justify-between`},F={class:`text-xs text-gray-400`},I={class:`whitespace-pre-wrap`},ve={class:`text-xs text-gray-400`},L=ee({__name:`call-stats`,setup(ee){let L=p(7),R=p(-1),{data:z,loading:B,error:V,run:ye}=D();function H(){let e=R.value,t=L.value;return ye(n=>v(t,e,n))}let U=p(``),{data:W,loading:be,error:G,run:xe}=D(),Se=s(()=>{var e,t;return(e=(t=W.value)==null?void 0:t.items)==null?[]:e}),Ce=s(()=>{var e,t;return(e=(t=W.value)==null?void 0:t.total)==null?0:e}),K=p(1),q=p(20),J=p(null),Y=p(`chat`);function X(){let e={accountId:R.value,days:L.value,limit:q.value,offset:(K.value-1)*q.value,q:U.value.trim(),purpose:Y.value};return xe(t=>te(e,t))}function we(){K.value=1,X()}function Z(e){let t=String(e||``).trim();if(!t)return`—`;let n=new Date(t.includes(`T`)?t:t.replace(` `,`T`));if(Number.isNaN(n.getTime()))return t;let r=e=>String(e).padStart(2,`0`);return`${r(n.getMonth()+1)}-${r(n.getDate())} ${r(n.getHours())}:${r(n.getMinutes())}:${r(n.getSeconds())}`}n(Y,()=>{K.value=1,X()});function Te(e){var t,n;K.value=(t=e.current)==null?1:t,q.value=(n=e.pageSize)==null?20:n,X()}n(L,()=>{H(),K.value=1,X()});function Ee(){K.value=1,H(),X()}let De=s(()=>{var e,t,n,r;let i=(e=(t=z.value)==null?void 0:t.chosen.reduce((e,t)=>e+t.count,0))==null?0:e;return((n=(r=z.value)==null?void 0:r.chosen)==null?[]:n).map(e=>h(h({},e),{},{percent:i?Math.round(e.count/i*100):0}))}),Q=s(()=>{var e,t;let n=(e=(t=z.value)==null?void 0:t.risk)==null?{}:e,r=Object.values(n).reduce((e,t)=>e+t,0);return Object.entries(n).map(([e,t])=>({level:e,count:t,percent:r?Math.round(t/r*100):0}))}),Oe=s(()=>{var e,t;return Math.max(1,...((e=(t=z.value)==null?void 0:t.score_buckets)==null?[]:e).map(e=>e.count))}),$={low:`green`,medium:`orange`,high:`red`,unknown:`default`};return(n,s)=>(c(),a(`div`,oe,[e(r(y),{class:`mb-4`,type:`info`,"show-icon":``,message:`客服质量与模型用量`,description:`按账号和时间查看实际模型请求、已记录 Token,以及客服回复的裁判评分、风险分布和最终选用情况。`}),i(`div`,se,[e(ae,{modelValue:R.value,"onUpdate:modelValue":s[0]||(s[0]=e=>R.value=e),onChange:Ee},null,8,[`modelValue`]),e(r(E),{value:L.value,"onUpdate:value":s[1]||(s[1]=e=>L.value=e),options:[{value:1,label:`近 1 天`},{value:7,label:`近 7 天`},{value:30,label:`近 30 天`}]},null,8,[`value`])]),e(ie,{"account-id":R.value,days:L.value},null,8,[`account-id`,`days`]),s[11]||(s[11]=i(`h2`,{class:`mb-3 text-lg font-medium`},`客服回复质量`,-1)),r(V)?(c(),f(r(y),{key:0,class:`mb-3`,type:`error`,"show-icon":``,message:r(V)},null,8,[`message`])):m(``,!0),e(r(C),{gutter:16,class:`mb-4`},{default:u(()=>[e(r(S),{span:6},{default:u(()=>[e(r(b),{size:`small`},{default:u(()=>{var t,n;return[e(r(x),{title:`业务调用记录`,value:(t=(n=r(z))==null?void 0:n.total)==null?0:t},null,8,[`value`])]}),_:1})]),_:1}),e(r(S),{span:6},{default:u(()=>[e(r(b),{size:`small`},{default:u(()=>{var t,n;return[e(r(x),{title:`已评审`,value:(t=(n=r(z))==null?void 0:n.judged)==null?0:t},null,8,[`value`])]}),_:1})]),_:1}),e(r(S),{span:6},{default:u(()=>[e(r(b),{size:`small`},{default:u(()=>{var t,n;return[e(r(x),{title:`平均分`,value:(t=(n=r(z))==null?void 0:n.avg_score)==null?0:t,precision:3},null,8,[`value`])]}),_:1})]),_:1}),e(r(S),{span:6},{default:u(()=>[e(r(b),{size:`small`},{default:u(()=>{var t,n;return[e(r(x),{title:`平均耗时`,value:(t=(n=r(z))==null?void 0:n.avg_ms)==null?0:t,suffix:`ms`},null,8,[`value`])]}),_:1})]),_:1})]),_:1}),e(r(C),{gutter:16},{default:u(()=>[e(r(S),{span:12},{default:u(()=>[e(r(b),{title:`裁判分数分布`,size:`small`,loading:r(B),class:`mb-4`},{default:u(()=>{var t,n,s;return[(t=r(z))!=null&&(t=t.score_buckets)!=null&&t.length?m(``,!0):(c(),f(r(g),{key:0,description:`还没有评审数据`})),(c(!0),a(l,null,o((n=(s=r(z))==null?void 0:s.score_buckets)==null?[]:n,t=>(c(),a(`div`,{key:t.range,class:`mb-2`},[i(`div`,ce,[i(`span`,null,d(t.range),1),i(`span`,null,d(t.count)+` 条`,1)]),e(r(T),{percent:Math.round(t.count/Oe.value*100),"show-info":!1,size:`small`},null,8,[`percent`])]))),128))]}),_:1},8,[`loading`])]),_:1}),e(r(S),{span:12},{default:u(()=>[e(r(b),{title:`风险等级`,size:`small`,loading:r(B),class:`mb-4`},{default:u(()=>[Q.value.length?m(``,!0):(c(),f(r(g),{key:0,description:`还没有评审数据`})),(c(!0),a(l,null,o(Q.value,n=>(c(),a(`div`,{key:n.level,class:`mb-2 flex items-center gap-3`},[e(r(w),{color:$[n.level],class:`w-16 text-center`},{default:u(()=>[t(d(n.level),1)]),_:2},1032,[`color`]),e(r(T),{percent:n.percent,size:`small`,class:`flex-1`},null,8,[`percent`]),i(`span`,le,d(n.count)+` 条`,1)]))),128))]),_:1},8,[`loading`])]),_:1})]),_:1}),e(r(b),{title:`各模型被选中的比例`,size:`small`,loading:r(B)},{default:u(()=>{var t,n,a;return[e(r(_),{"data-source":De.value,"row-key":`provider`,size:`small`,pagination:!1,columns:[{title:`模型`,dataIndex:`provider`,key:`provider`},{title:`被选中`,dataIndex:`count`,key:`count`,width:100},{title:`占比`,key:`percent`,width:240}]},{bodyCell:u(({column:e,record:t})=>[e.key===`percent`?(c(),f(r(T),{key:0,percent:t.percent,size:`small`},null,8,[`percent`])):m(``,!0)]),_:1},8,[`data-source`]),i(`p`,ue,` 统计区间自 `+d(((t=r(z))==null?void 0:t.since)||`—`)+` 起。最慢一次 `+d((n=(a=r(z))==null?void 0:a.max_ms)==null?0:n)+`ms。 `,1)]}),_:1},8,[`loading`]),e(r(b),{title:`调用记录`,size:`small`,class:`mt-4`},{extra:u(()=>[e(r(ne).Search,{value:U.value,"onUpdate:value":s[2]||(s[2]=e=>U.value=e),placeholder:`搜客户消息或模型回复里的关键词`,style:{width:`280px`},"allow-clear":``,onSearch:we},null,8,[`value`])]),default:u(()=>[s[7]||(s[7]=i(`p`,{class:`mb-3 text-xs text-gray-500`},` 按时间倒序,一条一次调用:客户说了什么、模型候选都答了什么、最终选中的是哪个、有没有被审核规则拦下——出问题时按这张表往回查。 `,-1)),i(`div`,de,[e(r(E),{value:Y.value,"onUpdate:value":s[3]||(s[3]=e=>Y.value=e),options:[{value:`chat`,label:`客服对话`},{value:`guard`,label:`界面识别`},{value:``,label:`全部`}]},null,8,[`value`]),s[5]||(s[5]=i(`span`,{class:`ml-3 text-xs text-gray-500`},` 「界面识别」是机器人自己看企业微信窗口用的,不是发给客户的话;它每轮轮询都要问一次模型,条数远多于真实对话,所以默认不混在一起。 `,-1))]),r(G)?(c(),f(r(y),{key:0,class:`mb-3`,type:`error`,"show-icon":``,message:r(G)},null,8,[`message`])):m(``,!0),e(r(_),{"data-source":Se.value,"row-key":`id`,size:`small`,loading:r(be),pagination:{current:K.value,pageSize:q.value,total:Ce.value,showTotal:e=>`共 ${e} 条`},onChange:Te,columns:[{title:`时间`,key:`created_at`,width:130},{title:`客户消息`,key:`customer_text`,width:200,ellipsis:!0},{title:`模型回复`,key:`reply_text`,width:200,ellipsis:!0},{title:`选中`,dataIndex:`chosen`,key:`chosen`,width:110,ellipsis:!0},{title:`裁判分`,dataIndex:`judge_score`,key:`judge_score`,width:80},{title:`风险`,dataIndex:`judge_risk`,key:`judge_risk`,width:80},{title:`审核`,key:`review_reason`,width:90},{title:`耗时`,dataIndex:`total_ms`,key:`total_ms`,width:80},{title:``,key:`action`,width:70}]},{bodyCell:u(({column:e,record:n})=>[e.key===`created_at`?(c(),a(`span`,{key:0,title:n.created_at},d(Z(n.created_at)),9,fe)):e.key===`customer_text`?(c(),a(`span`,{key:1,title:n.customer_text},d(n.customer_text||`—`),9,pe)):e.key===`reply_text`?(c(),a(`span`,{key:2,title:n.reply_text},d(n.reply_text||`—`),9,me)):e.key===`judge_risk`?(c(),a(l,{key:3},[n.judge_risk?(c(),f(r(w),{key:0,color:$[n.judge_risk]},{default:u(()=>[t(d(n.judge_risk),1)]),_:2},1032,[`color`])):(c(),a(`span`,he,`—`))],64)):e.key===`review_reason`?(c(),a(l,{key:4},[n.review_reason?(c(),f(r(w),{key:0,color:`orange`},{default:u(()=>[...s[6]||(s[6]=[t(`已拦`,-1)])]),_:1})):(c(),a(`span`,ge,`—`))],64)):e.key===`total_ms`?(c(),a(l,{key:5},[t(d(n.total_ms)+`ms `,1)],64)):e.key===`action`?(c(),a(`a`,{key:6,onClick:e=>J.value=n},`详情`,8,_e)):m(``,!0)]),_:1},8,[`data-source`,`loading`,`pagination`])]),_:1}),e(r(re),{open:!!J.value,title:`调用详情`,footer:null,width:`640px`,onCancel:s[4]||(s[4]=e=>J.value=null)},{default:u(()=>{var n;return[J.value?(c(),a(l,{key:0},[i(`div`,O,[s[8]||(s[8]=i(`div`,{class:`mb-1 text-xs text-gray-500`},`客户消息`,-1)),i(`div`,k,d(J.value.customer_text||`(空)`),1)]),i(`div`,A,[s[9]||(s[9]=i(`div`,{class:`mb-1 text-xs text-gray-500`},`模型回复(最终选中)`,-1)),i(`div`,j,d(J.value.reply_text||`(空)`),1)]),J.value.review_reason?(c(),a(`div`,M,[e(r(y),{type:`warning`,"show-icon":``,message:`已停发送审核:${J.value.review_reason}`},null,8,[`message`])])):m(``,!0),(n=J.value.candidates)!=null&&n.length?(c(),a(`div`,N,[s[10]||(s[10]=i(`div`,{class:`mb-1 text-xs text-gray-500`},`全部候选`,-1)),(c(!0),a(l,null,o(J.value.candidates,(n,o)=>{var s;return c(),a(`div`,{key:o,class:`mb-2 rounded border border-gray-200 p-2 text-sm dark:border-gray-700`},[i(`div`,P,[e(r(w),{color:n.provider===J.value.chosen?`green`:`default`},{default:u(()=>[t(d(n.provider)+d(n.provider===J.value.chosen?`(选中)`:``),1)]),_:2},1032,[`color`]),i(`span`,F,d((s=n.latency_ms)==null?0:s)+`ms`,1)]),i(`div`,I,d(n.text||n.error||`(空)`),1)])}),128))])):m(``,!0),i(`p`,ve,` 裁判 `+d(J.value.judge_winner||`—`)+`/`+d(J.value.judge_score)+`分,共 `+d(J.value.total_ms)+`ms,`+d(Z(J.value.created_at)),1)],64)):m(``,!0)]}),_:1},8,[`open`])]))}});export{L as default};