feat: add rag evidence postprocess blocks
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
## Context
|
||||
|
||||
The previous change converted L0 into a hint provider and made L0/L1 cooperate. The next step is to stop treating the tool output as an unstructured primary/supplement pair. The Agent can keep receiving compatible fields, but retrieval internals and traces should have structured evidence blocks.
|
||||
|
||||
This change is a bridge toward later DocumentPostProcessor-style behavior. It should be small enough to archive independently and should not introduce Spring AI dependencies.
|
||||
|
||||
## Goals / Non-Goals
|
||||
|
||||
**Goals:**
|
||||
|
||||
- Add `EvidenceBlock` DTOs to `LookupResult`.
|
||||
- Create evidence blocks from L0 matches and L1 results.
|
||||
- Deduplicate evidence by stable source key.
|
||||
- Capture source, title, breadcrumb, score, retrieval layer, hit reasons, and content preview.
|
||||
- Persist evidence blocks and postprocess counts in `tool_invocation.retrieval_details`.
|
||||
|
||||
**Non-Goals:**
|
||||
|
||||
- Do not implement neighbor chunk expansion yet.
|
||||
- Do not replace primary/supplement output.
|
||||
- Do not add cross-encoder or LLM rerank.
|
||||
- Do not migrate to Spring AI DocumentPostProcessor yet.
|
||||
|
||||
## Decisions
|
||||
|
||||
### Decision: Add evidence blocks while preserving existing result fields
|
||||
|
||||
`LookupResult` will gain `List<EvidenceBlock> evidenceBlocks`. Existing `primary`, `supplement`, `found`, `relevanceLevel`, and `completenessHint` remain compatible.
|
||||
|
||||
Rationale: this lets the Agent continue using the current shape while tests and traces begin validating the new evidence model.
|
||||
|
||||
### Decision: Keep postprocess rule-based
|
||||
|
||||
The evidence builder will use deterministic rules:
|
||||
|
||||
- L0 entries become `L0` evidence.
|
||||
- L1 candidates become `L1` evidence.
|
||||
- Same source key is deduplicated.
|
||||
- Hit reasons are collected from L0 hints, L1 rank, category filters, and fallback state.
|
||||
|
||||
Rationale: this is explainable, cheap, and suitable before introducing framework postprocessors.
|
||||
|
||||
### Decision: Persist compact evidence summaries
|
||||
|
||||
`ToolInvocationRecorder` will store compact evidence block metadata, not full content, inside `retrieval_details`.
|
||||
|
||||
Rationale: `tool_invocation` should remain useful for trace review without duplicating large chunks.
|
||||
|
||||
## Risks / Trade-offs
|
||||
|
||||
- Evidence source keys may be imperfect before full metadata normalization -> fall back to file path, metadata, title, then rank.
|
||||
- Agent prompts may ignore `evidenceBlocks` initially -> keep primary/supplement compatibility.
|
||||
- Adding content previews increases tool output size -> cap evidence content length.
|
||||
Reference in New Issue
Block a user