Skip to content

feat(kb-open): P0-B 9 个开放 API 端点 #442

Description

@ncw1992120

Part of #440,依赖 #441(P0-A 认证骨架)

目标

在 P0-A 认证骨架之上,实现 9 个知识库开放 API 端点。一次上线冻结对外契约。

端点清单

# 方法 路径 Scope 底层方法 改造
1 GET /kb/{kbId}/pages/{slug} kb:read WikiPageService.getBySlug() 🔧 新增 mode(summary/full/section)
2 POST /kb/{kbId}/search kb:search HybridRetriever.search() 🔧 granularity 后处理
3 POST /kb/{kbId}/search/chunks kb:search HybridRetriever.searchChunks() 直接调用
4 POST /kb/{kbId}/pages/{slug}/traverse kb:read 🔧 WikiEntityGraphService.traverse() 新增
5 GET /kb/{kbId}/pages/{slug}/trace kb:read PageCitationMapper.listWithRawByPageId() 直接调用
6 GET /kb/{kbId}/taxonomy kb:list 🔧 分组统计组装 新增
7 GET /kb/{kbId}/whats-new kb:meta findRecentUpdated() + stale 组合
8 GET /kb/{kbId}/stats kb:meta 🔧 KbStatsDto 标准化 新增
9 GET /kb/{kbId}/pages kb:list WikiPageService.listByKbId() 直接调用

需要新增/改造的底层 service

组件 说明
WikiPageService mode 参数 summary(摘要+fields)/ full(全文)/ section:{heading}(切片)
WikiEntityGraphService.traverse() 按 predicate/depth≤2/direction 遍历,slug→entityId 映射,回显 primaryEntity(R11)
KbStatsDto + 组装 结构化统计 JSON
get_taxonomy 组装 pageType/entityType/relationType 分组统计
whats_new 组装 findRecentUpdated + stale 页面查询

架构约束(A5/A6)

  • A5:响应一律显式 DTO,绝不直接序列化实体(IDOR/字段泄露硬约束)
  • A6:service 层不耦合 HTTP 类型(HttpServletRequest/R<T> 不漏进 service),为 P2 MCP 留钩子

traverse 设计要点(务实版)

  • depth ≤ 2(防爆炸),predicate LIKE 模糊匹配
  • slug → pageId → mention → primaryEntity(salience 最高)
  • 邻居节点回显 slug(如有页面)
  • 边溯源:evidenceChunkId → sourceHandle
  • 配合 get_taxonomy:Agent 先查精确 predicate 再传 traverse

不含

  • /research(异步/SSE,→ #子任务3 P1.5)
  • 前端管理 UI(→ P1)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions