diff --git a/skills_autoload/rag-retrieve/hooks/retrieval-policy.md b/skills_autoload/rag-retrieve/hooks/retrieval-policy.md index fce1bfc..3d92ef5 100644 --- a/skills_autoload/rag-retrieve/hooks/retrieval-policy.md +++ b/skills_autoload/rag-retrieve/hooks/retrieval-policy.md @@ -2,10 +2,12 @@ ### 1. Retrieval Order and Tool Selection - Follow this section for source choice, tool choice, query rewrite, `top_k`, fallback, result handling, and citations. -- Use this default retrieval order and execute it sequentially: skill-enabled knowledge retrieval tools > `rag_retrieve` / `table_rag_retrieve` > local filesystem retrieval. -- Important: local filesystem retrieval and `rag_retrieve` / `table_rag_retrieve` do NOT share the same underlying data source. They are not equivalent, and one source cannot be used to assume coverage in the other. +- Use this default retrieval order and execute it sequentially: skill-enabled knowledge retrieval tools > `rag_retrieve` / `table_rag_retrieve`. - Do NOT answer from model knowledge first. -- Do NOT skip directly to local filesystem retrieval when an earlier retrieval source may answer the question. +- Do NOT bypass the retrieval flow and inspect local filesystem documents on your own. +- Do NOT use local filesystem retrieval as a fallback knowledge source. +- Local filesystem documents are not a recommended retrieval source here because file formats are inconsistent and have not been normalized or parsed for reliable knowledge lookup. +- Knowledge must be retrieved through the supported knowledge tools only: skill-enabled retrieval scripts, `table_rag_retrieve`, and `rag_retrieve`. - When a suitable skill-enabled knowledge retrieval tool is available, use it first. - If no suitable skill-enabled retrieval tool is available, or if its result is insufficient, continue with `rag_retrieve` or `table_rag_retrieve`. - Use `table_rag_retrieve` first for values, prices, quantities, inventory, specifications, rankings, comparisons, summaries, extraction, lists, tables, name lookup, historical coverage, mixed questions, and unclear cases. @@ -32,16 +34,12 @@ - Also treat results as insufficient when they cover only part of the request, or when full-list, historical, comparison, or mixed data + explanation requests return only partial or truncated coverage. ### 5. Fallback and Sequential Retry -- If the first retrieval result is insufficient, call the next retrieval source in the default order before replying. -- Important: local filesystem retrieval and `rag_retrieve` / `table_rag_retrieve` do NOT share the same underlying data source. They are not equivalent, and results from one cannot be used to assume coverage in the other. -- Even if `rag_retrieve` or `table_rag_retrieve` returns relevant results, local filesystem retrieval may still contain different or additional information; likewise, local files may contain information absent from the RAG knowledge base. -- Therefore, when fallback is required, do NOT skip local filesystem retrieval on the assumption that RAG already covers the same documents, and do NOT treat a local-file miss as evidence that the RAG knowledge base also lacks the information. -- If the first RAG tool is insufficient, call the other RAG tool next before moving to local filesystem retrieval. -- If `table_rag_retrieve` is insufficient or empty, continue with `rag_retrieve`. +- If the first retrieval result is insufficient, call the next supported retrieval source in the default order before replying. +- `table_rag_retrieve` now performs an internal fallback to `rag_retrieve` when it returns `no excel files found`, but this does NOT change the higher-level retrieval order. +- If `table_rag_retrieve` is still insufficient after its internal fallback, continue with the next supported retrieval source instead of checking local filesystem documents directly. - If `rag_retrieve` is insufficient or empty, continue with `table_rag_retrieve`. -- If both `rag_retrieve` and `table_rag_retrieve` are insufficient, continue with local filesystem retrieval. -- Say no relevant information was found only after all applicable skill-enabled retrieval tools, both `rag_retrieve` and `table_rag_retrieve`, and local filesystem retrieval have been tried and still do not provide enough evidence. -- Do NOT reply that no relevant information was found before the final local filesystem fallback has also been tried. +- Say no relevant information was found only after all applicable skill-enabled retrieval tools, `rag_retrieve`, and `table_rag_retrieve` have been tried and still do not provide enough evidence. +- Do NOT reply that no relevant information was found before the supported knowledge retrieval flow has been exhausted. ### 6. Table RAG Result Handling - Follow all `[INSTRUCTION]` and `[EXTRA_INSTRUCTION]` content in `table_rag_retrieve` results. diff --git a/skills_autoload/rag-retrieve/rag_retrieve_server.py b/skills_autoload/rag-retrieve/rag_retrieve_server.py index 6caa9c8..1ef7a2d 100644 --- a/skills_autoload/rag-retrieve/rag_retrieve_server.py +++ b/skills_autoload/rag-retrieve/rag_retrieve_server.py @@ -219,14 +219,17 @@ def table_rag_retrieve(query: str) -> Dict[str, Any]: if "markdown" in response_data: markdown_content = response_data["markdown"] - text = markdown_content - if not re.search(r"^no excel files found", markdown_content, re.IGNORECASE): - text = TABLE_CITATION_INSTRUCTIONS + markdown_content + if re.search(r"^no excel files found", markdown_content, re.IGNORECASE): + rag_result = rag_retrieve(query) + content = rag_result.get("content", []) + if content and content[0].get("type") == "text": + content[0]["text"] = "No table_rag_retrieve results were found. The content below is the fallback result from rag_retrieve:\n\n" + content[0]["text"] + return rag_result return { "content": [ { "type": "text", - "text": text + "text": TABLE_CITATION_INSTRUCTIONS + markdown_content } ] }