Skip to content

fix(memos-local-openclaw): Viewer API search 接口 limit 和 minScore 参数不生效 #1372

Description

@zwcf5200

问题描述

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.tsserveSearch 方法中:

  1. limit 参数从未被读取和使用
  2. minScore 参数从未被读取,语义阈值使用硬编码值 0.64
  3. 结果返回时没有截断,也没有在响应中包含参数信息

修复方案

// 添加参数读取
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 调用搜索功能的场景,包括:

  • MCP 集成
  • 第三方客户端
  • 自动化脚本

Metadata

Metadata

Assignees

Labels

ai-doneAI task completed successfullybugSomething isn't working | 功能异常pluginPlugin/adapter/bridge layer (apps/ directory) | 插件/适配层

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions