Checklist
🐞 问题详细描述
问题详细描述:
jiuwen_memory_entry/core/handler.py 的 _search 处理函数中,top_k 参数直接强转:
top_k=int(payload.get("k", 10))
(第 651 行,mem2.0 分支 5cc2f6c)
缺陷表现:
- k 传 null:payload.get("k", 10) 因 key 存在返回 None(默认值不生效),int(None) 抛 TypeError;
- k 传非数值字符串(如 "abc"):int("abc") 抛 ValueError;
- 两种情况抛出的异常均非 AgentMemoryError 体系,被 dispatch 顶层 except Exception 捕获后返回 500 InternalError,
而同类畸形输入按契约应返回 400 ValidationError。
行为不一致对比:同文件 _list handler 对 limit 参数使用了 _parse_positive_int 校验(非法值抛 ValidationError 返回 400),
_search 的 k 参数未复用同一模式,属于明显的校验遗漏。
重现步骤:
- 启动 HTTP 服务(mem2.0@5cc2f6c);
- POST /search,请求体 {"query": "test", "k": null};
- 观察响应码为 500,期望 400;
- 换 {"query": "test", "k": "abc"},同样 500。
期望结果:
- k=null 或非法值时返回 400 ValidationError 与明确错误信息;
- k 合法时行为不变;不传 k 时默认值仍为 10。
修复建议:复用文件内已有的 _parse_positive_int 工具函数(_list 已在用),
改为 top_k=_parse_positive_int(payload.get("k"), name="k", default=10),1 文件 +1-1 行。
详细的环境信息描述
详细的环境信息描述:
- 组件:JiuwenMemory agent-memory,mem2.0 分支,基线提交 5cc2f6c
- OS:Windows 11 x64(问题为纯应用层逻辑缺陷,与操作系统无关,Linux/macOS 同样复现)
- Python:3.13.x(项目要求 >=3.11,与 Python 小版本无关)
- 涉及文件与行号:jiuwen_memory_entry/core/handler.py 第 651 行(_search 函数内 top_k=int(payload.get("k", 10)));
对比参照:同文件 _list 函数约第 684 行 limit 参数已正确使用 _parse_positive_int
- 触发入口:HTTP /search、CLI search、MCP search 三个入口共用该 handler,全部受影响
- 依赖情况:修复复用文件内已有 _parse_positive_int 函数,不新增任何依赖
- 触发条件:请求体 k 字段传 null 或非数值即可触发,无需特定存储后端或配置
其他辅助信息
版本信息
感谢您的贡献 🎉!
Checklist
🐞 问题详细描述
问题详细描述:
jiuwen_memory_entry/core/handler.py 的 _search 处理函数中,top_k 参数直接强转:
top_k=int(payload.get("k", 10))
(第 651 行,mem2.0 分支 5cc2f6c)
缺陷表现:
而同类畸形输入按契约应返回 400 ValidationError。
行为不一致对比:同文件 _list handler 对 limit 参数使用了 _parse_positive_int 校验(非法值抛 ValidationError 返回 400),
_search 的 k 参数未复用同一模式,属于明显的校验遗漏。
重现步骤:
期望结果:
修复建议:复用文件内已有的 _parse_positive_int 工具函数(_list 已在用),
改为 top_k=_parse_positive_int(payload.get("k"), name="k", default=10),1 文件 +1-1 行。
详细的环境信息描述
详细的环境信息描述:
对比参照:同文件 _list 函数约第 684 行 limit 参数已正确使用 _parse_positive_int
其他辅助信息
版本信息
感谢您的贡献 🎉!