问题描述
MemOS Viewer HTTP API 的 /api/search 端点存在以下问题:
1. limit 参数不生效
请求 /api/search?q=test&limit=3 返回所有匹配结果(可能 65+ 条),而不是限制为 3 条。
2. minScore 参数不生效
请求 /api/search?q=test&minScore=0.8 返回相似度低于 0.8 的结果,参数被完全忽略。
问题原因
在 apps/memos-local-openclaw/src/viewer/server.ts 的 serveSearch 方法中:
limit 参数从未被读取和使用
minScore 参数从未被读取,语义阈值使用硬编码值 0.64
- 结果返回时没有截断,也没有在响应中包含参数信息
修复方案
// 添加参数读取
const limit = Math.min(100, Math.max(1, Number(url.searchParams.get("limit")) || 20));
const minScore = Math.max(0.35, Math.min(1, Number(url.searchParams.get("minScore")) || 0.64));
// 使用 minScore 替代硬编码阈值
const SEMANTIC_THRESHOLD = minScore;
// 结果截断
const results = (merged.length > 0 ? merged : ftsResults.slice(0, limit)).slice(0, limit);
// 返回参数信息
this.jsonResponse(res, {
results,
query: q,
vectorCount: vectorResults.length,
ftsCount: ftsResults.length,
total: results.length,
limit,
minScore,
});
验证结果
| 测试 |
请求 |
返回 |
状态 |
| limit=3 |
3 条 |
3 条 |
✅ |
| limit=20 |
20 条 |
20 条 |
✅ |
| minScore=0.7 |
≥70% |
71%~78% |
✅ |
| minScore=0.8 |
≥80% |
只返回高相似度结果 |
✅ |
相关文件
apps/memos-local-openclaw/src/viewer/server.ts
影响
此问题影响所有通过 HTTP API 调用搜索功能的场景,包括:
问题描述
MemOS Viewer HTTP API 的
/api/search端点存在以下问题:1. limit 参数不生效
请求
/api/search?q=test&limit=3返回所有匹配结果(可能 65+ 条),而不是限制为 3 条。2. minScore 参数不生效
请求
/api/search?q=test&minScore=0.8返回相似度低于 0.8 的结果,参数被完全忽略。问题原因
在
apps/memos-local-openclaw/src/viewer/server.ts的serveSearch方法中:limit参数从未被读取和使用minScore参数从未被读取,语义阈值使用硬编码值0.64修复方案
验证结果
相关文件
apps/memos-local-openclaw/src/viewer/server.ts影响
此问题影响所有通过 HTTP API 调用搜索功能的场景,包括: