From b129b50468c9c1c1c4b35790a397c788ea5063e2 Mon Sep 17 00:00:00 2001 From: ModerRAS Date: Fri, 24 Apr 2026 11:13:19 +0800 Subject: [PATCH 1/2] docs: cleanup outdated documentation and configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove obsolete Qdrant vector search documentation (README_VectorSearch.md) - Update vector command names: /向量* → /faiss* - Update LiteDB reference to SQLite in Bot_Commands_User_Guide.md - Remove completed Qdrant migration instructions from README_FaissVectorSearch.md - Update .NET version in Vector/README.md: 8.0 → 10.0 - Update MCP attribute examples in copilot-instructions.md: [McpTool] → [BuiltInTool] - Remove personal HTTP_PROXY from launchSettings.json --- .github/copilot-instructions.md | 4 +- Docs/Bot_Commands_User_Guide.md | 2 +- Docs/README_FaissVectorSearch.md | 32 +------ Docs/README_VectorDatabaseInit.md | 8 +- Docs/README_VectorSearch.md | 95 ------------------- .../Service/Vector/README.md | 2 +- .../Properties/launchSettings.json | 4 +- 7 files changed, 12 insertions(+), 135 deletions(-) delete mode 100644 Docs/README_VectorSearch.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index d84a7698..63d25508 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -26,8 +26,8 @@ - 新任务若需要跨进程通信,请复用 `StackExchange.Redis` 连接(Garnet)实现分布式锁或队列。 ## AI 与工具集成 -- LLM 通道由 `Service/AI/LLM/*` 管理;`McpToolHelper.EnsureInitialized` 会扫描 `[McpTool]` 标记的方法生成工具 XML。 -- 新增工具需放在同一程序集,配合 `[McpParameter]` 描述参数;`GeneralBootstrap` 启动时会自动注册并缓存 Prompt 片段。 +- LLM 通道由 `Service/AI/LLM/*` 管理;`McpToolHelper.EnsureInitialized` 会扫描 `[BuiltInTool]` 标记的方法生成工具 XML。 +- 新增工具需放在同一程序集,配合 `[BuiltInParameter]` 描述参数;`GeneralBootstrap` 启动时会自动注册并缓存 Prompt 片段。 - OCR/ASR/QR 相关控制器依赖独立进程服务(参见 `AppBootstrap/OCRBootstrap.cs` 等),调试时可单独以 `dotnet run --project TelegramSearchBot -- OCR` 启动。 ## 构建与测试 diff --git a/Docs/Bot_Commands_User_Guide.md b/Docs/Bot_Commands_User_Guide.md index 847ff9f1..21ebac5e 100644 --- a/Docs/Bot_Commands_User_Guide.md +++ b/Docs/Bot_Commands_User_Guide.md @@ -13,7 +13,7 @@ * **说明与分页**: * 机器人会以消息形式返回搜索结果列表,每条结果通常包含消息内容的预览和指向原始消息的链接。 * 如果结果数量较多,消息底部会附带内联键盘按钮,如“下一页”和“删除历史”。 - * **“下一页”按钮**: 点击后,机器人会显示下一页的搜索结果。这个功能由 `SearchNextPageController` 处理,它会从一个临时的缓存(LiteDB中的`CacheData`表)中读取之前的搜索条件和当前分页状态(通过按钮回调数据中的唯一ID关联),然后获取并展示新的结果页,同时更新分页按钮。`Service/BotAPI/SendService.cs` 负责生成包含这些按钮的回复消息,并将下一次分页所需的状态(如更新后的跳过条目数)存入缓存。 + * **“下一页”按钮**: 点击后,机器人会显示下一页的搜索结果。这个功能由 `SearchNextPageController` 处理,它会从一个临时的缓存(SQLite中的`SearchPageCaches`表)中读取之前的搜索条件和当前分页状态(通过按钮回调数据中的唯一ID关联),然后获取并展示新的结果页,同时更新分页按钮。`Service/BotAPI/SendService.cs` 负责生成包含这些按钮的回复消息,并将下一次分页所需的状态(如更新后的跳过条目数)存入缓存。 * **“删除历史”按钮**: 点击后,通常会删除之前的搜索结果消息,以保持聊天界面的整洁。 2. **解析链接 (手动)** diff --git a/Docs/README_FaissVectorSearch.md b/Docs/README_FaissVectorSearch.md index 042fabac..43be33c6 100644 --- a/Docs/README_FaissVectorSearch.md +++ b/Docs/README_FaissVectorSearch.md @@ -2,9 +2,9 @@ ## 概述 -为了解决Qdrant向量数据库的连接问题和服务依赖复杂性,我们重新实现了基于 **SQLite + FAISS.NET** 的向量搜索系统。这个方案提供了: +基于 **SQLite + FAISS.NET** 的向量搜索系统,提供: -- ✅ **零额外服务依赖** - 不需要Qdrant或其他向量数据库 +- ✅ **零额外服务依赖** - 不需要外部向量数据库 - ✅ **高性能搜索** - FAISS是Facebook开发的高效向量相似性搜索库 - ✅ **简化部署** - 所有数据存储在SQLite,索引文件存储在本地 - ✅ **可靠性提升** - 避免网络连接问题和服务管理复杂性 @@ -171,20 +171,6 @@ FAISS向量数据库状态报告 - **文件压缩**:FAISS内置压缩算法 - **定期清理**:自动清理孤立和无效数据 -## 迁移说明 - -### 从Qdrant迁移 - -1. **保留现有数据**:ConversationSegment表中的数据不变 -2. **重新向量化**:使用 `/faiss重建` 命令重新生成FAISS索引 -3. **更新配置**:不再需要Qdrant相关配置 - -### 兼容性 - -- ✅ **向后兼容**:现有的对话段数据完全保留 -- ✅ **API兼容**:SearchOption和搜索命令不变 -- ✅ **结果一致**:搜索结果格式和质量保持一致 - ## 故障排除 ### 常见问题 @@ -218,18 +204,6 @@ FAISS向量数据库状态报告 - `FAISS索引训练完成` - `向量化失败` - 需要关注的错误 -## 优势对比 - -| 特性 | Qdrant方案 | FAISS方案 | -|------|-----------|-----------| -| **部署复杂度** | ❌ 需要额外服务 | ✅ 零依赖 | -| **连接稳定性** | ⚠️ 网络连接问题 | ✅ 本地文件 | -| **性能** | ✅ 很好 | ✅ 优秀 | -| **扩展性** | ✅ 支持集群 | ⚠️ 单机限制 | -| **维护成本** | ❌ 高 | ✅ 低 | -| **存储效率** | ✅ 优化 | ✅ 本地优化 | -| **故障恢复** | ⚠️ 服务依赖 | ✅ 文件备份 | - ## 技术细节 ### FAISS索引算法选择 @@ -253,4 +227,4 @@ FAISS向量数据库状态报告 3. **索引存储**:FAISS索引文件 + SQLite元数据 -这个方案解决了Qdrant的连接问题,提供了更可靠和简单的向量搜索体验。 \ No newline at end of file +本方案提供可靠和简单的向量搜索体验。 \ No newline at end of file diff --git a/Docs/README_VectorDatabaseInit.md b/Docs/README_VectorDatabaseInit.md index 13194f01..f458af94 100644 --- a/Docs/README_VectorDatabaseInit.md +++ b/Docs/README_VectorDatabaseInit.md @@ -24,7 +24,7 @@ TelegramSearchBot现在使用**FAISS (Facebook AI Similarity Search)**作为向 使用管理员命令进行手动初始化: ``` -/向量初始化 +/faiss初始化 ``` 该命令会: @@ -37,7 +37,7 @@ TelegramSearchBot现在使用**FAISS (Facebook AI Similarity Search)**作为向 ### 向量服务状态检查 ``` -/向量状态 +/faiss状态 ``` 显示: - FAISS服务健康状态 @@ -46,7 +46,7 @@ TelegramSearchBot现在使用**FAISS (Facebook AI Similarity Search)**作为向 ### 群组向量初始化 ``` -/向量初始化 [群组ID] +/faiss初始化 [群组ID] ``` 为指定群组初始化向量: - 创建对话段 @@ -157,7 +157,7 @@ ${WorkDir}/ ### 数据一致性检查 ``` -/向量状态 +/faiss状态 ``` 检查: - 对话段数量与向量数量是否一致 diff --git a/Docs/README_VectorSearch.md b/Docs/README_VectorSearch.md deleted file mode 100644 index c2cc9316..00000000 --- a/Docs/README_VectorSearch.md +++ /dev/null @@ -1,95 +0,0 @@ -# 向量搜索功能说明 - -## 功能概述 - -本项目现在支持两种搜索方式: -1. **倒排索引搜索** (Lucene) - 基于关键词的精确匹配搜索 -2. **向量搜索** - 基于语义相似度的智能搜索 - -## 使用方式 - -### 搜索命令 - -#### 倒排索引搜索(默认) -``` -搜索 关键词 -``` -例如:`搜索 Python编程` - -#### 向量搜索 -``` -向量搜索 查询内容 -``` -例如:`向量搜索 如何学习编程` - -### 搜索结果界面 - -搜索结果会显示: -- 当前使用的搜索方式(倒排索引 / 向量搜索) -- 找到的结果数量和当前页面信息 -- 消息链接列表 - -### 交互按钮 - -每个搜索结果都包含以下按钮: -- **下一页** - 查看更多搜索结果 -- **切换到XXX搜索** - 在两种搜索方式之间切换 -- **删除历史** - 删除搜索相关的历史消息 - -## 技术实现 - -### 架构设计 - -1. **SearchOption 模型扩展** - - 添加了 `SearchType` 枚举字段 - - 支持 InvertedIndex 和 Vector 两种搜索类型 - -2. **CallbackDataService 服务** - - 解耦了回调数据处理逻辑 - - 统一管理分页、删除历史、切换搜索方式等操作 - -3. **SearchService 改进** - - 根据 SearchType 自动选择对应的搜索引擎 - - 支持群聊和私聊两种场景的向量搜索 - -4. **SearchView 视图增强** - - 显示当前搜索方式 - - 支持搜索方式切换按钮 - -### 向量搜索流程 - -1. **群聊搜索**:直接在当前群组的向量库中搜索 -2. **私聊搜索**:在用户所参与的所有群组中搜索,合并结果 - -### 依赖服务 - -- **VectorGenerationService** - 负责向量生成和搜索 -- **QdrantClient** - 向量数据库客户端 -- **IGeneralLLMService** - LLM服务用于生成文本向量 - -## 部署要求 - -确保以下服务正常运行: -1. Qdrant 向量数据库 -2. LLM服务(用于生成向量) -3. Redis(用于缓存) - -## 配置说明 - -在依赖注入容器中确保注册了以下服务: -- `IVectorGenerationService` -- `CallbackDataService` -- `QdrantClient` -- `IGeneralLLMService` - -## 性能考虑 - -- 向量搜索的首次查询会计算总数,可能略慢 -- 私聊搜索需要查询多个群组,响应时间取决于用户参与的群组数量 -- 向量生成依赖LLM服务的性能 - -## 使用建议 - -- **精确搜索**:使用倒排索引搜索查找具体关键词 -- **语义搜索**:使用向量搜索查找语义相关的内容 -- **快速切换**:可以在搜索结果中直接切换搜索方式进行对比 \ No newline at end of file diff --git a/TelegramSearchBot.Test/Service/Vector/README.md b/TelegramSearchBot.Test/Service/Vector/README.md index 608b36f4..84be804d 100644 --- a/TelegramSearchBot.Test/Service/Vector/README.md +++ b/TelegramSearchBot.Test/Service/Vector/README.md @@ -190,4 +190,4 @@ _mockServiceScope.Setup(x => x.ServiceProvider.GetRequiredService **维护者**: TelegramSearchBot团队 **最后更新**: 2024年12月 -**测试框架版本**: xUnit 2.9.3, .NET 8.0 \ No newline at end of file +**测试框架版本**: xUnit 2.9.3, .NET 10.0 \ No newline at end of file diff --git a/TelegramSearchBot/Properties/launchSettings.json b/TelegramSearchBot/Properties/launchSettings.json index feee4a5c..16f61115 100644 --- a/TelegramSearchBot/Properties/launchSettings.json +++ b/TelegramSearchBot/Properties/launchSettings.json @@ -2,9 +2,7 @@ "profiles": { "TelegramSearchBot": { "commandName": "Project", - "environmentVariables": { - "HTTP_PROXY": "http://127.0.0.1:7890" - } + "environmentVariables": {} } } } \ No newline at end of file From 25a02753b037527165363f4180545f18b0f11899 Mon Sep 17 00:00:00 2001 From: ModerRAS Date: Fri, 24 Apr 2026 14:14:44 +0800 Subject: [PATCH 2/2] docs: add missing bot commands and fix MCP tool documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add missing commands to Bot_Commands_User_Guide.md: - 向量搜索、语法搜索 - 群组黑名单管理 (查黑名单/封群/解封群) - 定时任务管理 (/scheduler) - LLM Agent 管理 (/agent) - 系统更新 (/checkupdate, /update) - 测试定时任务 - 交互式模型选择 - 向量数据管理命令 - 账本功能命令 - Fix README_MCP.md: - Remove non-existent EditFile tool - Fix tool names (memory_search→process_memory_command, brave_web_search→search_web) - Add missing tools (echo, calculator, send_message, execute_js, todo tools) - Update tool count from 24+ to 30+ - Add complete parameter descriptions --- Docs/Bot_Commands_User_Guide.md | 94 +++++++++++++++++++++++++++++++-- Docs/README_MCP.md | 33 +++++++----- 2 files changed, 111 insertions(+), 16 deletions(-) diff --git a/Docs/Bot_Commands_User_Guide.md b/Docs/Bot_Commands_User_Guide.md index 21ebac5e..66552fd6 100644 --- a/Docs/Bot_Commands_User_Guide.md +++ b/Docs/Bot_Commands_User_Guide.md @@ -16,13 +16,24 @@ * **“下一页”按钮**: 点击后,机器人会显示下一页的搜索结果。这个功能由 `SearchNextPageController` 处理,它会从一个临时的缓存(SQLite中的`SearchPageCaches`表)中读取之前的搜索条件和当前分页状态(通过按钮回调数据中的唯一ID关联),然后获取并展示新的结果页,同时更新分页按钮。`Service/BotAPI/SendService.cs` 负责生成包含这些按钮的回复消息,并将下一次分页所需的状态(如更新后的跳过条目数)存入缓存。 * **“删除历史”按钮**: 点击后,通常会删除之前的搜索结果消息,以保持聊天界面的整洁。 -2. **解析链接 (手动)** +2. **向量搜索 (语义搜索)** + * **指令格式**: `向量搜索 <问题描述>` + * **功能**: 基于对话段的语义理解进行搜索,使用 FAISS 向量数据库。 + * **示例**: `向量搜索 如何配置环境变量` + * **说明**: 与传统关键词搜索不同,向量搜索能理解问题的语义,找到相关内容。 + +3. **语法搜索 (高级搜索)** + * **指令格式**: `语法搜索 <查询>` + * **功能**: 支持 Lucene 查询语法的高级搜索。 + * **示例**: `语法搜索 title:测试 AND content:重要` + +4. **解析链接 (手动)** * **指令**: `/resolveurls` * **功能**: 当用户明确使用此命令时,解析提供的文本(或回复的消息中的文本)中包含的短链接或重定向链接,并显示其最终的目标长链接。 * **用法1 (直接提供文本)**: `/resolveurls <包含一个或多个链接的文本>` * **示例**: `/resolveurls 这是b23.tv/xxxx的一个短链接,还有t.cn/AAAA的另一个。` * **用法2 (回复消息)**: 回复一条包含链接的消息,并发送指令 `/resolveurls`。 - * **说明**: 机器人会回复解析后的链接列表。此命令主要用于即时查看链接的解析结果。链接的自动后台处理和存储是另一项功能(见下文“自动URL解析与存储”)。 + * **说明**: 机器人会回复解析后的链接列表。此命令主要用于即时查看链接的解析结果。链接的自动后台处理和存储是另一项功能(见下文"自动URL解析与存储")。 ## 二、管理员指令 @@ -50,6 +61,50 @@ * **功能**: 取消当前群组的“管理群”状态。 * **用法**: 在目标群组中发送 `取消管理群`。 +* **群组黑名单管理** (仅全局管理员,私聊中发送) + * **指令**: `查黑名单` + * **功能**: 查看当前被封禁的群组列表。 + * **指令**: `封群 <群组ID>` + * **功能**: 封禁指定群组,机器人会自动退出该群组。 + * **指令**: `解封群 <群组ID>` + * **功能**: 解除对指定群组的封禁。 + +* **定时任务管理** (仅管理员) + * **说明**: 以下命令用于管理后台定时任务。 + * **指令**: `/scheduler status` + * **功能**: 查看所有定时任务的状态和最近执行情况。 + * **指令**: `/scheduler run` + * **功能**: 手动触发执行所有定时任务。 + * **指令**: `/scheduler run <任务名>` + * **功能**: 手动触发执行指定的定时任务。 + * **示例**: `/scheduler run SearchPageCacheCleanup` + * **指令**: `/scheduler history` + * **功能**: 查看最近的定时任务执行历史。 + +* **LLM Agent 管理** (仅管理员) + * **说明**: 当 `EnableLLMAgentProcess=true` 时,LLM对话运行在独立进程。以下命令用于监控和管理Agent。 + * **指令**: `/agent list` + * **功能**: 列出当前所有活跃的 LLM Agent 会话。 + * **指令**: `/agent stats` + * **功能**: 显示 Agent 系统统计信息(活跃数量、队列长度等)。 + * **指令**: `/agent kill ` + * **功能**: 强制终止指定 ChatId 的 Agent 会话。 + * **示例**: `/agent kill -1001234567890` + +* **系统更新** (仅全局管理员) + * **指令**: `/checkupdate` 或 `/检查更新` + * **功能**: 检查是否有可用的新版本。 + * **指令**: `/update` 或 `/更新` + * **功能**: 执行系统更新(如果存在新版本)。 + +* **测试定时任务** (仅全局管理员) + * **指令**: `/testdailytask` 或 `测试定时任务` + * **功能**: 手动触发执行所有定时任务(结果可在日志中查看)。 + +* **交互式模型选择** (仅管理员) + * **指令**: `选择模型` + * **功能**: 交互式选择当前群组使用的 LLM 模型。会列出所有可用模型供选择。 + * **Bilibili 相关配置** (可在任意聊天中发送,但仅全局管理员可执行) * **设置B站Cookie**: * **指令格式**: `/setbilicookie ` 或 `设置B站Cookie ` @@ -216,6 +271,39 @@ * **功能**: 从预设路径 (`/tmp/export.json`) 的 JSON 文件中导入用户和消息数据到数据库。 (注意:此功能依赖特定文件路径和格式) * **指令**: `迁移数据` * **功能**: 将数据从 LiteDB 迁移到 SQLite 数据库。 (注意:此为特定场景下的数据迁移指令) + * **指令**: `扫描音频文件` + * **功能**: 扫描本地音频目录,为未处理的音频文件执行 ASR 识别。 + * **指令**: `扫描图片文件` + * **功能**: 扫描本地图片目录,为未处理的图片执行 OCR 和二维码识别。 + * **指令**: `扫描视频文件` + * **功能**: 扫描本地视频目录,为未处理的视频文件执行 ASR 识别。 + * **指令**: `清理向量数据` + * **功能**: 清理所有 FAISS 向量数据和对话段数据。 + * **指令**: `重新向量化` + * **功能**: 重新生成分割对话段并生成向量。 + * **指令**: `重建向量索引` + * **功能**: 清空并重建完整的向量索引(先清理后重新向量化)。 + * **指令**: `重建群组向量索引:<群组ID>` + * **功能**: 为指定群组重建向量索引。 + * **示例**: `重建群组向量索引:-1001234567890` + +* **账本功能** (需 `EnableAccounting=true`,在群组中使用) + * **说明**: 账本功能用于群组内的收支记录管理。 + * **指令**: `/创建账本 名称 [描述]` 或 `创建账本 名称 [描述]` + * **功能**: 创建一个新账本。 + * **指令**: `/账本列表` 或 `账本列表` + * **功能**: 列出当前群组的所有账本。 + * **指令**: `/激活账本 名称` 或 `激活账本 名称` + * **功能**: 激活指定账本,后续记账操作将使用该账本。 + * **指令**: `/记录` 或 `记录` + * **功能**: 查看当前激活账本的记账记录。 + * **指令**: `/统计` 或 `统计` + * **功能**: 显示当前激活账本的统计信息。 + * **指令**: `/统计图表` 或 `统计图表` + * **功能**: 生成并发送支出分类统计图表。 + * **指令**: `/记账帮助` 或 `记账帮助` + * **功能**: 显示账本功能的使用帮助。 + * **快捷记账**: 直接发送金额和标签即可快速记账,格式: `<金额> <标签> [备注]` ## 三、自动功能与内容触发器 @@ -267,6 +355,6 @@ * 管理员指令通常需要在与机器人私聊或在机器人具有管理权限的群组中,由授权的管理员ID发送。 * 具体可用模型名称 (`设置模型` 指令) 取决于机器人管理员的配置。 * **LLM工具调用迭代限制**: 通过 `MaxToolCycles` 配置(默认25),防止LLM无限调用工具导致死循环。当达到限制时,会保存对话快照供用户选择继续或停止。 -* **文件工具**: 管理员可使用内置文件工具(`ReadFile`, `WriteFile`, `EditFile`, `SearchText`, `ListFiles`)进行文件操作,这些工具仅管理员可用。 +* **文件工具**: 管理员可使用内置文件工具(`ReadFile`, `WriteFile`, `SearchText`, `ListFiles`)进行文件操作,这些工具仅管理员可用。 希望这份指南能帮助您更好地使用 TelegramSearchBot! diff --git a/Docs/README_MCP.md b/Docs/README_MCP.md index 44d18c4e..c53b1251 100644 --- a/Docs/README_MCP.md +++ b/Docs/README_MCP.md @@ -23,7 +23,7 @@ MCP (Model Context Protocol) 是一种让LLM与外部工具和服务交互的协 ▼ ▼ ┌─────────┐ ┌─────────────────┐ │ 内置工具 │ │ 外部MCP服务器 │ -│ (24+) │ │ (可动态添加) │ +│ (30+) │ │ (可动态添加) │ └─────────┘ └─────────────────┘ ``` @@ -37,9 +37,8 @@ TelegramSearchBot 内置了以下工具,通过 `BuiltInToolAttribute` 标记 |---------|------|------| | `ReadFile` | 读取文件内容,支持指定行范围 | `path`, `start_line?`, `end_line?` | | `WriteFile` | 写入内容到文件,文件不存在则创建 | `path`, `content` | -| `EditFile` | 编辑文件,替换指定文本 | `path`, `old_text`, `new_text` | -| `SearchText` | 使用正则表达式搜索文件 | `path`, `pattern`, `file_pattern?` | -| `ListFiles` | 列出目录下的文件和子目录 | `path`, `pattern?` | +| `SearchText` | 使用正则表达式搜索文件 | `pattern`, `path?`, `file_glob?`, `ignore_case?` | +| `ListFiles` | 列出目录下的文件和子目录 | `path?`, `pattern?` | ### 2.2 Telegram 发送工具 @@ -49,6 +48,7 @@ TelegramSearchBot 内置了以下工具,通过 `BuiltInToolAttribute` 标记 | `send_photo_file` | 发送图片(使用文件路径) | `file_path`, `caption?`, `reply_to_message_id?` | | `send_video_file` | 发送视频(使用文件路径) | `file_path`, `caption?`, `reply_to_message_id?` | | `send_document_file` | 发送文件(使用文件路径) | `file_path`, `caption?`, `reply_to_message_id?` | +| `send_message` | 发送文本消息 | `chat_id`, `text` | **文件大小限制**: - 本地 Bot API(内置或外部): 最大 2GB @@ -58,15 +58,15 @@ TelegramSearchBot 内置了以下工具,通过 `BuiltInToolAttribute` 标记 | 工具名称 | 描述 | 参数 | |---------|------|------| -| `search_messages` | 在当前聊天的索引消息中搜索关键词 | `query`, `chat_id?`, `limit?`, `offset?` | -| `query_messages` | 在消息历史数据库中查询,支持多种过滤条件 | `chat_id?`, `sender_id?`, `keyword?`, `start_date?`, `end_date?`, `limit?`, `offset?` | +| `search_messages` | 在当前聊天的索引消息中搜索关键词 | `query`, `page?`, `page_size?` | +| `query_messages` | 在消息历史数据库中查询,支持多种过滤条件 | `query_text?`, `sender_user_id?`, `sender_name_hint?`, `start_date?`, `end_date?`, `page?`, `page_size?` | ### 2.4 短链接工具 | 工具名称 | 描述 | 参数 | |---------|------|------| | `expand_short_url` | 获取短链接的完整URL | `short_url` | -| `list_short_urls` | 列出所有短链接映射 | `filter?`, `limit?`, `offset?` | +| `list_short_urls` | 列出所有短链接映射 | `original_url_query?`, `expanded_url_query?`, `page?`, `page_size?` | | `expand_short_urls_batch` | 批量获取短链接的完整URL | `short_urls` | ### 2.5 MCP 服务器管理工具(仅管理员) @@ -74,20 +74,27 @@ TelegramSearchBot 内置了以下工具,通过 `BuiltInToolAttribute` 标记 | 工具名称 | 描述 | 参数 | |---------|------|------| | `ListMcpServers` | 列出所有已配置的MCP服务器 | - | -| `AddMcpServer` | 添加新的MCP服务器 | `name`, `command`, `args?`, `env?` | +| `AddMcpServer` | 添加新的MCP服务器 | `name`, `command`, `args`, `env?` | | `RemoveMcpServer` | 移除指定的MCP服务器 | `name` | -| `UpdateMcpServer` | 更新MCP服务器配置 | `name`, `command?`, `args?`, `env?` | +| `UpdateMcpServer` | 更新MCP服务器配置 | `name`, `timeout?`, `enabled?`, `env?`, `command?`, `args?` | | `RestartMcpServers` | 重启所有MCP服务器 | - | ### 2.6 其他工具 | 工具名称 | 描述 | 参数 | |---------|------|------| -| `memory_search` | 在记忆图谱中搜索 | `query` | -| `brave_web_search` | 使用 Brave Search API 进行网页搜索 | `query`, `count?` | +| `process_memory_command` | 在记忆图谱中执行操作 | `command`, `arguments` | +| `search_web` | 使用 Brave Search API 进行网页搜索 | `query`, `page?`, `count?`, `country?`, `search_lang?` | | `extract_article` | 使用 Puppeteer 提取网页文章内容 | `url` | -| `sequential_thinking` | 动态问题解决思考工具 | `thought`, `next_thought_needed?` | -| `bash` | 执行 Shell 命令 | `command`, `timeout?` | +| `sequential_thinking` | 动态问题解决思考工具 | `input`, `next_thought_needed?`, `thought_number?`, `total_thoughts?`, ... | +| `bash` | 执行 Shell 命令 | `command`, `working_directory?`, `timeout_ms?` | +| `execute_js` | 使用 Deno 执行 JavaScript 代码 | `js_code`, `timeout_ms?` | +| `echo` | 回显文本(测试用) | `text` | +| `calculator` | 计算算术表达式 | `expression` | +| `create_todo_item` | 创建待办事项 | `title`, `list_name?`, `description?`, `priority?`, `due_at?`, `remind_at?` | +| `query_todo_items` | 查询待办事项 | `list_name?`, `status?`, `page?`, `page_size?` | +| `update_todo_item` | 更新待办事项 | `todo_id`, `title?`, `list_name?`, `description?`, `priority?`, ... | +| `complete_todo_item` | 标记待办事项完成 | `todo_id` | ## 三、外部 MCP 服务器