Class RagDiagnostics
- Namespace
- Mythosia.AI.Rag.Diagnostics
- Assembly
- Mythosia.AI.Rag.dll
Diagnostic tool for debugging RAG pipeline quality issues. Provides visibility into each pipeline stage: chunking โ embedding โ search โ context.
public class RagDiagnostics
- Inheritance
-
RagDiagnostics
- Inherited Members
Examples
var diag = new RagDiagnostics(ragPipeline);
// 1. Inspect how a document is chunked
var chunks = diag.PreviewChunks(document);
foreach (var c in chunks.Chunks)
Console.WriteLine($"[{c.Index}] ({c.Content.Length} chars) {c.Content.Substring(0, 80)}...");
// 2. Find which chunk contains specific text
var matches = await diag.FindChunksContainingAsync("6,300๋ง์");
// 3. Full diagnostic: see ALL scores, not just TopK
var result = await diag.DiagnoseQueryAsync("์ต๊ทผ ์ฐ๋ด์ด ์ผ๋ง์ผ?");
foreach (var r in result.AllScoredResults)
Console.WriteLine($" [{r.Rank}] score={r.Score:F4} contains_target={r.ContainsText} | {r.Preview}");
Constructors
RagDiagnostics(RagPipeline)
Creates diagnostics from a RagPipeline instance.
public RagDiagnostics(RagPipeline pipeline)
Parameters
pipelineRagPipeline
RagDiagnostics(RagStore)
Creates diagnostics from a RagStore instance.
public RagDiagnostics(RagStore store)
Parameters
storeRagStore
Methods
DiagnoseQueryAsync(string, string?, CancellationToken)
Runs the full RAG query pipeline with diagnostics enabled. Returns ALL chunk scores (not just TopK) so you can see exactly why a chunk was missed.
public Task<QueryDiagnosticResult> DiagnoseQueryAsync(string query, string? targetText = null, CancellationToken cancellationToken = default)
Parameters
querystringThe user query to diagnose.
targetTextstringOptional: text you expect to find in results (e.g., "6,300๋ง์"). When provided, results are annotated with whether they contain this text.
cancellationTokenCancellationTokenCancellation token.
Returns
FindChunksContainingAsync(string, CancellationToken)
Searches all stored chunks for a specific text substring. Use this to verify that the target information (e.g., "6,300๋ง์") was actually indexed.
public Task<IReadOnlyList<ChunkSearchMatch>> FindChunksContainingAsync(string text, CancellationToken cancellationToken = default)
Parameters
textstringcancellationTokenCancellationToken
Returns
PreviewChunks(RagDocument, ITextSplitter?)
Preview how a document would be split into chunks WITHOUT indexing. Use this to verify chunk boundaries and overlap quality.
public ChunkPreviewResult PreviewChunks(RagDocument document, ITextSplitter? splitter = null)
Parameters
documentRagDocumentsplitterITextSplitter