Skip to content

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

@zwcf5200

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions