Files
ChatLab/electron/main/ai/tools/definitions/get-recent-messages.ts
digua c36878c58d feat(ai): 实现聊天记录预处理管道
- 新增 preprocessor 模块:数据清洗(XML卡片)、黑名单过滤、智能去噪、连续发言合并、数据脱敏
- 内置多国脱敏规则(中国手机号/身份证、美国SSN、日韩号码等)+ 自定义规则支持
- 工具层统一 wrapWithPreprocessing 包装,自动对 rawMessages 执行预处理+格式化
- 昵称匿名化:用 U{id} 替代真实昵称,跨工具调用一致
- SQL 查询补充 senderId/senderPlatformId
- PreprocessConfig 类型定义(preload + 主进程)
2026-02-28 00:02:08 +08:00

42 lines
1.6 KiB
TypeScript

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({
limit: Type.Optional(Type.Number({ description: 'ai.tools.get_recent_messages.params.limit' })),
...timeParamProperties,
})
/** 获取指定时间段内的群聊消息。适用于回答"最近大家聊了什么"、"X月群里聊了什么"等概览性问题。支持精确到分钟级别的时间查询。 */
export function createTool(context: ToolContext): AgentTool<typeof schema> {
return {
name: 'get_recent_messages',
label: 'get_recent_messages',
description: 'ai.tools.get_recent_messages.desc',
parameters: schema,
execute: async (_toolCallId, params) => {
const { sessionId, timeFilter: contextTimeFilter, maxMessagesLimit, locale } = context
const limit = maxMessagesLimit || params.limit || 100
const effectiveTimeFilter = parseExtendedTimeParams(params, contextTimeFilter)
const result = await workerManager.getRecentMessages(sessionId, effectiveTimeFilter, limit)
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,
}
},
}
}