<aside> 🔎

结论:推荐在最新 dev 上重做的 Search Person V2,而不是继续 PR #89。 新版本只增加一个只读工作流工具,移除了 PR #89 混入的 WebSocket JWT、通用输出约束和无关测试;身份确认与 Contact 写入严格分离。

</aside>

文档状态与关联

为什么不用 PR #89 原样

PR #89 的核心方向正确,但 49 个文件、约 3968 行新增把人物搜索与 WebSocket JWT、输出约束、Calendar/WS 测试等绑在一起。它还存在两处会让“报告通过但生产错误”的缺陷:

  1. 陈旧顶层 position 会覆盖更新的结构化 currentPosition,导致平铺 current company/title 错误。
  2. 不可靠的精确字符串命中会提前遮住可靠的部分命中,降低证据质量。
  3. Before/After Eval 直接重放 scorer 候选,绕开 normalizer,因此没有发现第 1 个生产路径缺陷。
  4. 日志与评估材料里包含的内部标识不适合进入新 PR。

本版本保留任务需要的只读搜索边界,并为 normalizer/scorer 分别加回归测试。

最小系统边界

  1. Agent 只调用 search_person,输入规范姓名、来源已验证 alias、公司/职位/地区,以及 current | historical | any 时间语义。
  2. 工作流最多并发 3 条有界召回路径:canonical name、首个 verified alias、structured context;共享 90 秒 deadline,每路最多 20 条。
  3. 本地客户端封装 Actor run → poll → Dataset lifecycle;工具不会向模型暴露 run id、dataset id 或 Provider mechanics。
  4. 归一化只允许姓名、LinkedIn URL、headline、公司/职位/地区、current/historical position;按规范化 LinkedIn URL 去重,以 RRF 仅作同分排序。
  5. irs-v2 以规范姓名/已验证 alias、时间化公司/职位、地区打分;缺失是 unknown,不是 conflict。