mirror of
https://github.com/hellodigua/ChatLab.git
synced 2026-04-25 04:52:43 +08:00
feat: 支持 FTS5 全文搜索,并新增快速搜索工具
This commit is contained in:
49
electron/main/ai/tools/definitions/deep-search-messages.ts
Normal file
49
electron/main/ai/tools/definitions/deep-search-messages.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { Type } from '@mariozechner/pi-ai'
|
||||
import type { AgentTool } from '@mariozechner/pi-agent-core'
|
||||
import type { ToolContext } from '../types'
|
||||
import * as workerManager from '../../../worker/workerManager'
|
||||
import { parseExtendedTimeParams } from '../utils/time-params'
|
||||
import { formatTimeRange } from '../utils/format'
|
||||
import { timeParamProperties } from '../utils/schemas'
|
||||
|
||||
const schema = Type.Object({
|
||||
keywords: Type.Array(Type.String(), { description: 'ai.tools.deep_search_messages.params.keywords' }),
|
||||
sender_id: Type.Optional(Type.Number({ description: 'ai.tools.deep_search_messages.params.sender_id' })),
|
||||
limit: Type.Optional(Type.Number({ description: 'ai.tools.deep_search_messages.params.limit' })),
|
||||
...timeParamProperties,
|
||||
})
|
||||
|
||||
export function createTool(context: ToolContext): AgentTool<typeof schema> {
|
||||
return {
|
||||
name: 'deep_search_messages',
|
||||
label: 'deep_search_messages',
|
||||
description: 'ai.tools.deep_search_messages.desc',
|
||||
parameters: schema,
|
||||
execute: async (_toolCallId, params) => {
|
||||
const { sessionId, timeFilter: contextTimeFilter, maxMessagesLimit, locale } = context
|
||||
const limit = Math.min(maxMessagesLimit || params.limit || 1000, 50000)
|
||||
const effectiveTimeFilter = parseExtendedTimeParams(params, contextTimeFilter)
|
||||
|
||||
const result = await workerManager.deepSearchMessages(
|
||||
sessionId,
|
||||
params.keywords,
|
||||
effectiveTimeFilter,
|
||||
limit,
|
||||
0,
|
||||
params.sender_id
|
||||
)
|
||||
|
||||
const data = {
|
||||
total: result.total,
|
||||
returned: result.messages.length,
|
||||
timeRange: formatTimeRange(effectiveTimeFilter, locale),
|
||||
rawMessages: result.messages,
|
||||
}
|
||||
|
||||
return {
|
||||
content: [{ type: 'text', text: JSON.stringify(data) }],
|
||||
details: data,
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import type { ToolRegistryEntry } from '../types'
|
||||
|
||||
import { createTool as createGetChatOverview } from './get-chat-overview'
|
||||
import { createTool as createSearchMessages } from './search-messages'
|
||||
import { createTool as createDeepSearchMessages } from './deep-search-messages'
|
||||
import { createTool as createGetRecentMessages } from './get-recent-messages'
|
||||
import { createTool as createGetMessageContext } from './get-message-context'
|
||||
import { createTool as createSearchSessions } from './search-sessions'
|
||||
@@ -30,6 +31,7 @@ export const TOOL_REGISTRY: ToolRegistryEntry[] = [
|
||||
// ==================== Core 工具(始终加载) ====================
|
||||
{ name: 'get_chat_overview', factory: createGetChatOverview, category: 'core' },
|
||||
{ name: 'search_messages', factory: createSearchMessages, category: 'core' },
|
||||
{ name: 'deep_search_messages', factory: createDeepSearchMessages, category: 'core' },
|
||||
{ name: 'get_recent_messages', factory: createGetRecentMessages, category: 'core' },
|
||||
{ name: 'get_message_context', factory: createGetMessageContext, category: 'core' },
|
||||
{ name: 'search_sessions', factory: createSearchSessions, category: 'core' },
|
||||
|
||||
Reference in New Issue
Block a user