docs(wiki): 更新搜索功能修复记录 — hands-skills/feature-map/known-issues/log
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

- hands-skills.md: Researcher 搜索能力详细说明 + 数据流 + 修复清单
- feature-map.md: 新增 F-09.5 Agent 搜索链路 (搜索引擎/网页获取/UI处理)
- known-issues.md: 搜索 04-22 P1×3 修复记录 (SEARCH-1/2/3)
- log.md: 追加 04-22 变更日志
This commit is contained in:
iven
2026-04-22 16:33:01 +08:00
parent 81005c39f9
commit 8b3e43710b
4 changed files with 66 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
---
title: 功能链路映射
updated: 2026-04-21
updated: 2026-04-22
status: active
tags: [reference, feature-map, testing]
---
@@ -122,6 +122,21 @@ tags: [reference, feature-map, testing]
## 自主能力 / Hands (4 条)
### F-09.5: Agent 搜索(网络搜索)
| 维度 | 内容 |
|------|------|
| 用户入口 | 聊天中输入搜索请求(如"搜索今天的新闻" |
| 前端关键文件 | ChatArea.tsx (stripToolNarration), StreamingText.tsx (ReactMarkdown) |
| 触发机制 | LLM 判断需要搜索 → ToolUse{hand_researcher} → AgentLoop 执行 |
| Tauri 命令 | 无独立命令,通过 agent_chat_stream → loop_runner → hand_execute |
| Rust 核心 | zclaw-hands/researcher.rs: search_native() → Baidu + Bing CN 并行 |
| 网页获取 | fetch_via_jina() (Jina Reader API) → fetch_direct() (降级) |
| LLM 兼容 | 扁平 input_schema + empty-input 回退_fallback_query 注入) |
| UI 处理 | hand 消息隐藏 + stripToolNarration 行级过滤 + ReactMarkdown 渲染 |
| 搜索引擎 | Baidu + Bing CN国内优先, DuckDuckGo fallback |
| 测试状态 | ✅ E2E 验证通过 (commit 5816f56 + 81005c3) |
### F-10: 触发 Hand
| 维度 | 内容 |

View File

