本地 RAG 知识库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

76 lines
3.0 KiB

import request from './request'
import type { ApiResponse } from '@/types/api'
/** LLM 调用追踪列表查询参数 */
export interface LlmTraceQuery {
page?: number
size?: number
roleId?: string
conversationId?: string
intent?: string
startTime?: string
endTime?: string
keyword?: string
apiKeyId?: string
errorType?: string
sortField?: string
sortOrder?: string
}
/** 分页查询调用记录 */
export function listLlmTraces(query: LlmTraceQuery = {}): Promise<ApiResponse> {
const params = new URLSearchParams()
params.set('page', String(query.page ?? 1))
params.set('size', String(query.size ?? 20))
if (query.roleId) params.set('roleId', query.roleId)
if (query.conversationId) params.set('conversationId', query.conversationId)
if (query.intent) params.set('intent', query.intent)
if (query.startTime) params.set('startTime', query.startTime)
if (query.endTime) params.set('endTime', query.endTime)
if (query.keyword) params.set('keyword', query.keyword)
if (query.apiKeyId) params.set('apiKeyId', query.apiKeyId)
if (query.errorType) params.set('errorType', query.errorType)
if (query.sortField) params.set('sortField', query.sortField)
if (query.sortOrder) params.set('sortOrder', query.sortOrder)
return request.get(`/llm-trace/list?${params.toString()}`).then(r => r.data)
}
/** 单条详情(含完整 system prompt) */
export function getLlmTrace(id: string): Promise<ApiResponse> {
return request.get(`/llm-trace/${id}`).then(r => r.data)
}
/** 清理 N 天前的记录(后端返回 {success, message, deleted},无 data 字段) */
export interface CleanLlmTracesResult { success: boolean; message?: string; deleted?: number }
export function cleanLlmTraces(keepDays: number): Promise<CleanLlmTracesResult> {
return request.post('/llm-trace/clean', { keepDays }).then(r => r.data)
}
/** 聚合统计(按角色或模型分组) */
export function getLlmTraceStats(groupBy: 'role' | 'model' = 'role'): Promise<ApiResponse> {
return request.get(`/llm-trace/stats?groupBy=${groupBy}`).then(r => r.data)
}
/** 可选错误类型列表 */
export function getLlmTraceErrorTypes(): Promise<ApiResponse> {
return request.get('/llm-trace/error-types').then(r => r.data)
}
/** 单会话调用记录(会话时间线,复用 list 接口按 conversationId 过滤) */
export function getLlmTraceConversation(conversationId: string): Promise<ApiResponse> {
return request.get(`/llm-trace/list?conversationId=${encodeURIComponent(conversationId)}&size=100`).then(r => r.data)
}
/** 时间维度趋势统计 */
export interface LlmTraceTrendQuery {
groupBy?: 'HOUR' | 'DAY'
startTime?: string
endTime?: string
}
export function getLlmTraceTrend(query: LlmTraceTrendQuery = {}): Promise<ApiResponse> {
const params = new URLSearchParams()
params.set('groupBy', query.groupBy ?? 'HOUR')
if (query.startTime) params.set('startTime', query.startTime)
if (query.endTime) params.set('endTime', query.endTime)
return request.get(`/llm-trace/trend?${params.toString()}`).then(r => r.data)
}