feat: 优化问问微信检索性能与分析交互

- 补充 Worker、WCDB、sender、IPC、序列化时间账
- 增加 Agent 增量覆盖统计和重复检索停止条件
- 补充性能与交互回归测试
This commit is contained in:
Wxw-Gu
2026-08-07 15:28:45 +08:00
parent 43654bf0e2
commit 0b845db2e0
20 changed files with 1304 additions and 184 deletions
+29 -1
View File
@@ -118,6 +118,13 @@ export interface AiSearchAgentTraceItem {
/** Sanitized, human-readable arguments only. */
arguments?: Record<string, string | number | boolean>
resultCount?: number
uniqueCandidateCount?: number
newCandidateCount?: number
newEvidenceCount?: number
newConversationCount?: number
newSenderCount?: number
queryFingerprint?: string
hasMore?: boolean
elapsedMs?: number
decision?: string
}
@@ -177,6 +184,16 @@ export interface AiSearchPipelineTimings {
workerSqlMs: number
responseSerializeMs: number
responseTransferMs: number
workerQueueMs: number
workerExecutionMs: number
globalCountMs: number
voiceCoverageMs: number
wcdbQueueMs: number
wcdbExecutionMs: number
senderEnrichmentMs: number
ipcMs: number
serializationMs: number
otherMs: number
ftsMs: number
chunkExpandMs: number
messageLoadMs: number
@@ -208,6 +225,7 @@ export interface AiSearchRetrievalContract {
| 'conversation_name'
| 'unresolved_identity'
candidateCount: number
uniqueCandidateCount: number
sourceMessageCount?: number
sourceCoverage: 'complete' | 'partial' | 'keyword_match' | 'unknown'
isComplete: boolean
@@ -219,7 +237,13 @@ export interface AiSearchRetrievalContract {
export interface AiSearchPipelineResult {
requestId: string
status: 'completed' | 'no_evidence' | 'retrieval_incomplete' | 'ai_failed' | 'failed'
status:
| 'completed'
| 'no_evidence'
| 'retrieval_incomplete'
| 'ai_failed'
| 'failed'
| 'cancelled'
plan: AiSearchPlan
knowledge: Pick<
KnowledgeSearchIpcResult,
@@ -251,6 +275,10 @@ export interface AiSearchPipelineResult {
elapsedMs: number
}
export interface AiSearchCancelResult {
cancelled: boolean
}
const RANGE_LABELS: Record<AiSearchRange, string> = {
today: '今天',
'7d': '近 7 天',
+25
View File
@@ -243,6 +243,26 @@ export interface KnowledgeSearchTimings {
rankingMs: number
/** Worker-side local search total. */
totalMs: number
/** Time spent refreshing a stale on-disk statistics snapshot. */
globalCountMs?: number
/** Voice coverage aggregation time for this query. */
voiceCoverageMs?: number
/** Full Worker handler execution, including status and coverage bookkeeping. */
workerExecutionMs?: number
/** Worker queue wait in the main-process host, when observable. */
workerQueueMs?: number
/** Main-process WCDB FIFO wait, when observable. */
wcdbQueueMs?: number
/** Main-process WCDB operation execution, when observable. */
wcdbExecutionMs?: number
/** Main-process sender/contact enrichment duration. */
senderEnrichmentMs?: number
/** Main-process IPC/transport duration, when separated from Worker execution. */
ipcMs?: number
/** Serialization/encoding duration outside the Worker SQL timer. */
serializationMs?: number
/** Other unclassified waiting in the retrieval path. */
otherMs?: number
}
export const emptyKnowledgeSearchTimings = (): KnowledgeSearchTimings => ({
@@ -273,6 +293,8 @@ export interface KnowledgeSearchResult {
export interface KnowledgeSearchIpcRequest {
text: string
terms: string[]
/** Bounded request/session cache key for sender enrichment only. */
retrievalSessionId?: string
conversationIds?: string[]
senderIds?: string[]
startTime?: number
@@ -341,9 +363,12 @@ export interface KnowledgeWorkerResponse {
| { removed: true }
error?: string
transport?: {
/** IPC message arrival timestamp in the Worker event loop. */
messageReceivedAt?: number
workerReceivedAt: number
workerCompletedAt: number
responseSerializeMs: number
workerQueueMs?: number
}
}