@@ -1,6 +1,6 @@
---
title: Hands + Skills + MCP
updated: 2026-04-21
updated: 2026-04-22
status: active
tags: [module, hands, skills, mcp]
---
@@ -28,7 +28,7 @@ tags: [module, hands, skills, mcp]
|------|------|------|--------|------|
| Browser | 浏览器自动化 (23 Tauri命令) | WebDriver | 8 | `hands/browser.HAND.toml` |
| Collector | 数据收集聚合 | — | 8 | `hands/collector.HAND.toml` |
| Researcher | 深度研究 | LLM | 22 | `hands/researcher.HAND.toml` |
| Researcher | 深度研究 + 网络搜索 | 网络 | 22 | `hands/researcher.HAND.toml` |
| Clip | 视频处理 | FFmpeg | 30 | `hands/clip.HAND.toml` |
| Twitter | Twitter 自动化 (12 API v2) | OAuth 1.0a | 25 | `hands/twitter.HAND.toml` |
| Quiz | 测验生成 | — | — | `hands/quiz.HAND.toml` |
@@ -36,6 +36,29 @@ tags: [module, hands, skills, mcp]
Hands 测试分布(前 5: Clip(30), Twitter(25), Researcher(22), Browser(8), Collector(8)
### Researcher 搜索能力04-22 修复)
Researcher 是 ZCLAW 的核心搜索 Hand支持从对话中直接触发网络搜索和网页获取。
**搜索引擎**: Baidu + Bing CN 并行国内用户可用DuckDuckGo 作为 fallback
**网页获取**: Jina Reader API优先返回干净 Markdown→ 直接 HTTP fetch降级
**LLM 兼容**: 扁平化 input_schemaaction/query/url/urls/engine兼容 glm-5.1 等国产模型
**空参数回退**: 当 LLM 发送空 `{}`loop_runner 自动注入用户消息作为 `_fallback_query`
```
用户消息 "搜索今天的新闻"
→ LLM 生成 ToolUse{hand_researcher, {action:"search", query:"今日新闻"}}
→ AgentLoop → ResearcherHand.execute()
→ execute_search() → search_native() → Baidu + Bing CN 并行
→ 搜索结果 (10条) → ToolResult → LLM 基于结果生成回复
→ 前端 stripToolNarration 过滤内部叙述 + ReactMarkdown 渲染排版
```
关键修复 (commit 5816f56 + 81005c3):
- **schema 简化**: `oneOf`+`const` → 扁平属性,解决 glm-5.1 不理解复杂 schema 导致空参数
- **empty-input 回退**: loop_runner 检测 `{}` → 注入 `_fallback_query` → researcher 自动搜索
- **排版修复**: stripToolNarration 从句子级拆分改为行级过滤,保留 markdown 结构
### 已删除 Hands (04-17 Phase 5 空壳清理)
| Hand | 原状态 | 删除原因 |

View File

@@ -1,6 +1,6 @@
---
title: 已知问题
updated: 2026-04-20
updated: 2026-04-22
status: active
tags: [issues, bugs]
---
@@ -25,6 +25,15 @@ tags: [issues, bugs]
| 审计 04-20 P0 | 2 | **全部已修复** (commit f291736) |
| 审计 04-20 P1 | 3 | **全部已修复** (commit f291736) |
| 审计 04-20 P2 | 2 | 待处理 (B-SCHED-5 任务名噪声 + B-CHAT-7 混合域截断) |
| 搜索 04-22 P1 | 3 | **全部已修复** (commit 5816f56 + 81005c3) |
## 搜索功能修复 04-22
| ID | 级别 | 问题 | 修复 | commit |
|------|------|------|------|--------|
| SEARCH-1 | P1 | glm-5.1 不理解 oneOf+const schematool_calls 参数为空 `{}` | 扁平化 input_schema (action/query/url/urls/engine) + empty-input 回退注入 | 5816f56 |
| SEARCH-2 | P1 | DuckDuckGo 被墙,搜索优先使用 Google | 改为 Baidu + Bing CN 并行DDG 仅 fallback | 5816f56 |
| SEARCH-3 | P1 | stripToolNarration 按句子拆分破坏 markdown 排版 | 改为行级过滤,保留 markdown 结构行 | 81005c3 |
## E2E 全系统功能测试 04-17 (129 链路)

View File

@@ -1,6 +1,6 @@
---
title: 变更日志
updated: 2026-04-21
updated: 2026-04-22
status: active
tags: [log, history]
---
@@ -9,6 +9,20 @@ tags: [log, history]
> Append-only 操作记录。格式: `## [日期] 类型 | 描述`
## [2026-04-22] fix | Agent 搜索功能修复 — glm 空参数 + schema 简化 + 排版修复 (commit 5816f56 + 81005c3)
**根因**: glm-5.1 不理解 `oneOf`+`const` 复杂 JSON Schematool_calls arguments 始终为空 `{}`
加上 DuckDuckGo 被墙导致搜索引擎选择不正确,以及 stripToolNarration 破坏了 markdown 排版。
**修复 3 项**:
1. `researcher.rs` input_schema 扁平化 + `_fallback_query` 回退 (5816f56)
2. `loop_runner.rs` 空参数检测 → 注入用户消息作为查询 (5816f56)
3. `ChatArea.tsx` stripToolNarration 改为行级过滤,保留 markdown 结构 (81005c3)
**影响文件**: `crates/zclaw-hands/src/hands/researcher.rs`, `crates/zclaw-runtime/src/loop_runner.rs`, `desktop/src/components/ChatArea.tsx`
**验证**: E2E 搜索 "今日科技新闻" — Baidu + Bing CN 并行返回 10 条结果LLM 生成排版正确的回复
## [2026-04-21] fix | Phase 0+1 突破之路 — 8 项基础链路修复 (commit c1dea6e + 9a2611d)
**Phase 0 地基修复 (2 项)**: